[Duda] Comando con X funciуn
#1

Hola, estoy aprendiendo a utilizar Pawno y me vino una duda y quisiera que alguien me explicara lo siguiente:
Cuando yo pongo... por ejemplo /congelar ID que congele al usuario que tenga esa ID.
Si alguien serнa tan amable de explicarme cosita por cosita de como hacer el comando, le agradezco muchisimo ya que me estoy empezando a familiarizar con el lenguaje PAWNO.
Reply
#2

https://sampforum.blast.hk/showthread.php?tid=406616
Reply
#3

Es que yo recien estoy iniciandome en el pawno y me pierdo mucho con ese tutorial, de todas formas gracias por comentar.
Reply
#4

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.
Reply
#5

Lo primero que debes saber es que Pawno es un IDE (o programa como muchos lo llaman) para programar. PAWN es un lenguaje de programaciуn (busca en internet para tener mбs informaciуn, no es nada complicado de entender).

Ahora, hay varias formas:

- La primera es simplemente usando nuestro procesador de comandos (en mi caso, ZCMD):

pawn Код:
// El cuerpo de nuestro comando (que serнa "congelar")
{
    if(!IsPlayerConnected(strval(params[0])) return SendClientMessage(playerid, 0xFF0000AA, "* ID invбlida.");
    // Convertiremos "params[0]"  en un entero - wiki.sa-mp.com/wiki/Strval. Tambiйn verificaremos que el parбmetro puesto (o sea, si escribiу "/congelar CualquierID") corresponda a una ID invбlida.
    TogglePlayerControllable(params[0], false); // Jugador congelado.
    return 1;
}
- La segunda es usando 'sscanf' aunque en este caso no creo que sea necesario.


Quote:
Originally Posted by SickAttack
Посмотреть сообщение
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.
https://sampforum.blast.hk/showthread.php?tid=406616
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)