Es un poco complicado de explicar y ya que no encontrй una guнa completa tratarй de explicarlo en forma simple.
El return es lo que retorna una variable. Harй un ejemplo con
"public OnPlayerUpdate".
Por ejemplo, en el caso de
"OnPlayerUpdate", si utilizamos
"return 1;" el jugador se actualizarб respecto al servidor (Lo normal).
pawn Код:
public OnPlayerUpdate(playerid)
{
return 1;
}
Pero, si por ejemplo, cambiamos el
"return 1;" por
"return 0;", el jugador no se actualizarб respecto al servidor y los demбs lo verнan como si se encontrase pausado.
El return en general, sirve para retornar valores o ejecutar una acciуn una vez finalizada la funciуn, o bien, para terminarla. Un ejemplo:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/Command", true))
{
SendClientMessage(playerid, -1, "Escribiу un comando.");
return 0;
}
return SendClientMessage(playerid, -1, "Comando inexistente.");
}
En este caso, la funciуn de
"/Command" serб llamada solo si el jugador la escribe y una vez que ocurra esto, retornarб 0, lo cual significa que la funciуn de dicho public ya se realizу y no ejecutarб mбs funciones.
Y en caso el usuario no use la funciуn de
"/Command", entonces le saldrнa el mensaje que retornarнa que al analizar la funciуn del public en general, no se detectу ningъn comando. Entonces el return serнa, en este caso, lo que ocurre si la funciуn es ejecutada.
En conclusiуn, el return serнa el final de la funciуn y lo que se quiere ejecutar, sin que se pueda ejecutar mбs funciones de dicho cуdigo.
Harй otro ejemplo con un comando:
pawn Код:
if(strcmp("/Admin", cmdtext, true, 10) == 0)
{
if(IsPlayerAdmin(playerid)) return SendClientMessageToAll(-1, "El administrador escribiу un comando.");
SendClientMessageToAll(-1, "Un usuario escribiу el comando del administrador.");
return 1;
}
En este caso, si el usuario es un administrador retornarб el mensaje de
"El administrador escribiу un comando." y no se ejecutarбn las demбs funciones, mientras que si el usuario no es administrador se ejecutarбn las demбs funciones que en este caso solo serнan el
"Un usuario escribiу el comando del administrador."
Ahora, algo importante es saber la diferencia entre
"return 0;" y
"return 1;". Para esto darй un ejemplo.
Supongamos que tengo dos FilterScripts y un GameMode. En un FilterScript tengo esto:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/Admin", cmdtext, true, 10) == 0)
{
if(IsPlayerAdmin(playerid)) return SendClientMessageToAll(-1, "El administrador escribiу un comando.");
SendClientMessageToAll(-1, "Un usuario escribiу el comando del administrador.");
return 1;
}
return 1;
}
En el otro:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/Usuario", cmdtext, true, 10) == 0)
{
if(IsPlayerAdmin(playerid)) return SendClientMessageToAll(-1, "Un usuario escribiу un comando.");
SendClientMessageToAll(-1, "El administrador escribiу un comando de un usuario.");
return 1;
}
return 1;
}
Y en el GameMode:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/Command", cmdtext, true, 10) == 0)
{
SendClientMessageToAll(-1, "Se ejecutу el comando.");
return 1;
}
return SendClientMessage(playerid, -1, "Comando inexistente.");
}
Que los FilterScripts tengan
"return 1;" anula todos los otros
"public OnPlayerCommandText" ya que la funciуn fue ejecutada.
Ahora, si colocamos
"return 0;" en un FilterScript; algo asн:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/Admin", cmdtext, true, 10) == 0)
{
if(IsPlayerAdmin(playerid)) return SendClientMessageToAll(-1, "El administrador escribiу un comando.");
SendClientMessageToAll(-1, "Un usuario escribiу el comando del administrador.");
return 1;
}
return 0;
}
Estarнa permitiendo otros
"public OnPlayerCommandText" de otros FilterScript, por lo que puede se ejecutarбn los demбs comandos.
Entonces, la diferencia entre
"return 1;" y
"return 0;" es que el
"return 1;" solo terminarнa la funciуn en un cуdigo, significarнa que la funciуn fue llamada. Colocar
"return 1;" no afectarнa funciones comunes de SA-MP como
"OnPlayerUpdate", mientras que
"return 0;" anularнa las funciones por completo una vez puesto.
Los returns tambiйn sirven para asignar valores a determinadas funciones, aunque esto es un poco mбs avanzado.
En general, este tema no es muy complicado de entender, sino de explicarlo. Quizб luego haga una guнa mбs completa y la comento aquн por si le sirve