1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  1. izzatillo

    izzatillo Пользователь

    Регистрация:
    8 июн 2017
    Сообщения:
    126
    Симпатии:
    45
    Пол:
    Мужской
    VKcom:
    musoxonov
    Telegram:
    @musaxonov
    Author: neugomon
    Name: Round Balancer
    Version: 1.1

    Особенности :
    Round Balancer - плагин балансировки команд по скиллу и по онлайну.
    Описывать лень. Плагин - допиленная и урезанная по настройкам версия Lite Balancer

    Настройки :

    PHP:
    #define ACCESS_IMMUNITY ADMIN_RCON    // Иммунитет для админов при балансе (Админы игнорируются любым балансом(по числу/по скиллу))

    #define REPLACED_MENU            // Кастомное меню с 2-мя пунктами.
    #define SCORE_DIFF    2        // Разница в счете между командами (Вкл. аланс по скиллу, если одна команда перееигрывает другую на n раундов)
    #define MIN_PLAYERS    10        // Минимальное кол-во игроков на сервере для баланса по силам ()
    #define ROUND_BSKILL    3        // Каждые n раундов баланс по скиллу (Ну а че, нахер каждый раунд по скиллу то уравнивать?)
    #define PL_IGNORE_NUM    3        // Каждые n перемещений в командах для одного игрока (баланс по кол-ву игроков) (Чтобы не кидало одного и того же)
    #define PL_IGNORE_SKILL    3        // Каждые n замен по скиллу игрока может перемещать  (Чтобы не кидало одного и того же)

    Установка:

    • скачать архив, распаковать
    • прописать настройки в исходнике
    • залить на сервер, прописать в списке плагинов
     

    Вложения:

    Последнее редактирование: 10 июн 2017
    Mmonster нравится это.
  2. Lite Style

    Lite Style Пользователь

    Регистрация:
    11 июн 2017
    Сообщения:
    12
    Симпатии:
    0
    Пол:
    Женский
    Помню раньше был на HLDS, только версия 1.0
    Если у кого-нибудь осталось, скиньте пожалуйста
     
  3. Le$hiy

    Le$hiy Постоялец

    Регистрация:
    10 июн 2017
    Сообщения:
    120
    Симпатии:
    39
    Пол:
    Мужской
    Lite Style,
    PHP:
    #include amxmodx
    #include fakemeta
    #include hamsandwich

    #define ACCESS_IMMUNITY ADMIN_BAN    // Иммунитет для админов при балансе (Админы игнорируются любым балансом(по числу/по скиллу))
    //#define REPLACED_MENU            // Кастомное меню с 2-мя пунктами.
    #define SCORE_DIFF    2        // Разница в счете между командами (Вкл. баланс по скиллу, если одна команда перееигрывает другую на n раундов)
    #define MIN_PLAYERS    10        // Минимальное кол-во игроков на сервере для баланса по силам ()
    #define ROUND_BSKILL    3        // Каждые n раундов баланс по скиллу (Ну а че, нахер каждый раунд по скиллу то уравнивать?)   
    #define PL_IGNORE_NUM    3        // Каждые n перемещений в командах для одного игрока (баланс по кол-ву игроков) (Чтобы не кидало одного и того же)
    #define PL_IGNORE_SKILL    3        // Каждые n замен по скиллу игрока может перемещать  (Чтобы не кидало одного и того же)

    /* Словарь плагина */
    #define MSG_TRANSFER     "^1[^4LTB^1] ^3%s ^4будет перенеcён за команду ^3%s ^4в новом раунде."
    #define MSG_TRANSFER_CT    "контр-террористов"
    #define MSG_TRANSFER_T    "террористов"
    #define MSG_REPLACE    "^1[^4LTB^1] ^4Сильный ^3%s ^4будет заменён на слабого ^3%s ^4в новом раунде."
    /* Конец словаря */   

    #if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
    #endif

    new g_iRoundCount;
    new 
    g_iScoreTtg_iScoreCt;
    new 
    g_iNumTtg_iNumCt;
    new 
    g_iSkipNPl[MAX_PLAYERS+1], g_iSkipSPl[MAX_PLAYERS+1];
    new 
    g_iNewTeam[MAX_PLAYERS+1];

    #define GetTeam(%0) get_pdata_int(%0, 114, 5)

    #define msgSayText 76
    #define msgTeamInfo 86
    #define msgShowOldMenu 96
    #define msgShowVGUIMenu 114

    public plugin_init()
    {
        
    register_plugin("Round Balancer""1.0 build 1337""neygomon");
        
        
    RegisterHam(Ham_Spawn"player""fwdPlayerSpawnPre"false);
    #if defined REPLACED_MENU   
        
    register_clcmd("chooseteam",     "ShowMenu");
        
        
    register_menucmd(register_menuid("Team Menu"), MENU_KEY_1|MENU_KEY_6|MENU_KEY_0"TeamMenuHandler");
        
    register_message(msgShowOldMenu"mShowMenu");
        
    register_message(msgShowVGUIMenu"mShowMenu");
    #endif   
        
    register_event("TeamScore""eTeamScore""a");
        
    register_logevent("_RoundEnd"2"1=Round_End");   
        
    register_logevent("_RestartRound"2"1&Restart_Round_");
        
        
    set_task(1.0"ChangeServerCvars");
    }

    public 
    ChangeServerCvars()
    {
        
    set_cvar_num("mp_autoteambalance",     0);
        
    set_cvar_num("mp_limitteams",         0);
    }

    public 
    client_putinserver(id)
        
    g_iNewTeam[id] = g_iSkipSPl[id] = g_iSkipNPl[id] = 0;

    public 
    eTeamScore()
    {
        new 
    szTeam[2]; read_data(1szTeamcharsmax(szTeam));
        
        switch(
    szTeam[0])
        {
            case 
    'T'g_iScoreTt read_data(2);
            case 
    'C'g_iScoreCt read_data(2);
        }
    }

    public 
    _RestartRound()
        
    g_iRoundCount 0_RoundEnd();

    public 
    _RoundEnd()
    {
        new 
    players[32], pnumszName[32], iTransferNum;
        
        
    GetUsersInTeam(g_iNumTtg_iNumCt);
        
    iTransferNum abs(g_iNumTt g_iNumCt) / 2;
        
        if(
    iTransferNum 0)
        {   
            
    get_players(playerspnum"e", (g_iNumTt g_iNumCt) ? "TERRORIST" "CT");
            for(new 
    ipnumi++)
            {
                if(
    g_iSkipNPl[players[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
                    continue;
                
                
    get_user_name(players[i], szNamecharsmax(szName));
                
                if(
    g_iNumTt g_iNumCt)
                    
    ChatColor(MSG_TRANSFERszNameMSG_TRANSFER_CT), g_iNewTeam[players[i]] = 2;
                else    
    ChatColor(MSG_TRANSFERszNameMSG_TRANSFER_T),  g_iNewTeam[players[i]] = 1;
                
                
    g_iSkipNPl[players[i]] = PL_IGNORE_NUM;
                if(--
    iTransferNum 1) break;
            }
        }

        if(++
    g_iRoundCount ROUND_BSKILL || MIN_PLAYERS get_playersnum() || SCORE_DIFF abs(g_iScoreTt g_iScoreCt))
            return;   
        new 
    iTeamiLeader = (g_iScoreTt g_iScoreCt) ? 2;
        new 
    iRatio[MAX_PLAYERS+1];
        new 
    pEnt1pEnt2;
        
        
    get_players(playerspnum);
        for(new 
    ipnumi++)
        {
            if(
    g_iSkipSPl[players[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
                continue;

            
    iTeam GetTeam(players[i]);
            switch(
    iTeam)
            {
                case 
    12:
                {
                    
    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(pEnt1szName1charsmax(szName1));
        
    get_user_name(pEnt2szName2charsmax(szName2));
        
        
    ChatColor(MSG_REPLACEszName1szName2);
        switch(
    iLeader)
        {
            case 
    1g_iNewTeam[pEnt1] = 2g_iNewTeam[pEnt2] = 1;
            case 
    2g_iNewTeam[pEnt1] = 1g_iNewTeam[pEnt2] = 2;
        }
        
    g_iSkipSPl[pEnt1] = g_iSkipSPl[pEnt2] = PL_IGNORE_SKILL;
    }

    public 
    fwdPlayerSpawnPre(const id)
    {
        if(!
    g_iNewTeam[id]) return;
        
        
    fm_set_user_team(idg_iNewTeam[id]);
        
    g_iNewTeam[id] = 0;
    }
    #if defined REPLACED_MENU
    public mShowMenu(msgIdmsgDestmsgEnt)
    {
        if(
    msgId == msgShowOldMenu)
        {
            static 
    szArg4[20]; get_msg_arg_string(4szArg4charsmax(szArg4));
            if(
    contain(szArg4"Team_Select") == -1)
                return 
    PLUGIN_CONTINUE;
        }
        else if(
    get_msg_arg_int(1) != 2)
            return 
    PLUGIN_CONTINUE;

        
    set_pdata_int(msgEnt2050);
        
    ShowMenu(msgEnt);
        return 
    PLUGIN_HANDLED;
    }

    public 
    ShowMenu(id)
        return 
    show_menu(idMENU_KEY_0|MENU_KEY_1|MENU_KEY_6"\d[\rLTB\d] \yВыберите действие:^n^n\y1. \rВойти в игру^n\y6. \wНаблюдение^n^n\y0. \wВыход", -1"Team Menu");

    public 
    TeamMenuHandler(idiKey)
    {
        switch(
    iKey)
        {
            case 
    0:
            {
                
    GetUsersInTeam(g_iNumTtg_iNumCt);
                
    set_pdata_int(id125get_pdata_int(id125) & ~(1<<8));
                
    engclient_cmd(id"jointeam", (g_iNumTt g_iNumCt) ? "2" "1");
            }
            case 
    5user_silentkill(id), engclient_cmd(id"jointeam""6");
        }
        return 
    PLUGIN_HANDLED;
    }
    #endif
    stock ChatColor(const szMessage[], any:...)
    {
        static 
    players[32], pnum;     get_players(playerspnum"c");
        static 
    szMsg[190];         vformat(szMsgcharsmax(szMsg), szMessage2);

        for(new 
    ipnumi++)
        {
            
    message_begin(MSG_ONE_UNRELIABLEmsgSayText, .player players[i]);
            
    write_byte(players[i]);
            
    write_string(szMsg);
            
    message_end();
        }
    }

    stock GetUsersInTeam(&tt, &ctplayers[32]=""pnum=0)
    {
        
    tt ct 0;
        
    get_players(playerspnum);
        
        for(new 
    ipnumi++)
        {
            switch(
    GetTeam(players[i]))
            {
                case 
    1tt++;
                case 
    2ct++;
            }
        }
    }

    stock fm_set_user_team(idteam)
    {
        
    set_pdata_int(id114team5);
        
    dllfunc(DLLFunc_ClientUserInfoChangedidengfunc(EngFunc_GetInfoKeyBufferid));
        
        
    emessage_begin(MSG_ALLmsgTeamInfo);
        
    ewrite_byte(id);
        switch(
    team)
        {
            case 
    1ewrite_string("TERRORIST");
            case 
    2ewrite_string("CT");
        }
        
    emessage_end();   
    }
     
  4. Lite Style

    Lite Style Пользователь

    Регистрация:
    11 июн 2017
    Сообщения:
    12
    Симпатии:
    0
    Пол:
    Женский
    Le$hiy, сам плагин вроде работает, вот только меню не показывает
     

    Вложения:

  5. neygomon

    neygomon Его Темнейшество :j Команда форума Администратор

    Регистрация:
    8 июн 2017
    Сообщения:
    196
    Симпатии:
    128
    Пол:
    Мужской
    Lite Style, локально компилируй и используй для редактирования плагина notepad++
     
    bob001 нравится это.
  6. Lite Style

    Lite Style Пользователь

    Регистрация:
    11 июн 2017
    Сообщения:
    12
    Симпатии:
    0
    Пол:
    Женский
    neygomon, всё так и делала.
     
  7. bob001

    bob001 Пользователь

    Регистрация:
    17 июн 2017
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    иногда выдает ошибку этот авто баланс
    L 06/23/2017 - 10:51:24: [ReAPI] set_member: invalid or uninitialized entity
    L 06/23/2017 - 10:51:24: [AMXX] Run time error 10 (plugin "amxtmbalanc.amxx") (native "set_member") - debug not enabled!
    L 06/23/2017 - 10:51:24: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
     
  8. nakazatel

    nakazatel Пользователь

    Регистрация:
    10 июн 2017
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    amxtmbalanc.amxx debug
     
  9. famas

    famas Пользователь

    Регистрация:
    13 июн 2017
    Сообщения:
    9
    Симпатии:
    2
    Пол:
    Мужской
    Установил всё работает нормально!!
     
  10. GIT

    GIT Пользователь

    Регистрация:
    9 июн 2017
    Сообщения:
    38
    Симпатии:
    1
    Пол:
    Мужской
    #define VERSION "2.3"
    // 2.2: add winstreak for skill balancer
    // 2.3: remake hooks
    register_plugin("[ReAPI] Lite TeamBalancer", VERSION, "neugomon");
    Это что за версия у меня ?
     
  11. GIT

    GIT Пользователь

    Регистрация:
    9 июн 2017
    Сообщения:
    38
    Симпатии:
    1
    Пол:
    Мужской
    чем отличаются 2 версии что я скинул выше