ID Bug beim Kicken

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
  • Hallo Ich habe ein Problem und zwar wenn mehr als etwa 5 Spieler auf dem Server sind und ich zbs. Id 3 Kicken will wird immer jmd anderst gekickt immer der falsche wird gekickt woran liegt das??


    Hier der Befehl:



    dcmd_kick(playerid, params[])
    {
    levelerror(3);
    if(sscanf(params, "us[200]", plid, estring)) return SendErrorMessage(playerid, "Benutze: /kick <ID> <Grund>");
    if (!IsPlayerConnected(plid)) return SendErrorMessage(playerid, "* Spieler nicht Online!");
    format(ssstring, sizeof(ssstring), "* Du hast {FFFFFF}%s(%d) vom Server gekickt!", PlayerName(plid), plid);
    SendClientMessage(playerid, 0x66FF33, ssstring);
    format(largestring, sizeof(largestring), " %s(%d) hat dich vom Server gekickt \r\nGrund: %s", escpname(playerid), playerid, estring);
    ShowPlayerDialog(plid, DIALOG_KICK, DIALOG_STYLE_MSGBOX, "Du wurdest vom Server gekickt!", largestring, "Ok", "Verlassen");
    TogglePlayerControllable(plid,false);
    Kick(plid);
    return 1;
    }


    plid ist oben schon definiert im script

  • Level error prüft ob der Spieler Admin ist und das funktioniert also du meinst PLID?
    hier:


    ganz oben new plid;


    gleiches Problem habe ich auch mit diesem befehl immer wenn mehr als 5 oder 10 spieler drauf sind buggen diese befehle rum...



    dcmd_setlevel(playerid, params[])
    {
    new Level;
    levelerror(5);
    if(sscanf(params, "ud", plid, Level)) return SendErrorMessage(playerid, "Benutze: /setlevel <ID> <Level>");
    if (Level < 0 || Level > 5) return SendErrorMessage(playerid, "* Level 1 - 5 wählen!");
    format(Query, sizeof(Query), "UPDATE `playerinfo` SET `adminlvl` = %d WHERE `user` = '%s'", Level, escpname(plid));
    mysql_query(Query);
    mysql_free_result();
    format(ssstring, sizeof(ssstring), "Du hast {FF00AA}%s(%d){FFFFFF} Level auf %d gesetzt!", PlayerName(plid), plid, Level);
    SendClientMessage(playerid, 0xFFFFFF, ssstring);
    if(GetPVarInt(plid, "AdminLevel") < Level) format(ssstring, sizeof(ssstring), "* Du wurdest {CC00FF}Befördert{FFFFFF} zum Level %d von %s(%d)", Level, PlayerName(playerid), playerid);
    if(GetPVarInt(plid, "AdminLevel") > Level) format(ssstring, sizeof(ssstring), "* Du wurdest {FF00AA}Degradiert{FFFFFF} zum Level %d von %s(%d)", Level, PlayerName(playerid), playerid);
    SendClientMessage(plid, 0xFFFFFF, ssstring);
    SetPVarInt(plid, "AdminLevel", Level);
    return 1;
    }

  • Ich könnte dir mein Kicksystem hier anbieten, ist aber in OCMD finde ocmd einfach besser, weiß nicht woran es liegt :D


    Falls du es willst hier:




    ocmd:kick(playerid,params[]){ new Reason[256],pID; if(sSpieler[playerid][Adminlevel] < 1) { return SendClientMessage(playerid,ROT,"Du bist kein Admin!"); } if(sscanf(params,"us",pID,Reason)) { return SendClientMessage(playerid,WEIß,"Benutzung: /kick [playerid] [Grund]"); } if(!IsPlayerConnected(pID)) { return SendClientMessage(playerid,ROT,"Dieser Spieler ist nicht online!"); } if(sSpieler[playerid][Adminlevel] < sSpieler[pID][Adminlevel]) { return SendClientMessage(playerid,ROT,"Du kannst keinen Admin kicken der mehr rechte als du besitzt!"); } new name[MAX_PLAYER_NAME],string[256]; GetPlayerName(pID,name,sizeof(name)); new Aname[MAX_PLAYER_NAME]; GetPlayerName(playerid,Aname,sizeof(Aname)); format(string,sizeof(string),"%s hat %s vom Server gekickt. Der Grund: %s",Aname,name,Reason); SendClientMessageToAll(ROT,string); Kick(pID); return 1;}



    Kannst es auch einfach in DCMD umwandeln, ist ja nichts schweres.

  • was mich noch an dem Problem interessiert ist es es random oder kann man sagen das es ein bestimmten wert zwischen der geschriebenen Id also plid und der id welche es ab bekommtweil eins kann man schonmal sagen das es eine Id verschiebung ist