Русское сообщество по скриптингу

CSDM AutoTeamBalance: не меняется скин игрока

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

CSDM AutoTeamBalance: не меняется скин игрока

Сообщение denbtr11 » 13 июн 2018, 22:38

Вообщем есть такое дело есть плагин баланса на сервере csdm. при переходе по автобалансу не меняеться скин и иногда играют боты а они не видят игрока. и можно стоять мочить но тебя не тронет. необходимо сделать что бы при балансе человек умирал а не просто переходил в другую команду. я не понял какая строка за это отвечает.

Код: Выделить всё
#include <amxmodx>
#include <cstrike>

#define VERSION "DM 0.4.0"

#define BALANCE_IMMUNITY        ADMIN_RESERVATION

#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_pcvarCount, g_pcvarImmune, g_pCvarMessage

new g_iCounter
new mp_limitteams
, mp_autoteambalance

public plugin_init
()
{
    register_plugin("AutoTeamBalance", VERSION, "ConnorMcLeod")

    g_pcvarCount = register_cvar("atb_death_freq", "25")
    g_pcvarImmune = register_cvar("atb_admins_immunity", "1")
    g_pCvarMessage = register_cvar("iatb_message", "Auto Team Balance происходит каждые 25 фрагов")

    register_logevent("LogEvent_JoinTeam", 3, "1=joined team")
    register_event("DeathMsg", "Event_DeathMsg", "a")

    mp_limitteams = get_cvar_pointer("mp_limitteams")
    mp_autoteambalance = get_cvar_pointer("mp_autoteambalance")
}

public Event_DeathMsg()
{
    new iFreq = get_pcvar_num(g_pcvarCount)
    if( !iFreq || !get_pcvar_num(mp_autoteambalance) )
        return

    if
( ++g_iCounter < iFreq )
        return

    g_iCounter 
= 0
    balance_teams
()
}

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_disconnect(id)
{
    g_iCounter = max(0, get_pcvar_num(g_pcvarCount) - 1)
}

balance_teams()
{
    new iPlayers[MAX_PLAYERS], iNum
    new aTeams
[2][MAX_PLAYERS], aNum[2], id

    get_players
(iPlayers, iNum, "h")

    for(new i; i<iNum; i++)
    {
        id = iPlayers[i]

        switch( cs_get_user_team(id) )
        {
            case CS_TEAM_T:
            {
                aTeams[aTerro][aNum[aTerro]++] = id
            
}
            case CS_TEAM_CT:
            {
                aTeams[aCt][aNum[aCt]++] = id
            
}
        }
    }

    new iCheck
    new iTimes 
= aNum[aCt] - aNum[aTerro]

    if(iTimes > 0)
    {
        iCheck = aCt
    
}
    else if(iTimes < 0)
    {
        iCheck = aTerro
    
}
    else
    
{
        return
    
}

    iTimes = abs(iTimes)

    // at this place iTimes is the players num difference between teams
    if( iTimes < 2 || iTimes <= get_pcvar_num(mp_limitteams) )
    {
        return
    
}

    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
        
}

        if( iCheck )
        {
            cs_set_user_team(iLast, CS_TEAM_T)
        }
        else
        
{
            cs_set_user_team(iLast, CS_TEAM_CT)
        }

        bTransfered[iLast] = true
        iCount
++
        iTimes--
    }

    new szMessage[128]
    get_pcvar_string(g_pCvarMessage, szMessage, charsmax(szMessage))
    client_print(0, print_center, szMessage)

Помогите найти строчку где можно это исправить
P.S. Игрок переходит после смерти но все равно появляеться за своей командой бывшей и со скином. Еще может увеличить время появления игрока? это поможет?

Неинформативное название темы (исправлено) // Subb98
Аватара пользователя
denbtr11
 
Сообщения: 19
Зарегистрирован: 18 май 2018, 18:49
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев

Re: авто баланс

Сообщение Subb98 » 14 июн 2018, 09:58

denbtr11, доброе утро. Пожалуйста, измените название темы на информативное, в соответствии с Вы должны зарегистрироваться, чтобы видеть ссылки.. Если вы не сделаете этого в течение суток, я сделаю это сам, однако в этом случае вам будет выдано предупреждение в профиль.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17