/ban Mehrere ID's gleichzeitig bannen?

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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 Leute,


    Ich spiel auf nen Server und wundere mich immer wieso gewisse Admins gleich 2-3 Spieler gleichzeitig kicken/bannen.. (Alles passiert in der selben Sekunde)
    Jetzt möchte ich gerne wissen, wie ich einem einfachen Ban/Kick Befehl mit sscanf diese Funktion zuschreiben kann?


    Ein Beispiel Kick Befehl:

    Hoffe jemand kann mir helfen.. ich schätze ich muss irgendwas bei der sscanf-Zeile + pid var ändern.. aber was?

  • new pid2,pid3;
    if(sscanf(params,"uuus",pid,pid2,pid3,grund)) return SendClientMessage(playerid,GRAU,"Verwende /kick [Spieler 1] [Spieler 2] [Spieler 3] Grund");
    KickEx(pid), KickEx(pid2), KickEx(pid3);


    Einfach nach belieben fortsetzen.
    //mit Handy geschrieben

  • @ReborN :huh:
    Dann kann ich ja nur 3 gleichzeitig oder gar nicht bannen/kicken bzw. eine vom Script festgelegte Zahl anstatt so wie es gerade IG nötig ist ..


    @Kayne Ja ich dachte auch das ich mit Befehl A Namen "sammle" und dann über Befehl B alle sanktioniere.



    Aber gibts da keine Möglichkeit alles in einem Befehl zu machen?

  • new pid2,pid3;
    if(sscanf(params,"uuus",pid,pid2,pid3,grund)) return SendClientMessage(playerid,GRAU,"Verwende /kick [Spieler 1] [Spieler 2] [Spieler 3] Grund");
    KickEx(pid), KickEx(pid2), KickEx(pid3);

    So hatte ich es mir auch überlegt, ist aber toaler Schwachsinn ;) , da man Beispielsweise immer 3 IDs angeben muss, aber wenn man nur einen Spieler kicken möchte geht das nicht. Deswegen ist die Möglichkeit nicht die beste, aber leider habe ich gerade auch keine Idee wie man das anders schreiben kann.


    Mit freundlichen Grüßen
    German_ScripterHD

  • Womöglich habe ich zu kompliziert gedacht aber hier mein Ansatz mit optionalen Parametern (ungetestet):


    ocmd:kick(playerid,params[])
    {
    new pID1, pID2, pID3, grund[64];
    if(sscanf(params,"s[64]uU(-1)U(-1)", grund, pID1, pID2, pID3))return SendClientMessage(playerid, COLOR_WHITE, "Verwendung: /kick [Grund] [ID/Name] ([ID/Name]...)");
    new str[128];
    format(str, sizeof(str), "%s hat folgende Spieler gekickt: %s", PlayerName(playerid), PlayerName(pID1));
    if(pID2 != -1) format(str, sizeof(str), "%s, %s", str, PlayerName(pID2));
    if(pID3 != -1) format(str, sizeof(str), "%s, %s", str, PlayerName(pID3));
    format(str, sizeof(str), "%s | Grund: %s", str, grund);
    SendClientMessageToAll(-1, str);
    return 1;
    }


    Erklärungsversuch zur sscanf-Zeile: das Große "U" bedeutet soviel wie dass dieser Parameter optional ist. In der Klammer wird ein Standardwert festgelegt, sollte der Parameter nicht angegeben werden, in diesem Fall -1.
    Anschließend wird geprüft, ob die Parameter != -1 sind, also ob welche angegeben wurden. Allerdings müsstest du hierbei festlegen, wie viele optionale Parameter maximal erlaubt sind (auch wieder bisschen blöd).

  • So hatte ich es mir auch überlegt, ist aber toaler Schwachsinn , da man Beispielsweise immer 3 IDs angeben muss, aber wenn man nur einen Spieler kicken möchte geht das nicht.

    /ban 423 -1 -1 Hier grund überlegen


    if(id2 == -1)
    {
    banusercount -= 1;
    }


    if(id3 == -1)
    {
    banusercount -= 1;
    }


    for(new i=0;i<banusercount;i++)
    {


    }


    Spieler Name[423] wurde gekickt/gebannt (Hier grund überlegen)



    Also bitte...
    @Andi_Miller geht das auch schon mit SSCANF? Cool wusste ich noch garnicht :)

    saphire.one

    Founder