15.01.2012, 18:10
(
Последний раз редактировалось Adoniiz; 10.12.2013 в 14:59.
)
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н:
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)
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:
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.
Al morir, debemos de desbloquearles los comandos, asi que pondremos esto en OnPlayerDeath.
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:
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:
y para que haga la funciуn de no poder usar comandos, pon esto:
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:
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.
Gracias DesingMyCry por la correciуn. se me habнa olvidado.
Espero que les haya sido ъtil el tutorial, es muy facil.
Adoniiz
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];
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");
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.
}
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.
}
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
VariableDeBloqueo[playerid] = 0; // esto desbloqueara los comandos al morir
// demas funciones
return 1;
}
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.
}
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;
}
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;
}
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;
}
Espero que les haya sido ъtil el tutorial, es muy facil.
Adoniiz