/orten geht nicht richtig

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
  • ich habe ein /orten system wo der point den spielr den ich orte verfolgt aber irgendwie geht es nicht könnt ihr mir da bitte helfen




    new Orten[MAX_PLAYERS],ortentimer;


    SetTimer("Orten",1000,1); // das wären alle 2 sekunden ( optional umstellen )


    //======== ORTEN ==========//
    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(Orten[playerid] == 1) {
    KillTimer(ortentimer);
    SendClientMessage(playerid,COLOR_GREY,"Du hast das Orten beendet.");
    return 1;
    }
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /orten [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    SetTimer("Orten",1000,1);
    Orten[playerid] = giveplayerid;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Falsche ID!");
    }
    }
    return 1;
    }

    forward Orten();
    public Orten()
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(Orten[i] == 1) {
    #define giveplayerid Orten[i]
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(giveplayerid, X,Y,Z);
    SetPlayerCheckpoint(i, X,Y,Z, 6);
    #undef giveplayerid
    }
    }
    return 1;
    }

  • Das liegt an deiner if abfrage im Timer


    Orten[playerid] = giveplayerid;
    Orten[playerid] hat die Id welche geortet werden soll.



    if(Orten[i] == 1)
    Der Spiler könnte nur die ID 1 orten.


    Daher deklarier das Array Orten anderes und zwar so


    new Orten[MAX_PLAYERS] = {-1,... };


    somit hast du einen default wert
    dann kannst du das so abfragen



    if(Orten[i] != -1)


    Zu dem würde ich den Timer beenden wenn kein spieler irgend jemadn sucht und die verwendung von MAX_PLAYERS ist schneller als die funktion GetMaxPlayers zu benutzen
    da MAX_PLAYERS ein define ist und ein konstanter wert.
    jedoch macht es sinn MAX_PLAYERS deiner slotzahl anzupassen.