[OCMD] Arrest Befehl: Alle Befehle während ArrestTime für Spieler abschalten?

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 ihr Brotfische!


    Hab da ne kleine Frage.Ich habe mir einen einfach gestalteten /arrest Befehle geschrieben:


    Spoiler anzeigen
    ocmd:arrest(playerid,params[])
    {
    new plid;
    if(GetPVarInt(playerid,"Fraktion")==1)
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, 1568.7850, -1690.9218, 5.8906))
    {
    if(IsPlayerInRangeOfPoint(plid,80, 1568.7850, -1690.9218, 5.8906))
    {
    switch(random(1))
    {
    case 0:
    {
    SetPlayerPos(plid,263.9228,86.5022,1001.0391);
    SetPlayerInterior(plid,6);
    TogglePlayerControllable(playerid,true);
    }
    case 1:
    {
    SetPlayerPos(plid,264.2061,81.3855,1001.0391);
    SetPlayerInterior(plid,6);
    TogglePlayerControllable(playerid,true);
    }
    }
    PlayerIsArrested[plid] = 1;
    SetTimerEx("KnastZeit",180000,0,"i",plid);
    }
    else
    {
    SendClientMessage(playerid,rot,"** Der Spieler ist nicht in der Nähe.");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"** Du bist nicht am Arrest-Point.");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"** Du bist nicht in der Fraktion.");
    }
    return 1;
    }


    Und nun wollte ich das wenn ein Spieler irgendein Befehl eingibt,der Befehl während er im Knast sitzt,nicht ausgeführt wird.Habe bereits eine IF-Abfrage mit der PlayerIsArrested Variable oder was das ist,bei OnPlayerCommandText durchführen lassen,hat aber nicht geklappt.Die Nachricht das dieser im Knast sei kam nämlich nur wenn ich einen Befehl eingegeben habe,der nicht existiert.Bei welchen die existierten,konnte ich sie normal ausführen.


    Wie kann ich das einfach und schnell machen,das der Spieler alle Befehle nicht während er im Knast sitzt ausführen kann? Ohne bei jeden Befehl eine IF-Abfrage mit der PlayerIsArrested Variable zu starten???


    Danke im Voraus.

  • Oh,vielleicht lag daran der Fehler,hatte das schonmal gemacht,und wo es 1 war,hab ich return 1; eingegeben.Lag wohl daran das er die Befehle trotzdem eingeben konnte ^^ Werde ich nach dem Mappen testen,und mich denn bedanken.

  • ich hab jetzt mal unter OnPlayerCommandText versucht ne abfrage zu machen.
    egal ob ich 0 oder 1 returne oder sogar ne message für den spieler.. die befehle klappen trotzdem alle. kann vielleicht an meinem script liegen aber bei mir klappts net.


    habe dafür aber mal was anderes probiert..
    habe direkt in der ocmd.inc ne callremotefunktion um abzufragen ob der spieler gesperrt ist oder nicht
    und dort konnte ich ganz einfach alle ocmd befehle sperren für den spieler indem ich ne message returnt hab.


    scheint mir aber auch unnötig kompliziert :D

  • ich habe in die ocmd.inc folgendes geschrieben:


    unter OnPlayerCommandText unten bei den if abfragen als erstes:
    if(istgesperrt(playerid)==1)return SendClientMessage(playerid,3,"Gesperrt");
    und ganz unten:
    stock istgesperrt(playerid) return CallRemoteFunction("gibmirwert","i",playerid);


    und im script:
    new gesperrt[MAX_PLAYERS];
    forward gibmirwert(playerid);public gibmirwert(playerid)return gesperrt[playerid];


    das ist aber einfach mal so bei rausgesprungen beim rumprobieren.. ist denke ich mal nicht die beste methode..
    also wenn noch jemand was besseres kennt nur her damit^^

  • Wenn du die neuste Version von OCMD benutzt, kannst du den Callback "BeforePlayerCommandText" aktivieren. (einfach #define OCMD_BEFORE_CALLBACK reinschreiben(unter #include <a_samp> in der ocmd.inc))


    Dann machst du es wie oben, einfach das unter BeforePlayerCommandText;


    if(istgesperrt[playerid]==1)return 0;


    return 0 bedeutet, dass der Befehl nicht ausgeführt wird.


    Grüße ;)