/orten timer

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 wollte mal ein Orten-Befehl für die Polizei machen, dabei soll ein Timer eingebaut sein der sich alle 10 sec wiederholt und immer die neuen Koordinaten des Ziels angeben hab aber Probleme


    if(strcmp(cmd, "/orten", true) == 0) { if(IsPlayerConnected(playerid)) { if(gTeam[playerid] == 2 || IsACop(playerid) || PlayerInfo[playerid][pLeader]==2) { if(PlayerOnMission[playerid] > 0) { SendClientMessage(playerid, COLOR_GREY, "Während einer Mission kann dieser Befehl nicht verwendet werden!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "Verwendung: /orten [SpielerID/TeildesNamens]"); return 1; } giveplayerid = ReturnUser(tmp); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { if(CantFind[giveplayerid] == 1) { SendClientMessage(playerid,COLOR_GRAD2, "Nicht bescheissen !"); return 1; } if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selbst suchen!"); return 1; } GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); new Float:X1,Float:Y1,Float:Z1; GetPlayerPos(giveplayerid, X1,Y1,Z1); SetPlayerCheckpoint(playerid, X1,Y1,Z1, 6);
    SetTimerEx("TimerOrten",100,1,"d",playerid); // Anstatt deine Timer
    } } else { SendClientMessage(playerid, COLOR_GREY, "Falsche/r Name /ID!"); } } return 1; } }
    forward TimerOrten(playerid);


    public TimerOrten(playerid){ tmp = strtok(cmdtext, idx); giveplayerid = ReturnUser(tmp); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); new Float:X1,Float:Y1,Float:Z1; GetPlayerPos(giveplayerid, X1,Y1,Z1); SetPlayerCheckpoint(playerid, X1,Y1,Z1, 6);}


    Hier der Quealltext aber ein paar Errors:



    Zeile (467) : Unbekannte Variable : "tmp"
    Zeile (467) : Unbekannte Variable : "cmdtext"
    Zeile (468) : Unbekannte Variable : "giveplayerid"
    Zeile (468) : Unbekannte Variable : "tmp"
    Zeile (469) : Unbekannte Variable : "giveplayerid"
    Zeile (469) : Unbekannte Variable : "giveplayer"
    Zeile (469) : Ungültiger Befehl
    Zeile (469) : Zuviele Fehler in einer Zeile


    Bitte HIlfe



    //edit Weil es hier ja nicht ging hier ein Link: http://pastebin.com/UDRKLWCj


    Mfg, René

    Einmal editiert, zuletzt von iCoke ()

  • //edit Also hab jetzt, mach das mal ohne Pawno weil das is iwie putt bei mir ;)



    public TimerOrten(playerid)
    {
    tmp = strtok(cmdtext, idx);
    new giveplayerid = ReturnUser(tmp);
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    new Float:X1,Float:Y1,Float:Z1;
    GetPlayerPos(giveplayerid, X1,Y1,Z1);
    SetPlayerCheckpoint(playerid, X1,Y1,Z1, 6);
    }


    Errors:



    Zeile (467) : Unbekannte Variable : "tmp"
    Zeile (467) : Unbekannte Variable : "cmdtext"
    Zeile (468) : Unbekannte Variable : "tmp"
    Zeile (469) : Unbekannte Variable : "giveplayer"
    Zeile (469) : Unbekannte Variable : "giveplayer"
    Zeile (469) : Ungültiger Befehl
    Zeile (469) : Zuviele Fehler in einer Zeile


    immernoch die gleichen 8| -.-
    Mfg, René

  • Habe noch einen Fehler entdeckt:
    In einer Funktion kann man nicht die Variablen einer anderen Funktion benutzen.
    Das bedeutet, dass du in der Funktion TimerOrten nicht cmdtext, giveplayerid etc. benutzen kannst.
    Ich empfehle dir, dass du die Funktion TimerOrten auflöst und stattdessen den Code in deinen Befehl bei OnPlayerCommandText hinzufügst.
    Ansonsten müsstest du alle Variablen dem Timer übermitteln.

  • Ja ein Kommando ist aber blöd will ja, dass wenn ein Cop Orten playerid macht das er den Ort sieht wo der Gesuchte ist und das soll sich ja alle 10 sec oder so erneuen damit man immer die neuesten Koordinaten des Gesuchten hat und nicht tausendmal /orten schreiben muss.


    Mfg, René

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • SetTimerEx("TimerOrten",100,1,"d",playerid,cmdtext,tmp,giveplayerid,giveplayer); //falsch
    SetTimerEx("TimerOrten",100,1,"d,s,d,d,d",playerid,cmdtext,tmp,giveplayerid,giveplayer);


    Du musst für jede Variable, die du "übergeben" willst einen Platzhalter inform von Buchstaben "geben"
    d.h. DU musst wissen ob das was du übergibst ein string oder ein integer ist ;)

  • Achso :) jetzt hab ich es so halbwegs kapiert, danke dir.
    //edit: O.O Wenn ich orten mach kackt der Server ab also die samp-server anwendung schließt sich server is down -.-
    Mfg, René

  • SetTimerEx("TimerOrten",100,1,"d",playerid,cmdtext,tmp,giveplayerid,giveplayer); //falsch
    SetTimerEx("TimerOrten",100,1,"d,s,d,d,d",playerid,cmdtext,tmp,giveplayerid,giveplayer);


    Du musst für jede Variable, die du "übergeben" willst einen Platzhalter inform von Buchstaben "geben"
    d.h. DU musst wissen ob das was du übergibst ein string oder ein integer ist ;)


    Aber ohne komma dazwischen...


    SetTimerEx("TimerOrten",100,1,"dsddd",playerid,cmdtext,tmp,giveplayerid,giveplayer);

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

  • Ok, danke dir :)


    //edit: So jetzt will aber das wenn der Spieler den Gesuchten gefunden hat das der TImer aufhört hier mal mein PAWN-Text:
    SetTimerEx("TimerOrten",100,1,"dsddd",playerid,cmdtext,tmp,giveplayerid,giveplayer);// Anstatt deine Timer } if(PlayerToPoint(20, playerid, X1,Y1,Z1); { KillTimer(TimerOrten); }


    Aber hab Errors -.- :


    Zeile (38940) : Unbekannte Variable : "X1"
    Zeile (38942) : error 076: syntax error in the expression, or invalid function call


    Dann wollt ich ein eigenen Befehl machen aber auch ein Error:
    Zeile (38958) : error 076: syntax error in the expression, or invalid function call



    if(strcmp(cmd, "/ortenn", true) == 0)
    {
    KillTimer(TimerOrten);
    return 1;
    }

    Einmal editiert, zuletzt von iCoke ()

  • Sorry wenn ich nochma störe, ka ob das problem schon gelöst wurde oder nicht. Aber falls nicht:
    Es reicht wenn du die ID des Spielers der Den Befehl benutz (playerid, damit wir wissen wer den checkpoint gezeigt bekommen soll) und die ID des spielers von dem du die Position herausfinden willst (giveplayerid) an die public funktion übergibst.
    Also
    SetTimerEx("TimerOrten",100,1,"dd",playerid,giveplayerid);
    Für den Timer mit den beiden parametern playerid und giveplayerid, und die Funktion:
    forward TimerOrten(playerid,giveplayerid);
    public TimerOrten(playerid,giveplayerid)
    {
    new Float:X1,Float:Y1,Float:Z1;
    GetPlayerPos(giveplayerid, X1,Y1,Z1);
    SetPlayerCheckpoint(playerid, X1,Y1,Z1, 6);
    }


    Und wenn du möchtest das sich der Checkpoint alle 10 Sekunden aktualisiert musst du 10000 Eintragen (10000 Millisekunden = 10 Sekunden). Also so:
    SetTimerEx("TimerOrten",10000,1,"dd",playerid,giveplayerid);


    Mfg.

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

  • So jetzt will aber das wenn der Spieler den Gesuchten gefunden hat das der TImer aufhört hier mal mein PAWN-Text:




    if(strcmp(cmd, "/ortenn", true) == 0)
    {
    KillTimer(TimerOrten);
    return 1;
    }


    Errors:


    Zeile (38956) : error 076: syntax error in the expression, or invalid function call


    Mfg, René

  • Dafür musst du eine globale variable definieren.
    Also oben im Script
    new OrtenTimer;
    Dann den Timer so erstellen:
    OrtenTimer = SetTimerEx("TimerOrten",10000,1,"dd",playerid,giveplayerid);
    und dann per
    KillTimer(OrtenTimer);
    Wieder löschen.

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