[Tutorial] Como bloquear todos los comandos
#1

Bueno, imaginandome algo, se me ocurrio hacer este tutorial, ya que algunos preguntan como hacer esto, como bloquear un comando para un MiniJuego, bien comenzemos.

Para el primer paso, debemos crear una variable, para hacer la restriccion en OnPlayerCommandText, en lo cual quedarнa asн:

pawn Код:
new VariableDeBloqueo[MAX_PLAYERS];
el VariableDeBloqueo lo cambias por el nombre que tъ quieras

A partir de aquн, hacemos la restriscciуn en OnPlayerCommandText, que podrб bloquear todos los comandos. (tiene que estar de primero)

pawn Код:
if(VariableDeBloqueo[playerid] == 1) return SendClientMessage(playerid, -1, "Lo siento, estбs en un MiniJuego, para que puedas usar los comandos de nuevo, debes de morir primero");
if = Esto significa, que comenzarб a hacer una restricciуn.
VariableDeBloqueo = Esto es el nombre de la variable que creamos en el primer paso
playerid = Significa la id de tъ jugador, es decir, tu mismo.
1 = El 1, tendrб valor para el bloqueo de comandos.
return = Retornarб el mensaje que veras despues del 'return'.

un ejemplo de como quedarнa:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
// las variables que has hecho en OnPlayerCommandText

   if(VariableDeBloqueo[playerid] == 1) return SendClientMessage(playerid, -1, "Lo siento, estбs en un MiniJuego, para que puedas usar los comandos de nuevo, debes de morir primero");

// los demas comandos.

   return 0; // El retorno de OnPlayerCommandText, esto es innecesario ya que tъ lo retornastes en tu GM/FS.
}
De ahora en adelante, debemos crear un comando, o lo que seб, para que pueda cumplir la funciуn la variable que hicimos, en este caso: VariableDeBloqueo

Aqui les dejo un ejemplo, de un MiniJuego, lo pueden hacer como ustedes quieran, a su gusto, tambiйn les servirб para bloquear un comando a un jugador, en especial un sistema de admininistraciуn.

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(!strcmp(cmdtext, "/minijuego", true))
   {
       SendClientMessage(playerid,-1,"* Has entrado al MiniJuego");
       VariableDeBloqueo[playerid] = 1; // Al cambiar el valor a 1, se bloquearбn los cmds.
       SetPlayerPos(playerid, -2974.0728,1891.0184,7.6009);
       SetPlayerSkin(playerid,105);
       return 1;
   }
   // demas comandos ..
   return 0; // esto es innecesario, ya que tu lo retornastes en tu GM/FS, esto es solo para que compile bien, si es un nuevo FS o algo parecido.
}
Al morir, debemos de desbloquearles los comandos, asi que pondremos esto en OnPlayerDeath.

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    VariableDeBloqueo[playerid] = 0; // esto desbloqueara los comandos al morir
    // demas funciones
    return 1;
}
Si lo quieren poner por comando, la ъnica forma que se me ocurre es poner primero el comando que quieras, poniendo el valor de la variable a 0, y despuйs el if(VariableDeBloqueo ...... Ejemplo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(!strcmp(cmdtext, "/morir", true))
   {
       SendClientMessage(playerid,-1,"Has muerto !");
       VariableDeBloqueo[playerid] = 0; // Esto desbloquearб los comandos.
       SetPlayerHealth(playerid, 0.0);
       return 1;
   }

   if(VariableDeBloqueo[playerid] == 1) return SendClientMessage(playerid, -1, "Lo siento, estбs en un MiniJuego, para que puedas usar los comandos de nuevo, debes de morir primero");
   // demas comandos ..
   return 0; // esto es innecesario, ya que tu lo retornastes en tu GM/FS, esto es solo para que compile bien, si es un nuevo FS o algo parecido.
}
Hay muchos tipos de hacerla, la mas conocida es tipo variable booleana ( o como se escriba ).

en ZCMD, es muy diferente, primero lo seteamos a uno:


pawn Код:
CMD:setearauno(playerid, params[])
{
    VariableDeBloqueo[playerid] = 1;
    SendClientMessage(playerid, -1, "Tus comandos han sido bloqueados");
    return 1;
}
y para que haga la funciуn de no poder usar comandos, pon esto:

pawn Код:
public OnPlayerCommandReceived(playerid, cmdtext[])
{
    if(VariableDeBloqueo[playerid] == 1  && strfind(cmdtext,"/morir",true) == -1)
    {
        SendClientMessage(playerid, -1, "Lo siento, tienes los comandos bloqueados (por minijuego ej), para volver a usarlos usa (/morir)");
        return 0;
    }
    return 1;
}

OJO: Esto de arriba, puede causar un bug que los demas se puedan aprovechar, y es que si tu pones "/comando /morir" el comando "/comando" strfind lo resulta como verdadero y deja el pasar asн dejando funcionar el comando.

para evitar esto, cambia el -1 por 0 haciendo que strfind busque contando desde el 0, no desde cualquier posiciуn de la longitud de caracteres.

para setearlo a cero:


pawn Код:
CMD:morir(playerid, params[])
{
    SendClientMessage(playerid, -1, "Has muerto");
    SetPlayerHealth(playerid, 0.0);
    VariableDeBloqueo[playerid] = 0;
    return 1;
}
y se evitan de hacer todos los pasos para strcmp

OJO IMPORTANTE: Para que no haya bugs, se le tendrб que setear a 0 cuando se conecte para que la ID que se desconectу anteriormente no se les seteй las variables al jugador que se conecta con dicha ID.

pawn Код:
public OnPlayerConnect(playerid)
{
    VariableDeBloqueo[playerid] = 0;
    return 1;
}
Gracias DesingMyCry por la correciуn. se me habнa olvidado.


Espero que les haya sido ъtil el tutorial, es muy facil.


Adoniiz
Reply
#2

Exelente guia, esta guia buscaba hace como 5 meses atras porque no tenia idea como se hacian XD
Pero aprendi, y hay muchos que buscan esta guia para crear sus minijuegos.

Nice job.
Reply
#3

Quote:
Originally Posted by Constitucion
Посмотреть сообщение
Exelente guia, esta guia buscaba hace como 5 meses atras porque no tenia idea como se hacian XD
Pero aprendi, y hay muchos que buscan esta guia para crear sus minijuegos.

Nice job.
Gracias
Reply
#4

muy buen tutorial, aparte esta muy bien explicado. les servirб a mucho este tutorial.

saludos
Reply
#5

Muy bueno, por cierto "if" es una condicion no una restriccion.
Reply
#6

Quote:
Originally Posted by Elpiezas
Посмотреть сообщение
Muy bueno, por cierto "if" es una condicion no una restriccion.
En cierta forma cuando se scriptea/programa una condiciуn es una restricciуn, asi que se puede interpretar a gusto.
Reply
#7

Buen Tutorial me sirvio de mucho =)
Reply
#8

Si un jugador se desconecta cuando tiene los comandos bloqueados, el prуximo que se conecte con su ID deberб morir primero para poder usar estos.

Ademбs es algo molesto tener que morir, si se desea salir se buscarб la forma mediante un comando.
Reply
#9

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Si un jugador se desconecta cuando tiene los comandos bloqueados, el prуximo que se conecte con su ID deberб morir primero para poder usar estos.

Ademбs es algo molesto tener que morir, si se desea salir se buscarб la forma mediante un comando.
pawn Код:
public OnPlayerConnect(playerid)
{
    VariableDeBloqueo[playerid] = 0;
    return 1;
}

Si te fijas en la fecha del tema..., es algo viejo ya.
Reply
#10

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Si un jugador se desconecta cuando tiene los comandos bloqueados, el prуximo que se conecte con su ID deberб morir primero para poder usar estos.

Ademбs es algo molesto tener que morir, si se desea salir se buscarб la forma mediante un comando.
Quote:
Originally Posted by adri1
Посмотреть сообщение
pawn Код:
public OnPlayerConnect(playerid)
{
    VariableDeBloqueo[playerid] = 0;
    return 1;
}

Si te fijas en la fecha del tema..., es algo viejo ya.
Corregido. Gracias se me habнa percatado en ese tiempo que lo publiquй
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)