Selfmade Arrest Befehl [Problem]

  • Selfmade Arrest Befehl [Problem]

    Heyho,

    Bin grade an einem Selfmade Arrest Befehl dran.

    So sieht es bis jetzt aus:

    [pwn] if(!isPlayerInFrakt(playerid,1))return SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Du bist kein Beamter.");
    new pID, Float:X, Float:Y, Float:Z;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"[Hilfe]{FFFFFF} Nutzung: /arrest [ID/Teilname]");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1560.2823,-1693.9921,5.8906))return SendClientMessage(playerid, ROT, "[Fehler]{FFFFFF} Du bist nicht am Arrest Point.");
    GetPlayerPos(pID, X, Y, Z);
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, X, Y, Z))return SendClientMessage(playerid, Weis, "Der Spieler ist nicht in deiner Nähe.");
    if(GetPVarInt(playerid,"Wanted") > 0) return SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Der Spieler hat keine Wanteds.");//Richtig? Fragt ab ob der Spieler keine Wanteds hat????[/pwn]

    Nun möchte ich aber machen das er für jeden Wanted eine bestimmte Zeit Knast bekommt....

    Wie bekomme ich das hin?

    @Vincent Petritz:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von John_Jones ()

  • Bei deinem Knasten befehl:

    [pwn]SetPVarInt(playerid, "WantedZeit", DeineKnastZeitInSekunden);[/pwn]

    dann bei ongamemodeinit

    [pwn]SetTimer("CheckTimer", 1000, true);[/pwn]

    dann ganz unten:

    [pwn]forward CheckTimer();
    public CheckTimer()
    {
    if(GetPVarInt(playerid, "WantedZeit") >= 1)
    {
    // die Wantedzeit 1 runter mit SetPVarInt
    }

    if(GetPVarInt(playerid, "WantedZeit") == 0)
    {
    //was passieren soll wenn er ausm Knast kommt
    }
    return 1;
    }[/pwn]

    Lg
  • Nun sieht der so aus...
    Aber wie bekomme ich das hin, dass er z.b 120 Sekunden im Gefängnis ist und dann nach dem Timer wieder nach draußen geportet wird?

    [pwn]ocmd:arrest(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,1))return SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Du bist kein Beamter.");
    new pID, Float:X, Float:Y, Float:Z;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"[Hilfe]{FFFFFF} Nutzung: /arrest [ID/Teilname]");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1560.2823,-1693.9921,5.8906))return SendClientMessage(playerid, ROT, "[Fehler]{FFFFFF} Du bist nicht am Arrest Point.");
    GetPlayerPos(pID, X, Y, Z);
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, X, Y, Z))return SendClientMessage(playerid, Weis, "Der Spieler ist nicht in deiner Nähe.");
    if(GetPlayerWantedLevel(pID) == 0)
    {
    SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Der Spieler hat keine Wanteds.");
    }
    if(GetPlayerWantedLevel(pID) == 1)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 120 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    if(GetPlayerWantedLevel(pID) == 2)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 240 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    if(GetPlayerWantedLevel(pID) == 3)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 360 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    if(GetPlayerWantedLevel(pID) == 4)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 480 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    if(GetPlayerWantedLevel(pID) == 5)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 600 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(Weis,string);
    SpielerSpeichern(pID);
    }
    if(GetPlayerWantedLevel(pID) == 6)
    {
    new string[128];
    SendClientMessage(pID,ROT,"[Information]{FFFFFF} Du bist nun für 720 Sekunden im Gefängnis.");
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    return 1;
    }[/pwn]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von John_Jones ()

  • z.B. so

    [pwn]SetPVarInt(playerid, "KnastZeit", 60000 * GetPlayerWantedLevel(playerid));
    [/pwn]

    und bezüglich des Timers.

    Jede Sekunde also einen Sekunden Timer ziehst du die KnastZeit um 1000 milisekunden runter,

    also Knastzeit - 1000.

    Wenn die KnastZeit auf 0 ist, und er die Variabel Knast auf 1 hat.

    Teleportierst du ihn vor dem Knast und setzt die Knastvariable auf 0 und gibst ihm ne nachricht, dass er frei ist.

    Lg
  • [pwn]ocmd:arrest(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,1))
    return SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Du bist kein Beamter.");
    new pID,
    Float:X,
    Float:Y,
    Float:Z;
    GetPlayerPos(pID, X, Y, Z);
    if(sscanf(params,"u",pID))
    return SendClientMessage(playerid,ROT,"[Hilfe]{FFFFFF} Nutzung: /arrest [ID/Teilname]");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1560.2823,-1693.9921,5.8906))
    return SendClientMessage(playerid, ROT, "[Fehler]{FFFFFF} Du bist nicht am Arrest Point.");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, X, Y, Z))
    return SendClientMessage(playerid, Weis, "Der Spieler ist nicht in deiner Nähe.");
    if(GetPlayerWantedLevel(pID) == 0)
    returnSendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Der Spieler hat keine Wanteds.");
    if(GetPlayerWantedLevel(pID) >= 1)
    {
    new string[128],
    WantedZeit = (GetPlayerWantedLevel(pID) * 120),
    string2[128];
    format(string2, sizeof(string2), "[Information]{FFFFFF} Du bist nun für %d Sekunden im Gefängnis.", WantedZeit);
    SendClientMessage(pID,ROT,string2);
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    return 1;
    }[/pwn]

    Sieht doch angenehmer aus, oder?
  • Guck..

    Vincent hat den Arrest Befehl nun ja gemacht.
    Nun machst du nen Timer unter OnGameModeInit:

    [pwn]SetTimer("TimerKnast", 1000, true);[/pwn]

    Das heißt, du erstellst einen Timer, der "TimerKnast" heißt, jede Sekunde und dieser wird wiederholt.

    dann machst du:

    [pwn]forward TimerKnast();
    public TimerKnast()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i, "Knast") == 1)
    {
    // SetPVarInt(i, ...... Den Spieler die KnastZeit auf -1 setzten oder -1000 jenachdem wie du halt arbeitest
    }

    if(GetPVarInt(i, "Knast") == 1 && GetPVarInt(i, "KnastTime") == 0)
    {
    SetPVarInt(i, "Knast", 0);
    // send ihm ne nachricht
    // setzt seine Position
    }
    }
    return 1;
    }[/pwn]

    Denke die Schrittweise ist nachvollziehbar.

    //edit Vince, er kann in seinem Arrest Befehl ja schon die Zeit speichern. udn die wird dann im timer abgerufen, wie in meiner Variante. :-O

    Lg
    (Learning by Doing. ;-))

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von playerid ()

  • [pwn]ocmd:arrest(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,1))return SendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Du bist kein Beamter.");
    new pID, Float:X, Float:Y, Float:Z;
    GetPlayerPos(pID, X, Y, Z);
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"[Hilfe]{FFFFFF} Nutzung: /arrest [ID/Teilname]");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, 1560.2823,-1693.9921,5.8906))return SendClientMessage(playerid, ROT, "[Fehler]{FFFFFF} Du bist nicht am Arrest Point.");
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, X, Y, Z))return SendClientMessage(playerid, Weis, "Der Spieler ist nicht in deiner Nähe.");
    if(GetPlayerWantedLevel(pID) == 0)returnSendClientMessage(playerid,ROT,"[Fehler]{FFFFFF} Der Spieler hat keine Wanteds.");
    if(GetPlayerWantedLevel(pID) >= 1)
    {
    new string[128],
    WantedZeit = (GetPlayerWantedLevel(pID) * 120),
    string2[128];
    format(string2, sizeof(string2), "[Information]{FFFFFF} Du bist nun für %d Sekunden im Gefängnis.", WantedZeit);
    SendClientMessage(pID,ROT,string2);
    SetPlayerWantedLevel(pID,0);
    SetPlayerPos(pID,264.0242,81.5690,1001.0391);
    SetPlayerInterior(pID,6);
    ResetPlayerWeapons(pID);
    SetPVarInt(pID,"Knast",1);
    SetPVarInt(pID, "KnastZeit", WantedZeit);
    format(string,sizeof(string), "Officer %s hat den Verbrecher %s eingespeert.",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    SpielerSpeichern(pID);
    }
    return 1;
    }

    SetTimer("TimerKnast", 1000, true);


    forward TimerKnast();
    public TimerKnast()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i, "Knast") == 1)
    {
    SetPVarInt(playerid, "KnastZeit", GetPVarInt(playerid, "KnastZeit") - 1);
    }

    if(GetPVarInt(i, "Knast") == 1 && GetPVarInt(i, "KnastTime") == 0)
    {
    SetPVarInt(i, "Knast", 0);
    SetPVarInt(i, "KnastZeit", 0);
    SendClientMessage(i, FARBE, "Du bist rauß aus dem Knast!");
    SetPlayerInterior(i, 0);
    SpawnPlayer(i);
    }
    }
    return 1;
    }[/pwn]

    sollte so klappen, probiers mal.
  • Die Variable KnastZeit hab ich ja so speichern lassen:

    [pwn]SetPVarInt(pID, "KnastZeit", WantedZeit);
    WantedZeit = (GetPlayerWantedLevel(pID) * 120);[/pwn]

    SetTimer unter OnGameModeInit
    weil wenn er off gehen würde, würde der Timer für ihn ja nicht mehr funktionieren wenn ich mit SetTimerEx in dem Befehl arbeiten würde. O.o

    Wenn ich dumm bin, besser mich aus. :D

    Lg