Нет возможности выхода в спектры после смерти

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
73
Реакции
39
Помог
3 раз(а)
Ошибка
Нет возможности выхода в спектры после смерти, только после окончания раунда или пока живой.
ОС
Linux
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.3.0.628-dev
Build date: 14:13:29 Dec 26 2017 (1354)
ReGamedll
ReGameDLL version: 5.3.0.279-dev
Build date: 12:34:05 Dec 17 2017
Версия Metamod
Metamod v1.21p37  2013/05/30 (5:13)
Список метамодулей
[ 1] VoiceTranscoder  RUN   -    VoiceTranscoder.  v2017RC3  ini   ANY   ANY  
[ 2] Reunion RUN - reunion_mm_i386. v0.1.75 ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i v0.1.6 ini Start Never
[ 4] AMX Mod X RUN - amxmodx_mm_i386. v1.8.3-R ini Start ANY
[ 5] ReSemiclip RUN - resemiclip_mm_i3 v2.3.9 ini Chlvl ANY
[ 6] WHBlocker RUN - whblocker_mm_i38 v1.5.695 ini Chlvl ANY
[ 7] Rechecker RUN - rechecker_mm_i38 v2.4 ini Chlvl ANY
[ 8] ReAimDetector RUN - reaimdetector_am v0.2.0 pl4 ANY Never
[ 9] ReAPI RUN - reapi_amxx_i386. v5.2.0.1 pl4 ANY Never
[10] Fun RUN - fun_amxx_i386.so v1.8.3-R pl4 ANY ANY
[11] Engine RUN - engine_amxx_i386 v1.8.3-R pl4 ANY ANY
[12] FakeMeta RUN - fakemeta_amxx_i3 v1.8.3-R pl4 ANY ANY
[13] CStrike RUN - cstrike_amxx_i38 v1.8.3-R pl4 ANY ANY
[14] Ham Sandwich RUN - hamsandwich_amxx v1.8.3-R pl4 ANY ANY
[15] MySQL RUN - mysql_amxx_i386. v1.8.3-R pl4 ANY ANY
Список плагинов
[  1] Anticheat               3.1.6       ctr52             anticheat.amxx   running  
[ 2] ReAimDetector API 0.2.0 ReHLDS Team reaimdetector.a running
[ 3] Aliases checker 1.0.3 kanagava alias_detector. running
[ 4] ScreenMaker 1.1 neygomon screen_maker.am running
[ 5] Advanced Gag 1.9.0 neygomon amx_gag.amxx running
[ 6] Lite Bans 1.3 neugomon lite_bans.amxx running
[ 7] Admin Loader 2.9 neygomon admin_loader.am running
[ 8] CSStatsX SQL 0.7.4 serfreeman1337 csstatsx_sql.am running
[ 9] AES: StatsX 0.5 Vega serfreeman1337 aes_statsx_cstr running
[ 10] Admin Commands 1.8.3-Re AMXX Dev Team admincmd.amxx running
[ 11] Admin Help 1.8.3-Re AMXX Dev Team adminhelp.amxx running
[ 12] Slots Reservation 1.8.3-Re AMXX Dev Team adminslots.amxx running
[ 13] Multi-Lingual System 1.8.3-Re AMXX Dev Team multilingual.am running
[ 14] Admin Menu Test 1.0 sweden menufrontv3.amx debug
[ 15] Commands Menu 1.8.3-Re AMXX Dev Team cmdmenu.amxx running
[ 16] Maps Menu 1.8.3-Re AMXX Dev Team mapsmenu.amxx running
[ 17] Plugin Menu 1.8.3-Re AMXX Dev Team pluginmenu.amxx running
[ 18] Admin Chat 1.8.3-Re AMXX Dev Team adminchat.amxx running
[ 19] Anti Flood 1.8.3-Re AMXX Dev Team antiflood.amxx running
[ 20] Scrolling Message 1.8.3-Re AMXX Dev Team scrollmsg.amxx running
[ 21] Info. Messages 1.8.3-Re AMXX Dev Team imessage.amxx running
[ 22] Admin Votes 1.8.3-Re AMXX Dev Team adminvote.amxx running
[ 23] Advanced MapChooser 1.1.1 neygomon map_chooser.amx debug
[ 24] Pause Plugins 1.8.3-Re AMXX Dev Team pausecfg.amxx running
[ 25] Stats Configuration 1.8.3-Re AMXX Dev Team statscfg.amxx running
[ 26] Restrict Weapons 1.8.3-Re AMXX Dev Team restmenu.amxx running
[ 27] StatsX 1.8.3-Re AMXX Dev Team statsx.amxx running
[ 28] Lite TeamBalancer 1.20 neygomon lite_balancer.a running
[ 29] Players Menu 1.8.3-Re AMXX Dev Team plmenu.amxx running
[ 30] Vip System 1.2 Sweden c3.amxx debug
[ 31] V.I.P Custom AK-47 1.0.0 Vaqtincha custom_ak47.amx running
[ 32] V.I.P Custom AWP 1.0.0 Vaqtincha custom_awp.amxx running
[ 33] V.I.P Custom M4A1 1.0.0 Vaqtincha custom_m4a1.amx running
[ 34] Ping Control 1.31 neygomon Ping_Control.am running
[ 35] Afk Control 0.5.1 neygomon afk_control.amx running
[ 36] Admin ESP 0.3 miRror & XyLiGaN admin_esp_mini. running
[ 37] Parachute 1.3 KRoT@L/JTP10181 amx_parachute.a running
[ 38] [ReAMX] SlayLosers RBS 17.12.12 d3n14 & SKAJIbnE slaylosers_rbs. running
[ 39] Lite Translit 2.8 neygomon lite_translit_c running
[ 40] resetcore 1.0 sweden resetscore.amxx running
[ 41] Advert Messages 1.22 neygomon adverts.amxx running
[ 42] Admin connected 1.1 dev by sweden admin_connected running
[ 43] Admin Free Look 2.0 Jim adminfreelook.a running
[ 44] Lite Recoder 1.0.1 neygomon amx_demorec.amx running
[ 45] [ReAPI] No Team Flash 1.0 ReHLDS Team noteamflash.amx running
[ 46] Steam Bonus 1.1 ill+F@nToM steam_bonus_a2. running
[ 47] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 48] [ReAPI] AWPoff 1.3 PAffAEJIkA :3 awp_off.amxx running
[ 49] KiLL Assist poka_4to_b PRoSToTeM@ Kill_assist_rea running
[ 50] No AWP 0.1 ill zapretawp_byswe running
[ 51] [ReAPI] Random Weapons 2.4.3 neugomon/h1k3 random_weapons_ running
[ 52] Advanced Experience Sy 0.5 Vega serfreeman1337 aes_main.amxx running
[ 53] AES: CStrike Addon 0.5 Vega serfreeman1337 aes_exp_cstrike running
[ 54] AES: Informer 0.5 Vega serfreeman1337 aes_informer.am running
[ 55] AES: Admin Tools 0.5 Vega serfreeman1337 aes_exp_editor. running
[ 56] AES: Bonus System 0.5 Vega serfreeman1337 aes_bonus_syste running
[ 57] AES: Bonus CSTRIKE 0.5 Vega serfreeman1337 aes_bonus_cstri running
Нет возможности выхода в спектры после смерти, только после окончания раунда или пока живой.
allow_spectators 1
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
73
Реакции
39
Помог
3 раз(а)
Алексеич, Своими скромными знаниями я не смог заметить ничего тут...

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

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

const VGUIMenu     = 114;    // Не трогать!
const OLDMenu     = 96;    // Не трогать!
#define fm_get_user_team(%0) get_pdata_int(%0, 114, 5)

#if !defined NO_ROUND
new g_iRoundCount;
new g_iScoreTt, g_iScoreCt;
#endif
new g_iNumTt, g_iNumCt;
new bool:g_bChangeTeam[33];
new g_iSkipNPl[33], g_iSkipSPl[33];

public plugin_init()
{
    #define VERSION "1.20"
    register_plugin("Lite TeamBalancer", VERSION, "neygomon");
    register_cvar("lite_teambalancer", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
    
    register_clcmd("chooseteam", "ShowMenu");
    register_menucmd(register_menuid("Team Menu"), MENU_KEY_1|MENU_KEY_2|MENU_KEY_6|MENU_KEY_0, "TeamMenuHandler");
    register_message(OLDMenu, "mShowMenu");
    register_message(VGUIMenu, "mShowMenu");

    RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPre", false);
#if defined NO_ROUND
    register_event("DeathMsg", "LeRoundEnd", "a", "1>0");
#else
    register_event("TeamScore", "eTeamScore", "a");
    register_event("HLTV", "eRoundStart", "a", "1=0", "2=0");
    register_logevent("LeRoundEnd", 2, "1=Round_End");   
    register_logevent("LeRestartRound", 2, "1&Restart_Round_");
#endif   
    set_task(1.5, "ChangeMPcvars");
}

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

public client_disconnected(id)
{
    g_bChangeTeam[id] = false;
    g_iSkipSPl[id] = 0;
    g_iSkipNPl[id] = 0;
}
#if !defined NO_ROUND
public eTeamScore()
{
    static szTeam[2]; read_data(1, szTeam, charsmax(szTeam));
    
    switch(szTeam[0])
    {
        case 'T': g_iScoreTt = read_data(2);
        case 'C': g_iScoreCt = read_data(2);
    }
}

public LeRestartRound()
{
    g_iRoundCount = 0;
    LeRoundEnd();
}

public eRoundStart()
    g_iRoundCount++;
#endif
public LeRoundEnd()
{
    static players[32], pnum, iTransferNum, i;
    
    GetUsersInTeam(g_iNumTt, g_iNumCt);

    if((iTransferNum = abs(g_iNumTt - g_iNumCt) / 2) >= 1)
    {
        static szName[32], TtCt; TtCt = (g_iNumTt > g_iNumCt);
        get_players(players, pnum, "e", TtCt ? "TERRORIST" : "CT");

        for(i = 0; i < pnum; i++)
        {
            if(!g_iSkipNPl[players[i]]-- && ~get_user_flags(players[i]) & ACCESS_IMMUNITY)
            {
                get_user_name(players[i], szName, charsmax(szName));
                ChatColor(0, "^1[^4Автобаланс^1] ^3%s ^4был перенеcён за команду ^3%s^4.", szName, TtCt ? "контр-террористов" : "террористов");
                g_bChangeTeam[players[i]] = true;
                g_iSkipNPl[players[i]] = PL_IGNORE_NUM;           
                if(--iTransferNum < 1) break;
            }   
        }
    }
#if !defined NO_ROUND   
    if(g_iRoundCount % ROUND_BSKILL || get_playersnum() < MIN_PLAYERS || abs(g_iScoreTt - g_iScoreCt) < SCORE_DIFF)
        return;   

    new Ent1, Ent2, iCurr, iCache[2];
    new Pr = (g_iScoreTt > g_iScoreCt);
    
    get_players(players, pnum);
    for(i = 0; i < pnum; i++)
    {
        if(g_iSkipSPl[players[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY) continue;
        
        switch(fm_get_user_team(players[i]))
        {
            case 1:
            {   
                iCurr = get_user_frags(players[i]) - get_user_deaths(players[i]);
                if((Pr && iCurr > iCache[0]) || (!Pr && iCurr < iCache[0]))
                {                   
                    Ent1 = players[i];
                    iCache[0] = iCurr;
                }   
            }
            case 2:
            {           
                iCurr = get_user_frags(players[i]) - get_user_deaths(players[i]);
                if((Pr && iCurr < iCache[1]) || (!Pr && iCurr > iCache[1]))
                {                   
                    Ent2 = players[i];
                    iCache[1] = iCurr;
                }   
            }
        }
    }   
    if(!Ent1 || !Ent2) return;
    static szName1[32], szName2[32];
    get_user_name(Pr ? Ent1 : Ent2, szName1, charsmax(szName1));
    get_user_name(Pr ? Ent2 : Ent1, szName2, charsmax(szName2));
    ChatColor(0, "^1[^4Автобаланс^1] ^4Сильный ^3%s ^4был замен на слабого ^3%s^4.", szName1, szName2);
    g_bChangeTeam[Ent1] = g_bChangeTeam[Ent2] = true;
    g_iSkipSPl[Ent1] = g_iSkipSPl[Ent2] = PL_IGNORE_SKILL;   
#endif   
}

public mShowMenu(const msg, const nDest, const nClient)
{
    if(msg == OLDMenu)
    {
        static szArg4[20]; get_msg_arg_string(4, szArg4, charsmax(szArg4));
        if(contain(szArg4, "Team_Select") == -1)
            return PLUGIN_CONTINUE;
    }
    else if(get_msg_arg_int(1) != 2)
        return PLUGIN_CONTINUE;
    
    set_pdata_int(nClient, 205, 0);
    ShowMenu(nClient);
    return PLUGIN_HANDLED;
}

public ShowMenu(id)
{
    new szMenu[256], iKeys = MENU_KEY_0;
    
    GetUsersInTeam(g_iNumTt, g_iNumCt);
    
    add(szMenu, charsmax(szMenu), "\yВыбор команды:^n^n");
    
    if((g_iNumTt - g_iNumCt) >= PLAYER_DIFF)
        add(szMenu, charsmax(szMenu), "\y1. \dТеррористы^n");
    else
    {
        add(szMenu, charsmax(szMenu), "\y1. \wТеррористы^n");
        iKeys |= MENU_KEY_1;
    }
    if((g_iNumCt - g_iNumTt) >= PLAYER_DIFF)
        add(szMenu, charsmax(szMenu), "\y2. \dКонтр-террористы^n^n");
    else
    {
        add(szMenu, charsmax(szMenu), "\y2. \wКонтр-террористы^n^n");
        iKeys |= MENU_KEY_2;
    }
    if(fm_get_user_team(id) == 3)
        add(szMenu, charsmax(szMenu), "\y6. \dНаблюдение^n^n^n");
    else
    {
        add(szMenu, charsmax(szMenu), "\y6. \wНаблюдение^n^n^n");
        iKeys |= MENU_KEY_6;
    }
    add(szMenu, charsmax(szMenu), "\y0. \wВыход");
    return show_menu(id, iKeys, szMenu, -1, "Team Menu");
}

public TeamMenuHandler(id, iKey)
{
    switch(iKey)
    {
        case 0:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "1");
        }
        case 1:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "2");
        }
        case 5:
        {
            user_kill(id, 1);
            engclient_cmd(id, "jointeam", "6");
        }
    }
    return PLUGIN_HANDLED;
}

public fwdPlayerSpawnPre(id)
{
    if(!g_bChangeTeam[id]) return;
    
    switch(fm_get_user_team(id))
    {
        case 1: fm_set_user_team(id, 2);
        case 2: fm_set_user_team(id, 1);
    }
    g_bChangeTeam[id] = false;
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static pnum, players[32], szMsg[190], IdMsg;
    vformat(szMsg, charsmax(szMsg), szMessage, 3);
    
    if(!IdMsg) IdMsg = get_user_msgid("SayText");
    
    if(id)
    {
        players[0] = id;
        pnum = 1;
    }
    else get_players(players, pnum, "ch");
    
    for(new i; i < pnum; i++)
    {
        message_begin(MSG_ONE, IdMsg, .player = players[i]);
        write_byte(players[i]);
        write_string(szMsg);
        message_end();
    }
}

stock GetUsersInTeam(&tt, &ct)
{
    static players[32];
    get_players(players, tt, "e", "TERRORIST");
    get_players(players, ct, "e", "CT");
}

stock fm_set_user_team(id, team)
{
    set_pdata_int(id, 114, team, 5);
    dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id))
    
    static mTeamInfo;
    if(!mTeamInfo)
        mTeamInfo = get_user_msgid("TeamInfo");

    message_begin(MSG_ALL, mTeamInfo)
    write_byte(id);
    write_string(team == 1 ? "TERRORIST" : "CT");
    message_end();
}
 
Сообщения
496
Реакции
621
Помог
16 раз(а)
Sherlok_h, не надо замечать скромными знаниями.
Надо плагин отключить и посмотреть, осталась ли проблема.
 
Сообщения
73
Реакции
39
Помог
3 раз(а)
Gudaus, собственно вы правы, так и сделал. Он и блочит выход в спектры. На тестовом сервере он себя так не ведет, хотя и есть разница в плагинах между ними. Спасибо за совет, хотя надо было бы самому догадаться)
Алексеич, это в дополнение к тому что есть? Если не получится решить с тем что есть, то попробуй, спасибо) А то мне уже кинули в личку сообщение с предложением хорошего плагина, но без исходника...
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
А то мне уже кинули в личку сообщение с предложением хорошего плагина, но без исходника...
Хорошего плагина с возможным наличием бекдора) Если целостность сервера и нервов не жалко, то ставьте)
 
Сообщения
20
Реакции
4
Помог
2 раз(а)
Подскажите, на csdm стоит Spec Switch 0.0.3 от Many
Плагин работает исправно, за исключением нескольких моментов, главный, если приконектится и зайти за спектров, то уже не выйти оттуда, но плагин пишет, что я якобы возродился.
 

Вложения

Сообщения
73
Реакции
39
Помог
3 раз(а)
Нашел решение, должен быть включен автобаланс: mp_autoteambalance "1"
 
Статус
В этой теме нельзя размещать новые ответы.

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

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