[NICHT ERLEDIGT!] /kick heftig am buggen

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
  • morgen,


    Mein /kick-Befehl ist komplett verbuggt und ich bin völlig durcheinander ^^


    if(!strcmp(strget(cmdtext, 0), "/kick"))
    {
    new pID,grund[25],grund2[25];
    if(IsPlayerConnected(pID))
    {
    if(IsPlayerAdmin(playerid))
    {
    if(sscanf(cmdtext,"us",pID,grund))return SendClientMessage(playerid,KNALLROT,"Benutze /kick ID Grund");
    format(grund,sizeof(grund),"%s wurde von %s gekickt! Grund:%s",pID,playerid,grund);
    format(grund2,sizeof(grund2),"Du wurdest von %s gekickt! Grund: %s",playerid,grund2);
    SendClientMessageToAll(BLAU,grund);
    SendClientMessage(pID,ROT,grund2);
    Kick(pID);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,KNALLROT,"Du bist kein Admin!");
    }
    }
    }


    Errors gibt es keine, aber kicken tut er auch niemanden wtf?
    Wenn ich jemanden kicken will, kommt nur folgende Meldung:

    Zitat

    [12:19:08] ÿ wurde von gekickt! Gr


    So und nicht anders..


    Kann mir bitte jemand einen /kick-Befehl OHNE ocmd/dcmd schreiben?


    Achja, man sollte sich nicht selbst kicken dürfen ^^

    Ich hab DoodleJump zuende gespielt oO

    Einmal editiert, zuletzt von Doodle ()

  • Ich habe ihn dir mal Komplett umgeschrieben so müsste er nun gehen.


    if(!strcmp(strget(cmdtext, 0), "/kick"))
    {
    new pID,string[128],string2[128],grund[25];
    if(IsPlayerConnected(pID))
    {
    if(IsPlayerAdmin(playerid))return SendClientMessage(playerid,KNALLROT,"Du bist kein Admin!");
    {
    if(sscanf(cmdtext,"us",pID,grund))return SendClientMessage(playerid,KNALLROT,"Benutze /kick ID Grund");
    format(string,sizeof(string),"%s wurde von %s gekickt! Grund: %s",pID,playerid,grund);
    format(string2,sizeof(string2),"Du wurdest von %s gekickt! Grund: %s",pID,grund);
    SendClientMessageToAll(BLAU,string);
    SendClientMessage(playerid,ROT,string2);
    Kick(pID);
    return 1;
    }
    }
    }
    return 1;




    MFG Equ

    Einmal editiert, zuletzt von Equ ()

  • SRY LEUTE! Hab aus Versehen auf Thema erledigt oderso geklickt X(


    Zum Thema:

    Der Platz im Array "grund" ist zu klein (25). Mach das mal größer, da soll ja der Text reinpassen.


    Hab's jetzt so gemacht wie bei Equ, also Strings auf 128.
    Leider kommt jetzt fast die selbe Meldung:

    Zitat

    [12:36:10] ÿ wurde von gekickt! Grund:Doodle lol


    Dann ist mir folgendes in der Konsole aufgefallen:

    Zitat

    [12:36:10] sscanf warning: Strings without a length are deprecated, please add a destination size.

    Ich hab DoodleJump zuende gespielt oO

  • Ganz einafch, bei der Zeile:


    format(grund,sizeof(grund),"%s wurde von %s gekickt! Grund:%s",pID,playerid,grund);
    format(grund2,sizeof(grund2),"Du wurdest von %s gekickt! Grund: %s",playerid,grund2);


    Versuchst du einen String anzuzeigen, allerdings ist die playerid eine Zahl.
    Das funktioniert nicht.
    Entweder du änderst %s in %d um un lässt die ID anzeigen oder du fügst.

    new oname[MAX_PLAYER_NAME];
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(pID,oname,sizeof(oname));
    GetPlayerName(playerid,aname,sizeof(aname));
    format(grund,sizeof(grund),"%s wurde von %s gekickt! Grund %s",oname,aname,grund);


    Das anstatt ein, nun müsste der Name angezeigt werden.

  • Äh wenn man Kick(pID); hinschreibt dann schon o.o


    //Edit hier die volle Funktion


    if(!strcmp(strget(cmdtext, 0), "/kick"))
    {
    new pID,grund[128],grund2[125],pname[MAX_PLAYER_NAME],oname[MAX_PLAYER_NAME];
    if(IsPlayerConnected(pID))
    {
    if(IsPlayerAdmin(playerid))
    {
    if(sscanf(cmdtext,"us",pID,grund))return SendClientMessage(playerid,KNALLROT,"Benutze /kick ID Grund");
    new oname[MAX_PLAYER_NAME];
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(pID,oname,sizeof(oname));
    GetPlayerName(playerid,aname,sizeof(aname));
    format(grund,sizeof(grund),"%s wurde von %s gekickt! Grund %s",oname,aname,grund);
    format(grund2,sizeof(grudn2),"Du wurdest von %s gekickt! Grund: %s",aname,grund);
    SendClientMessageToAll(BLAU,grund);
    SendClientMessage(pID,ROT,grund2);
    Kick(pID);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,KNALLROT,"Du bist kein Admin!");
    }
    }
    }


    So müsste es funktionieren glaube ich...

  • Wird der Typ dann überhaupt gekickt?


    Ne, irgendwie nicht.. :S


    Also mein Code sieht jetzt so aus:
    if(!strcmp(strget(cmdtext, 0), "/kick"))
    {
    new pID,grund[64];
    if(IsPlayerConnected(pID))
    {
    if(IsPlayerAdmin(playerid))
    {
    if(sscanf(cmdtext,"us",pID,grund))return SendClientMessage(playerid,KNALLROT,"Benutze /kick ID Grund");
    new oname[MAX_PLAYER_NAME];
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(pID,oname,sizeof(oname));
    GetPlayerName(playerid,aname,sizeof(aname));
    format(grund,sizeof(grund),"%s wurde von %s gekickt! Grund %s",oname,aname,grund);
    //format(string2,sizeof(string2),"Du wurdest von %s gekickt! Grund: %s",pID,grund);
    SendClientMessageToAll(BLAU,grund);
    //SendClientMessage(playerid,ROT,string2);
    Kick(pID);
    return 1;
    }
    }
    }
    Errors: 0
    Aber wenn ich ingame /kick ID/Name Grund eingebe, kommt folgendes:

    Zitat

    [12:54:07] wurde von Doodle gekickt! Grund Doodle lol


    Ich kicke mich selbst, vielleicht zeigt er deshalb den ersten Namen nicht an, aber der Rest ist total buggy(Grund = Name+Grund).


    Vielleicht gibt's noch Varianten mit strcmp anstatt mit strfind? ^^


    also ungefähr so:
    if(strcmp("/kick",cmdtext,true,5)==0)
    {
    //blabla
    }
    Nur da hat bei mir NICHTS getan, Errors ohne Ende

    Ich hab DoodleJump zuende gespielt oO

  • Holl dir OCMD ist viel viel Besser & einfaher zu verstehen und leicher :D


    Hier ist ma mein Befehl ( musst du ggf an deiner Adminabfrage & Farben anpassen.. )



    ocmd:kick(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2000))return SendClientMessage(playerid,ROT,"Du Bist Kein Admin.");
    new pID, Grund[128],string[128],string2[128];
    if(sscanf(params,"us",pID,Grund))return SendClientMessage(playerid,ORANGE,"/kick [Name/ID] [Grund]");
    else
    if(playerid == pID) return SendClientMessage(playerid,DUNKELROT,"Du kannst dich doch nicht selber Kicken..");
    if(IsPlayerConnected(playerid))return SendClientMessage(playerid,ORANGE,"Spieler ist nicht Online");
    {
    format(string,sizeof(string),"Info: %s wurde vom Admin %s gekickt. [Grund: %s]",SpielerName(pID),SpielerName(playerid),Grund);
    SendClientMessageToAll(ORANGE,string);
    format(string2,sizeof(string2),"Du wurdest vom Admin %s Gekickt. [Grund: %s]",SpielerName(pID),Grund);
    SendClientMessage(pID,ORANGE,string2);
    Kick(pID);
    }
    return 1;
    }




    MFG Equ ;)

  • Wieso nimmste nich einfach ocmd her ^^ ?


    Weil ocmd doch soetwas wie einen Filter hat, mit dem man die Befehle auch nur so schreiben kann, wie sie gescriptet worden sind, oder irre mich mich da? xD


    Klatsch mir doch mal deine Teamviewerdaten ins Gesicht :)


    Würde ich sehr gerne, aber mein Internet ist zu langsam dafür.. Du musst dann ca ~5 Sekunden pro Bild warten (5kb/s im Upload) ;(

    Ich hab DoodleJump zuende gespielt oO

  • Weil ocmd doch soetwas wie einen Filter hat, mit dem man die Befehle auch nur so schreiben kann, wie sie gescriptet worden sind


    Was zur Hölle?
    Wenn du einmal mit OCMD scriptest, wirst du nie mehr Probleme haben!

    ocmd:kick(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Das darfst du nicht.");
    new pID, reason[128], string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,Lightrot,"Benutze: /kick [ID] [GRUND]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gekickt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(Lightrot,string);
    Kick(pID);
    return 1;
    }



    So einfach ist das!


    lg

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Die ganzen a/b/c/o/z/whatevercmd Scripts sind für faule Leute.
    Die richtig harten Jungs arbeiten noch mit strcmp :D


    Nein, also so n CommandProcessor ist schon ne tolle Sache, allerdings ist der nicht die Lösung für alle Probleme.

  • Dann ist mir folgendes in der Konsole aufgefallen:


    Wenn du das in der Konsole bekommst solltest du schleunigst mal einen wert in dein sscanf packen


    -> if(sscanf(params,"us[hier die länge des strings]",pID,Grund))
    sonst arbeitet sscanf nicht wie es soll und macht was es will

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • -> if(sscanf(params,"us[hier die länge des strings]",pID,Grund))
    sonst arbeitet sscanf nicht wie es soll und macht was es will


    Danke, das Problem ist gelöst ^^


    Jetzt habe ich wieder meinen ersten Code genommen und leicht abgeändert:
    if(strcmp("/kick",cmdtext,true,10)==0)
    {
    new pID,grund[128];
    if(IsPlayerConnected(pID))
    {
    if(IsPlayerAdmin(playerid))
    {
    if(sscanf(cmdtext,"us[128]",pID,grund))return SendClientMessage(playerid,KNALLROT,"Benutze /kick ID Grund");
    format(grund,sizeof(grund)," %s wurde von %s gekickt! Grund:%s",pID,playerid,grund);
    SendClientMessageToAll(BLAU,grund);
    Kick(pID);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,KNALLROT,"Du bist kein Admin!");
    return 1;
    }
    }
    }

    Nur gibt der mir ein "SERVER: Unknown Command" aus wenn ich den Befehl als RCON-Admin ausführe und den Fehler finde ich einfach nicht ._.
    Ich bin voll durcheinander xD


    Schonmal Danke an alle bis hier hin ^^

    Ich hab DoodleJump zuende gespielt oO

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen