Wo ist der Fehler?

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,


    geht um folgendes und zwar hab ich mein /orten so gemacht, dass es sich selbstständig aktualisiert. Nur gibt es ein kleies Problem, die ID 1 kann man nicht orten 8| und mancham geht der Checkpoint einfach nicht mehr weg ...
    Ich hoff ihr könnt mir da weiterhelfe.


    Mein /orten Befehl:


    if(strcmp(cmd, "/orten", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(!IsACop(playerid))
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /orten [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    //new Float:X,Float:Y,Float:Z; <-- Das orginal /orten
    //GetPlayerPos(giveplayerid, X,Y,Z); <-- -"-
    //SetPlayerCheckpoint(playerid, X,Y,Z, 6); <-- -"-
    new pID;
    Orter[playerid] = SetTimerEx("OrtenTimer",100,1,"ii",playerid,pID);
    Orten[playerid]=1;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Falsche ID!");
    }
    }
    return 1;
    }


    Der Befehl, um Checkpoints zu löschen (Nicht nur den /orten-Checkpoint, sondern alle ...):


    if(strcmp(cmd,"/dc",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    Orten[playerid]=0;
    KillTimer(Orter[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Checkpoint gelöscht!");
    }
    return 1;
    }


    Dazu noch das hier:


    new Orter[MAX_PLAYERS];
    forward OrtenTimer(playerid,ortid);
    new Orten[MAX_PLAYERS]=0;


    Und das:


    Function OrtenTimer(playerid,ortid)
    {
    new Float:X,Float:Y,Float:Z;
    new giveplayerid;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    return 1;
    }


    MfG Zilla

  • DisablePlayerCheckpoint(playerid); in denn timer

  • Danke für die schnelle Antwort, werds gleich testen. ICh werde berichten ...

  • Überdenk mal folgenden Code:
    new pID;
    Orter[playerid] = SetTimerEx("OrtenTimer",100,1,"ii",playerid,pID);
    Eine Variable mit dem namen 'pID' wird erstellt, automatisch auf 0 - da sie nicht gesetzt wird bei der Erstellung (z.B. new pID=1;). Dann wird der Timer erstellt, dem Spieler der den Befehl eingibt wird IMMER ID 0 angezeigt, ganz einfach: Benutz nicht pID für den Timer sondern giveplayerid! Oder änder die Zeile:
    new pID;
    zu:
    new pID=giveplayerid;


    Das der Checkpoint nicht weggeht, ist auch lösbar:
    Function OrtenTimer(playerid,ortid)
    {
    if(Orten[playerid]==1)
    {
    new Float:X,Float:Y,Float:Z;
    new giveplayerid;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    }
    else DisablePlayerCheckpoint(playerid);
    return 1;
    }


    Und zur Sicherheit nochmal folgendes:
    if(strcmp(cmd,"/dc",true)==0)
    {
    if(Orten[playerid]==0)return SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Kein Checkpoint vorhanden!");
    Orten[playerid]=0;
    DisablePlayerCheckpoint(playerid);
    KillTimer(Orter[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Checkpoint gelöscht!");
    return 1;
    }[/i]


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • also hab das mit der giveplayerid gemacht, jedoch wenn ein anderer joint wird immer noch id 0 geortet egal ob ich id1 oder id0 eingebe. wie bekomm ich das weg? der rest funktioniert super

  • äm einfach in denn timer


    if(IsPlayerConnected(id))
    {


    }
    else
    {
    KillTimer....
    DisablePlayerCheckpoint
    }

  • Debug mal giveplayerid via:
    printf("giveplayerid ist: %d",giveplayerid);
    Und sag uns was in der Konsole ausgegeben wird bzw. in der serverlog(.txt).


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • habe dir doch ein bsp geschicht kannste dir doch mal anschauen... ( per pm )

  • Function OrtenTimer(playerid,ortid)
    {
    new Float:X,Float:Y,Float:Z;
    new giveplayerid;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    return 1;
    }
    Du gobst ja die person, and deren stelle du den checkpoint setzen willst als ortid an. Aber wirklich holen tust du sie von giveplayerid. Die erstellst du aber erst kurtz davor, und veränderst sie auch nicht. Und weil neu erstellte variablen den wert 0 haben suchst du immer ID 0.
    Machs einfach so:
    Function OrtenTimer(playerid,ortid)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(ortid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    return 1;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Ok funst alles, dank Maddin.


    Ty für alles ... kann geclosed werden!


    mfG Zilla