kick Befehl

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, ich versuche mich gerade an einem kick Befehl:
    vielleicht könnt ihr mir weiterhelfen, und auch zeigen wie ich ihn ressourcensparender mache



    Danke im vorraus!

  • Ich verstehe echt nicht, warum sscanf immer falsch eingesetzt wird.


    Bevor du sID verwenden kannst, musst du diese via sscanf herausfinden.


    //e: Hier mal mein kick-Befehl:
    COMMAND:kick(playerid, params[])
    {
    if(GetPVarInt(playerid, "adminscore") >= 1)
    {
    new id, reason[128], string[128];

    if(!sscanf(params, "us", id, reason))
    {
    format(string, sizeof(string), "Türsteher: %s wurde von %s gekickt. - Grund: %s", GetName(id), GetName(playerid), reason);
    SendClientMessageToAll(COLOR_RED, string);
    Kick(id);
    }
    else if(!sscanf(params, "u", id))
    {
    format(string, sizeof(string), "Türsteher: %s wurde von %s gekickt.", GetName(id), GetName(playerid));
    SendClientMessageToAll(COLOR_RED, string);
    Kick(id);
    }
    else
    {
    SendClientMessage(playerid,COLOR_BLUE,"/kick [ID] [Grund]");
    }
    }
    else
    {
    new string[128];

    format(string, sizeof(string), "Türsteher: %s wurde gekickt. - Grund: /kick? Bitch, please!", GetName(playerid));
    SendClientMessageToAll(COLOR_RED, string);
    Kick(playerid);
    }
    }

    Ich bin Dittis Signatur.

  • Hab dir mal ein paar Anmerkungen als Kommentar hinten dran geschrieben was mir so in der schnelle aufgefallen ist, was du ändern solltest.


    ocmd:kick(playerid,params[])
    {
    new string1[128], string2[128];
    new Spielerid[MAX_PLAYER_NAME], sID[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Spielerid,sizeof(Spielerid));
    GetPlayerName(playerid,sID,sizeof(sID)); //Du solltest den Namen vom Spieler der gekickt werden soll erst abfragen wenn dieser auch bestimmt wurde (nach sscanf)
    if(!IsPlayerConnected(sID))return SendClientMessage(Spielerid,Farbe_Rot,"Dieser Spieler befindet sich nicht auf dem Server!"); //Spieler wird immer ID 0 sein wenn die sscanf abfrage danach kommt, da sID noch keinen Wert bekommen hat.
    if(sscanf(params,"u",sID))return SendClientMessage(Spielerid,Farbe_Rot,"BEFEHL: /kick [ID]");
    format(string1,sizeof(string1),"AdmInfo: %s hat %s vom Server gekickt!",Spielerid,sID);
    format(string2,sizeof(string2),"Du wurdest von %s gekickt!",Spielerid);
    if(IstSpielerAdmin(playerid,5))
    {
    Kick(sID); // Du kickst den Spieler bevor du ihm die Nachricht "Du wurdest von XY gekickt!" schickst
    SendClientMessage(sID,Farbe_Rot,string2); // Logischer weise sieht er die Nachricht hier nichtmehr, da er schon gekickt ist.

    for(new i; i < MAX_PLAYERS;i++)
    {
    if(SpielerInfo[i][pAdmin] > 0)
    {
    SendClientMessage(playerid,Farbe_Rot,string1);
    return 1;
    }


    }
    }
    else
    {
    SendClientMessage(playerid,Farbe_Rot,"Du bist nicht berechtigt diesen Befehl zu benutzen!");
    return 1;
    }
    return 1;
    }

  • habe den Befehl jetzt so, bekomme aber noch Errors..


  • Wir versuchen mal, zusammen einen kick-Befehl zu erstellen.
    Was soll der alles machen? So, wie ich es sehe, soll eine Nachricht an den gekickten und an alle Admins geschickt werden.
    Durch das "an alle Admins" wird es durch die for-Schleife schon ressourcenfressend, wieso also nicht an alle schicken?


    Natürlich soll der Spieler gekickt werden, er soll aber noch sehen, warum -> erst die Kick-Msg. schicken, dann kicken.


    Und es sollen nur Admins mit dem Adminlevel 5 dürfen. Wenn du das ganz oben hinschreibst, also bevor du überhaupt Variablen initialisierst, kannst du auch das Ressourcen sparen, da die Variablen nicht erstellt werden, wenn der Spieler kein Admin ist.


    Sind meine Vermutungen soweit richtig?

    Ich bin Dittis Signatur.

  • ocmd:kick(playerid,params[])
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    new name[MAX_PLAYER_NAME];
    new grund[64];
    new string[128];
    new pID;
    new bname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, bname, sizeof(bname));
    GetPlayerName(playerid, name, sizeof(name));
    if(sscanf(params,"is",pID,grund)) return SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /ban [playerid][Grund]");
    format(string,sizeof(string),"[Ban] Admin %s hat Spieler %s gekickt! Grund: %s",bname,name,grund);
    SendClientMessageToAll(COLOR_RED,string);
    Kick(pID);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!");
    }
    return 1;
    }