Das kann nicht so schwer sein: Ein 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
  • Hey,


    also folgendes Problem:


    Ich möchte ein Script zusammen basteln, dass es jemandem mit Wantedleveln ermöglicht sich zu "verstecken". Nun bin ich schon soweit, dass die Wanteds bei eingabe von "/savespot" verschwinden, allerdings verschwinden die Wanteds sofort. Das soll allerdings nicht passieren. Die ganze Sache soll so sein, dass die Wanteds erst nach einer bestimmten Zeit, welche je nach höhe des Wantedslevels und der Uhrzeit schwankt, unterschiedlich hoch ausfällt.


    Ich habs mit einer for schleife versucht, doch das geht VIIIEEEEL zu schnell. Wie gesagt: Kaum eingegeben schon ist man befreit ^^ Also FALSCH ! ^^


    Wie kann ich es also machen? Hier der wichtige Ausschnitt:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/savespot", cmdtext, true, 10) == 0)
    {
    new Float:X, Float:Y, Float:Z, float: wantedK;
    GetPlayerPos(playerid,X,Y,Z);
    SendClientMessage(playerid, 0xFF0000FF, "Warte und verhalte dich ruhig!");
    new float:wanteds, float:zeitst, float:zeitmin, float:dauer,float:zeit;
    wanteds = GetPlayerWantedLevel(playerid);
    zeit = GetPlayerTime(playerid, zeitst, zeitmin);
    dauer = (wanteds*100000/zeitst);
    for (new i=0; i<dauer; i++)
    {
    wantedK = GetPlayerWantedLevel(playerid);
    if (wantedK > wanteds)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Noch ein Wanted? Reicht es dir noch nicht?");
    return 0;
    }
    }
    new Float:x2,Float:y2,Float:z2;
    GetPlayerPos(playerid,x2,y2,z2);
    if (X==x2) && (Y==y2) && (Z==z2)
    {
    SetPlayerWantedLevel(playerid, 0);
    SendClientMessage(playerid, 0x0F0F00FF, "Du bist frei!");
    }
    }


    Bitte missachtet jegliche Unordnung oder Unsauberkeiten: Das is mein ALLERERSTER Gehversuch in PAWN ^^ Hab heute erst damit angefange ;)


    HELP PLS


    the
    MrWong

  • if(strcmp(cmdtext,"/...",true)==0) {
    new wanteds=GetPlayerWantedLevel(playerid), dauer=wanteds*100000;//oder i-wie so, die zeit musst selbst wissen^^
    SendClientMessage(playerid, 0xFF0000FF, "Warte und verhalte dich ruhig!");
    SetTimerEx("wweg",dauer,0,"d",playerid);
    return 1;
    }
    Jetzt machst du noch ganz nach oben:
    forward wweg(playerid;
    Und ganz nach unten:
    public wweg(playerid) {
    SetPlayerWantedLevel(playerid,0); }

  • danke erstmal dafür. Bleibt noch ein Problem : Wenn ich nun
    if (strcmp("/savespot", cmdtext, true, 10) == 0)
    {
    new float:X,float:Y,float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    SendClientMessage(playerid, 0xFF0000FF, "Warte und verhalte dich ruhig!");
    new float:wanteds, float:dauer;
    wanteds = GetPlayerWantedLevel(playerid);
    dauer = (wanteds*100000);
    SetTimerEx("wweg",dauer,0,"d",playerid);
    }


    public wweg(playerid)
    {
    new Float:x2,Float:y2,Float:z2;
    GetPlayerPos(playerid,x2,y2,z2);
    if (X==x2) && (Y==y2) && (Z==z2)
    {
    SetPlayerWantedLevel(playerid, 0);
    SendClientMessage(playerid, 0x0F0F00FF, "Du bist frei!");
    }
    }


    mache, da ja auch überprüft werden soll, ob er sich bewegt hat oder nicht und wenn er sich bewegt hat, dass die Sache abgebrochen wird, kommt logischerweise das X,Y,Z nicht defeniert sind...auch wenn ich diese am Anfang des Source defenier. Was ist falsch?


    the
    MrWong

  • Erstmal, das Wantedlevel und die dauer sind eine ganz normale Dezimalzahl, du musst sie nicht mit "new float:wanteds;" darstellen, "new wanteds" reicht auch und mach aus dem forward mal "forward wweg(playerid,Float:x,Float:y,Float:z);"
    Und aus dem Timer: "SetTimerEx("wweg",wanteds*100000,0,"dfff",playerid,x,y,z);
    Und aus dem public:
    public wweg(playerid,Float:x,Float:y,Float:z) {
    new Float:x2,Float:y2,Float:z2;
    GetPlayerPos(playerid,x2,y2,z2);
    if (x==x2 && y==y2 && z==z2) {
    SetPlayerWantedLevel(playerid, 0);
    SendClientMessage(playerid, 0x0F0F00FF, "Du bist frei!"); }
    }

  • OK dann ist das Problem gelöst ^^Jetz hab ich ein neues. Und zwar scheinen die Koordinaten, die das Script beim aufrufen von /savespot speichert nie mit denen übereinzustimmen, die als Kontrolle bei wweg dienen. Warum? ich habe einfach nur /savespot eingetippt und das wars... Wie kann man eine Art "Safe-Zone" einrichten? Also, dass der /savespot nutzer sich in einem gewissen Radius bewegen kann? Am besten wäre es, wenn ihm ein Checkpoint eingerichtet wird an den Koords wo er steht und in diesem Checkpoint einfach stehen bleiben muss. Geht das?? Und sobald er den Checkpoint verlässt wird der Timer abgebrochen und der Gesuchte muss erneut /savespot eingeben.. Ist das möglich wenn ja wie?


    the
    MrWong