Checkpoint lässt sich nicht löschen...

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
  • Hi folgendes Probelm:
    wenn ich /search eingebe und die playerid dann wird der jenige auf der Karte angezeigt - das geht ja noch.
    Wenn ich dann aber /cancelsearch eingebe, dann löscht er den Punkt, der Punkt kommt nach 1sek dann aber wieder...
    Hier meine Zeilen:



    new searchpoint;
    forward searchtimer(playerid,pID);


    //onplayercommand:
    if(strcmp(cmdtext, "/cancelsearch",true)==0)
    {
    DisablePlayerCheckpoint(playerid);
    GameTextForPlayer(playerid,"~y~Ziel entfernt",3000,1);
    KillTimer(playerid);
    SpielerSpeichern(playerid);
    return 1;
    }
    //onplayerentercheckpoint:
    else if(checkpointid==searchpoint)
    {
    DisablePlayerCheckpoint(playerid);
    GameTextForPlayer(playerid,"~y~Ziel erreicht.",3000,1);
    return 1;
    }
    ocmd:search(playerid,params[])
    {
    if(GetPVarInt(playerid,"Fraktion")==3 || GetPVarInt(playerid,"Fraktion")==5 || GetPVarInt(playerid,"Fraktion")==13 || GetPVarInt(playerid,"Adminduty")==1)
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_GREY,"Benutzung: /search [playerid]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, ROT, "Dieser Spieler ist nicht online!");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(pID, X,Y,Z);
    SetVehicleParamsForPlayer(pID,playerid,1,0);
    searchpoint=SetPlayerCheckpoint(playerid, X,Y,Z, 2);
    SetTimerEx("searchtimer",1000,1,"dd",playerid,pID);
    }
    else if (GetPVarInt(playerid,"Fraktion")==10 || GetPVarInt(playerid,"Adminduty")==1)
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_GREY,"Benutzung: /search [playerid]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, ROT, "Dieser Spieler ist nicht online!");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(pID, X,Y,Z);
    searchpoint=SetPlayerCheckpoint(playerid, X,Y,Z, 2);
    SetTimerEx("searchtimer",1000,1,"dd",playerid,pID);
    }
    else
    {
    return SendClientMessage(playerid,ROT,"Du bist nicht berechtigt diesen Befehl zu benutzen.");
    }
    return 1;
    }


    public searchtimer(playerid,pID)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(pID,X,Y,Z);
    SetPlayerCheckpoint(playerid,X,Y,Z,3);
    }

  • Ich weiß nicht ob das Funktioniert aber vll schon versuch mal :




    if(strcmp(cmdtext, "/cancelsearch",true)==0)
    {
    KillTimer(playerid);
    SpielerSpeichern(playerid);
    GameTextForPlayer(playerid,"~y~Ziel entfernt",3000,1);
    DisablePlayerCheckpoint(playerid);
    return 1;
    }



    MFG


  • 1. SetTimerEx Überprüf mal,ob du dir mit der 1 dort ganz sicher bist. Eventuell kannst du auch die 1 lassen,kenne ja nicht die genauen Ablauf wie du es haben möchtest.
    2. KillTimer(playerid) - Wie kommst du dazu,den Timer mit der ID von playerid gleichzusetzen ?


    Der Timer den du mit KillTimer zerstören kannst,kriegst du als Rückgabewert von SetTimer bzw SetTimerEx.


    //Edit:

    Zitat

    searchpoint=SetPlayerCheckpoint(playerid, X,Y,Z, 2);


    Das funktioniert nicht so wie du möchtest, denn:
    SetPlayerCheckpoint

    Zitat

    Returns This function doesn't return a specific value


    Der Rückgabewert bringt dir also nichts. Du müsstest eine ID für den Checkpoint irgendwie anders festlegen / übermitteln.

    Einmal editiert, zuletzt von Goldkiller ()

  • hmm.. ich habs jetzt mal versucht den timer zu killen (hab wie du gesagt hast nicht die playerid sondern den rückgabewert genommen) aber das geht auch nicht...


    Könntest du mir das vielleicht etwas einfacher erklären (nicht böse gemeint)...
    Es funktioniert ja großteils alles.
    Der Spieler wird auf der Karte angezeigt und der Timer wird sekündlich aktualisiert damit man immer die aktuelle position sieht.
    Aber wie kann ich ihn beenden?