Okay, aqui esta algo:
Antes que nada ocupas el sscanf y el zcmd.
Consigue el SSCANF:
https://sampforum.blast.hk/showthread.php?tid=120356.
Consigue el ZCMD:
https://sampforum.blast.hk/showthread.php?tid=91354.
Tomaremos el siguiente comando como referencia:
pawn Код:
CMD:congelar(playerid, params[])
{
new lookupid;
sscanf(params, "?<CELLMIN_ON_MATCHES=1>U(-1)", lookupid);
if(lookupid == -1) // El parameter del jugador esta vacio.
{
return 1;
}
else if(lookupid == cellmin) // Mulples jugadores encontrados.
{
return 1;
}
else if(lookupid == INVALID_PLAYER_ID) // El jugador no esta conectado.
{
return 1;
}
else // Un jugador encontrado.
{
return 1;
}
return 1;
}
Si preguntas para que sirve cada uno de los "if" y los "else", aqui esta:
- "new lookupid" corresponde al ID del jugador, esto se usara para guardar el ID del jugador que queras congelar.
- "sscanf(params, "?<CELLMIN_ON_MATCHES=1>U(-1)", lookupid);" esto busca el jugador, puede ser el ID, el nombre o una parte del nombre.
- "if(lookupid == -1)" esto se ejecutara si escribimos "/congelar" sin el ID o nombre del jugador, es muy util si queremos usar el comando en nosotros mismos.
- "else if(lookupid == cellmin)" significa que se encontrу mas de un jugador, si por ejemplo usamos el comando "/congelar juan", y si hay dos jugadores que contienen "juan" en su nombre entonces esto se ejecutara.
- "else if(lookupid == INVALID_PLAYER_ID)" significa que el jugador que queremos congelar no esta conectado al servido, si por ejemplo escribimos "/congelar juan" y si no se encuentra ningъn jugador que contiene juan en su nombre entonces esto se ejecutara.
- "else" si ninguno de los "if" no se ejecuto entonces se ejecutara esto, y esto significa que se encontrу un jugador sin ningъn problema.
Ahora analizaremos esto "sscanf(params, "?<CELLMIN_ON_MATCHES=1>U(-1)", lookupid);":
Siempre empezaremos con "sscanf", "params" corresponde al texto que queremos procesar, en este caso sera params por que zcmd lo tiene CMD:congelar(playerid, "
params[]"), lo que esta en las comillas "?<CELLMIN_ON_MATCHES=1>U(-1)" son letras que corresponde al tipo de texto que quieres procesar. En este caso se usa "?<CELLMIN_ON_MATCHES=1>U(-1)" para poder detectar si se encontrу mas de un jugador con un nombre similar al cual se busca, y ", lookupid" se usa para guardar el jugador encontrado para poder tomar acciones con el/ella. Tambien se puede insertar mas funciones, por ejemplo: "sscanf(params, "us[128]", lookupid, razon);" <== con eso podemos usar por ejemplo "/congelar juan razon". El "u" le dice que va encontrar un usuario y el "s[128]" le dice que va insertar un texto, te dejo una lista de letras que usa el sscanf abajo:
"b" - Binarias.
"s" - Strings.
"c" - Caracteres.
"a" - Arrays.
"d" - Decimal.
"q", "r", "u" - Usuarios.
"f" - Floats.
"p" - Delimiters.
"h" - Hex.
"z" - Packed Strings.
"i" - Integer
"g" - Extended Float
"l" - Logica.
"''" - Buscar Strings.
"n" - Numero.
"o" - Octal.
"x" - Hex.