Bloquear comandos (y_commands)
#1

Hola, їalguien sabe como bloquear todos los comandos usando el sistema y_commands?
Use esto pero no funciona
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(Jugador[playerid][Block])
        return 0;
    return 1;
}
Gracias si alguien sabe como hacerlo de forma eficiente, ya que por ahora la ъnica forma que se es poniendo esa condiciуn a todos los comandos.
Reply
#2

De esta manera podrias hacerlo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(Jugador[playerid][Block] != 0) return 1; //Si el valor de la variable es diferente a 0 se retorna a 1.
    //Aqui van los comandos.
    return 0;
}
Pero esto es solo si tienes los comandos dentro del callback OnPlayerCommandText, si los tienes fuera de el no te va a servir, si el comando esta fuera creo que la unica manera de hacerlo seria agregandole una verificacion de la variable a cada comando.
Reply
#3

Quote:
Originally Posted by TheScriptMan
Посмотреть сообщение
De esta manera podrias hacerlo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(Jugador[playerid][Block] != 0) return 1; //Si el valor de la variable es diferente a 0 se retorna a 1.
    //Aqui van los comandos.
    return 0;
}
Pero esto es solo si tienes los comandos dentro del callback OnPlayerCommandText, si los tienes fuera de el no te va a servir, si el comando esta fuera creo que la unica manera de hacerlo seria agregandole una verificacion de la variable a cada comando.
Creo que en vez de retornar a 1 deberias retornar a 0...
Reply
#4

Quote:
Originally Posted by xDarkuzSx
Посмотреть сообщение
Creo que en vez de retornar a 1 deberias retornar a 0...
No es obligatorio ya que al retornar a 1 de igual manera no se ejecuta el resto del script.
Reply
#5

Quote:
Originally Posted by TheScriptMan
Посмотреть сообщение
De esta manera podrias hacerlo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(Jugador[playerid][Block] != 0) return 1; //Si el valor de la variable es diferente a 0 se retorna a 1.
    //Aqui van los comandos.
    return 0;
}
Pero esto es solo si tienes los comandos dentro del callback OnPlayerCommandText, si los tienes fuera de el no te va a servir, si el comando esta fuera creo que la unica manera de hacerlo seria agregandole una verificacion de la variable a cada comando.
Estas mal, con y_commands no utilizas el callback "OnPlayerCommandText(playerid, cmdtext[])" para hacer comandos, de hecho, ni se puede usar los dos al mismo tiempo.


Quote:
Originally Posted by TheScriptMan
Посмотреть сообщение
No es obligatorio ya que al retornar a 1 de igual manera no se ejecuta el resto del script.
Tambien estas mal aqui,

Valores retornados:
- Retorna 1 si se procesa el comando, de lo contrario 0.

Asi es:
pawn Код:
public OnPlayerReceivedCommand(playerid, cmdtext[])
{
    if(Jugador[playerid][Block] == 1) return 0;
    return 1;
}
Reply
#6

Con "Command_SetPlayer"/"Command_SetPlayerNamed" lo puedes hacer, creo.
Reply
#7

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Estas mal, con y_commands no utilizas el callback "OnPlayerCommandText(playerid, cmdtext[])" para hacer comandos, de hecho, ni se puede usar los dos al mismo tiempo.
El CallBack en este caso es opcional, puedes agregar los comandos tanto fuera como dentro de este.
Si te refieres a strcmp e y_commands, creo que por alli hay una manera de usar ambos a la vez, no estoy seguro pero recuerdo haberla visto hace un tiempo.

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Tambien estas mal aqui,

Valores retornados:
- Retorna 1 si se procesa el comando, de lo contrario 0.
Quote:
Originally Posted by Wikipedia
pawn Код:
return 1;
        //Al retornar 1, se corta el callback dando por finalizado el mismo
Ya lo testee, te invito a hacerlo para que observes que funciona.

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Asi es:
pawn Код:
public OnPlayerReceivedCommand(playerid, cmdtext[])
{
    if(Jugador[playerid][Block] == 1) return 0;
    return 1;
}
Si, es preferible que lo haga en ese callback segun el procesador que utiliza.
Reply
#8

Gracias por responder, algunas cosas ya la sabнa y no encuentro explicaciуn para otras. Bien, el return 1 en el Callback significa que si se proceso el comando, el return 0 muestra el mensaje de UNKNOWN COMMAND
pawn Код:
if(Jugador[playerid][Block])//Uso una variable del tipo bool (no necesita == 0 o == 1 al ponerlo solo significa si la condiciуn es verdadera), asн que esta condiciуn significa, 'si el Jugador tiene bloqueados los comandos'
        return 0;//Retornar mensaje de comando desconocido
    return 1;//Debido a que y_commands al parecer funciona con funciones dinбmicas o que se yo (Nunca pude
entender los cуdigos de ****** ya que son macros la mayorнa), retorno 1 ya que si pusiera return 0 saldrнa incluso para los comandos existentes el mensaje UNKNOWN COMMAND.
Bueno esa era para:
xDarkuzSx
TheScriptMan

TheScriptMan
їEstas seguro que bloquea los comandos?
Ya que ese callback se llama cada que un comando es procesado, o sea ejecutado y no cuando se introduce, lo que no podrнa bloquearlos.

Para SickAttack, si se pueden combinar, yo ya lo he utilizado aunque actualmente tengo todos los comandos en "YCMD:"
[J]ulian, podrнas explicarme como lo puedo hacer con Command_SetPlayer y algo de Next que vi en la wiki?
Es que no entiendo como bloquear todos y luego desbloquearlos.
Gracias a todos nuevamente
Reply
#9

Quote:
Originally Posted by Su37Erich
Посмотреть сообщение
TheScriptMan
їEstas seguro que bloquea los comandos?
Ya que ese callback se llama cada que un comando es procesado, o sea ejecutado y no cuando se introduce, lo que no podrнa bloquearlos.
Si tienes razon, no podria ser asi.
Si tienes los comandos dentro del callback OnPlayerCommandText, puedes hacer lo primero que te dije, de esa manera los bloquearia.

PD: Una manera de hacerlo es agregar la varificacion de la variable a comando por comando, recuerdo que anteriormente lo hacia de esta manera.

Quote:
Originally Posted by Su37Erich
Посмотреть сообщение
[J]ulian, podrнas explicarme como lo puedo hacer con Command_SetPlayer y algo de Next que vi en la wiki?
Es que no entiendo como bloquear todos y luego desbloquearlos.
Gracias a todos nuevamente
Pues con esto puedes bloquear los comandos pero individualmente, la unica manera que se me ocurre para bloquearlos todos seria haciendo una lista, pero para hacer esto es mucho trabajo en mi parecer, ya que tendrias que ir observando cada uno de los comandos para agregarlos a la lista(desconozco si hay otra manera de hacerlo).

Aqui hay informacion sobre esto:

Quote:
Originally Posted by Samp-scripts
Commands

The full list of commands is given below.

Command_GetID(funcname[]) - All the examples above used the command's name to set the permissions, if you want you can also use the ID, which this gets.

Command_SetPlayer(command, playerid, set) - Enables or disables a player's use of a command by ID.

Command_SetPlayerNamed(command[], playerid, set) - Enables or disables a player's use of a command by name.

Command_GetPlayer(command, playerid) - Gets a player's use of a command by ID.

Command_GetPlayerNamed(command[], playerid) - Gets a player's use of a command by name.

Command_AddAlt(oldid, altname[]) - Adds an alternate spelling for a command by ID.

Command_AddAltNamed(old[], altname[]) - Adds an alternate spelling for a command by name.

Command_ReProcess(playerid, cmdtext[], help) - Call to put text through the command processor, with the help functions enabled or disabled.

Command_GetName(id) - Get the name of a command by ID.

Command_GetDisplay(command, playerid) - Get the first found command name a player can type to get this functionality.

Command_GetDisplayNamed(command[], playerid) - Get the first found command name a player can type to get this functionality by name. For example:

pawn Код:
Command_GetDisplayNamed("help", playerid);
Will return "aiuto" for an Italian player and "help" for an English player.

Command_GetPlayerCommandCount(playerid) - Get the number of commands in the system the player can use.

Command_GetNext(index, playerid) - Used for looping through all the commands a player can use, not all the commands that exist.

Command_SetDeniedReturn(set) - If this is "false" the system will report a command you're not allowed to use as unknown. If it is "true" the system will not run the command but will not send a failure message.

Command_GetDeniedReturn() - Get the denied return current status.
Reply
#10

Quote:
Originally Posted by Su37Erich
Посмотреть сообщение
[J]ulian, podrнas explicarme como lo puedo hacer con Command_SetPlayer y algo de Next que vi en la wiki?
Es que no entiendo como bloquear todos y luego desbloquearlos.
No uso y_commands, pero asн deberнa(no lo he probado) funcionar:

pawn Код:
new count = Command_GetPlayerCommandCount(playerid), command[YSI_MAX_STRING];
for(new c = 0; c < count; c++)
{
    command = Command_GetNext(c, playerid);
    Command_SetPlayerNamed(command, playerid, false/true);
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)