Skip to content

Commit

Permalink
Updated to version 0.3.9
Browse files Browse the repository at this point in the history
- Added information about the plugin author
- Added server CVAR to display the plugin version
- Optimized random player selection method (thanks to Ayk)
- Added a second check after each player's transfer for another team
- Changed some phrases in the plugin dictionary
  • Loading branch information
Nord1cWarr1or committed Dec 13, 2019
1 parent e438f03 commit c790607
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 25 deletions.
6 changes: 3 additions & 3 deletions data/lang/dm_autobalance.txt
Expand Up @@ -2,7 +2,7 @@
DMTB_CVAR_MAX_DIFF = Maximum allowable difference between teams
DMTB_CVAR_MODE = Transfer mode^n1 - simple player's respawn^n2 - teleport to spawnspot
DMTB_CVAR_TIME = Time before switching a player for another team
DMTB_CVAR_IMMUNITY = A flag that gives immunity from balance
DMTB_CVAR_IMMUNITY = A flag that defines the admin
DMTB_CVAR_BOTS = Do you have to consider the bots when balancing?
DMTB_CVAR_ADMIN_MODE = Admins balancing mode.^n0 - switch like normal players.^n1 - do not switch team.^n2 - distribute between teams
DMTB_CVAR_MAX_DIFF_ADMINS = Maximum allowable difference between the number of admins in the commands
Expand All @@ -16,9 +16,9 @@ DMTB_CHAT_BALANCED_TE = ^4* ^3%n ^1has been moved to ^3team terrorists^1.
DMTB_CVAR_MAX_DIFF = Максимально допустимая разница между командами
DMTB_CVAR_MODE = Режим работы переноса^n1 - простой респавн игрока^n2 - телепорт на спавн
DMTB_CVAR_TIME = Время перед перемещением игрока за другую команду
DMTB_CVAR_IMMUNITY = Флаг, дающий иммунитет от баланса
DMTB_CVAR_IMMUNITY = Флаг, определяющий админа
DMTB_CVAR_BOTS = Учитывать ли ботов при балансе?
DMTB_CVAR_ADMIN_MODE = Режим балансировки админов.^n0 - переводить вместе со всеми^n1 - не переводить^n2 - распределять между командами
DMTB_CVAR_ADMIN_MODE = Режим балансировки админов.^n0 - переводить вместе со всеми^n1 - иммунитет от баланса^n2 - распределять между командами
DMTB_CVAR_MAX_DIFF_ADMINS = Максимально допустимая разница между количеством админов в командах
DMTB_DHUD_WILL_BALANCED = Вы будете перемещены за другую команду через %.0f сек.
DMTB_DHUD_BALANCED_CT = Вы были перемещены за контр-террористов
Expand Down
66 changes: 44 additions & 22 deletions scripting/AutoBalance.sma
@@ -1,10 +1,26 @@
/* * * * * * * * * * * * * * * * * *
* *
* Plugin: Automatic command balance for DM servers *
* *
* Official plugin support: https://dev-cs.ru/threads/8029/ *
* Contacts of the author: Telegram: @NordicWarrior *
* *
* * * * * * * * * * * * * * * * * *
* *
* Плагин: Автоматический баланс команд для DM сереров *
* *
* Официальная поддержка плагина: https://dev-cs.ru/threads/8029/ *
* Связь с автором: Telegram: @NordicWarrior *
* *
* * * * * * * * * * * * * * * * * */

#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <xs>
#include <screenfade_util>

new const PLUGIN_VERSION[] = "0.3.8";
new const PLUGIN_VERSION[] = "0.3.9";

#define GetCvarDesc(%0) fmt("%L", LANG_SERVER, %0)

Expand Down Expand Up @@ -74,6 +90,11 @@ public plugin_init()
#endif
}

public OnConfigsExecuted()
{
register_cvar("dmtb_version", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
}

public FindSpawnEntities()
{
new iSpawnEntCT = MaxClients;
Expand Down Expand Up @@ -170,7 +191,7 @@ public CheckTeams()
{
GetPlayerForBalance(g_iCountAdminsInTeam[TEAM_TERRORIST], g_iCountAdminsInTeam[TEAM_CT], true);
}
ArrayZeroing();
ArraysZeroing();
return PLUGIN_HANDLED;
}

Expand All @@ -179,24 +200,28 @@ GetPlayerForBalance(const iNumTE, const iNumCT, bool:bAdmins = false)
new iTeamToBalance = xs_sign(iNumTE - iNumCT);
new iRandomPlayer;

if(iTeamToBalance == 1 && !bAdmins)
{
iRandomPlayer = g_iPlayersInTeam[TEAM_TERRORIST][random(g_iCountPlayersInTeam[TEAM_TERRORIST])];
g_iNewPlayerTeam[iRandomPlayer] = TEAM_CT;
}
else if(iTeamToBalance == -1 && !bAdmins)
{
iRandomPlayer = g_iPlayersInTeam[TEAM_CT][random(g_iCountPlayersInTeam[TEAM_CT])];
g_iNewPlayerTeam[iRandomPlayer] = TEAM_TERRORIST;
}
else if(iTeamToBalance == 1 && bAdmins)
if(iTeamToBalance == 1)
{
iRandomPlayer = g_iAdminsInTeam[TEAM_TERRORIST][random(g_iCountAdminsInTeam[TEAM_TERRORIST])];
if(!bAdmins)
{
iRandomPlayer = g_iPlayersInTeam[TEAM_TERRORIST][random(g_iCountPlayersInTeam[TEAM_TERRORIST])];
}
else
{
iRandomPlayer = g_iAdminsInTeam[TEAM_TERRORIST][random(g_iCountAdminsInTeam[TEAM_TERRORIST])];
}
g_iNewPlayerTeam[iRandomPlayer] = TEAM_CT;
}
else if(iTeamToBalance == -1 && bAdmins)
else
{
iRandomPlayer = g_iAdminsInTeam[TEAM_CT][random(g_iCountAdminsInTeam[TEAM_CT])];
if(!bAdmins)
{
iRandomPlayer = g_iPlayersInTeam[TEAM_CT][random(g_iCountPlayersInTeam[TEAM_CT])];
}
else
{
iRandomPlayer = g_iAdminsInTeam[TEAM_CT][random(g_iCountAdminsInTeam[TEAM_CT])];
}
g_iNewPlayerTeam[iRandomPlayer] = TEAM_TERRORIST;
}

Expand Down Expand Up @@ -248,11 +273,6 @@ public BalancePlayer(iData[])

rg_switch_team(id);

if(has_flag(id, g_iCvar[ADMIN_FLAG]) && g_iCvar[ADMIN_MODE] == 2)
{
RequestFrame("CheckTeams");
}

switch(g_iCvar[MODE])
{
case 1: rg_round_respawn(id);
Expand All @@ -269,6 +289,8 @@ public BalancePlayer(iData[])
UTIL_ScreenFade(id, g_iNewPlayerTeam[id] == TEAM_CT ? g_iBlueColor : g_iRedColor, 0.5, 2.5, 100);

set_task(0.1, "ShowHud", TASKID__SHOW_HUD + id);

RequestFrame("CheckTeams");
return PLUGIN_CONTINUE;
}

Expand All @@ -282,7 +304,7 @@ public ShowHud(id)
ClientPrintToAllExcludeOne(id, id, "%l", g_iNewPlayerTeam[id] == TEAM_CT ? "DMTB_CHAT_BALANCED_CT" : "DMTB_CHAT_BALANCED_TE", id);
}

ArrayZeroing()
ArraysZeroing()
{
arrayset(g_iPlayersInTeam[any:0][0], 0, sizeof g_iPlayersInTeam * sizeof g_iPlayersInTeam[]);
arrayset(g_iCountPlayersInTeam[any:0], 0, sizeof g_iCountPlayersInTeam);
Expand Down

0 comments on commit c790607

Please sign in to comment.