Frage bzgl. IsPlayerInRangeOfPoint

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 alle miteinander :)


    Ich hab ne Frage, und zwar bin ich grade dabei ein /hack befehl zu scripten. Der /hack befehl geht nur an einem bestimmten Punkt (definiert mit IsPlayerInRangeOfPoint). Und wenn der Spieler am Punkt ist, und /hack eingibt, läuft ein Timer, der 2 Minuten geht. Nach 2 Minuten geht 1 Wanted weg.


    Das Problem bei der Sache ist jetzt, wenn ich mich von dem Punkt entferne, dass der Timer immer weiterläuft. Also hab ichs mit "!IsPlayerInRangeOfPoint" versucht, was aber nicht funktioniert.


    Im moment sieht der /hack befehl so aus:
    if(strcmp(cmd, "/hack", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsPlayerInRangeOfPoint(playerid, 10.0, 407.3046,-2077.7368,7.8359))
    {
    if(WantedLevel[playerid] <= 6)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 10.0, 407.3046,-2077.7368,7.8359))
    {
    format(string, sizeof(string), "~r~Hackvorgang Gestartet - Dauer 2 Minuten!");
    GameTextForPlayer(playerid, string, 5000, 3);
    //TogglePlayerControllable(playerid, 0);
    HackTimer = SetTimer("HACK", 120000, 1);
    return 1;
    }
    else KillTimer(HackTimer);
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du hast über 6 Wanteds, du kannst deine Wanteds nichtmehr hacken!");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht am '/hack'-Point am Riesenrad!");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht Verbunden!");
    }


    Und ja, es ist ein GF :love:



    MfG. ShiiX

    [align=center]

  • Alles unnötiger Resourcen Verbrauch.
    Frag nach den 2 Minuten im Hack Timer einfach ab ob der Spieler immer noch in der nähe ist.
    Benutz dazu am besten SetTimerEx um die playerid zu übergeben.


    LG RFT

    RFT

  • RFT: Das wäre auch eine Möglichkeit, aber dann kann man ja weglaufen und nach 2 Minuten einfach wieder hin = unreal
    Mach einfach rein, dass man beim Hackvorgang gefreezt wird. -> Dann hast du das Problem gar nicht, und wenn der Timer abgelaufen ist, wird man unfreezt (-> also nach dem Hackvorgang)

  • RFT: Das wäre auch eine Möglichkeit, aber dann kann man ja weglaufen und nach 2 Minuten einfach wieder hin = unreal
    Mach einfach rein, dass man beim Hackvorgang gefreezt wird. -> Dann hast du das Problem gar nicht, und wenn der Timer abgelaufen ist, wird man unfreezt (-> also nach dem Hackvorgang)



    Ist leider auch nicht die beste Lösung. Wenn der Spieler ein Wanted Level besitzt und die Cops einen hinterher sind und man durch den HackVorgang gefreezet wird ist man in arsch gekniffen.
    Ich hätte eine andere Idee. Lass beim Hacken eine Variable auf 1 setzen und frage unter "OnPlayerUpdate" ab ob der Spieler sich noch in der Nähe aufhält. Dann brauch man keinen unnötigen Timer setzen.


    LG RFT

    RFT

  • Kann mir das bitte jemand machen? :D


    Ich bekomm das nich gebacken :')


    Hier der (bisjetzige) Befehl:


    if(strcmp(cmd, "/hack", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsPlayerInRangeOfPoint(playerid, 10.0, 407.3046,-2077.7368,7.8359))
    {
    if(WantedLevel[playerid] >= 6)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 10.0, 407.3046,-2077.7368,7.8359))
    {
    format(string, sizeof(string), "~r~Hackvorgang Gestartet - Dauer 2 Minuten!");
    GameTextForPlayer(playerid, string, 5000, 3);
    //TogglePlayerControllable(playerid, 0);
    HackTimer = SetTimer("HACK", 120000, 1);
    return 1;
    }
    else KillTimer(HackTimer);
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du hast über 6 Wanteds, du kannst deine Wanteds nichtmehr hacken!");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht am '/hack'-Point am Riesenrad!");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht Verbunden!");
    }


    und der Timer:
    public HACK(playerid)
    {
    new string[256];
    format(string, sizeof(string), "~g~Hackvorgang Abgeschlossen!");
    GameTextForPlayer(playerid, string, 5000, 3);
    SetPlayerWantedLevel(giveplayerid,points-1);
    WantedPoints[giveplayerid] -= 1;
    WantedLevel[giveplayerid]-=1;
    return 0;
    }



    MfG. ShiiX :D

    [align=center]

  • Im Hacking Befehl



    SetPVarInt(playerid, "pHack", 1);




    unter OnPlayerUpdate



    if(GetPVarInt(playerid, "pHack") == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid, radius, X, Y, Z))return true;
    else{ KillTimer(/*DenTimerhalt*/); Vielleicht noch SendClientMessage als Info daz}
    }

    RFT

  • Mach lieber ein extra Timer der das überprüft und nicht unter OnPlayerUpdate



    Würde ich nicht machen. Er möchte ja überprüfen ob der Spieler sich die ganzen zwei Minuten im Radius befindet. Soll er da etwa ein Timer nehmen der jede Sekunde ein Callback aufruft ?
    Das dann sagen wir mal für 20 Spieler ? Da finde ich die Lösung unter "OnPlayerUpdate" angebrachter.


    LG RFT

    RFT

  • Danke RFT! :')


    Jetzt hab ich n n' Problemchen :D


    Wenn ich /hack eingebe und geschlagene 2 Minuten warte, steht da "Hackvorgang abgeschlossen", aber es zieht kein Wanted ab. :(
    Hier der Code:
    public HACK(playerid)
    {
    new string[256];
    format(string, sizeof(string), "~g~Hackvorgang Abgeschlossen!");
    GameTextForPlayer(playerid, string, 5000, 3);
    SetPlayerWantedLevel(playerid, -1);
    return 0;
    }


    Falls ihr mehr Infos braucht, sagt bescheit. :)


    MfG ShiiX :D

    [align=center]

  • GetPlayerWantedLevel(playerid);
    SetPlayerWantedLevel(playerid, -1);


    so funzt das net ^^


    mach es so:


    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S