Ayuda Expertos SSCANF (Scripters)
#1

Hola amigos!

Hoy traigo una duda un poco molesta, se que es algo muy sencillo de resolver, pero no he dado con el punto (poca informaciуn acerca de SSCANF) por lo que acudo al foro

El problema es el siguiente, en el GM que estoy usando, tienen como base, el SSCANF, que a como la gente lo pinta es lo mejor para este sistema. Pero a mi no me funciona del todo, por ejemplo al momento de yo ingresar un numero (para luego trabajar con el, el sistema no lo detecta)

Me explico un poco mбs. Al momento de yo escribir el comando /vender drogas [cantidad] el Gm no me detecta realmente la cantidad que yo ingrese, por lo que el comando no queda funcional. Este error me sucede con todos los comandos que necesitan una entrada de algъn valor digitado por el usuario.

PHP код:
if(strcmp(x_job,"drugs",true) == 0)
        {
            if(
PlayerInfo[playerid][pDrugs] > 15)
            {
                
format(stringsizeof(string), "** You still have %d grams with you, sell them first !"PlayerInfo[playerid][pDrugs]);
                
SCM(playeridCOLOR_GREYstring);
                return 
1;
            }
            new 
tel;
            new 
price;
            new 
ammount;
            new 
level PlayerInfo[playerid][pDrugsSkill];
            if(
sscanf(params"d"ammount))
            {
                
SCM(playeridCOLOR_GRAD2"USAGE: /get drugs [ammount]");
                return 
1;
            }
            if(
level >= && level <= 50)
            { 
tel 200; if(ammount || ammount 6) { SCM(playeridCOLOR_GREY"** You cant go below 1 or above 6 at your Skill Level!"); return 1; } }
            else if(
level >= 51 && level <= 100)
            { 
tel 150; if(ammount || ammount 12) { SCM(playeridCOLOR_GREY"**  You cant go below 1 or above 12 at your Skill Level!"); return 1; } }
            else if(
level >= 101 && level <= 200)
            { 
tel 100; if(ammount || ammount 20) { SCM(playeridCOLOR_GREY"** You cant go below 1 or above 20 at your Skill Level!"); return 1; } }
            else if(
level >= 201 && level <= 400)
            { 
tel 50; if(ammount || ammount 30) { SCM(playeridCOLOR_GREY"**  You cant go below 1 or above 30 at your Skill Level!"); return 1; } }
            else if(
level >= 401)
            { 
tel 10; if(ammount || ammount 99) { SCM(playeridCOLOR_GREY,"**   You cant go below 1 or above 99 at your Skill Level!"); return 1; } }
            if (
PlayerInfo[playerid][pJob] == && IsPlayerInRangeOfPoint(playerid2523.6057,-1812.9794,6.5713) || IsPlayerInRangeOfPoint(playerid21424.1729,-1317.9955,13.5547))
            {
                
price ammount tel;
                if(
GetPlayerMoney(playerid) > price)
                {
                    
format(stringsizeof(string), "* You bought %d grams for $%d."ammountprice);
                    
SCM(playeridCOLOR_LIGHTBLUEstring);
                    
SafeGivePlayerMoney(playerid, -price);
                    
PlayerInfo[playerid][pDrugs] = ammount;
                }
                else
                {
                    
SCM(playeridCOLOR_GREY"** You cant afford the Drugs !");
                    return 
1;
                }
            }
            else
            {
                
SCM(playeridCOLOR_GREY"** You are not a Drugs Dealer, or not near the Drug Package !");
                return 
1;
            }
        } 
Muchas gracias chicos, espero una respuesta
Reply
#2

El comando no tienes el parameter de "params[]" por eso no funciona. Sugiero que uses zcmd.inc ya que es mucho mas rapido que los comandos de "strcmp".

En cambio asi como lo tienes sera asi:
pawn Код:
if(sscanf(x_job, "i", ammount))
{
    SCM(playerid, COLOR_GRAD2, "USAGE: /get drugs [ammount]");
    return 1;
}
Y no es "ammount" es "amount".
Reply
#3

Prueba asi.
pawn Код:
if(sscanf(params, "{s}d", ammount))
            {
                SCM(playerid, COLOR_GRAD2, "USAGE: /get drugs [ammount]");
                return 1;
            }
Reply
#4

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
Prueba asi.
pawn Код:
if(sscanf(params, "{s}d", ammount))
            {
                SCM(playerid, COLOR_GRAD2, "USAGE: /get drugs [ammount]");
                return 1;
            }
Estas bien mal, "s" es para strings, "d" es para decimales, usa "i" que es para numeros (enteros) y el comando no tiene el parameter de "params[]". Es como si ignorastes mi post anterior totalmente!!!
Reply
#5

El {s} es para que ignore la string y solo obtenga el integer, el d y el i hacen lo mismo, el no esta mostrando el comando completo pero asumo que si esta usando zcmd porque el comando principal es get y drugs viene siendo una opcion del comando get.
Reply
#6

Muchas gracias por la respuesta de todos.

dejo el cуdigo completo.

PHP код:
YCMD:get(playeridparams[], help)
{
    if(
help) return SCM(playeridCOLOR_GREY"Not supported");
    if(
IsPlayerConnected(playerid))
    {
        new 
x_job[128], string[256];
        if(
sscanf(params"s[128]"x_job))
        {
            
SCM(playeridCOLOR_WHITE"|__________________ Get __________________|");
            
SCM(playeridCOLOR_WHITE"USAGE: /get [name]");
            
SCM(playeridCOLOR_GREY"Available names: Drugs, Fuel");
            
SCM(playeridCOLOR_GREEN"|_________________________________________|");
            return 
1;
        }
        if(
strcmp(x_job,"drugs",true) == 0)
        {
            if(
PlayerInfo[playerid][pDrugs] > 15)
            {
                
format(stringsizeof(string), "** You still have %d grams with you, sell them first !"PlayerInfo[playerid][pDrugs]);
                
SCM(playeridCOLOR_GREYstring);
                return 
1;
            }
            new 
tel;
            new 
price;
            new 
ammount;
            new 
level PlayerInfo[playerid][pDrugsSkill];
            if(
sscanf(params"d"ammount))
            {
                
SCM(playeridCOLOR_GRAD2"USAGE: /get drugs [ammount]");
                return 
1;
            }
            if(
level >= && level <= 50)
            { 
tel 200; if(ammount || ammount 6) { SCM(playeridCOLOR_GREY"** You cant go below 1 or above 6 at your Skill Level!"); return 1; } }
            else if(
level >= 51 && level <= 100)
            { 
tel 150; if(ammount || ammount 12) { SCM(playeridCOLOR_GREY"**  You cant go below 1 or above 12 at your Skill Level!"); return 1; } }
            else if(
level >= 101 && level <= 200)
            { 
tel 100; if(ammount || ammount 20) { SCM(playeridCOLOR_GREY"** You cant go below 1 or above 20 at your Skill Level!"); return 1; } }
            else if(
level >= 201 && level <= 400)
            { 
tel 50; if(ammount || ammount 30) { SCM(playeridCOLOR_GREY"**  You cant go below 1 or above 30 at your Skill Level!"); return 1; } }
            else if(
level >= 401)
            { 
tel 10; if(ammount || ammount 99) { SCM(playeridCOLOR_GREY,"**   You cant go below 1 or above 99 at your Skill Level!"); return 1; } }
            if (
PlayerInfo[playerid][pJob] == && IsPlayerInRangeOfPoint(playerid2523.6057,-1812.9794,6.5713) || IsPlayerInRangeOfPoint(playerid21424.1729,-1317.9955,13.5547))
            {
                
price ammount tel;
                if(
GetPlayerMoney(playerid) > price)
                {
                    
format(stringsizeof(string), "* You bought %d grams for $%d."ammountprice);
                    
SCM(playeridCOLOR_LIGHTBLUEstring);
                    
SafeGivePlayerMoney(playerid, -price);
                    
PlayerInfo[playerid][pDrugs] = ammount;
                }
                else
                {
                    
SCM(playeridCOLOR_GREY"** You cant afford the Drugs !");
                    return 
1;
                }
            }
            else
            {
                
SCM(playeridCOLOR_GREY"** You are not a Drugs Dealer, or not near the Drug Package !");
                return 
1;
            }
        } 
Espero lo revisen y me puedan ayudar. De nuevo muchas gracias chicos
Reply
#7

Aver, aqui esta amigo
pawn Код:
YCMD:get(playerid, params[], help){
    if(help) return SCM(playerid, COLOR_GREY, "Not supported");
    new x_job[128], string[256], tel, price, amount, level = PlayerInfo[playerid][pDrugsSkill];
    if(sscanf(params, "s[128]", x_job)){
        SCM(playerid, COLOR_WHITE, "|__________________ Get __________________|");
        SCM(playerid, COLOR_WHITE, "USAGE: /get [name]");
        SCM(playerid, COLOR_GREY, "Available names: Drugs, Fuel");
        SCM(playerid, COLOR_GREEN, "|_________________________________________|");
        return 1;}
    if(strcmp(x_job, "drugs", true) == 0){
        if(PlayerInfo[playerid][pDrugs] > 15){
            format(string, sizeof(string), "** You still have %d grams with you, sell them first!", PlayerInfo[playerid][pDrugs]);
            SCM(playerid, COLOR_GREY, string);
            return 1;}
        if(sscanf(x_job, "i", amount)){
            SCM(playerid, COLOR_GRAD2, "USAGE: /get drugs [amount]");
            return 1;}
        if(level >= 0 && level <= 50)
        { tel = 200; if(amount < 1 || amount > 6) { SCM(playerid, COLOR_GREY, "** You cant go below 1 or above 6 at your Skill Level!"); return 1; } }
        else if(level >= 51 && level <= 100)
        { tel = 150; if(amount < 1 || amount > 12) { SCM(playerid, COLOR_GREY, "**  You cant go below 1 or above 12 at your Skill Level!"); return 1; } }
        else if(level >= 101 && level <= 200)
        { tel = 100; if(amount < 1 || amount > 20) { SCM(playerid, COLOR_GREY, "** You cant go below 1 or above 20 at your Skill Level!"); return 1; } }
        else if(level >= 201 && level <= 400)
        { tel = 50; if(amount < 1 || amount > 30) { SCM(playerid, COLOR_GREY, "**  You cant go below 1 or above 30 at your Skill Level!"); return 1; } }
        else if(level >= 401)
        { tel = 10; if(amount < 1 || amount > 99) { SCM(playerid, COLOR_GREY,"**   You cant go below 1 or above 99 at your Skill Level!"); return 1; } }
        if(!IsPlayerInRangeOfPoint(playerid, 2, 523.6057,-1812.9794,6.5713) || !IsPlayerInRangeOfPoint(playerid, 2, 1424.1729,-1317.9955,13.5547)){
            SCM(playerid, COLOR_GREY, "** You aren't near a Drug Package!");
            return 1;}
        if(PlayerInfo[playerid][pJob] != 4) return SCM(playerid, COLOR_GREY, "** You must be a drug dealer to use this command!");
        if(GetPlayerMoney(playerid) < price) return SCM(playerid, COLOR_GREY, "** You cant afford the Drugs!");
        price = amount * tel;
        format(string, sizeof(string), "* You bought %d grams for $%d.", amount, price);
        SCM(playerid, COLOR_LIGHTBLUE, string);
        SafeGivePlayerMoney(playerid, - price);
        PlayerInfo[playerid][pDrugs] = amount;}
    return 1;}
Reply
#8

Muchas gracias por tu respuesta. Pero el cуdigo sigue aъn sin funcionar... :S

Alguna sugerencia. Gracias
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)