Brauche Hilfe! Checkpoint /needhelp (BackUp) [ID 0] BUG

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
  • Hallo Community


    Ich möchte das sich bei /nh der Checkpoint einschaltet bei dem der /nh macht und jeder cop das sehen kann + das sich der Checkpoint aktualisiert.


    Bis jetzt geht der Checkpoint an aber nicht an einem Spieler (bei dem feld in Red County) oder nur bei ID 0 er aktualisiert sich auch aber geht nicht mehr aus...


    //Oben im Script
    new NeedHelp[MAX_PLAYERS] = 0;
    new BackupTimer;


    //Function OnPlayerDisconnect(playerid, reason)
    NeedHelp[playerid] = 0;


    if(strcmp(cmdtext, "/needhelp", true)==0 || strcmp(cmdtext, "/nh", true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsACop(playerid))
    {
    if(PlayerInfo[playerid][pGangJailed] == 1 || PlayerTied[playerid] >= 1)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du kannst jetzt nicht einen Backup rufen!");
    return 1;
    }
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string,sizeof(string)," HQ: %s braucht dringend Hilfe!",sendername);
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsACop(i))
    {
    if(NeedHelp[playerid] == 0)
    {
    SendClientMessage(i,F_G,"=============================================================");
    SendClientMessage(i,F_O," HQ: AN ALLE VERFÜGBAREN EINHEITEN:");
    SendClientMessage(i,F_O,string);
    SendClientMessage(i,F_O," HQ: Begeben Sie sich zum Roten Marker auf der Karte!");
    SendClientMessage(i,F_G,"=============================================================");
    SetPlayerCheckpoint(i,X,Y,Z-5,3);
    BackupTimer = SetTimer("Backup",1000,1);
    NeedHelp[playerid] = 1;
    }
    else
    {
    DisablePlayerCheckpoint(i);
    KillTimer(BackupTimer);
    NeedHelp[playerid] = 0;
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du bist kein Staatsbeamter!");
    }
    }
    return 1;
    }


    Function Backup(playerid)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsACop(i))
    {
    SetPlayerCheckpoint(i,X,Y,Z-5,3);
    }
    }
    return 1;
    }

    ,.-~'*+-| ? . ? . ?|-+*'~-.,


    Zitat

    Zitat von [GFR]Sean_Capone
    ich habe eine frage zu ts
    braucht man speziell dafür micro und headphones oder gehen auch Apple kopfhörer [iphone mit micro]
    wenn das geht mit den das wär geil wenn nich wo kriegt man ts zubehör

    3 Mal editiert, zuletzt von Snake1990 () aus folgendem Grund: Überschrift

  • Also, bei dir im Script fragt er in der if-Abfrage, ob der Spieler bereits Hilfe braucht. Falls nein, so wird NeedHelp[playerid] = 1;


    gesetzt. Danach ist NeedHelp[playerid] == 1;. In der nächsten Runde steht es auch weiterhin auf 1, somit wird nicht der erste Teil aufgerufen, sondern der 2te (also das else).


    if(NeedHelp[playerid] == 0)
    {
    SendClientMessage(i,F_G,"=============================================================");
    SendClientMessage(i,F_O," HQ: AN ALLE VERFÜGBAREN EINHEITEN:");
    SendClientMessage(i,F_O,string);
    SendClientMessage(i,F_O," HQ: Begeben Sie sich zum Roten Marker auf der Karte!");
    SendClientMessage(i,F_G,"=============================================================");
    SetPlayerCheckpoint(i,X,Y,Z-5,3);
    BackupTimer = SetTimer("Backup",1000,1);
    NeedHelp[playerid] = 1; //da ist der Fehler
    }
    else //aufgerufen wird das, weil NeedHelp auf 1 steht
    {
    DisablePlayerCheckpoint(i);
    KillTimer(BackupTimer);
    NeedHelp[playerid] = 0;
    }



    Die Lösung für dein Problem:


    Setze das NeedHelp[playerid] = 1;


    HINTER die for-Schleife, nicht in sie rein!!!


    Hoffentlich hilft dir das.

  • Ja jetzt geht der CP wieder aus aber wenn ich jetzt /needhelp mache (id 0) alles okay macht id 1 /needhelp so geht der CP nach 1-2 sek auf id 0


    new NeedHelp[MAX_PLAYERS]=0;
    new BackupTimer;


    //Function OnPlayerConnect(playerid)
    NeedHelp[playerid]=0;


    //Function OnPlayerDisconnect(playerid,reason)
    NeedHelp[playerid]=0;


    if(strcmp(cmdtext,"/needhelp",true)==0||strcmp(cmdtext,"/nh",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsACop(playerid))
    {
    if(PlayerInfo[playerid][pGangJailed]==1||PlayerTied[playerid]>=1)
    {
    SendClientMessage(playerid,COLOR_GRAD1,"Du kannst jetzt keinen Backup rufen!");
    return 1;
    }
    new string2[55];
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    GetPlayerName(playerid,sendername,sizeof(sendername));
    format(string,sizeof(string)," HQ: %s braucht dringend Hilfe!",sendername);
    format(string2,sizeof(string2)," HQ: %s hat sein Hilferuf zurückgezogen!",sendername);
    if(NeedHelp[playerid]==0)
    {
    BackupTimer=SetTimer("Backup",1000,1);
    NeedHelp[playerid]=1;
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,F_G,"=============================================================");
    SendClientMessage(i,F_O," HQ: AN ALLE VERFÜGBAREN EINHEITEN:");
    SendClientMessage(i,F_O,string);
    SendClientMessage(i,F_O," HQ: Begeben Sie sich zum Roten Marker auf der Karte!");
    SendClientMessage(i,F_G,"=============================================================");
    SetPlayerCheckpoint(i,X,Y,Z-5,3.0);
    }
    }
    }
    else
    {
    KillTimer(BackupTimer);
    NeedHelp[playerid]=0;
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,F_G,"=============================================================");
    SendClientMessage(i,F_O," HQ: AN ALLE EINHEITEN:");
    SendClientMessage(i,F_O,string2);
    SendClientMessage(i,F_G,"=============================================================");
    DisablePlayerCheckpoint(i);
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du bist kein Staatsbeamter!");
    }
    }
    return 1;
    }
    Function Backup(playerid)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsACop(i))
    {
    SetPlayerCheckpoint(i,X,Y,Z-5,3);
    }
    }
    return 1;
    }

  • BackupTimer=SetTimer("Backup",1000,1);

    Da ist der Fehler. Du brauchst für soetwas keinen SetTimer, sondern einen SetTimerEx. Der Unterschied ist einfach:
    SetTimer ruft ein public/function ohne Operatoren auf:


    z.B.


    public BackUp


    Ein SetTimerEx kann Werte überliefern, wie in deinem Falle die playerid, damit ist ein
    public BackUp(playerid)


    möglich.



    Die 2te Sache ist, dass es mir schleierhaft ist, warum du eine function statt einem public nimmst. Eine function liefert immer einen Wert zurück, bei dir dank return 1; die 1.
    Diese 1 ist für dich jedoch Latte und somit die function sinnlos, nimm stattdessen ein public, denn ein public führt aus und liefert nicht unbedingt einen brauchbaren Wert.