Помощь по плагину csdm_balancer от zerocool

Статус
В этой теме нельзя размещать новые ответы.

ifx

Пользователь
Регистрация
11 Фев 2018
Сообщения
361
Симпатии
148
Есть вот такой плагин csdm_balancer. Он балансит игроков на ксдм моде по скилу, но балансит их когда они живы. У меня стоит мод с пушками\лазерами и получается, что игрока живого кидает за др команду и все его пушки уничтожаются.

Надо сделать, чтобы игрока перекидывало уже после смерти + добавить игнорирование на перекидывание ботов.

Вот сам код плагина

Код:
/*   
*    CSDM Balancer V1.0 by Zer0CooL
*    http://forum.alfa-strike.net
*/

#include <amxmodx>
#include <cstrike>

#define LAST_PLAYERS_COUNT 4

////////////////// √лобальные переменные//////////////////////
static Float:g_checkInterval, g_maxDisbalance, g_skillPlayer,
g_minPlayers, g_maxPlayers, skillPlayer,
CsTeams:g_lessTeam, g_playerScore, g_worstScore,
g_bestScore, g_lastPlayers[LAST_PLAYERS_COUNT];
new g_num;
//////////////////////////////////////////////////////////////

public plugin_init()
{
    register_plugin( "CSDM Balancer", "1.0", "Zer0CooL" )
    register_dictionary( "csdmbalancer.txt" )
    
    register_cvar    ( "dmb_sound",             "0"    )
    register_cvar    ( "dmb_minplayers",     "4"    )
    register_cvar    ( "dmb_skillplayer",     "1"    )
    register_cvar    ( "dmb_enableplugin",     "1"    )
    register_cvar    ( "dmb_checkinterval",    "180.0" )
    register_cvar    ( "dmb_maxdisbalance",    "1"    )
}

public plugin_cfg()
{
    g_maxPlayers        =   get_maxplayers    ()
    g_minPlayers        =    get_cvar_num    ( "dmb_minplayers"      )
    skillPlayer         =
    g_skillPlayer        =     get_cvar_num      ( "dmb_skillplayer"   )
    g_maxDisbalance        =     get_cvar_num      ( "dmb_maxdisbalance" )
    g_checkInterval     =     get_cvar_float    ( "dmb_checkinterval" )
    
    if( get_cvar_num("dmb_enableplugin") < 1 || g_maxPlayers < 4 )
        return 0
    
    if( g_maxDisbalance < 1 )
        g_maxDisbalance = 1
        
    if( g_minPlayers < 4 )
        g_minPlayers = 4
        
    if( g_checkInterval < 10 )
        g_checkInterval = 10.0
    
    server_cmd( "mp_autoteambalance 0;mp_limitteams %d", g_maxDisbalance )
    
    set_task( g_checkInterval, "check", 0, _, _, "b" )
    return 0
}

public check()
{
    static players[32];
    new playerCount = 0,
    T_Count = 0, CT_Count = 0;
    
    for( new i = 1; i <= g_maxPlayers; i++ )
    {
        if ( !is_user_connected(i) || is_user_hltv(i) )
            continue
    
        switch( cs_get_user_team(i) )
        {
            case CS_TEAM_CT: CT_Count++;
            case CS_TEAM_T: T_Count++;
            default: continue;
        }
        
        players[playerCount] = i
        playerCount++
    }
    
    if( playerCount < g_minPlayers ) return PLUGIN_CONTINUE
    
    else if( (CT_Count - T_Count) > g_maxDisbalance )
        g_lessTeam = CS_TEAM_T
    
    else if( (T_Count - CT_Count) > g_maxDisbalance )
        g_lessTeam = CS_TEAM_CT
        
    else return PLUGIN_CONTINUE
    
    //    Transfer Player
    new id = GetPlayer( players, playerCount, g_lessTeam )
    
    else if( g_lessTeam == CS_TEAM_CT && user_has_weapon(id, CSW_C4) )
        engclient_cmd( id, "drop", "weapon_c4" )
    
    else if( g_lessTeam == CS_TEAM_T && cs_get_user_defuse(id) )
        cs_set_user_defuse( id, 0 )
    
    cs_set_user_team( id, g_lessTeam )
    ShowMessage( id )
    
    return PLUGIN_CONTINUE
}

ShowMessage( id )
{
    static name[32], teamName[19];
    get_user_name( id, name, charsmax(name) )
    
    teamName = g_lessTeam == CS_TEAM_CT ? "Counter-Terrorists" : "Terrorists";
    
    client_print    ( 0, print_chat, "%L", LANG_PLAYER, "CHAT_MESSAGE", name, teamName )
    console_print    ( 0, "%s has been transfered to %s.", name, teamName )
    
    if( !is_user_bot(id) )
    {
        set_hudmessage    ( 255, 140, 0, -1.0, 0.40, 2, 0.02, 5.0, 0.01, 0.1, 2 )
        show_hudmessage    ( id, "%L", LANG_PLAYER, "HUD_MESSAGE", teamName )
    }
    else
        user_kill( id )
}

GetPlayer( const players[], playerCount, CsTeams:g_lessTeam )
{
    if( g_skillPlayer > 1 ) skillPlayer = random_num(0, 1)
    g_bestScore = -9999, g_worstScore = 9999;
    
    static id, player;
    for( new i = 0; i < playerCount; i++ )
    {
        player = players[i]

        if( cs_get_user_team(player) == g_lessTeam || IsLastPlayer(player) )
            continue
        
        else if( IsSatisfactoryPlayer(player) )
            id = player
    }
    
    PutLastPlayer( id )
    return id
}

bool:IsLastPlayer( id )
{
    for( new i = 0; i < LAST_PLAYERS_COUNT; i++ )
        if( g_lastPlayers[i] == id )
            return true

    return false
}

PutLastPlayer( id )
{
    if( g_num > (LAST_PLAYERS_COUNT - 1) )
        g_num = 0;
        
    g_lastPlayers[g_num] = id
    g_num++
}

bool:IsSatisfactoryPlayer( id )
{
    g_playerScore = ( get_user_frags(id) - get_user_deaths(id) )
    
    switch( skillPlayer )
    {
        case 0:
        {
            if( g_playerScore <= g_worstScore )
            {
                g_worstScore = g_playerScore
                return true
            }
        }
        case 1:
        {
            if( g_playerScore >= g_bestScore )
            {
                g_bestScore = g_playerScore
                return true
            }
        }
    }
    return false
}
Я вижу что проверка идет в этом блоке

// Transfer Player
new id = GetPlayer( players, playerCount, g_lessTeam )

if( !is_user_bot(id) ) return PLUGIN_CONTINUE
else if (is_user_alive(id)) return PLUGIN_CONTINUE


else if( g_lessTeam == CS_TEAM_CT && user_has_weapon(id, CSW_C4) )
engclient_cmd( id, "drop", "weapon_c4" )

else if( g_lessTeam == CS_TEAM_T && cs_get_user_defuse(id) )
cs_set_user_defuse( id, 0 )

cs_set_user_team( id, g_lessTeam )
ShowMessage( id )

return PLUGIN_CONTINUE
}

и дописал, но видимо криво, тк проверка на жив ли юзер не работает, можете подсказать, что я делаю не так?
 

3Be3Da

Пользователь
Регистрация
14 Авг 2017
Сообщения
131
Симпатии
3
Предупреждения
30
Пол
Мужской
if( cs_get_user_team(player) == g_lessTeam || !is_user_alive(player)||is_user_bot(player) Попробуй так.
 

3Be3Da

Пользователь
Регистрация
14 Авг 2017
Сообщения
131
Симпатии
3
Предупреждения
30
Пол
Мужской

ifx

Пользователь
Регистрация
11 Фев 2018
Сообщения
361
Симпатии
148
, большое спасибо!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу