Участник
Пользователь
- Сообщения
- 460
- Реакции
- 68
- Помог
- 7 раз(а)
Всем привет. Ребят помогите кто по опытней подсказать правильно ли я добавил иммунитет. Под спойлером моя проделка и оригинал.
PHP:
#include <amxmodx>
#include <reapi>
#define ACCESS_IMMUNITY ADMIN_IMMUNITY // Иммунитет для админов при балансе
#define SCORE_DIFF 4 // Разница в счете между командами
#define MIN_PLAYERS 4 // Минимальное кол-во игроков на сервере для баланса по силам
#define PL_IGNORE_NUM 4 // Каждые n перемещений в командах для одного игрока (баланс по кол-ву игроков) (Чтобы не кидало одного и того же)
#define PL_IGNORE_SKILL 4 // Каждые n замен по скиллу игрока может перемещать (Чтобы не кидало одного и того же)
new g_iSkipNPl[MAX_PLAYERS+1], g_iSkipSPl[MAX_PLAYERS+1];
public plugin_init()
{
register_plugin("[ReAPI] Team Balancer", "1.2", "neugomon");
RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
}
public client_putinserver(id)
{
g_iSkipSPl[id] = g_iSkipNPl[id] = 0;
}
public CSGameRules_RestartRound_Pre()
{
new players[32], pnum, szName[32], iTransferNum;
new g_iNumCt = get_member_game(m_iNumCT);
new g_iNumTt = get_member_game(m_iNumTerrorist);
iTransferNum = abs(g_iNumTt - g_iNumCt) / 2;
if(iTransferNum > 0)
{
get_players(players, pnum, "e", (g_iNumTt > g_iNumCt) ? "TERRORIST" : "CT");
for(new i; i < pnum; i++)
{
if(g_iSkipNPl[players[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
continue;
if(g_iSkipNPl[players[i]]-- || g_iSkipSPl[players[i]] == PL_IGNORE_SKILL) continue;
get_user_name(players[i], szName, charsmax(szName));
if(g_iNumTt > g_iNumCt)
client_print_color(0, print_team_blue, "^1[^4Баланс Команд^1] Игрок ^3%s ^1будет перенеcён за команду ^4%s", szName);
else
client_print_color(0, print_team_red, "^1[^4Баланс Команд^1] Игрок ^3%s ^1будет перенеcён за команду ^4%s", szName);
rg_switch_team(players[i]);
g_iSkipNPl[players[i]] = PL_IGNORE_NUM;
if(--iTransferNum < 1)
break;
}
}
new iCtWins = get_member_game(m_iNumCTWins);
new iTtWins = get_member_game(m_iNumTerroristWins);
if(MIN_PLAYERS > get_playersnum()) return;
if(SCORE_DIFF <= abs(iCtWins - iTtWins) || SCORE_DIFF <= abs(iTtWins - iCtWins))
{
new iRatio[MAX_PLAYERS+1];
new pEnt1, pEnt2;
new iTeam, iLeader = (iTtWins > iCtWins) ? 1 : 2;
get_players(players, pnum);
for(new i; i < pnum; i++)
{
if(g_iSkipSPl[players[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
continue;
iTeam = get_member(players[i], m_iTeam);
switch(iTeam)
{
case 1, 2:
{
iRatio[players[i]] = get_user_frags(players[i]) - get_user_deaths(players[i]);
if(iTeam == iLeader)
{
if(iRatio[players[i]] > iRatio[pEnt1])
pEnt1 = players[i];
}
else if(iRatio[pEnt2] > iRatio[players[i]])
pEnt2 = players[i];
}
}
}
if(!pEnt1 || !pEnt2) return;
static szName1[32], szName2[32];
get_user_name(pEnt1, szName1, charsmax(szName1));
get_user_name(pEnt2, szName2, charsmax(szName2));
client_print_color(0, print_team_default, "^1[^4Баланс Команд^1] Сильный игрок ^3%s ^1будет заменён на слабого игрока ^3%s", szName1, szName2);
rg_switch_team(pEnt1);
rg_switch_team(pEnt2);
g_iSkipSPl[pEnt1] = g_iSkipSPl[pEnt2] = PL_IGNORE_SKILL;
}
}
Вложения
-
3.3 KB Просмотры: 7
Последнее редактирование: