duda sscanf / return -
H@hn - 01.08.2015
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;
}
Respuesta: duda sscanf / return -
RIDE2DAY - 01.08.2015
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:
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:
ї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).
Re: duda sscanf / return -
H@hn - 01.08.2015
Duda aclarada, muchнsimas gracias por la respuesta.
Respuesta: duda sscanf / return -
TheMatius - 01.08.2015
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(playerid, params[])
{
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;
}
Respuesta: duda sscanf / return -
Tirael - 02.08.2015
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");