Jump to content
  • 0

pomoc -_- problém s sscanf :D


Deejva

Dotaz

Zdravím, už delší dobu si lámu hlavu nad tím, kde je chyba..

Chci si udělat příkaz na změnu barvy na vozidle, takže

if(sscanf(params,"ii",color[0],color[1])) return SendClientMessage(playerid,0xFF0000FF,"Barva: /carcolor <barva> <barva>");

Takhle je to tak, jak to má být, ale musím zadat obě barvy. Pokud chci, že se můžeš zadat pouze jeden parametr, ale můžou i 2, tak bych měl do závorky přidat hodnotu, jakou to bude mít, pokud to nezadam..

takže například

if(sscanf(params,"ii(-1)",color[0],color[1])) return SendClientMessage(playerid,0xFF0000FF,"Barva: /carcolor <barva> <barva>");

a pak si můžu dát, že pokud je color[1] -1, tak se to nastaví na hodnotu color[0]

if(color[1] == -1) color[1] = color[0];

takže takhle by to mělo být tak, že můžu dát 

/Carcolor 3 6 

a mám modro žluté vozidlo ..

a pokud dám 

/carcolor 6

tak mám žluté vozidlo..

 

problém je v tom, že ať to zkouším jakkoliv, tak to nejde, buď se mi vždy hodí jako barva 2 barva černá, nebo mi to pořád píše "použítí: ... "

A tak se ptam, kde je problém.

Používám include sscanf, tam mám pouze toto

stock sscanf(string[], format[], {Float,_}:...)
{
new
formatPos = 0,
stringPos = 0,
paramPos = 2,
paramCount = numargs();
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 (ch >= '0' && ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return 1;
}
}
while ((ch = string[stringPos]) && ch != ' ');
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
ch,
num = 0;
while ((ch = string[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));
}
case ' ':
{
break;
}
default:
{
return 1;
}
}
}
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, string[stringPos++]);
}
case 'f':
{
                new tmp[25];
                strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2);
setarg(paramPos, 0, _:floatstr(tmp));
}
case 's', 'z':
{
new
i = 0,
ch;
if (format[formatPos])
{
while ((ch = string[stringPos++]) && ch != ' ')
{
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] != ' ')
{
stringPos++;
}
while (string[stringPos] == ' ')
{
stringPos++;
}
paramPos++;
}
while (format[formatPos] == 'z') formatPos++;
return format[formatPos];
}

a také používám plugin sscanf..

Zkoušel jsem i hledat něco jiného na stáhnutí tak prosím, zda byste měli nějaké linky na to, v čem je chyba..

 

Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...