SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Español/Spanish > Lanzamientos/Releases

 
 
Thread Tools Display Modes
Old 15/01/2012, 07:10 PM   #1
Adoniiz
Gangsta
 
Join Date: Mar 2010
Location: Wormhole
Posts: 832
Reputation: 57
Default Como bloquear todos los comandos

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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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 Code:
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
__________________

Last edited by Adoniiz; 10/12/2013 at 03:59 PM.
Adoniiz is offline  
Old 15/01/2012, 08:20 PM   #2
Constitucion
Little Clucker
 
Join Date: Sep 2011
Posts: 11
Reputation: 0
Default Respuesta: Como bloquear todos los comandos

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.
__________________
Retirado del pawno

- Deje algunas cosas mias en la zona de Lanzamientos
Constitucion is offline  
Old 15/01/2012, 08:46 PM   #3
Adoniiz
Gangsta
 
Join Date: Mar 2010
Location: Wormhole
Posts: 832
Reputation: 57
Default Respuesta: Como bloquear todos los comandos

Quote:
Originally Posted by Constitucion View Post
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
__________________
Adoniiz is offline  
Old 15/01/2012, 09:20 PM   #4
nacho_gb1
Little Clucker
 
nacho_gb1's Avatar
 
Join Date: Oct 2009
Location: Chile
Posts: 45
Reputation: 1
Cool Re: Como bloquear todos los comandos

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

saludos
nacho_gb1 is offline  
Old 19/05/2012, 05:24 AM   #5
Elpiezas
Huge Clucker
 
Join Date: Jul 2010
Posts: 198
Reputation: -1
Default Respuesta: Como bloquear todos los comandos

Muy bueno, por cierto "if" es una condicion no una restriccion.
Elpiezas is offline  
Old 19/05/2012, 06:55 PM   #6
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,656
Reputation: 239
Default Respuesta: Como bloquear todos los comandos

Quote:
Originally Posted by Elpiezas View Post
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.
__________________
TheChaoz is offline  
Old 09/10/2013, 05:45 AM   #7
Nicolass
Little Clucker
 
Nicolass's Avatar
 
Join Date: Sep 2013
Location: Buenos Aires-Argentina
Posts: 1
Reputation: 0
Default Re: Como bloquear todos los comandos

Buen Tutorial me sirvio de mucho =)
Nicolass is offline  
Old 09/10/2013, 04:54 PM   #8
DesingMyCry
High-roller
 
Join Date: Dec 2010
Posts: 1,204
Reputation: 150
Default Respuesta: Como bloquear todos los comandos

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.
__________________
DesingMyCry is offline  
Old 09/10/2013, 07:28 PM   #9
adri1
Banned
 
Join Date: Oct 2010
Posts: 1,928
Reputation: 955
Default Respuesta: Como bloquear todos los comandos

Quote:
Originally Posted by DesingMyCry View Post
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 Code:
public OnPlayerConnect(playerid)
{
    VariableDeBloqueo[playerid] = 0;
    return 1;
}


Si te fijas en la fecha del tema..., es algo viejo ya.
adri1 is offline  
Old 09/10/2013, 08:04 PM   #10
DesingMyCry
High-roller
 
Join Date: Dec 2010
Posts: 1,204
Reputation: 150
Default Respuesta: Como bloquear todos los comandos

Si lo dices porque crees que yo reviví, no es asi. Lo vi en la lista, de los primeros asi que entré a ver el comentario final y de pasada vi algunos bugs y comente algunos mas.
__________________
DesingMyCry is offline  
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[AJUDA]Bloquear Comandos em uma Arena CanTLoGin Português/Portuguese 17 23/01/2014 05:34 PM
[AJUDA]Bloquear Comandos marcos5680 Português/Portuguese 5 24/01/2013 01:29 PM
[PEDIDO] Bloquear todos os comandos do servidor Allanrokeiro Português/Portuguese 16 07/05/2011 10:06 PM
[ajuda] Como bloquear os comandos Gabriel_Fernandes Português/Portuguese 8 17/09/2010 02:09 AM


All times are GMT. The time now is 12:11 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.