Como puedo hacer un maximo por equipo?
#1

Hola tengo un sv de zombies en progreso y quiero saber como puedo hacer que los equipos queden parejos... es decir, que si el equipo de los humanos estб lleno tiene que si o si ser del equipo zombie? D:

Mis variables las tengo como:
Код:
//-EQUIPOS-//
#define TEAM_HUMANOS 0
#define TEAM_ZOMBIES 2
Reply
#2

Pues serнa algo asн:


Код:
#define MAX_HUMANOS		5
#define MAX_ZOMBIES		5

new humanos;
new zombies;


zcmd("serhumano", playerid)	{
	if (humanos < MAX_HUMANOS)	{
		RegistrarHumano(playerid);
		humanos++;
	}
	// Si no se cumple la condiciуn se hace lo siguiente:
	else	{
		SendClientMessage(playerid, -1, "Ya hay muchos humanos.");
	}
	return 1:
}

zcmd("serzombie", playerid)	{
	if (zombies < MAX_ZOMBIES)	{
		RegistrarZombie(playerid);
		zombies++;
	}
	// Esto ya lo completas tъ, al igual que la funciуn de RegistrarHumano/Zombie
	return 1;
}
Seguro que hay algo mal porque hace ya mucho tiempo que no hago esto, pero espero que te de una idea para hacerlo.
Reply
#3

Me aburrнa y tenнa ganas de hacer algo mбs, me he extendido y he corregido los comandos.


Код:
#define MAX_HUMANOS		5
#define MAX_ZOMBIES		5

#define HUMANO 1
#define ZOMBIE 2

new humanos;
new zombies;

new Tipo[MAX_PLAYERS];


zcmd(serhumano, playerid, params[])	{
	if (humanos < MAX_HUMANOS)	{
		RegistrarHumano(playerid);
		humanos++;
	}
	return 1:
}

zcmd(serzombie, playerid, params[])	{
	if (zombies < MAX_ZOMBIES)	{
		RegistrarZombie(playerid);
		zombies++;
	}
	return 1;
}


public OnPlayerDisconnect(playerid, reason)
{
	if (Tipo[playerid] != 0) {
		if (Tipo[playerid] == HUMANO) humanos--;
		else zombies--;
		Tipo[playerid] = 0;
	}
	return 1;
}

stock RegistrarHumano(playerid)
{
	Tipo[playerid] = HUMANO);
}

stock RegistrarZombie(playerid)
{
	Tipo[playerid] = ZOMBIE);
}
Ya te digo que eso no hace nada, es para que te hagas una idea.
Reply
#4

No entendн nada xddd ni me acuerdo de pawno D; me podrнas ayudar con eso?
Reply
#5

Primero explica un poco cуmo es el sistema. Una vez el usuario se conecta elige el equipo o cуmo? Lo queGAlvaro14 te estб mostrando es lo siguiente (y con el permiso de GAlvaro14 me baso en su cуdigo):

El cуdigo estб basado en que cuando te conectes al servidor, eligas un bando. Cуmo? con los comandos que creу Бlvaro (/serhumano o /serzombie). Una vez escribes el comando deseado te aсade al equipo. Si el equipo estб lleno no hace absoluutamente nada, no te aсade a ningъn equipo.

Код:
#define MAX_HUMANOS	5
#define MAX_ZOMBIES		5
#define HUMANO 1
#define ZOMBIE 2
Aquн bбsicamente decides cuбntos players por team quieres, como lo quieres parejo йl te puso de ejemplo 5 y 5 como mбximo (por equipo). Йste cуdigo tiene que estar arriba del todo, fuera de cualquier funciуn. Supongo que tendrбs algъn #define mбs creado, ponlo a continuaciуn. Modifica el 5 por el mбximo de players que quieras en cada equipo, es decir si quieres que el mбximo de humanos sea 10 pon #define HUMANO 10 y asн.

Lo mismo con HUMANO 1 y ZOMBIE 2, es la forma de identificar de forma sencilla el equipo al que el player pertenece. 1 serнa "Team Humano" y 2 serнa "Team Zombie".

Код:
new humanos;
new zombies;

new Tipo[MAX_PLAYERS];
Aquн bбsciamente estбs creando las variables "humanos", "zombies" y Tipo[id]. Las revisaremos mбs adelante, йste cуdigo debe ir despuйs de los define, por ejemplo, pero siempre fuera de cualquier funciуn.

Код:
zcmd(serhumano, playerid, params[])	{
	if (humanos < MAX_HUMANOS)	{
		RegistrarHumano(playerid);
		humanos++;
	}
	return 1:
}

zcmd(serzombie, playerid, params[])	{
	if (zombies < MAX_ZOMBIES)	{
		RegistrarZombie(playerid);
		zombies++;
	}
	return 1;
}
Йstos son los comandos /serhumano y /serzombie. Para poder ejecutar йstos comandos debes tener zcmd como include en tu GM (o Filterscript segъn uses). Aquн te dejo el enlace del Include y las instrucciones para instalarlo: https://sampforum.blast.hk/showthread.php?tid=91354
Son "funciones" extra, agrйgalas tal cual. El funcionamiento es simple,en los dos casos es igual asн que te lo explico en uno sуlo lнnea a lнnea:
Код:
zcmd(serzombie, playerid, params[])	{ // Es la forma de definir un comando en ZCMD.
	if (zombies < MAX_ZOMBIES)	{ // Si la variable zombies es mбs pequeсo que la variable mбximo de players por equipo de zombies (definido todo al principio)
		RegistrarZombie(playerid); // Llamamos a la funciуn para meter al player en el equipo zombie y le pasamos la id del player.
		zombies++; // a la variable zombies le agregamos 1, ya que el player ha entrado en el equipo
	}
	return 1; // devolvemos el comando correctamente
}
Cuando se desconecta el player, Бlvaro ha modificado la funciуn existente en SAMP para ajustarla al sistema. Te la dejo comentada y explicada:
Код:
public OnPlayerDisconnect(playerid, reason) // Funcion de samp
{
	if (Tipo[playerid] != 0) { // Si el tipo de player no es igual a 0 (es decir, zombie o humano)
		if (Tipo[playerid] == HUMANO) humanos--; // Si es humano, restamos 1 humano a la cuenta del equipo
		else zombies--; // Si es zombie, hacemos lo mismo
		Tipo[playerid] = 0; // Dejamos la variable a 0 para el siguiente player que use la ID. Esto es muy importante!!
	}
	return 1; // Desconectamos al usuario con йxito
}
Aquн tienes las funciones para agregar al usuario al equipo, son muy sencillas. Me baso en una para explicarte la funciуn.

Код:
stock RegistrarHumano(playerid)
{
	Tipo[playerid] = HUMANO); // Tipo[id del jugador a unirse] es igual a Humano. Lo mismo con Zombie
}
Reply
#6

El cуdigo de arriba no equilibrarб equipos solo permitirб que en cada equipo entren 5 jugadores.
pawn Код:
if(PLAYERS[HUMANO] > PLAYERS[ZOMBIE] + 1)
    {
        SendClientMessage(playerid, -1, "Por favor seleccione el otro equipo para equilibrar los jugadores.");
        return 1;
    }
Deberбs almacenar el numero de jugadores de cada equipo.
Reply
#7

Gracias HIDRO, si se para que sirve el codigo xd pero querнa saber como adaptarlo al PlayerRequestClass :/ ...
Reply
#8

77??
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)