[AJUDA] sscanf
#1

Estou querendo atualizar meu sscanf mas nao entendi muito bem oq fazer, no 1є passo e no 3є eu entendi, mas no segundo nao!

This behaves exactly as the old sscanf did, just MUCH faster and much more flexibly. To use it add:
pawn Код:
#include <sscanf2>
To your modes and remove the old sscanf. On windows add:
pawn Код:
plugins sscanf
To server.cfg. On Linux add:
pawn Код:
plugins sscanf.so
Reply
#2

Poe isto no final do GM:
PHP код:
stock sscanf(string[], format[], {Float,_}:...)
{
    
#if defined isnull
        
if (isnull(string))
    
#else
        
if (string[0] == || (string[0] == && 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(paramPos0num 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(paramPos0num);
            }
            case 
'c':
            {
                
setarg(paramPos0string[stringPos++]);
            }
            case 
'f':
            {
 
                new 
changestr[16], changepos 0strpos 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(stringformat[formatPos], falsestringPos)) == -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(paramPos0id);
                }
                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 (
Playerplayerid)
                    {
                        
GetPlayerName(playeridnamesizeof (name));
                        if (!
strcmp(namestring[stringPos], trueid))
                        {
                            
setarg(paramPos0playerid);
                            
num true;
                            break;
                        }
                    }
                    if (!
num)
                    {
                        
setarg(paramPos0INVALID_PLAYER_ID);
                    }
                    
string[end] = ch;
                    
#if defined __SSCANF_FOREACH__
                        #undef foreach
                        #undef __SSCANF_FOREACH__
                    #endif
                
}
                
stringPos end;
            }
            case 
's''z':
            {
                new
                    
0,
                    
ch;
                if (
format[formatPos])
                {
                    while ((
ch string[stringPos++]) && ch != delim)
                    {
                        
setarg(paramPosi++, ch);
                    }
                    if (!
i)
                    {
                        return -
1;
                    }
                }
                else
                {
                    while ((
ch string[stringPos++]))
                    {
                        
setarg(paramPosi++, ch);
                    }
                }
                
stringPos--;
                
setarg(paramPosi'\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;

Reply
#3

Da erro fatal no pawno..
Reply
#4

Nгo precisa da stock do sscanf antigo ele quer o novo

Sу por o sscanf.dll na pasta plugins.
Dentro do server.cfg deve ter uma linha plugins se nгo tiver sу criar e adicionar 'sscanf' sem os '
Depois no seu gm/fs sу adicionar a include sscanf2
Reply
#5

Nao sei pq ta dando erro fatal, quando ponho define sscanf2
Reply
#6

Entгo tira a include sscanf2 e coloque:

pawn Код:
native sscanf(const data[], const format[], {Float,_}:...);
native unformat(const data[], const format[], {Float,_}:...) = sscanf;
No tipo do gamemode depois das includes
Reply
#7

Continua erro fatal, diz q o pawno precisa ser fechado ;S
Reply
#8

Me ajude pf
Reply
#9

so existe 3 formas de usar o sscanf...

1) forma
No topo depois dos define, new e forward

pawn Код:
native sscanf(const data[], const format[], {Float,_}:...);
native unformat(const data[], const format[], {Float,_}:...) = sscanf;
2) forma
ou tirando isso e pondo no topo...

pawn Код:
#include <a_samp>
#include <sscanf2>
das duas Formas tem que por No Server

pawn Код:
plugins sscanf
3 Forma a que acho + facil pois nгo nessecita do

pawn Код:
plugins sscanf

e so pegar o que o Shadoww5 escreveu... e jogar no final do GM so aquilo la.. + nada.. pra vc ter uma ideia.. eu pus esse cуdigo na minha ( Reais.inc ) e de la funciona normal... perfeitamente.. sem estar no GM ou FS

espero ter ajudado..

By ApolloRJ
Reply
#10

O que o Shadow postou й muito mais lento do que plugin, e nгo й possнvel ter os 2 a nгo ser que estejam com nomes diferentes. Recomendo que NГO use o cуdigo postado pelo Shadow, mas sim use o plugin, que й uma versгo muito melhor do cуdigo postado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)