/Unfreeze

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
  • ich möchte gerne das wenn ein admin gefreezt ist sich selber nicht unfreezen kann


    if(strcmp(cmd, "/unfreeze", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /unfreeze [playerid]");
    return 1;
    }
    new playa;
    playa = ReturnUser(tmp);
    if(PlayerInfo[playerid][pAdmin] >= 2000)
    {
    if(IsPlayerConnected(playa))
    {
    if(playa != INVALID_PLAYER_ID)
    {
    GetPlayerName(playa, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    UnFreezePlayer(playa);
    format(string, sizeof(string), "AdminSystem: %s UnFroze %s",sendername, giveplayer);
    printf("%s",string);
    format(string, sizeof(string), "AdminSystem: %s wurde von %s entfreezed",giveplayer ,sendername);
    ABroadCast(COLOR_LIGHTRED,string,1);
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du darfst diesen Befehl nicht benutzen!");
    SendClientMessage(playerid, COLOR_RED, "es ist nur Admins 2000 erlaubt!");
    }
    }
    return 1;
    }

  • Woran scheiterst du denn?


    Gehen wir mit Köpfchen an die ganze Sache heran ... dein System sollte folgendermaßen aufgebaut sein:

    • Spieler gibt Befehl /unfreeze [Spielerid] ein (Abfragen, ob der Spieler die Rechte hat, diesen Befehl zu nutzen, oder ob die Eingabe das richtige Format besitzt)
    • Wenn Spieler gefreezed ist, dann überprüfen ob Spieler = Spielerid -> Fehler oder Spieler 2 = Spielerid -> Fehler


    Option 2 könnte man nun direkt vereinfachen und sagen, unabhängig davon ob der Spieler (wenn Spieler = Spielerid) gefreezed ist oder nicht, du darfst dich nicht entfreezen. Erklärung: Spieler steht nun für den, der den Befehl eingibt. Spieler 2 ist der Spieler, der gefreezed wird oder bereits ist.


    Sieh dir mal meinen Code an, ich habe außerdem noch eine Spielervariable erstellt, damit man auch abfragen kann, ob der Spieler bereits ge- oder entfreezed ist:


    #include <zcmd>
    #include <sscanf2>


    enum sInfo
    {
    sFreezed = 0;
    };
    new SpielerInfo[MAX_PLAYERS][sInfo];


    CMD:freeze(playerid, params[])
    {
    new sID, str[128]; // Variable für Spielerid und String

    if(PlayerInfo[playerid] < /* Rang */)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Keine Rechte erkannt!"); // Spieler hat keine Rechte, den Befehl zu nutzen
    if(sscanf(params, "u", sID))return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /freeze [Spielername/- ID]"); // Fehlermeldung, wenn der Befehl falsch eingegeben wurde
    if(playerid == sID)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Du darfst dich nicht selbst freezen!"); // Spieler darf sich nicht selbst freezen
    if(SpielerInfo[sID][sFreezed] = 1)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Die Spielerid ist bereits gefreezed!"); // Wenn Spieler gefreezed -> Abbruch

    format(str, 128, "[Adm-CMD]: %s hat dich gefreezed!", GetPlayerNameEx(playerid)); // Formatieren des Textes
    SendClientMessage(sID, 0xFF0000FF, str); // Nachricht an die Spielerid

    format(str, 128, "[Adm-CMD]: Du hast %s gefreezed!", GetPlayerNameEx(sID)); // Formatieren des Textes
    SendClientMessage(playerid, 0xFF0000FF, str); // Nachricht an den Spieler

    format(str, 128, "[Adm-CMD]: %s hat %s gefreezed!", GetPlayerNameEx(playerid), GetPlayerNameEx(sID)); // Formatieren des Textes
    ABroadCast(0xFF0000FF, str, 1); // Nachricht an die Teammitglieder

    TogglePlayerControllable(sID, 0); // Freezen der Spielerid
    SpielerInfo[sID][sFreezed] = 1;
    return 1;
    }


    CMD:unfreeze(playerid, params[])
    {
    new sID, str[128]; // Variable für Spielerid und String

    if(PlayerInfo[playerid] < /* Rang */)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Keine Rechte erkannt!"); // Spieler hat keine Rechte, den Befehl zu nutzen
    if(sscanf(params, "u", sID))return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /unfreeze [Spielername/- ID]"); // Fehlermeldung, wenn der Befehl falsch eingegeben wurde
    if(playerid == sID)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Du darfst dich nicht selbst entfreezen!"); // Spieler darf sich nicht selbst entfreezen
    if(SpielerInfo[sID][sFreezed] = 0)return SendClientMessage(playerid, 0xFF0000FF, "Fehler! Die Spielerid ist nicht gefreezed!"); // Wenn Spieler nicht gefreezed -> Abbruch

    format(str, 128, "[Adm-CMD]: %s hat dich entfreezed!", GetPlayerNameEx(playerid)); // Formatieren des Textes
    SendClientMessage(sID, 0xFF0000FF, str); // Nachricht an die Spielerid

    format(str, 128, "[Adm-CMD]: Du hast %s entfreezed!", GetPlayerNameEx(sID)); // Formatieren des Textes
    SendClientMessage(playerid, 0xFF0000FF, str); // Nachricht an den Spieler

    format(str, 128, "[Adm-CMD]: %s hat %s entfreezed!", GetPlayerNameEx(playerid), GetPlayerNameEx(sID)); // Formatieren des Textes
    ABroadCast(0xFF0000FF, str, 1); // Nachricht an die Teammitglieder

    TogglePlayerControllable(sID, 1); // Freezen der Spielerid
    SpielerInfo[sID][sFreezed] = 0;
    return 1;
    }


    stock GetPlayerNameEx(playerid)
    {
    new str[32];
    GetPlayerName(playerid, str, 32);
    return str;
    }



    Hinweis:
    Solltest du meinen Code verwenden wollen, hol dir zcmd und sscanf.