sscanf not working
#1

Hello all!
Before you scream at me for posting a probably common question, I'd like to say I would have searched prior to posting, but the search feature seems to have been disabled for me. So I suppose me posting this thread is a consequence of being denied access to the search engine. >.< I tried ****** though, but that didn't bring much

Now we got that cleared up, let's get to business
I've been following this tutorial: https://sampwiki.blast.hk/wiki/Fast_Commands
So far every thing works great, except when it comes to sscanf.
When I try compile the code below:

Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(givecash, 8, cmdtext);
	return 0;
}

dcmd_givecash(playerid, params[])
{
	new
		giveplayerid,
		amount;
	if (sscanf(params, "ud", giveplayerid, amount)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /givecash [playerid/partname] [amount]");
	else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Player not found");
	else if (amount > GetPlayerMoney(playerid)) SendClientMessage(playerid, 0xFF0000AA, "Insufficient Funds");
	else
	{
		GivePlayerMoney(giveplayerid, amount);
		GivePlayerMoney(playerid, 0 - amount);
		SendClientMessage(playerid, 0x00FF00AA, "Money sent");
		SendClientMessage(giveplayerid, 0x00FF00AA, "Money received");
	}
	return 1;
}
It returns this error:
C:\Documents and Settings\reg\Desktop\samp\filterscripts\cash.pwn(1 73) : error 017: undefined symbol "sscanf"


The only thing I can think of is they forgot to mention an include, or I overlooked it a few times lol
I'm using Pawn compiler 3.2.3664, Windows XP SP2, .Net Framwork 3.5
Reply
#2

Try pasting this code at the bottom of your script. https://sampwiki.blast.hk/wiki/Sscanf
I would usually just tell you to search, but i appreciate you saying
Quote:

Before you scream at me for posting a probably common question, I'd like to say I would have searched prior to posting, but the search feature seems to have been disabled for me.

pawn Код:
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':
            {
                setarg(paramPos, 0, _:floatstr(string[stringPos]));
            }
            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;
}
Reply
#3

Awesome thanks
It compiles without a single error

Just wondering, is it possible to save that text into an include.inc file and use it from there?
If not it's ok, I'm just glad it works lol
Reply
#4

You can save it in include or something.
Reply
#5

Quote:
Originally Posted by $€ЯĢ
You can save it in include or something.
Yea Just tried it... That wasn't so hard lol
This is great
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)