Jail nur nach Kill möglich

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
  • if(strcmp(cmd, "/jail", true) == 0) // Jails a player
    {
    if (gTeam[playerid] == 4 || IsACP(playerid) || AccountInfo[playerid][AdminLevel] >= 2)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, ORANGE, "USAGE: /jail [playerid/PartOfName] [reason]");
    return 1;
    }
    new targetid = ReturnUser(tmp);
    if(IsPlayerConnected(targetid))
    {
    if(targetid != INVALID_PLAYER_ID)
    {
    if(AccountInfo[giveplayerid][Jail] == 0)
    {
    GetPlayerName(targetid, giveplayername, sizeof(giveplayername));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new reason[128];
    reason = bigstrtok(cmdtext, idx);
    if(!strlen(reason)) return SendClientMessage(playerid, ORANGE, "USAGE: /jail [playerid/PartOfName] [reason]");
    format(string, sizeof(string), "You got jailed by Officer %s. Reason: %s", sendername, reason);
    SendClientMessage(targetid, ADMIN_RED, string);
    format(string, sizeof(string), "Want to be free? Than ask a Black Hunter or relog!");
    SendClientMessage(targetid, ADMIN_RED, string);
    format(string, sizeof(string), "-| Officer %s jailed %s. [ Reason: %s ] |-",sendername,giveplayername, reason);
    SendClientMessageToAll(ADMIN_RED,string);
    AccountInfo[targetid][Jail] = 1;
    OnPlayerJailed(targetid);
    return 1;
    }
    else SendClientMessage(playerid, RED, "Player is already jailed!");
    }
    else
    {
    format(string, sizeof(string), "%d is not an active player.", targetid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else
    {
    format(string, sizeof(string), "%d is not an active player.", targetid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "You are not an admin with the required level or a cop.");
    return 1;
    }


    Bidde :)

  • Ähm, bitte nächstes mal Frage lesen ... :O
    Ich möchte, dass das Einbuchten nur funktioniert, wenn man vor ca. 15 Sekunden die Person umgebracht hat.

    Bau einen Timer ein!
    Ps: Der Jail Command hätte um 30 Zeilen kürzer sein ;P.
    Pps: dcmd & Sccanf..

  • Ich würds einfach so machen.


    Bei OnPlayerDeath:


    If(gTeam[killerid] == 4 || IsACP(killerid) || AccountInfo[killerid][AdminLevel] >= 2)
    {
    iJailID[killerid] = playerid;
    }


    Und dann einfach in deinem Befehl eine Abfrage einbauen:


    if(iJailID[playerid] == targetid)


    Dann fehlt nurnoch ein Timer der nach den 15 Sek. iJailID[killerid] auf -1 oder ähnliches setzt. (Dieser muss auch unter OnPlayerDeath)


    //Edit: [ pwn ] eingefügt
    //Edit2: Fehler behoben.
    //Edit3: nochn fehler.. sollte mal durchlesen bevor ichs abschicke^^

  • Also ich würde einen Timer von 15 Sekunden unter OnPlayerDeath schmeißen, der Timer aktiviert eine Variable... dan fragst du in deinem CMD ab ob die Variable auf 1 ist.
    Ganz Easy :D

  • in solchen fällen würde ich von timern abraten, geht ressourcenschonender ;)




    //oben
    #define KILL_JAIL_SECONDS (15)
    new KillTime[MAX_PLAYERS];



    //OnPlayerDeath
    KillTime[killerid]=GetTickCount();



    //bei deinem "jail" command
    if(GetTickCount() - KillTime[targetid] < (KILL_JAIL_SECONDS*1000))
    return SendClientMessage(playerid, COLOR, "Kein Mord in den letzten 15 Sekunden!");

    Keine Scripting-Fragen per PM!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen