[Hilfe]/kick mit Grund

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
  • Moin Alles zusammen: Ich habe es jetzt wo weit geschafft ein Kick Command auf die Beine zu bekommen
    Das was ich jetzt nicht schaffe ist den kick mit einem Grund anzeige zu verbinden


    dcmd_kick(playerid, params[])
    {
    if(IsPlayerConnected(playerid))
    {
    new id;
    if (strlen(params))
    {
    id = strval(params);
    new name[MAX_PLAYER_NAME];
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,sendername,sizeof(sendername));
    GetPlayerName(id,name,sizeof(name));
    new string[256];
    if(pInfo[id][padmin] > pInfo[playerid][padmin])
    {
    SendClientMessage(playerid, grau, "Info: Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    return 1;
    }
    if (IsPlayerConnected(id))
    {
    format(string, sizeof(string), "Server Info: {FFFFFF}Admin/Mod %s Hat %s gekickt, Grund: ", sendername,name);
    SendClientMessageToAll(rot, string);
    Kick(id);
    }
    else
    {
    SendClientMessage(playerid,tipporange, "Info: {FFFFFF}Player wurde nicht gefunden.");
    }
    }
    else
    {
    SendClientMessage(playerid,tipporange, "Tipp: {FFFFFF}/kick <ID> <Grund>");
    }
    }
    return 1;
    }

    I Love SAMP

  • dcmd_kick(playerid,params[])
    {
    new Spieler,Grund[256],Text[256];
    if(pInfo[id][padmin]<1)return SendClientMessage(playerid,COLOR_TIMESTAMP,"Du bist kein Admin!");
    if(sscanf(params,"us",Spieler,Grund))SendClientMessage(playerid,COLOR_TIMESTAMP,"Tipp: {FFFFFF}/kick <ID> <Grund>");
    if(!IsPlayerConnected(Spieler))return SendClientMessage(playerid,COLOR_TIMESTAMP,"Info: {FFFFFF}Player wurde nicht gefunden.");
    if(pInfo[id][padmin]>pInfo[playerid][padmin])return SendClientMessage(playerid, grau, "Info: Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    format(Text,sizeof Text,"Server Info: {FFFFFF}Admin/Mod %s Hat %s gekickt, Grund: %s",GetName(playerid),GetName(Spieler),Grund);
    SendClientMessageToAll(COLOR_TIMESTAMP,Text);
    Kick(Spieler);
    return 1;
    }


    stock GetName(playerid)
    {
    new Name[28];
    GetPlayerName(playerid,Name,28);
    return Name;
    }


    Ich empfehle die Funktion GetName ins Script einzufügen, da es einfach übersichtlicher ist - und man anstatt jedes mal new Name[];, GetPlayerName() etc. nur GetName(playerid) braucht - da diese Funktion den Spielernamen zurückgibt. Mein Befehl kannst du nur benutzen, wenn du sscanf benutzt - dies empfehle ich, damit sind Parameter in Befehlen einfach - einfach zu erstellen.


    Editierung: Sscanf ist ein Plugin, mit vielen nützlichen Funktionien. Lade dir einfach das Plugin hierherunter, schau in den Hauptthreadfür nützliche Funktionen und binde das Plugin ein - fertig ;)


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.



  • Ich empfehle die Funktion GetName ins Script einzufügen, da es einfach übersichtlicher ist - und man anstatt jedes mal new Name[];, GetPlayerName() etc. nur GetName(playerid) braucht - da diese Funktion den Spielernamen zurückgibt. Mein Befehl kannst du nur benutzen, wenn du sscanf benutzt - dies empfehle ich, damit sind Parameter in Befehlen einfach - einfach zu erstellen.


    Editierung: Sscanf ist ein Plugin, mit vielen nützlichen Funktionien. Lade dir einfach das Plugin hierherunter, schau in den Hauptthreadfür nützliche Funktionen und binde das Plugin ein - fertig ;)


    Man kann es aber auch anders und Ressourcenschonener machen ;)


    Im Script oben
    new PlayerName[MAX_PLAYERS][MAX_PLAYERNAME]
    Bei OnPlayerCOnnect
    GetPlayerName(playerid,PlayerName[playerid],MAX_PLAYER_NAME);


    und wenn du es in einem String brauchst nutzt du einfach:
    PlayerName[playerid]; //Kann auch ne andere ID sein ;)


    lg



  • Das ist allerdings nicht Ressourcenschonender.
    So wird ein großer Speicherplatz schon vorreserviert, der wohl in 90% aller Fälle nie genutzt wird. Bei einem Aufruf einer Funktion, die den Namen zurück gibt, wird weniger Speicherplatz für kürzere Zeit gebraucht.
    Demnach wäre eine Funktion wie die folgende besser:

    stock _GetPlayerName(playerid) {
    new _name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,_name,MAX_PLAYER_NAME);
    return _name;
    }

    Die Benutzung ist ganz einfach:

    printf("Ein Spieler mit dem Namen %s hat mit dem Server verbunden",_GetPlayerName(playerid));

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Hauke, da ist doch nur ein Unterstrich mehr als bei meiner Funktion ? Kein großer Unterschied, oder?!.


    Und mit dem Speicherplatz vorreserviert, kommt drauf an. Ich habe MAX_PLAYERS umdefiniert - sodass nicht zuviel Speicher vorreserviert wird.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Ich habe mir deine Funktion garnicht angesehen, ist aber natürlich das selbe ;)
    Ganz gleich wie groß MAX_PLAYERS bei dir ist. Diese Variante wird immer mehr Ressourcen brauchen. Es sei denn, MAX_PLAYERS ist gleich 1.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.