zcmd /kick doesnt works
#1

i've got this command:
pawn Код:
CMD:kick(playerid, params[])
{
    new tmp[256], tmp2[256],Index;
    tmp = strtok(params,Index);
    tmp2 = strtok(params,Index);

    if (pLevel[playerid] <= 0)
    {
        SendClientMessage(playerid, COLOR_RED, "SERVER: Unknown command.");
    }
    else
    {
        new player,playername[24],playername2[24],string[128];
        if(sscanf(params,"us",player,string))return SendClientMessage(playerid,COLOR_GREEN,"USAGE: /kick [PlayerName/ID] [Reason]");
        GetPlayerName(player,playername,24);
        GetPlayerName(playerid,playername2,24);
        format(string,sizeof(string),"%s have been kicked by %s. Reason: %s.",playername2,playername,string);
 
        SendClientMessageToAll(COLOR_GREEN, string);
        Kick( strval (params));
    }
    return true;
}
Does anybody knows what's wrong?
I haven't got sscanf
Reply
#2

I don't think zcmd works with strtok. You will need to get sscanf
Reply
#3

where?
But, i've got this command working:
pawn Код:
CMD:settime(playerid, params[])
{
    if (pLevel[playerid] >= 1)
    if (strval(params) >= 24)
    {
    SendClientMessage( playerid, 0xFF0000FF, "USAGE: /settime <0/23>!" );
    }
    else
    {
    new tmp[256], tmp2[256],Index;
    tmp = strtok(params,Index);
    tmp2 = strtok(params,Index);

    SetWorldTime(strval(params));
    new string[256];
        format(string, sizeof(string), "The time now is: %d:00", strval(params));
    SendClientMessage(playerid, 0xDAA520FF, string);
    }
    return 1;
}
Reply
#4

pawn Код:
*----------------------------------------------------------------------------*-
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.
    &#39;' - Encloses a litteral string to locate.
    u - User, takes a name, part of a name or an id and returns the id if they&#39;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 = &#39; ';
    while (string[stringPos] && string[stringPos] <= &#39; ')
    {
        stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
        switch (format[formatPos++])
        {
            case &#39;\0':
            {
                return 0;
            }
            case &#39;i', 'd':
            {
                new
                    neg = 1,
                    num = 0,
                    ch = string[stringPos];
                if (ch == &#39;-')
                {
                    neg = -1;
                    ch = string[++stringPos];
                }
                do
                {
                    stringPos++;
                    if (&#39;0' <= ch <= '9')
                    {
                        num = (num * 10) + (ch - &#39;0');
                    }
                    else
                    {
                        return -1;
                    }
                }
                while ((ch = string[stringPos]) > &#39; ' && ch != delim);
                setarg(paramPos, 0, num * neg);
            }
            case &#39;h', 'x':
            {
                new
                    num = 0,
                    ch = string[stringPos];
                do
                {
                    stringPos++;
                    switch (ch)
                    {
                        case &#39;x', 'X':
                        {
                            num = 0;
                            continue;
                        }
                        case &#39;0' .. '9':
                        {
                            num = (num << 4) | (ch - &#39;0');
                        }
                        case &#39;a' .. 'f':
                        {
                            num = (num << 4) | (ch - (&#39;a' - 10));
                        }
                        case &#39;A' .. 'F':
                        {
                            num = (num << 4) | (ch - (&#39;A' - 10));
                        }
                        default:
                        {
                            return -1;
                        }
                    }
                }
                while ((ch = string[stringPos]) > &#39; ' && ch != delim);
                setarg(paramPos, 0, num);
            }
            case &#39;c':
            {
                setarg(paramPos, 0, string[stringPos++]);
            }
            case &#39;f':
            {
 
                new changestr[16], changepos = 0, strpos = stringPos;  
                while(changepos < 16 && string[strpos] && string[strpos] != delim)
                {
                    changestr[changepos++] = string[strpos++];
                }
                changestr[changepos] = &#39;\0';
                setarg(paramPos,0,_:floatstr(changestr));
            }
            case &#39;p':
            {
                delim = format[formatPos++];
                continue;
            }
            case &#39;\'':
            {
                new
                    end = formatPos - 1,
                    ch;
                while ((ch = format[++end]) && ch != &#39;\'') {}
                if (!ch)
                {
                    return -1;
                }
                format[end] = &#39;\0';
                if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
                {
                    if (format[end + 1])
                    {
                        return -1;
                    }
                    return 0;
                }
                format[end] = &#39;\'';
                stringPos = ch + (end - formatPos);
                formatPos = end + 1;
            }
            case &#39;u':
            {
                new
                    end = stringPos - 1,
                    id = 0,
                    bool:num = true,
                    ch;
                while ((ch = string[++end]) && ch != delim)
                {
                    if (num)
                    {
                        if (&#39;0' <= ch <= '9')
                        {
                            id = (id * 10) + (ch - &#39;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] = &#39;\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 &#39;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, &#39;\0');
            }
            default:
            {
                continue;
            }
        }
        while (string[stringPos] && string[stringPos] != delim && string[stringPos] > &#39; ')
        {
            stringPos++;
        }
        while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= &#39; '))
        {
            stringPos++;
        }
        paramPos++;
    }
    do
    {
        if ((delim = format[formatPos++]) > &#39; ')
        {
            if (delim == &#39;\'')
            {
                while ((delim = format[formatPos++]) && delim != &#39;\'') {}
            }
            else if (delim != &#39;z')
            {
                return delim;
            }
        }
    }
    while (delim > &#39; ');
    return 0;
}
https://sampwiki.blast.hk/wiki/Fast_Commands

sscanf code of it:
pawn Код:
CMD:settime(playerid, params[])
{
  new time;
  if (pLevel[playerid] >= 1) {
    if (sscanf(params,"d",time)) {
      SendClientMessage( playerid, 0xFF0000FF, "USAGE: /settime <0/23>!" );
    }
    else {
      SetWorldTime(time);
      new string[128];
      format(string, sizeof(string), "The time now is: %d:00", time);
      SendClientMessage(playerid, 0xDAA520FF, string);
    }
    }

    return 1;
  }
Reply
#5

well,
i want to use strtok?
do i have to download sscanf?
Reply
#6

Quote:
Originally Posted by {Awaran};
I don't think zcmd works with strtok. You will need to get sscanf
And why wouldn't it ?
A string is a string, no matter if you get it via OnPlayerCommandText, dcmd, zcmd, GetPlayerName or even GetServerVarAsString

And no, you don't need sscanf for strtok to work
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)