duda sscanf / return
#1

Tengo una duda con el "return 1" al momento de usar sscanf, al yo tener un comando asi:

pawn Код:
CMD:vender(playerid, params[])
{
    new item[30],item2,item3,item4;
//
    if(!sscanf(params,"s[32]",item))
    {
        if(strcmp(item,"coche",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender coche");
        }
        if(strcmp(item,"negocio",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender negocio");
        }
        if(strcmp(item,"casa",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender casa");
        }
        if(strcmp(item,"cosecha",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender cosecha");
        }
    }
//
    if(!sscanf(params,"s[32]d",item,item2))
    {
        if(strcmp(item,"pez",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender pez [fish]");
        }
        if(strcmp(item,"bebida",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender bebida [playerid]");
        }
    }
//
    if(!sscanf(params,"s[32]ui",item,item2,item3))
    {
        if(strcmp(item,"arma",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender arma [ID] [Precio]");
        }
        if(strcmp(item,"micoche",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender micoche [ID] [Precio]");
        }
        if(strcmp(item,"micasa",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender micasa [ID] [Precio]");
        }
    }
//
    if(!sscanf(params,"s[32]udi",item,item2,item3,item4))
    {
        if(strcmp(item,"hierba",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender hierba [playerid] [Monto] [Precio]");
        }
        if(strcmp(item,"crack",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender crack [playerid] [Monto] [Precio]");
        }
        if(strcmp(item,"materiales",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender materiales [playerid] [Monto] [Precio]");
        }
    }
//
return 1;
}
es necesario poner "return 1" al final de cada if?

pawn Код:
if(strcmp(item,"materiales",true)==0)
        {
            SendClientMessageEx(playerid,-1, "/vender materiales [playerid] [Monto] [Precio]");
            return 1;
        }
Reply
#2

No es obligatorio, pero sн recomendable, mira este ejemplo:
PHP код:
new var[6];
var = 
"texto";
print(
"0");
if(!
strcmp(var, "texto"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
    return 
1;
}
print(
"1");
if(!
strcmp(var, "opcion1"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
    return 
1;
}
print(
"2");
if(!
strcmp(var, "opcion2"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
    return 
1;
}
print(
"3"); 
Como la primera condiciуn se cumple (ya que var contiene "texto"), le mandamos un mensaje al jugador y devolvemos un valor (return 1) para indicar que se ha cumplido nuestra condiciуn.

En nuestra consola observaremos esto debido al print:
pawn Код:
 
Viendo lo anterior concluimos que si no se han imprimido el resto de los valores es que el cуdigo que sigue la condiciуn no se ha ejecutado.

Volvamos a ejecutar el mismo cуdigo sin "return 1":
PHP код:
new var[6];
var = 
"texto";
print(
"0");
if(!
strcmp(var, "texto"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
}
print(
"1");
if(!
strcmp(var, "opcion1"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
}
print(
"2");
if(!
strcmp(var, "opcion2"true))
{
    
SendClientMessage(playerid, -1"Coinciden");
}
print(
"3"); 
La primera condiciуn se cumplirб y se le mandarб un mensaje al jugador igual que en el primer caso, pero observaremos en la consola lo siguiente:
pawn Код:
0
1
2
3
їQuй vemos? Que se ha ejecutado todo el cуdigo, aunque las otras condiciones con strcmp no se han cumplido porque el texto es distinto.


En definitiva, si nuestro cуdigo se ejecuta es recomendable devolver un valor y decir "basta, ya tengo lo que querнa". De esta manera el cуdigo que sigue no se ejecuta, y conseguimos algo llamado "optimizaciуn".

El valor del return depende de dуnde nos encontremos, en el caso de los comandos devolver "1" significa que el comando se ha procesado correctamente.

En lugar de poner "return 1" puedes hacer lo siguiente:
PHP код:
new var[6];
var = 
"texto";
if(!
strcmp(var, "texto"true)) return SendClientMessage(playerid, -1"Coinciden");
if(!
strcmp(var, "opcion1"true)) return SendClientMessage(playerid, -1"Coinciden");
if(!
strcmp(var, "opcion2"true)) return SendClientMessage(playerid, -1"Coinciden"); 
SendClientMessage puede devolver dos posibles valores (1 si se ha ejecutado correctamente, 0 si el jugador no estб conectado), entonces, es como poner "return 1" pero a la vez mandamos el mensaje (que a su vez devuelve 1).
Reply
#3

Duda aclarada, muchнsimas gracias por la respuesta.
Reply
#4

Bro, segъn he probado si es necesario ponerlo al final de cada comando, por que es lo que indica al comando que se ha ejecutado despuйs de su llamada, ahora, al final de cada if se pone solo cuando se debe ejecutar un cуdigo hasta cierta parte:

Digamos por ejemplo:
PHP код:
CMD:vender(playeridparams[])
{
    new 
item[30];
    if(!
sscanf(params,"s[30]",item))
    {
        if(
strcmp(item,"coche",true)==0)
        {
            
SendClientMessageEx(playerid,-1"/vender coche");
            return 
1//El codigo se ejecutara hasta esta parte y enviara unicamente el mensaje /vender coche
        
}
        
//Ahora tambien puedes usar el return mensaje, que funciona igual que el return 1;
        //Cuando usar return 1?,  cuando hayan mas lineas de codigo ejemplo:
        
        
if(strcmp(item,"negocio",true)==0)
            return 
SendClientMessageEx(playerid,-1"/vender negocio");
        if(
strcmp(item,"casa",true)==0)
            return 
SendClientMessageEx(playerid,-1"/vender casa");
        if(
strcmp(item,"cosecha",true)==0)
            return 
SendClientMessageEx(playerid,-1"/vender cosecha");
            
        
//Siendo con mas lineas de codigo:
        
if(strcmp(item,"cosecha",true)==0)
        {
            
SendClientMessageEx(playerid,-1"/vender cosecha");
            
//Mas cуdigo
            
SendClientMessageEx(playerid, -1"La cosecha se puede empezar a realizar");
            
Cosechar(playerid);
            return 
1;
        }
    }
    return 
1;

Reply
#5

Yo lo uso asн y tengo un server de 100 personas y 0 problemas.

pawn Код:
if(!strcmp(var, "texto", true)) return   SendClientMessage(playerid, -1, "Coinciden");
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)