Problem mit dem /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
  • Hallo Liebe community


    Ich bin noch sehr neu in sachen Pawn Scripting ich habe folgendes Problem wenn ich den /kick befehl eine geben z.b. /kick [ID] [Grund] dann schmiert immer der Server ab ich habe oft gelesen das man das nicht mit strcmp machen kann sondern mit ocmd und jetz wollte ich gerne wissen wie ich das in ocmd umwandeln kann oder ob vielleicht jemand den befehl unten rein posten kann Wäre echt cool wie gesagt ich bin noch ein Anfänger und weiss daher noch nicht soviel
    Danke schonmal im Vorraus


    MfG TheOneAndOnlY

  • if(strcmp(cmd, "/kick", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /kick [playerid] [Grund]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if (PlayerInfo[playerid][pAdmin] >= 1 || PlayerInfo[playerid][pSupporter] >= 1)
    {
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[64];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(!strlen(result))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /kick [playerid] [Grund]");
    return 1;
    }
    if(PlayerInfo[giveplayerid][pAdmin] > PlayerInfo[playerid][pAdmin])
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    return 1;
    }
    new year, month,day;
    getdate(year, month, day);
    format(string, sizeof(string), "Server: Spieler %s wurde von %s gekickt, Grund: %s (%d-%d-%d)", giveplayer, sendername, (result),month,day,year);
    KickLog(string);
    format(string, sizeof(string), "AdminSystem: %s wurde von %s gekickt, Grund: %s", giveplayer, sendername, (result));
    SendClientMessageToAll(0xFF0019FF, string);
    Kick(giveplayerid);
    return 1;
    }
    }
    }
    else
    {
    format(string, sizeof(string), " %d ist kein aktiver Spieler.", giveplayerid);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    }
    }
    return 1;
    }



    //EDIT


    eig sind da ja noch verrückungen aber die wurden iwie nicht übernommen

  • Ist aber eigentlich nicht schwer ihn umzuwandeln.


    ocmd:kick(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,0xFFA96CFF,"[SERVER]: Du musst mindestens Adminlevel 2 haben.");
    new pID, reason[128],string[128], strx[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,BLAU,"[SERVER]: Benutzung /kick [Id] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xFFA96CFF,"[SERVER]: Der gewählte Spieler ist nicht online.");
    if(isPlayerAnAdmin(pID,1)) return SendClientMessage(playerid,0xFFFFFF,"[SERVER]: Du kannst keine Administratoren kicken.");
    format(string,sizeof(string),"[KICK]: %s wurde von %sgekickt. (Grund: %s)",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0xFFA96CFF,string);
    format(strx,sizeof(strx),"[SERVER]: Du hast %s gekickt.",SpielerName(pID));
    SendClientMessage(playerid,0xFFA96CFF,strx);
    SendClientMessage(pID,0xFFA96CFF,"[KICK]: Du wurdest vom Server gekickt!");
    Kick(pID);
    return 1;
    }


    Evt. brauchst du noch den stock SpielerName und musst das if(!isPlayerAnAdmin(playerid,2)) ändern.

  • :)


    Füg das noch unten im Script ein:


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }

  • Am Besten ganz unten ins Script

  • Das der Server abschmiert liegt aber nicht am der Befehlssprache!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • und an was kann es dann liegen?


    //EDIT


    Ich habe jetz mal Compiled und dabei kamen Folgende errors raus (Wie gesagt ich scripte noch nicht lange)


    C:\Dokumente und Einstellungen\Jonas-Admin\Desktop\itcrafted.pwn(34718) : error 017: undefined symbol "kick"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34720) : error 017: undefined symbol "isPlayerAnAdmin"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34721) : warning 219: local variable "string" shadows a variable at a preceding level
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34722) : error 017: undefined symbol "params"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34724) : error 017: undefined symbol "isPlayerAnAdmin"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34725) : error 017: undefined symbol "SpielerName"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34727) : error 017: undefined symbol "SpielerName"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34733) : warning 225: unreachable code
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(34718) : warning 203: symbol is never used: "ocmd"
    C:\Dokumente und Einstellungen\User\Desktop\itcrafted.pwn(56786) : warning 219: local variable "SpielerName" shadows a variable at a preceding level
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase