/tban Problem

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,
    nach gefühlt 20 Jahren, in denen ich nicht gescriptet habe wollte ich mal wieder anfangen. Habe ein /tban-System gescriptet (zum timebannen, wer häts gedacht). Das Problem was ich jetzt habe das die Person nicht gebannt wird, also man trotzdem noch auf den Server kommt und der Grund nicht angezeigt wird.
    Hier mal den Code:
    Befehl:
    ocmd:tban(playerid, params[]){
    if(PlayerInfo[playerid][pAdmin] >= 1337){
    new pID, grund[64], dauer;
    if(sscanf(params, "uis", pID, grund,dauer)) return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Dauer (in Minuten)] [Grund]");
    if(PlayerInfo[pID][pAdmin] > PlayerInfo[playerid][pAdmin]){
    SendClientMessage(playerid, COLOR_GRAD2, "Du kannst diesen Spieler nicht timebannen, da er ein höheres Adminlevel hat als du!");
    return 1;
    }
    tban(pID,grund,dauer,playerid);
    return 1;
    }
    return 1;
    }
    Stock tban:
    stock tban(playerid, str[], dauer, admin){
    new timestamp;
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    new name[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerName(admin, adminname, sizeof(adminname));
    format(str, sizeof(str),"AdmCmd: %s wurde von %s für %i Minuten gebannt. Grund: %s", name, adminname, dauer, str);
    SendClientMessageToAll(ROT,str);
    Kick(playerid);
    new pfad[MAX_PLAYER_NAME+16];
    format(pfad, sizeof(pfad), "/accounts/%s.ini", name);
    dini_IntSet(pfad, "tbanned", timestamp);
    return 1;
    }
    OnPlayerConnect
    new timestamp = gettime();
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new pfad[MAX_PLAYER_NAME+16];
    format(pfad, sizeof(pfad), "accounts/%s.ini", name);
    new bistgebannt = dini_Int(pfad, "tbanned");
    if(timestamp < bistgebannt)
    {
    new differenz = bistgebannt - timestamp;
    new minuten = differenz / 60;
    new str[64];
    format(str,sizeof(str),"Du bist noch %i Minuten gebannt!",minuten);
    SendClientMessage(playerid,0xFAFAFAFF,str);
    Kick(playerid);
    }
    Ich denke das ist wieder was total simples auf das ich einfach grade nicht komme. ^^

  • if(sscanf(params, "uis", pID, grund,dauer)) return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Dauer (in Minuten)] [Grund]");


    Ist mir beim überfliegen aufgefallen


    Du packst den Grund in ein Integer und die Dauer in einen string

  • Das ist kein Bug das wurde absichtlich so geändert das Kick quasi eine "höhere abarbeites Priorität" hat als zb SendClientMessage


    "glaube ich" sage ich da mal nur. Ist mir eigtl relaitv egal weshalb, meine Lösung funktioniert.



    Und mein 1. Beitrag im Thema bezieht auf die Tatsache das kein Grund angezeigt wird by the way da ichs vergessen habe zu erwähnen.