//at the top
new Spawned[MAX_PLAYERS];
new BBBalancer,MGBalancer,DMBalancer; //3 teams in my gm
//onplayerconnect
Spawned[playerid] = 0;
//onplayerspawn
if(Spawned[playerid] == 1)
{
if(team[playerid] == BlueberryArmy) BBBalancer++;
if(team[playerid] == MontgomeryArmy) MGBalancer++;
if(team[playerid] == DillimoreArmy) DMBalancer++;
}
Spawned[playerid] = 0;
//onplayerdisconnect
public OnPlayerDisconnect(playerid, reason)
{
if(team[playerid] == BlueberryArmy) BBBalancer--;
if(team[playerid] == DillimoreArmy) DMBalancer--;
if(team[playerid] == MontgomeryArmy) MGBalancer--;
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
Spawned[playerid] = 1;
if(team[playerid] == BlueberryArmy && BBBalancer > MGBalancer || BBBalancer > DMBalancer)
{
SendClientMessage(playerid,red,"[ERROR] Team full. Choose another team!");
return 0;
}
if(team[playerid] == MontgomeryArmy && MGBalancer > BBBalancer || MGBalancer > DMBalancer)
{
SendClientMessage(playerid,red,"[ERROR] Team full. Choose another team!");
return 0;
}
if(team[playerid] == DillimoreArmy && DMBalancer > MGBalancer || DMBalancer > BBBalancer)
{
SendClientMessage(playerid,red,"[ERROR] Team full. Choose another team!");
return 0;
}
return 1;
}
#define MAX_TEAM_PLAYERS 10 //maximum players in a team
new Balancer[MAX_TEAM_PLAYERS];
new BlueberryArmyP;
//onplayerspawn
{
if(team[playerid] == BlueberryArmy && Balancer[BlueberryArmyP] > MAX_TEAM_PLAYERS)
{
//Team Full
}else{
BlueberryArmyP++;
}
}
new Team1;
//onplayerspawn
{
if(team[playerid] == BlueberryArmy && Team1 >= 10) // 10 is the maximum players in a Team!
{
//Team Full
}else{
Team1++;
}
}
//top of the script
new pTeam[MAX_PLAYERS];
new TeamPlayers[3];//3 = amount of your teams 0= BB, 1=MG, 2=DM
//request class
switch(classid)
{
case 0: pTeam[playerid] = 0;
case 1: pTeam[playerid] = 1;
case 2: pTeam[playerid] = 2;
}
//request spawn
for(new i=0; i<3; i++)
{
if(pTeam[playerid]==i) TeamBalance[i]++;
for(new j=0; j<3; j++)
{
if(i !=j)
{
if(TeamBalance[i] > TeamBalance[j])
{
return SendClientMessage(playerid,0xFFFFFFFF,"TeamBalance: Please Choose Another Team"), TeamBalance[i]--;
}
else if(TeamBalance[i]<TeamBalance[j] || TeamBalance[i]==TeamBalance[j])
{
return 1;//spawning player
}
}
}
}
// global
enum Team {
BlueberryArmy,
MontgomeryArmy,
DillimoreArmy
}
stock
Team: gTeam[MAX_PLAYERS] = {Team, ...}
;
// OnPlayerRequestClass
switch(classid) {
case 0..2: gTeam[playerid] = BlueberryArmy;
case 3..5: gTeam[playerid] = MontgomeryArmy;
case 6..8: gTeam[playerid] = DillimoreArmy;
}
// OnPlayerRequestSpawn
new
i,
tie,
Team: biggest,
count[Team + Team: 1]
;
for( ; i != MAX_PLAYERS; ++i) { // foreach
count[gTeam[i]]++;
}
for(i = 1; i < _: Team; ++i) {
if((tie = count[biggest] / count[Team: i]) == 0) {
biggest = Team: i;
} else {
tie = (count[biggest] == count[Team: i]);
}
}
if((tie == 0) && (gTeam[playerid] == biggest)) {
return !SendClientMessage(playerid, 0xFF0000FF, "[ERROR] Team full. Choose another team!");
}
return true;
// OnPlayerDisconnect
gTeam[playerid] = Team;
I dont think that your code will work, it will only allow you to join the team with the lowest team members
pawn Код:
|
error 001: expected token: "-identifier-", but found "-integer value-"
#define BlueberryArmy 1
#define MontgomeryArmy 2
#define DillimoreArmy 3
new team[MAX_PLAYERS];
It gave me a error here
Код:
error 001: expected token: "-identifier-", but found "-integer value-" pawn Код:
|
// OnPlayerRequestSpawn
new
i,
tie,
count[4],
biggest = 1
;
for( ; i < MAX_PLAYERS; ++i) { // use foreach if available
count[team[i]]++;
}
for(i = 2, count[team[playerid]]--; i < sizeof count; ++i) {
if(count[biggest] < count[i]) {
biggest = i;
tie = 0;
} else {
tie = (count[biggest] == count[i]);
}
}
if((tie == 0) && (team[playerid] == biggest)) {
return !SendClientMessage(playerid, 0xFF0000FF, "[ERROR] Team full. Choose another team!");
}
return true;
// OnPlayerDisconnect
team[playerid] = 0;
[23:02:18] [debug] Run time error 11: "Divide by zero" [23:02:18] [debug] AMX backtrace: [23:02:18] [debug] #0 0000cc70 in public OnPlayerRequestSpawn () from cw.amx