diff --git a/data/lang/dm_autobalance.txt b/data/lang/dm_autobalance.txt index 3d0c89a..8ddbdd3 100644 --- a/data/lang/dm_autobalance.txt +++ b/data/lang/dm_autobalance.txt @@ -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 @@ -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 = Вы были перемещены за контр-террористов diff --git a/scripting/AutoBalance.sma b/scripting/AutoBalance.sma index df5b248..e61f32e 100644 --- a/scripting/AutoBalance.sma +++ b/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 #include #include #include #include -new const PLUGIN_VERSION[] = "0.3.8"; +new const PLUGIN_VERSION[] = "0.3.9"; #define GetCvarDesc(%0) fmt("%L", LANG_SERVER, %0) @@ -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; @@ -170,7 +191,7 @@ public CheckTeams() { GetPlayerForBalance(g_iCountAdminsInTeam[TEAM_TERRORIST], g_iCountAdminsInTeam[TEAM_CT], true); } - ArrayZeroing(); + ArraysZeroing(); return PLUGIN_HANDLED; } @@ -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; } @@ -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); @@ -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; } @@ -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);