SA-MP Forums Archive
Duda sscanf - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Duda sscanf (/showthread.php?tid=507973)



Duda sscanf - Daniel_Ruiz - 20.04.2014

Bueno es que estoy confundido sobre como usar el sscanf y los params Alguien me podria despejar las ideas.

Osea tengo por decir este comando

pawn Код:
CMD:setint(playerid, params[])
{
if(Informacion[playerid][Admin] >= 3) {
if(!sscanf(params, "rs", params[0], params[1])) {
if(params[0] != INVALID_PLAYER_ID) {
SetPlayerInterior(params[0], params[1]);
}else Mensaje(playerid, AZUL , "Id Erronea");
}else Mensaje(playerid, AZUL , "Use: /setint [ID] [Interior]");
}else Mensaje(playerid, AZUL , "No es administrador");
return 1;
}
por que esta mal? que significan la "rs"? cuantos maximos slot's soporta?


Respuesta: Duda sscanf - MugiwaraNoLuffy - 20.04.2014

Sscanf lo que hace es separar params, que es una cadena de texto que contiene todo lo que viene despuйs del comando, o sea, los parбmetros. Por ejemplo: /kick 13 health hack (13 razуn health hack son los parбmetros).
Para manejar los datos de los parбmetros en PAWN, necesitas separar esa cadena de texto (o string en inglйs) en variables.
Por ejemplo:
pawn Код:
CMD:kick(playerid, params[])
{
//condicion de si es admin o no
new idobjetivo, razon[128];
if(sscanf(params, "is[128]", idobjetivo, razon))
{
SendClientMessage(playerid, 0xFF0000FF, "Parбmetros invбlidos, utilize este formato: /kick ID razуn");
return 1;
}
Ahн lo que le ordenй es separar a params en una variable entera y en una string, entonces idobjetivo es la ID del jugador que quiero expulsar y razon es la razуn de la expulsiуn contenida en una variable string. Entonces "is[128]", podrнa traducirse como "sscanf separa a params en una variable integer (entera) y en una string con capacidad mбxima 128 y conten los datos en las siguientes variables", entonces is[128] especifican el tipo de variable en el que se van a contener. Esos carбcteres se llaman specificiers o especificadores, hay muchos acб tenйs una lista simple:
Specifier(s) Name Example values
b Binary 01001, 0b1100
c Character a, o, *
f Float 0.7, -99.5
g IEEE Float 0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
h, x Hex 1A, 0x23
i, d Integer 1, 42, -10
l Logical true, false
n Number 42, 0b010, 0xAC, 045
o Octal 045 12
q Bot name/id ShopBot, 27
r Player name/id ******, 42
u User name/id (bots and players) ******, 0
Ahora lo que faltarнa serнa unos checks, para ver si el jugador estб conectado.
pawn Код:
if(!IsPlayerConnected(idobjetivo)) return SendClientMessage(playerid, 0xFF0000FF, "Jugador no conectado");
Y por ъltimo:
pawn Код:
Kick(idobjetivo);
return 1;
}
(Faltarнa algъn mensajito para que diga la razуn y el mensaje "pepe fue expulsado razуn...")


Respuesta: Duda sscanf - ErickPuga234 - 20.04.2014

Que pasa con el comando?


El parametro "r" en sscanf es para procesar el ID o Nombre de un jugador.

El parametro "s" en sscanf es para procesar una cadena de strings.