Funktion für bestimmten Spieler starten /jail command

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 Leute,


    ist es möglich eine Funktion nur für einen bestimmten Spieler auszuführen ?


    Im Prinzip geht es darum, dass ich einen /jail (also als cop jemand wegsperren) command gescripted habe. Hierbei gibt man auch die Zeit, die man in der Zelle bleibt, in sekunden an.


    Hier meine Codes:


    Jail Command:

    if(!strcmp(cmd, "/jail", true, 5))
    {
    if(gTeam[playerid] != TEAM_COPS)
    {
    SendClientMessage(playerid, ROT, "Only Cops can use this command");
    return 1;
    }
    new tmp[256], str[256],a[256], integer: jailtime, jailedid, jailedname;
    tmp = strtok(cmdtext, idx);
    jailedid = strval(tmp);
    a = strrest(cmdtext, idx);
    jailtime = strval(a);
    if(strlen(tmp) == 0)
    {
    SendClientMessage(playerid, GELB, "USAGE: /jail ID TIME(in seconds)");
    return 1;
    }
    if(jailtime > 600)
    {
    SendClientMessage(playerid, ROT, "Max. jailtime is 600 seconds");
    return 1;
    }
    if((IsPlayerInRangeOfPoint(playerid, 8, 270.0385,77.7446,1001.0391)) && (IsPlayerInRangeOfPoint(jailedid, 8, 270.0385,77.7446,1001.0391)))
    {
    SetPlayerPos(jailedid, 264.0385, 77.7446,1001.0391);
    format(str, sizeof(str),"You have been jailed for %i Seconds", jailtime);
    SendClientMessage(jailedid, WEISS, str);
    SendClientMessage(playerid, WEISS, "Suspect jailed");
    gPlayerjailed[jailedid] = 1;
    ResetPlayerWeapons(jailedid);
    SetTimer("unjail", jailtime * 1000, false);
    return 1;
    }
    else return SendClientMessage(playerid, ROT, "You or the suspect are not in near of the cell");
    return 1;
    }


    Funktion "unjail":


    public unjail(playerid)
    {
    if(gPlayerjailed[playerid] == 1)
    {
    SetPlayerPos(playerid, 267.2925,77.7186,1001.0391);
    SendClientMessage(playerid, WEISS, "You have been released from the jail. Behave in future.");
    gPlayerjailed[playerid] == 0;
    return 1;
    }
    return 1;
    }



    Das Problem liegt wohl an der playerid. Denn bei diesem Code gilt die Funktion nur für playerid (0 in dem Fall). Wenn ich ne Schleife (i<MAX_PLAYERS) hinzufüge würden ja alle inhaftierten gleichzeitig entlassen werden.


    Daher meine Frage, was muss ich hier scripten damit eben nur der entlassen wird, bei dem die Zeit bereits rum ist ?


    Danke schonmal

    **************************************************
    -Homers Light Roleplay (Unique script)
    -Server IP: 46.4.62.81:8996
    -Server Forum: http://www.hl-rp.forumprofi.de
    **************************************************

  • oh ja , stimmt, hab ich bei der unjail funktion verpeilt :) mit dem ==, danke :) .


    Ja gut, aber dann muss ich ja trotzdem nen Timer setzen damit das script weiß wann bei jemand die Zeit abgelaufen ist und
    dann bin ich doch grad wieder beim selben Problem ?

    **************************************************
    -Homers Light Roleplay (Unique script)
    -Server IP: 46.4.62.81:8996
    -Server Forum: http://www.hl-rp.forumprofi.de
    **************************************************

  • dazu brauchst du "SetTimerEx", damit kannst du dann einfach die funktion nach einer betimmten zeit für nur einen spieler aufrufen, indem du die jeweilige ID als parameter übergibst:



    //jail-cmd
    //SetTimer durch das hier ersetzen:
    SetTimerEx("unjail", jailtime * 1000, false, "i", jailedid);


    Keine Scripting-Fragen per PM!