Wie erstelle ich /kick

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
  • wie erstelle ich kick einfaches cmd also ohne etwas besondern sollte net nur admin können ;) vorerst


    ich habe 5 errors


    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(129) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(132) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(135) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(137) : error 021: symbol already defined: "SendClientMessage"
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(137 -- 140) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(276) : warning 203: symbol is never used: "ReturnUser"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    5 Errors.



    in diesen zeilen


    if(strcmp(cmd, "/kick", true) == 0)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_RED, "BENUTZUNG: /kick [playerid/playername]");
    return 1;
    }
    Kick(ReturnUser(tmp));
    SendClientMessage(playerid, COLOR_RED, "Wurde gekickt!");
    }
    return 1;
    }


    und die 276 gibt es net die ist die unterste

    Einmal editiert, zuletzt von Edik018 ()

  • if(strcmp(strget(cmdtext,0),"/kick",true) == 0)
    {
    if(!IsPlayerConnected(playerid))
    {
    SendClientMessage(playerid,COLOR_GREY,"Diesen Spieler gibt es nicht.");
    return 1;
    }
    if(Spieler[playerid][Admin] >= 1 )
    {
    if(!strlen(strget(cmdtext,1)) || !strlen(strget(cmdtext,2)))
    {
    SendClientMessage(playerid,COLOR_YELLOW,"Verwendung: /kick [spielerid][Grund]");
    return 1;
    }
    new msg1[200];
    new msg2[200];
    new ziel = strval(strget(cmdtext,1));
    new opfer[MAX_PLAYER_NAME];
    new spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid,spieler,sizeof(spieler));
    GetPlayerName(ziel,opfer,sizeof(opfer));
    format(msg1,sizeof(msg1),"** %s wurde von %s gekickt. (Grund: %s)",opfer,spieler,cmdtext[8]);
    format(msg2,sizeof(msg2),"** Du wurdest von %s gekickt. (Grund: %s)",spieler,cmdtext[8]);
    SendClientMessage(ziel,COLOR_LIGHTRED,msg2);
    Kick(ziel);
    SendClientMessageToAll(COLOR_LIGHTRED,msg1);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAD2,"Du darfst diesen Command nicht nutzen!");
    }
    return 1;
    }

  • Welches ist die Zeile 276?! xD

  • versuchs mal so! so hab ich es :


    if(strcmp("/kick", cmdtext, true, 5) == 0) //normal command - unfortunately, the cellmax is needed
    {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Dieser Befehl ist nur für Admins!");
    new tmp[128]; //create a tmp, just like strtok
    tmp = zcmd(1, cmdtext); //the "1" is the position of the var - see next example
    if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Du hast keine ID angegeben!"); //check string length, just like strtok
    Kick(strval(tmp)); //kick the value of the tmp string
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFFF00FF, "Dieser Befehl ist nur für Admins!");
    return 1;
    }


    ist aber mit rcon !


    hier ohne rcon:


    if(strcmp("/kick", cmdtext, true, 5) == 0) //normal command - unfortunately, the cellmax is needed
    {
    new tmp[128]; //create a tmp, just like strtok
    tmp = zcmd(1, cmdtext); //the "1" is the position of the var - see next example
    if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Du hast keine ID angegeben!"); //check string length, just like strtok
    Kick(strval(tmp)); //kick the value of the tmp string
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFFF00FF, "Dieser Befehl ist nur für Admins!");
    return 1;
    }

    Selfmade Reallife Server:IIIIIIIIIIIIIIIIIII 5%

  • C:\Users\BceX\Desktop\GTA\pawno\new.pwn(129) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(132) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(133) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(135) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(136) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(272) : warning 203: symbol is never used: "tmp"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    5 Errors.

  • Was benutzt du denn für ein GameMod?
    Ich hab hier mal den CMD aus meinen GodFather:
    if(strcmp(cmd, "/kick", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /kick [playerid/PartOfName] [reason]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if (PlayerInfo[playerid][pAdmin] >= 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, "USAGE: /kick [playerid/PartOfName] [reason]");
    return 1;
    }
    new year, month,day;
    getdate(year, month, day);
    format(string, sizeof(string), "AdmCmd: %s was kicked by %s, reason: %s (%d-%d-%d)", giveplayer, sendername, (result),month,day,year);
    KickLog(string);
    Kick(giveplayerid);
    format(string, sizeof(string), "AdmCmd: %s was kicked by %s, reason: %s", giveplayer, sendername, (result));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    return 1;
    }
    }
    }
    else
    {
    format(string, sizeof(string), " %d is not an active player.", giveplayerid);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    }
    }
    return 1;
    }

  • Hier mit Dini Speicherung etc


    if(strcmp(cmd, "/kick", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 1) return DenyMessage(playerid, 1);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /kick [SpielerID] [Grund]");
    giveplayerid = ReturnUser(tmp);
    if(giveplayerid == playerid) return SendClientMessage(playerid, COLOR_BRIGHTRED, "Du kannst dich nicht selber Kicken!");
    if(PlayerInfo[playerid][pAdmin] < PlayerInfo[giveplayerid][pAdmin]) return SendClientMessage(playerid, COLOR_BRIGHTRED, "Du kannst keinen Höherrangigen Admin kicken !");
    if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_WHITE, "Kein Spieler mit angegebender ID Online!");
    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)) return SendClientMessage(playerid, COLOR_WHITE, "Benutze: /kick [SpielerID] [Grund]");
    new year, month,day;
    getdate(year, month, day);
    format(string, sizeof(string), "%s wurde von %s gekickt Grund: [%s]", giveplayer, sendername, (result));
    SendClientMessageToAll(COLOR_BRIGHTRED, string);
    Kick(giveplayerid);
    format(string, sizeof(string), "%s wurde gekickt von %s. Grund:(%s) (%d-%d-%d)", giveplayer, sendername, (result),month,day,year);
    KickLog(string);
    ServerInfo[TotKicks] ++;
    dini_IntSet(SFile, "Kicks", ServerInfo[TotKicks]);
    return 1;
    }

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



    unter onplayercommandtext



    {
    dcmd(kick,4,cmdtext);
    return 0;
    }
    dcmd_kick(playerid,params[]) {
    new
    sGrund[128],
    pID;
    if(sscanf(params, "ds",pID,sGrund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] [grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    new
    ThePlayer[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
    format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund);
    Kick(pID);
    return 1;
    }
    */



    und um dcmd zu definieren noch das einfach ganz unten ins script reinkopieren das is die definierung



    /*----------------------------------------------------------------------------*-
    Function:
    sscanf
    Params:
    string[] - String to extract parameters from.
    format[] - Parameter types to get.
    {Float,_}:... - Data return variables.
    Return:
    0 - Successful, not 0 - fail.
    Notes:
    A fail is either insufficient variables to store the data or insufficient
    data for the format string - excess data is disgarded.
    A string in the middle of the input data is extracted as a single word, a
    string at the end of the data collects all remaining text.
    The format codes are:
    c - A character.
    d, i - An integer.
    h, x - A hex number (e.g. a colour).
    f - A float.
    s - A string.
    z - An optional string.
    pX - An additional delimiter where X is another character.
    '' - Encloses a litteral string to locate.
    u - User, takes a name, part of a name or an id and returns the id if they're connected.
    Now has IsNumeric integrated into the code.
    Added additional delimiters in the form of all whitespace and an
    optioanlly specified one in the format string.
    -*----------------------------------------------------------------------------*/
    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {
    new changestr[16], changepos = 0, strpos = stringPos;
    while(changepos < 16 && string[strpos] && string[strpos] != delim)
    {
    changestr[changepos++] = string[strpos++];
    }
    changestr[changepos] = '\0';
    setarg(paramPos,0,_:floatstr(changestr));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }



    und zu den defines noch



    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0)&& (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1



    das waS ICH jetzt geschrieben hab, kannsch reinkopieren und schon hast n kickbefehl

  • Ich möchte Selfmade machen ;) ich versuchs ;)


    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(132) : error 055: start of function body without function header
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(134) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(565) : warning 203: symbol is never used: "dcmd_kick"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.




    {
    dcmd(kick,4,cmdtext);
    return 0; und das ist132 134


    while (delim > ' ');
    return 0;
    } das ist 565 also die letzte wird aber net angezeigt da ist gar nix

    Einmal editiert, zuletzt von Edik018 ()

  • das untere hat damit nichts zu tuhn...wenn du den oberen teil genau so drin hast wie du ihn gepostet hast, haste nur die klammer vergessen




    {
    dcmd(kick,4,cmdtext);
    return 0;
    }




    noch ein tipp...


    mach die commands bei denen mann die id angeben muss in ein filterscript...ich bekomme auch errors wenn ichs in meinen gm reinmach..

  • So hab ich es mit dcmd gelöst, jenachdem wer diesen Befehl benutzen soll, kann man noch eine Abfrage nach dem userLevel einbauen.


    Vorraussetzung ist natürlich, dass Du dcmd und sscanf in deinem Code definiert hast. Falls nicht, findest Du diese im SA-MP Wiki unter:


    http://wiki.sa-mp.com/wiki/Dcmd
    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2)


    http://wiki.sa-mp.com/wiki/Sscanf
    Den Code für sscanf habe ich nicht angefügt, da ich sonst wahrscheinlich die Text Zeile gesprengt hätte.


    Im public OnPlayerCommandText musst Du folgende Zeile einfügen:



    public OnPlayerCommandText(playerid)
    {
    dcmd(kick,4,cmdtext);
    return 0;
    }


    Darunter folgt der Code für den dcmd Befehl:



    dcmd_kick(playerid,params[])
    {
    new idx, str[256];
    if(sscanf(params,"i",idx)) { return SendClientMessage(playerid,COLOR_RED,"/kick <id>"); }
    if(IsPlayerConnected(idx))
    {
    format(str,sizeof(str),"%s hat %s vom Server gekickt!", GetPlayerName(playerid), GetPlayerName(idx));
    SendClientMessageToAll(COLOR_GREY,str);Kick(idx);
    }
    else { SendClientMessage(playerid,COLOR_RED,"Spieler ID ist nicht online!"); }
    return 1;
    }

  • C:\Users\BceX\Desktop\GTA\pawno\new.pwn(125) : error 017: undefined symbol "dcmd"
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(140) : error 055: start of function body without function header
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(141) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(146) : error 010: invalid function or declaration
    C:\Users\BceX\Desktop\GTA\pawno\new.pwn(559) : warning 203: symbol is never used: "dcmd_kick"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.

  • Du musst schon die Definition von dcmd im Script einfügen, das besagt nämlich die erste Fehlermeldung. Und dcmd_kick darf sich N I C H T im OnPlayerCommandText befinden, sondern darunter. Ich vermute mal, dort könnte der Fehler liegen.

  • danke für die mühe habe ne einfacher lösung ^^


    ist aber net nur für admins


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new giveplayerid;



    if (strcmp("/kick", cmdtext, true) == 0)
    {
    SendClientMessageToAll(0x2641FEAA, " Ein Spieler wurde soeben gekickt ");
    Kick(giveplayerid);
    }
    return 1;
    }