24.05.2014, 18:51
Hola, me presento comunidad de SA-MP con este tutorial, no soy un buen scripter ya que comenze desde semana santa, por lo que si tengo algъn error, corrijanmelo por favor. Asн, aprendo tambiйn .
En este tutorial explicare por detalle cada funciуn para los nuevos en este tipo de scripting
sscanf Es un sistema que reemplaza el ya conocido strtok, esta hecho por Alex Cole, mejor conocido como ******. Lo que hace este Plugin/Include es reemplazar el sistema anteriormente dicho simplificбndolo de manera impresionante.
En strtok tenнamos que hacer bastantes cosas para definir un parбmetro, por ejemplo, para hacer el comando /kickear debнamos definir de esta manera:
En vez de esto, podemos utilizar ZCMD y sscanf para no utilizar el Callback(public), solo tendriamos que ponerlos en los includes asi:
Entonces, para definir el comando hacemos esto:
Vimos en el codigo anterior dos "u" y "s" de sscanf, a continuacion dare las especificaciones de que significa cada letra para usar en los parametros de sscanf:
"a" significa Array
"b" significa numero Binario
"s" significa String
"i" significa Numero Entero
"h" significa Numero Hexadecimal
"n" Significa Numero
"d" significa Numero Decimal
"f" significa Float
"u" significa Usuario o ID de usuario
En este caso, vimos que usamos las especificaciones "u" y "s", como dije en la parte anterior, U nos da la ID de un usuario y "s" nos da un string, es decir, una cadena de texto, de no poner eso, no leeria el codigo para expulsar al jugador.
Dare un ejemplo con un numero Entero y la ID de un jugador:
O, puedes hacer una descarga directa desde aqui.
sscanf wiki: https://github.com/Y-Less/sscanf/wiki
En este tutorial explicare por detalle cada funciуn para los nuevos en este tipo de scripting
їQue es sscanf?
sscanf Es un sistema que reemplaza el ya conocido strtok, esta hecho por Alex Cole, mejor conocido como ******. Lo que hace este Plugin/Include es reemplazar el sistema anteriormente dicho simplificбndolo de manera impresionante.
En strtok tenнamos que hacer bastantes cosas para definir un parбmetro, por ejemplo, para hacer el comando /kickear debнamos definir de esta manera:
pawn Код:
public onPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], idx; //aqui se definia el comando y el usuario que se expulsara del servidor
cmd = strtok //declaramos que el comando utilizara parametros
if(strcmp(cmd, "/kick", true == 0))
{
new tmp[128]; //Declaramos un temporal
tmp = strtok(cmdtext, idx); //El temporal es igual al comando y a la ID del jugador a expulsar
if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Uso correcto: /kick [ID del jugador]");
kick(strval(tmp))//Aqui expulsa el jugador, recuerden que tmp es igual al comando con la ID del jugador a expulsar
return 1; //Para que el comando funcione
}
return 0;//Retornamos 0, que significa que solo se podra utilizar en este archivo
}
pawn Код:
#include <a_samp> //esto es por obligaciуn, si no lo ponemos, nos detectara todas las funciones como error.
#include <sscanf>//Incluimos el plugin/include
#include <zcmd>//Opcional, yo frecuento a utilizar zcmd para los comandos
pawn Код:
#include <a_samp> //esto es por obligaciуn, si no lo ponemos, nos detectara todas las funciones como error.
#include <sscanf>//Incluimos el plugin/include
#include <zcmd>//Opcional, yo frecuento a utilizar zcmd para los comandos
CMD:kickear(playerid, params[])//definimos el comando, playerid es el jugador que da la orden y params[] es la longitud de los parametros
{
new ExpulsadoID[MAX_PLAYERS]; //ID a Expulsar
new Razon[500]; //Razon para el sscanf
new RazonKick[500] //Razon que veran todos
if(!IsPlayerAdmin) return SendClientMessage(playerid, 0xFFFFFFFF, "Usted no es administrador"); //Mandamos la orden para ver si el jugador es administrador, de lo contrario, no hara nada
else //Si es administrador
if(sscanf(params, "u" "s", ExpulsadoID, Razon)) return SendClientMessage(playerid, 0xFFFFFFFF, "Uso correcto: /kickear [ID] [Razon]");//aqui entra en juego sscanf, explicare que significan "u" y "s", SendClientMessage envia al jugador un mensaje diciendo que los parametros no fueron introducidos correctamente
else //Si los parametros son correctos
{
new NombreJ[MAX_PLAYER_NAME]; //Variable en la que almacenaremos el nombre del jugador
GetPlayerName(ExpulsadoID, NombreJ, 40); //Conseguimos el nombre del jugador, debemos tener dos variables definidas, 40 es la longitud
format(RazonKick, sizeof(RazonKick), "%s fue expulsado por: %s", NombreJ, Razon); //Ponemos el formato de la expulsion
SendClientMessageToAll(0xFFFFFFFF, RazonKick); //Razon que veran los demas
Kick(ExpulsadoID);
}
return 1;//Siempre debemos retornar 1 si no, no leerб el comando
}
"a" significa Array
"b" significa numero Binario
"s" significa String
"i" significa Numero Entero
"h" significa Numero Hexadecimal
"n" Significa Numero
"d" significa Numero Decimal
"f" significa Float
"u" significa Usuario o ID de usuario
En este caso, vimos que usamos las especificaciones "u" y "s", como dije en la parte anterior, U nos da la ID de un usuario y "s" nos da un string, es decir, una cadena de texto, de no poner eso, no leeria el codigo para expulsar al jugador.
Dare un ejemplo con un numero Entero y la ID de un jugador:
pawn Код:
#include <a_samp>
#include <sscanf>
#include <zcmd>
new monto;
new Jugador[MAX_PLAYERS];
CMD:dardinero(playerid, params[]) //especificamos el comando
{
if(!IsPlayerAdmin) return SendClientMessage(playerid, 0xFFFFFFFF, "No eres administrador"); //Chequeara si el Jugador es administrador
else //Si lo es
if(sscanf(params, "u" "i", Jugador, monto)) return SendClientMessage(playerid, 0xFFFFFFFF, "Uso correcto: /dardinero [Jugador] [Monto]"); //sscanf chequeara si los parametros fueron introducidos correctamente
else //Si lo fueron
{
new Jname[MAX_PLAYER_NAME]; //Creamos una variable en la cual guardar el nombre del jugador
new Mensaje[500]; //Mensaje para nosotros
GetPlayerName(Jugador, Jname, 40); //Conseguimos el nombre del jugador
format(Mensaje, sizeof(Mensaje), "Le has dado a %s $%i", Jname, monto); //Haremos el mensaje
SendClientMessage(playerid, 0xFFFFFFFF, Mensaje); //Mandamos el mensaje al jugador que hizo el comando
GivePlayerMoney(Jugador, Monto); //le damos el dinero
}
return 1;
}
їDonde descargo sscanf?
Puedes descargarlo desde el post de ****** aqui.O, puedes hacer una descarga directa desde aqui.
Referencias
strtok: https://sampwiki.blast.hk/wiki/Strtoksscanf wiki: https://github.com/Y-Less/sscanf/wiki