Имунка для round_balancer

Сообщения
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;
    }
}
 

Вложения

Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу