/slap klappt nicht so recht

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!


    COMMAND:slap(playerid, params[])
    {
    new PlayerWhoGetsSlapped,
    Float:X,
    Float:Y,
    Float:Z,
    string[128],
    pName[MAX_PLAYER_NAME],
    AdminWhoExecutesTheCommand[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist kein Admin!");
    if(!IsPlayerConnected(PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieser Spieler ist nicht online!");
    if(sscanf(params, "u", PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[WARNUNG] Gebrauch: /slap [ID]!");

    GetPlayerPos(PlayerWhoGetsSlapped, X, Y, Z);
    SetPlayerPos(PlayerWhoGetsSlapped, X, Y, Z+10.0);

    GetPlayerName(playerid, pName, sizeof(pName));
    GetPlayerName(playerid, AdminWhoExecutesTheCommand, sizeof(AdminWhoExecutesTheCommand));
    format(string, sizeof(string), "[SPIELERINFO] %s wurde vom Admin %s geslappt!", pName, AdminWhoExecutesTheCommand);
    SendClientMessageToAll(COLOR_TURQUOISE, string);
    return 1;
    }


    Vorab: Ich bin Anfänger.


    Also, ich schildere mal kurz, was ich mir beim Scripten gedacht habe:


    1. Variable für den Spieler, der geslappt werden soll, für die X, Y und Z Koordinaten des Spielers, der geslappt werden soll, den String für die ClientMessage, den Spielernamen des Spielers, der geslappt wird, und den Spielernamen des Admins.
    2. Überprüfen, ob der Spieler, der den Befehl ausführt, RCON Admin ist.
    3. Überprüfen, ob der Spieler, der geslappt werden soll, online ist.
    4. Parameter überprüfen.
    5. Position des Spielers, der geslappt werden soll in X, Y, Z Variablen speichern.
    6. Spieler um 10.0 nach oben setzen.
    7. Spielernamen des Spielers, der geslappt wird, und des Admins, der den befehl ausführt fetchen.
    8. Beides in den String formatieren.
    9. ClientMessage an alle Spieler ausgeben.


    Errors kriege ich bei der Geschichte keine.


    Nun ist es aber so, dass ich eine x beliebige ID eingeben kann, die überhaupt nicht online ist, und trotzdem die Clientmessage "[ADMININFO] Manyula wurde vom Admin Manyula geslappt!" kommt.


    Danke im Voraus!


    /e: Einrückung.

  • Hey,


    das liegt daran, dass du das sscanf vor die anderen Abfragen machen musst, da er erst dann eine wirkliche ID hat.


    Sprich:


    if(sscanf(params, "u", PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[WARNUNG] Gebrauch: /slap [ID]!");
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist kein Admin!");
    if(!IsPlayerConnected(PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieser Spieler ist nicht online!");




    Anstatt



    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist kein Admin!");
    if(!IsPlayerConnected(PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieser Spieler ist nicht online!");
    if(sscanf(params, "u", PlayerWhoGetsSlapped)) return SendClientMessage(playerid, COLOR_RED, "[WARNUNG] Gebrauch: /slap [ID]!");