Hilfe bei Spectate System

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey, ich habe eine Frage zu meinem Spectate System.
    Und zwar möchte ich, dass wenn der Spieler, der Spectatet wird stirbt, wieder spectatet wird.
    Ein Beispiel: Ich beobachte den Spieler A, A stirbt, spawnt und dann soll er automatisch wieder spectatet werden.
    Hier ist mein Script bis jetz.


    ocmd:tv(playerid, params[0])
    {
    new pID;
    new name[MAX_PLAYER_NAME];

    new string[128];


    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Du bist kein Teammitglied !");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"Verwendung: /tv <ID>");
    if(!IsPlayerConnected(pID) || pID == INVALID_PLAYER_ID || IsPlayerAdmin(pID) || pID == playerid) return SendClientMessage(playerid,error_rot, "Diesen Spieler gibt es nicht, er ist ein Admin oder er ist nicht online !");
    if(tv == 2) return SendClientMessage(playerid,error_rot,"Du beobachtest schon einen, benutze /tvoff um die Beobachtung abzubrechen");
    GetPlayerName(pID,name,sizeof(name));


    format(string,sizeof(string),"Du beobachtest nun den Spieler %s",name);
    SendClientMessage(playerid,spec_blau,string);
    //Im Car
    if(IsPlayerInAnyVehicle(pID))
    {
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectateVehicle(playerid,GetPlayerVehicleID(pID));
    tv ++; // 2
    return 1;
    }
    //Fuß
    else
    {
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid,pID);
    tv ++; // 2
    }
    return 1;
    }


    ocmd:tvoff(playerid, params[0])
    {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Du bist kein Teammitglied !");
    if(tv == 2)
    {
    TogglePlayerSpectating(playerid, 0);
    SetCameraBehindPlayer(playerid);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,spec_blau,"Du beobachtest nun keinen mehr !");
    tv --;
    }
    else
    {
    SendClientMessage(playerid,error_rot,"Du Spectatest keinen !");
    }
    return 1;
    }

  • Man könnte es einfach so machen, dass man Abfragt, wie viel Leben der Spieler hat. Wenn
    der Spieler weniger als 1 hat, setzt man sich einen Timer und schreibt, wenn die Timer-Zeit
    vorüber ist wieder /tv <ID>. Also automatisch sollte das so gesagt passieren. Ich weiß nicht,
    ob das geht, aber vielleicht geht es ja, oder man muss es bisschen verändern. Versuch das mal so.


    Mit freundlichen Grüßen
    Kristik47

  • ocmd:tv(playerid, params[])
    {
    new pID;
    new name[MAX_PLAYER_NAME];
    new string[128];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Du bist kein Teammitglied !");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"Verwendung: /tv <ID>");
    if(!IsPlayerConnected(pID) || pID == INVALID_PLAYER_ID || IsPlayerAdmin(pID) || pID == playerid) return SendClientMessage(playerid,error_rot, "Diesen Spieler gibt es nicht, er ist ein Admin oder er ist nicht online !");
    if(tv[playerid] != -1) return SendClientMessage(playerid,error_rot,"Du beobachtest schon einen, benutze /tvoff um die Beobachtung abzubrechen");
    GetPlayerName(pID,name,sizeof(name));

    format(string,sizeof(string),"Du beobachtest nun den Spieler %s",name);
    SendClientMessage(playerid,spec_blau,string);
    tv[playerid] = pID;
    //Im Car
    if(IsPlayerInAnyVehicle(pID))
    {
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectateVehicle(playerid,GetPlayerVehicleID(pID));
    }
    //Fuß
    else
    {
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid,pID);
    }
    return 1;
    }


    ocmd:tvoff(playerid, params[])
    {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Du bist kein Teammitglied !");
    if(tv[playerid] != -1)
    {
    TogglePlayerSpectating(playerid, 0);
    SetCameraBehindPlayer(playerid);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,spec_blau,"Du beobachtest nun keinen mehr !");
    tv[playerid] = -1;
    }
    else
    {
    SendClientMessage(playerid,error_rot,"Du Spectatest keinen !");
    }
    return 1;
    }



    Und bei OnPlayerSpawn:
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && tv[i] == playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    TogglePlayerSpectating(i, 1);
    PlayerSpectateVehicle(i,GetPlayerVehicleID(playerid));
    }
    //Fuß
    else
    {
    TogglePlayerSpectating(i, 1);
    PlayerSpectatePlayer(i,playerid);
    }
    }
    }


    Bei OnPlayerConnect:
    tv[playerid] = -1;


    Die Deklaration:
    new tv[MAX_PLAYERS] = {-1,...};

  • Könntest du mir folgendes erklären :D Denn ich will nicht einfach sachen in meinem Script drinne haben, die ich nicht verstehe ^^
    new tv[MAX_PLAYERS] = {-1,...}; // Dieses {-1,...}