[Tutorial]Uso de sscanf en comandos
#1

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

ї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
}
En vez de esto, podemos utilizar ZCMD y sscanf para no utilizar el Callback(public), solo tendriamos que ponerlos en los includes asi:

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
Entonces, para definir el comando hacemos esto:

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
}
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:

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/Strtok
sscanf wiki: https://github.com/Y-Less/sscanf/wiki



Reply
#2

El tuto va aca: http://forum.sa-mp.com/forumdisplay.php?f=59
Reply
#3

<3 <3 <3
Reply
#4

Buen tutorial, les servira a los que reciйn comienzan, pero el tutorial va aquн.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)