Podes hacer asн:
Crea 2 variables, "adentro" y "queriendo". La segunda que sea un array para todos los jugadores. Si un jugador usa el comando para ingresar comproba si "adentro" es mayor o igual a 3, si se cumple que entre y si no se cumple a la variable del jugador "queriendo" pasala a 1 y envia un mensaje que ha sido puesto en espera para ingresar. Despuйs de eso, hace un loop para mirar si hay 3 jugadores con la variable "queriendo" en 1, envнalos a los 3 a la zona. Asegъrate tambiйn que si ingresan a otra zona la variable "queriendo" pase a 0, ya que si no luego a ser 3 lo enviarб a la zona del comando. |
//En esta variable global, almacenaremos la cantidad de jugadores que quieren entrar a la zona
new Counter;
//En este array, almacenaremos el estado de cada jugador (true: quiere ingresar; caso contrario false)
new bool:ParaIngresar[MAX_PLAYERS];
public OnPlayerCommandText(playerid, cmdtext[])
{
//Nuestro comando para ingresar a la zona
if(!strcmp(cmdtext, "/entrarzona", true))
{
//Sumamos 1 a nuestro contador de jugadores que quieren ingresar a la zona
counter++;
//Cambiamos el estado del jugador indicando que quiere ingresar a la zona
ParaIngresar[playerid] = true;
//Si los jugadores que quieren ingresar son mas de 3, entonces se cumplen los requisitos
if(counter >= 3)
{
//Realizamos un bucle por todos los jugadores
for(new i, p=GetMaxPlayers(); i<p; i++)
{
//Si esta conectado y quiere entrar, entonces
if(IsPlayerConnected(i) && ParaEntrar[i])
{
SetPlayerPos(playerid, 0.0, 0.0, 0.0);
SendClientMessage(playerid, -1, "Has ingresado a la zona");
}
}
}
return 1;
}
//Nuestro comando para salir de la zona
if(!strcmp(cmdtext, "/salirzona", true))
{
//Restamos 1 a nuestro contador de jugadores que quieren ingresar a la zona
counter--;
//Cambiamos el estado del jugador, indicando que no quiere ingresar a la zona
ParaIngresar[playerid] = false;
return 1;
}
return 0;
}
//Evitamos falsos positivos
public OnPlayerDisconnect(playerid, reason)
{
if(ParaEntrar[playerid])
{
ParaEntrar[playerid] = false;
counter--;
}
return 1;
}
#define MINIMO_JUGADORES 3 //cantidad minima de jugadores para entrar a la zona
new Jugadores_Zona = 0; // variable contadora para habilitar la zona y mover los jugadores
new bool: Zona[MAX_PLAYERS] = {false,...}; //variable booleana para indicar q jugador serб movido a la zona
//------------------------------------------------------
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/zona", cmdtext, true))
{
if(Zona[playerid]) return 1;
Zona[playerid] = true;
if(Jugadores_Zona >= MINIMO_JUGADORES) MoverJugadores();
return 1;
}
return 1;
}
//-------------------------------------------------------
forward MoverJugadores();
public MoverJugadores()
{
for(new i = 0, plys = GetMaxPlayers(); i < plys; i++)
{
if(Zona[i] && IsPlayerConnected(i))
{
SetPlayerPos(i,x,y,z); //cambiar xyz por las coordenadas de la zona
Zona[i] = false;
}
}
return 1;
}
Nada mбs que si el mismo jugador usa 3 veces el comando podrб entrar.
|
por algo dije un ejemplo simple, no estan contempladas todas las variantes para evitar bugs.
|