1. kpykpy Пользователь

    Регистрация:
    15.06.16
    Сообщения:
    20
    Симпатии:
    0
    Пол:
    Мужской
    Есть замечательный плагин Entity Resources Replacement Entity Resources Replacement[ V 1.4 ] - AlliedModders
    С какой-то версии ReGameDLL перестал работать.
    Требуется либо исправленный либо переписанный под ReAPI аналог.
    Конкретно эти функции + использование конфигов под отдельные карты
    [​IMG]

    И второй плагин inst_autoteambalance_orpheu.sma
    Код:
    /*    Formatright © 2010, ConnorMcLeod
    
        This plugin is free software;
        you can redistribute it and/or modify it under the terms of the
        GNU General Public License as published by the Free Software Foundation.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this plugin; if not, write to the
        Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        Boston, MA 02111-1307, USA.
    */
    
    #include <amxmodx>
    #include <orpheu>
    
    #define VERSION "0.0.2"
    #define PLUGIN "Instant AutoTeam Balance"
    
    new OrpheuFunction:g_OfBalanceTeams
    new OrpheuFunction:g_OfClientPrintAll
    new g_pGameRules
    
    public plugin_precache()
    {
        OrpheuRegisterHook(OrpheuGetFunction("InstallGameRules"), "OnInstallGameRules_Post", OrpheuHookPost)
    }
    
    public OnInstallGameRules_Post()
    {
        g_pGameRules = OrpheuGetReturn()
    }
    
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, "ConnorMcLeod")
    
        g_OfBalanceTeams = OrpheuGetFunction("BalanceTeams", "CHalfLifeMultiplay")
        g_OfClientPrintAll = OrpheuGetFunction("UTIL_ClientPrintAll")
    
        register_event("TextMsg", "Ev_TextMsg_TeamBalanceNextRound", "a", "1=4", "2=#Auto_Team_Balance_Next_Round")
    }
    
    public Ev_TextMsg_TeamBalanceNextRound()
    {
        static bool:bHooking = false
        if( bHooking )
        {   // Send BalanceTeams Call the message we are just post hooking...
            return
        }
    
        bHooking = true
        OrpheuCall(g_OfBalanceTeams, g_pGameRules)
        bHooking = false
    
        UTIL_ClientPrintAll(print_center, "Команды сбалансированы!")
    }
    
    UTIL_ClientPrintAll(msg_dest, const msg_name[], const param1[] = "", const param2[] = "", const param3[] = "", const param4[] = "")
    {
        OrpheuCall(g_OfClientPrintAll, msg_dest, msg_name, param1, param2, param3, param4)
    }
    Уже не рабочий на ReHLDS и т.д.
    Вызывал каждый раунд стандартный балансер тим. Может есть уже нужные функции ReAPI ,чтобы тоже самое выполнять?
     
    Последнее редактирование: 26.09.16
  2. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    как то так...
    Код:
    #include <amxmodx>
    #include <reapi>
    
    public plugin_init()
    {
        register_message(get_user_msgid("TextMsg"), "HookTextMsgPre");
        register_event("TextMsg", "HookTextMsgPost", "a", "1=4", "2=#Auto_Team_Balance_Next_Round");
    }
     
    public HookTextMsgPre(msgId, msgDesc, msgEnt)
    {
        if(msgDesc == MSG_ALL && get_msg_arg_int(1) == 4)
        {
            static msg[30];
            get_msg_arg_string(2, msg, charsmax(msg));
            if(strcmp(msg, "#Auto_Team_Balance_Next_Round") == 0)
                set_msg_arg_string(2, "*** Команды сбалансированы ***");
        }
    }
    
    public HookTextMsgPost()
        rg_balance_teams();
     
    ops244, kpykpy и ThePhoenix нравится это.
  3. tpylala Пользователь

    Регистрация:
    27.04.16
    Сообщения:
    174
    Симпатии:
    20
    Пол:
    Мужской
    @neygomon, Вань, а на реапи Free Ammo Refill можно сделать ?
    PHP:
    // Copyright © 2015 Vaqtincha

    /** Free Ammo Refill Clip
    *
    *    Last update:
    *     28/01/2016
    *
    *    Description:
    *    This plugin give full bpammo & refill clip on a player that buyed
    *    a weapon or on round start like in Counter-Strike: Source
    *
    *    Credits:
    *    - VEN for "detect when a player buy a weapon"
    *    - ConnorMcLeod for cstrike_pdatas
    *
    *    Games supported:
    *    - Counter-Strike
    *    - Condition Zero
    *
    *    Modules required:
    *    - Hamsandwich
    *    - Fakemeta
    *
    ***************************************************************/

    #include <amxmodx>
    #include <hamsandwich>
    #include <fakemeta>

    #define MAX_PLAYERS 32

    #define fm_get_weapon_id(%1)        get_pdata_int(%1, m_iId, XO_WEAPON)
    #define fm_set_weapon_ammo(%1,%2)    set_pdata_int(%1, m_iClip, %2, XO_WEAPON)

    // Offsets
    const m_iId 43
    const m_iClip 51
    const m_pNext 42
    const XO_WEAPON 4
    new const m_rgpPlayerItems_CBasePlayer[6] = {367368, ...}

    new 
    bool:g_bBuyzone[MAX_PLAYERS+1], g_Weapons[MAX_PLAYERS+1]

    new const 
    g_iMaxClip[CSW_P90+1] = { -113, -1101713030130202530,
        
    3525122010301008303020273030, -150
    }
    new const 
    g_iMaxBPAmmo[CSW_P90+1] = { -152, -1901321100901120100100,
        
    909090100120301202003290120902359090, -1100
    }
    new const 
    g_AmmoType[CSW_P90+1][] = { """357sig""""762nato""""buckshot""""45acp""556nato",
        
    """9mm""57mm""45acp""556nato""556nato""556nato""45acp""9mm""338magnum""9mm",
        
    "556natobox""buckshot""556nato""9mm""762nato""""50ae""556nato""762nato""""57mm"
    }

    public 
    plugin_init()
    {
        
    register_plugin("Free BpAmmo Refill Clip""0.0.6""Vaqtincha")
     
        
    RegisterHam(Ham_Spawn"player""playerspawn_post"1)
        
    register_event("Money""event_money""be")
        
    register_event("StatusIcon""event_buyzone_icon""be""2=buyzone")
    }

    public 
    event_buyzone_icon(idg_bBuyzone[id] = bool:read_data(1)
    public 
    client_putinserver(idg_bBuyzone[id] = false
    public client_command(idg_Weapons[id] = get_weapons(id)
    public 
    playerspawn_post(idset_task(0.1"giveammo"id)

    public 
    giveammo(id)
    {
        if(!
    is_user_alive(id))
            return

        for(new 
    slot 1slot<= 2slot++)
        {
            new 
    iWeapon get_pdata_cbase(idm_rgpPlayerItems_CBasePlayer[slot])
            while(
    iWeapon 0)
            {
                new 
    iId fm_get_weapon_id(iWeapon)
                
    fm_set_weapon_ammo(iWeapong_iMaxClip[iId])
                
    ExecuteHamB(Ham_GiveAmmoidg_iMaxBPAmmo[iId], g_AmmoType[iId], g_iMaxBPAmmo[iId])
                
    iWeapon get_pdata_cbase(iWeaponm_pNextXO_WEAPON)
            }
        }
    }

    public 
    event_money(id)
    {
        if(!
    g_bBuyzone[id])
            return

        new 
    iWeapons get_weapons(id) & ~g_Weapons[id]
        if(
    iWeapons)
        {
            new 
    iId = -1
            
    do ++iId; while((iWeapons /= 2) >= 1)
            
    ExecuteHamB(Ham_GiveAmmoidg_iMaxBPAmmo[iId], g_AmmoType[iId], g_iMaxBPAmmo[iId])
            
    g_Weapons[id] = 0
        
    }
    }

    get_weapons(id)
    {
        static 
    dummy[32]; return get_user_weapons(iddummydummy[0])
    }
     
  4. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    655
    Симпатии:
    241
    Пол:
    Мужской
    @tpylala, Эмм, есть квар в game.cfg.
     
  5. tpylala Пользователь

    Регистрация:
    27.04.16
    Сообщения:
    174
    Симпатии:
    20
    Пол:
    Мужской
    @MakapoH., квар не выдает патроны при закупке нового оружия

    или как вариант поставить квар и сделать плагин для выдачи полной обоймы при закупке

    возможна ли реализация любого из вариантов на реапи?
     
  6. ops244 Пользователь

    Регистрация:
    28.02.15
    Сообщения:
    342
    Симпатии:
    55
    Пол:
    Мужской
    @neygomon, Вань, а добавь в балансировщик иммунитет для одминов плз
     
  7. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @ops244, нет. тут нет иммунитета. и его не сделать
     
  8. kpykpy Пользователь

    Регистрация:
    15.06.16
    Сообщения:
    20
    Симпатии:
    0
    Пол:
    Мужской
    @neygomon, балансирует а
    Код:
    set_msg_arg_string(2, "*** Команды сбалансированы ***");
    не срабатывает
     
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @kpykpy, ну лично я видел мессагу на тестовом сервере :)
     
  10. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    228
    Симпатии:
    19
    Пол:
    Мужской
    клиент steam & non steam?
    __
    на пиратке у меня порой блочатся всякие сообщения на экране :)
     
  11. kpykpy Пользователь

    Регистрация:
    15.06.16
    Сообщения:
    20
    Симпатии:
    0
    Пол:
    Мужской
    Проверял на стиме, может её перебивают другие сообщения. Иногда сообщение про автобаланс в след раунде. Оригинал сделали на орфее по моему как раз из-за невозможности убрать стандартные месаги
     
  12. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    нет. стандартными средствами просто не вызвать баланс мгновенно
     
  13. ops244 Пользователь

    Регистрация:
    28.02.15
    Сообщения:
    342
    Симпатии:
    55
    Пол:
    Мужской
    @kpykpy, в самый низ поставь его попробуй
     
  14. kpykpy Пользователь

    Регистрация:
    15.06.16
    Сообщения:
    20
    Симпатии:
    0
    Пол:
    Мужской
    Вот такой вот вариант без орфея, и
    Код:
    g_pCvarMessage = register_cvar("iatb_message", "Команды сбалансированы")
    тоже не заменялась
    Код:
    /*    Copyright © 2008, ConnorMcLeod
    
        Instant AutoTeamBalance is free software;
        you can redistribute it and/or modify it under the terms of the
        GNU General Public License as published by the Free Software Foundation.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with Instant AutoTeamBalance; if not, write to the
        Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        Boston, MA 02111-1307, USA.
    */
    
    #include <amxmodx>
    #include <cstrike>
    
    #define PLUGIN "Instant AutoTeamBalance"
    #define AUTHOR "ConnorMcLeod"
    #define VERSION "1.2.0"
    
    #define BALANCE_IMMUNITY        ADMIN_RCON
    
    #define MAX_PLAYERS    32
    
    enum {
        aTerro,
        aCt
    }
    
    new bool:g_bImmuned[MAX_PLAYERS+1]
    
    new Float:g_fJoinedTeam[MAX_PLAYERS+1] = {-1.0, ...}
    
    new g_iMaxPlayers
    new g_pcvarEnable, g_pcvarImmune, g_pCvarMessage
    
    // true when connected and not a HLTV
    new bool:g_bValid[MAX_PLAYERS+1]
    
    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
    
        g_pcvarEnable = register_cvar("iatb_active", "1")
        g_pcvarImmune = register_cvar("iatb_admins_immunity", "1")
        g_pCvarMessage = register_cvar("iatb_message", "Команды сбалансированы")
    
        register_logevent("LogEvent_JoinTeam", 3, "1=joined team")
    
        register_event("TextMsg", "Auto_Team_Balance_Next_Round", "a", "1=4", "2&#Auto_Team")
    
        g_iMaxPlayers = get_maxplayers()
    }
    
    public LogEvent_JoinTeam()
    {
        new loguser[80], name[32], id
        read_logargv(0, loguser, 79)
        parse_loguser(loguser, name, 31)
        id = get_user_index(name)
    
        g_fJoinedTeam[id] = get_gametime()
    }
    
    public client_authorized(id)
    {
        g_bImmuned[id] = bool:(get_user_flags(id) & BALANCE_IMMUNITY)
    }
    
    public client_putinserver(id)
    {
        g_bValid[id] = bool:!is_user_hltv(id)
    }
    
    public client_disconnect(id)
    {
        g_bValid[id] = false
    }
    
    public Auto_Team_Balance_Next_Round()
    {
        if(!get_pcvar_num(g_pcvarEnable))
            return
    
        if( balance_teams()  )
        {
            new szMessage[128]
            get_pcvar_string(g_pCvarMessage, szMessage, charsmax(szMessage))
            client_print(0, print_center, szMessage)
        }
    }
    
    cs_set_user_team_custom(id, CsTeams:iTeam)
    {
        switch(iTeam)
        {
            case CS_TEAM_T:
            {
                if( cs_get_user_defuse(id) )
                {
                    cs_set_user_defuse(id, 0)
                    // set body to 0 ?
                }
            }
            case CS_TEAM_CT:
            {
                if( user_has_weapon(id, CSW_C4) )
                {
                    engclient_cmd(id, "drop", "weapon_c4")
                }
            }
        }
    
        cs_set_user_team(id, iTeam)
    
        return 1
    }
    
    balance_teams()
    {
        new aTeams[2][MAX_PLAYERS], aNum[2], id
    
        for(id = 1; id <= g_iMaxPlayers; id++)
        {
            if(!g_bValid[id])
            {
                continue
            }
    
            switch( cs_get_user_team(id) )
            {
                case CS_TEAM_T:
                {
                    aTeams[aTerro][aNum[aTerro]++] = id
                }
                case CS_TEAM_CT:
                {
                    aTeams[aCt][aNum[aCt]++] = id
                }
                default:
                {
                    continue
                }
            }
        }
    
        new iCheck
        new iTimes = aNum[aCt] - aNum[aTerro]
    
        if(iTimes > 0)
        {
            iCheck = aCt
        }
        else if(iTimes < 0)
        {
            iCheck = aTerro
        }
        else
        {
            return 0
        }
    
        iTimes = abs(iTimes/2)
    
        new bool:bTransfered[MAX_PLAYERS+1],
            bool:bAdminsImmune = bool:get_pcvar_num(g_pcvarImmune)
    
        new iLast, iCount
        while( iTimes > 0 )
        {
            iLast = 0
            for(new i=0; i <aNum[iCheck]; i++)
            {
                id = aTeams[iCheck][i]
                if( g_bImmuned[id] && bAdminsImmune )
                {
                    continue
                }
                if(bTransfered[id])
                {
                    continue
                }
                if(g_fJoinedTeam[id] > g_fJoinedTeam[iLast])
                {
                    iLast = id
                }
            }
    
            if(!iLast)
            {
                return 0
            }
    
            cs_set_user_team_custom(iLast, iCheck ? CS_TEAM_T : CS_TEAM_CT)
    
            bTransfered[iLast] = true
            iCount++
            iTimes--
        }
        return 1
    }
     
  15. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @kpykpy, а тут и не должно заменяться...
     
    kpykpy нравится это.
  16. ops244 Пользователь

    Регистрация:
    28.02.15
    Сообщения:
    342
    Симпатии:
    55
    Пол:
    Мужской
    @neygomon, после установки автобаланса чет раунды криво считаться стали... (например бонусы должны быть с 5 раунда то даст, то нет и брать запрещено... если перекинет вообще не считает тому челу раунды... хз как объяснить xD)
     
  17. ops244 Пользователь

    Регистрация:
    28.02.15
    Сообщения:
    342
    Симпатии:
    55
    Пол:
    Мужской
    кароч, вот скрин, это после балансировки
    [​IMG]
    бонусы неактивны и в випке тоже-самое, кароч везде где по раундам
     
  18. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @ops244, никакой связи же..
     
  19. ops244 Пользователь

    Регистрация:
    28.02.15
    Сообщения:
    342
    Симпатии:
    55
    Пол:
    Мужской
    @neygomon, факт есть факт))) его убрал, больше такого не видел...
     
  20. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @ops244, випку скинь.