Как отключить гибернацию сервера?

Тема в разделе "Counter-Strike: Source", создана пользователем fm3at, 14 фев 2016.

  1. fm3at

    fm3at

    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, при выходе с сервера всех живых игроков, он переходит в режим гибернации и боты кикаются, затем снова запускаются, но уже мертвые. Остается один живой бот, к которому привязывается куча лишних моделей оружия и гранат.

    Dropped .fm3at from server (Disconnect by user.)
    Server is hibernating
    Dropped DespoD from server (Punting bot, server is hibernating)
    Dropped BCEM_XAHA from server (Punting bot, server is hibernating)
    Dropped 3ek from server (Punting bot, server is hibernating)
    Dropped LIS from server (Punting bot, server is hibernating)
    Dropped Ae* from server (Punting bot, server is hibernating)
    Dropped zasranec from server (Punting bot, server is hibernating)
    Dropped ebanawka from server (Punting bot, server is hibernating)
    Dropped [mee] from server (Punting bot, server is hibernating)
    [botnames] Bot VamPir created.
    [botnames] Bot noob) created.
    [botnames] Bot [email protected] created.
    [botnames] Bot Buuugaga created.
    [botnames] Bot <3Tobi created.
    [botnames] Bot Andreas created.
    [botnames] Bot [email protected]@ created.
    [botnames] Bot MY4EHuK created.
    [botnames] Bot Neymar^^ created.
    CT bot spawned outside of a buy zone (154, 2225, -114)

    cvar sv_hibernate_when_empty в отличие от cs:go не работает.
    сервер only steam, недавно обновлялся через steamcmd.
    собственно, как запретить гибернацию? есть альтернативные методы?


    Listing 8 plugins:
    [01] SourceMod (1.7.3-dev+5283) by AlliedModders LLC
    [02] Stripper (1.2.2) by BAILOPAN
    [03] CS Tools (1.7.3-dev+5283) by AlliedModders LLC
    [04] SDK Tools (1.7.3-dev+5283) by AlliedModders LLC
    [05] Bot Attack Control (1.0.1) by GoD-Tony
    [06] CS:S DM (2.1.6-dev) by AlliedModders
    [07] SDK Hooks (1.7.3-dev+5283) by AlliedModders LLC
    [08] SendProxy Manager (1.1.5) by Afronanny

    [SM] Listing 29 plugins:
    01 "Admin File Reader" (1.7.3-dev+5283) by AlliedModders LLC
    02 "Admin Help" (1.7.3-dev+5283) by AlliedModders LLC
    03 "Admin Menu" (1.7.3-dev+5283) by AlliedModders LLC
    04 "Anti-Flood" (1.7.3-dev+5283) by AlliedModders LLC
    05 "Basic Ban Commands" (1.7.3-dev+5283) by AlliedModders LLC
    06 "Basic Chat" (1.7.3-dev+5283) by AlliedModders LLC
    07 "Basic Comm Control" (1.7.3-dev+5283) by AlliedModders LLC
    08 "Basic Commands" (1.7.3-dev+5283) by AlliedModders LLC
    09 "Basic Info Triggers" (1.7.3-dev+5283) by AlliedModders LLC
    10 "Basic Votes" (1.7.3-dev+5283) by AlliedModders LLC
    11 "Bot Names" (1.0) by Rakeri
    12 "Bots for FFA" (1.0) by Franc1sco steam: franug
    13 "Bot Ping" (1.0.1) by Knagg0
    14 "Client Preferences" (1.7.3-dev+5283) by AlliedModders LLC
    15 "CS:S DM Basics" (2.1.6-dev) by AlliedModders LLC
    16 "CS:S DM Bot Quotas" (2.1.6-dev) by AlliedModders LLC
    17 "CS:S DM Equipment" (2.1.6-dev) by AlliedModders LLC
    18 "CS:S DM Preset Spawns" (2.1.6-dev) by AlliedModders LLC
    19 "CS:S DM Spawn Protection" (2.1.6-dev) by AlliedModders LLC
    20 "Explosive Barrels" (0.0.1) by aNNakin
    21 "Fun Commands" (1.7.3-dev+5283) by AlliedModders LLC
    22 "Fun Votes" (1.7.3-dev+5283) by AlliedModders LLC
    23 "Healthkit From Dead (HFD)" (0.4) by Bacardi
    24 "map-decals.smx" (1.1) by Berni, Stingbyte
    25 "Nextmap" (1.7.3-dev+5283) by AlliedModders LLC
    26 "Player Commands" (1.7.3-dev+5283) by AlliedModders LLC
    27 "Radar Config" (1.2.0) by GoD-Tony
    28 "Reserved Slots" (1.7.3-dev+5283) by AlliedModders LLC
    29 "Sound Commands" (1.7.3-dev+5283) by AlliedModders LLC
     
  2. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    Тоже интересует данный вопрос. При уходе последнего живого игрока сервер переходит в режим гибернации, все боты кикаются, добавляются новые. И самое плохое при этом что командный счет обнуляется, хотя для некоторых плагинов он продолжает оставаться прежним. К примеру, при winlimit 30 голосование за следующую карту может запуститься при счете 1:0, из-за того, что при счете 27:0 последний живой игрок покинул сервер и счет обнулился.
    Можно как-нибудь запретить эту гибернацию? Или может быть сделать, чтобы в начале раунда проверялся счет прошлого раунда, и если он больше нынешнего, то восстанавливался ?
    Есть еще вот такой плагин AlliedModders - View Single Post - [CS:S]Block Punting bot when server is hibernating , когда сервер в режиме паблика, он работает нормально, но в режиме дм сервер крашиться. А на SM 1.7 вообще перестал работать.
     
  3. fm3at

    fm3at

    Сообщения:
    6
    Симпатии:
    0
    для режима дм я воткнул этот плагин, в качестве костыля: [TF2] Empty Server Map Restarter - AlliedModders , сервер при уходе последнего живого игрока перезапускается и там начинают нормально играть боты. не панацея, но хоть что-то.
    нагуглил что-то про строку в серверной части "CServerGameDLL::SetServerHibernation(bool)", не знаю как до нее добраться стандартными методами, наверно надо плагин писать или расширение. а этого я не умею, увы)
    подробнее: AlliedModders - View Single Post - How to disable hibernating bots in CS:S?
     
  4. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    Какие то вы костыли делаете...
    Всегда на тех же csdm либо не чисто сервере есть бот квота, которая при подключении игрока добавляет нужное кол-ва ботов в игру.
    Причём тут отключение гибернеции? Она нужна для того, что если на сервере 0 человек, сервер не жрал ресурсов.
    А благодоря настройкам при подключении игрока боты тут же подключаются и всё нормально, даже без потери их статистики.
     
  5. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    При отключении последнего игрока играющие боты кикаются, тут же добавляются новые и игра продолжается. Так что о какой тут экономии ресурсов может быть речь?
    Для меня самая большая проблема в том, что при отключении последнего игрока обнуляется командный счет. Допустим, на сервере несколько карт, они меняются через определенное число побед. И получается из-за обнуления счета одна карта может играться весь день, а хотелось-бы, чтобы боты доигрывали эту карту и ставилась следующая. Голосование за карту настроено за два раунда до окончания карты, но при этом почему-то учитывается командный счет до обнуления, и голосование может появиться при счете 2:0, хотя сама карта при этом сменится как и положено, когда на табло будет хотя-бы 30:0 (при winlimit 30).
    Также проверял и с плагином Auto Swap Team, он тоже почему-то учитывает счет до обнуления, а не тот счет, что отображается на табло.
     
  6. fm3at

    fm3at

    Сообщения:
    6
    Симпатии:
    0
    Уже не актуально, они просто перезаходят, без всяких глюков. Правда пришлось отключить часть плагинов. Пока еще выявляю виновника.

    Спасибо, а люди-то и не знали.
    Мне не нужно чтобы сервер не жрал ресурсов. Мне нужны нормальные боты, свободные от приколов гибернации.
    Не зря в CS:GO квар для отключения гибернации добавили, значит он реально нужен. А вот про CS:S видать забыли.
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.515
    Симпатии:
    1.969
    Там настоящая гибернация, а не какая-то имитация. В CS:GO от неё все плагины отрубаются, ничего не работает по таймеру.
     
  8. fm3at

    fm3at

    Сообщения:
    6
    Симпатии:
    0
    Вот оно что. А огрызок гибернации в cs:s вальвовцы засунули прикола ради?) Видимо придется ждать следующих обновлений, может образумятся и пофиксят.
     
  9. ĦĄŇĢǾVξŘ

    ĦĄŇĢǾVξŘ καταλημμα

    Сообщения:
    273
    Симпатии:
    167
    может сработает если поставить:
    Код:
    bot_join_after_player 0
    и тогда боты на сервере будут находится постоянно.
     
    Последнее редактирование: 15 фев 2016
  10. fm3at

    fm3at

    Сообщения:
    6
    Симпатии:
    0
    Было бы всё так просто, я бы тему не создавал.
     
  11. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    По поводу обнуления командного счета при уходе последнего игрока.
    Наткнулся на один польский сервер, где эта проблема решена - 91.224.117.108:27015. При уходе последнего игрока боты кикаются, добавляются новые, но командный счет при этом не обнуляется.

    plugins list
    "[Source 2009] Custom Chat Colors" (2.4.0) by Dr. McKay
    "Admin File Reader" (1.7.3-dev+5272) by AlliedModders LLC
    "Admin Help" (1.7.3-dev+5272) by AlliedModders LLC
    "Admin Menu" (1.7.3-dev+5272) by AlliedModders LLC
    "Advanced c4 Countdown Timer" (1.5.0) by dalto, Panda
    "Afk Bomb" (1.5.0) by RedSword / Bob Le Ponge
    "Anti Rush" (1.3) by Jannik 'Peace-Maker' Hartung
    "Anti-Flood" (1.7.3-dev+5272) by AlliedModders LLC
    "Autolama" (1.0) by fm!
    "Ban disconnected players" (1.04) by mad_hamster, Troy
    "Basic Chat" (1.7.3-dev+5214) by AlliedModders LLC
    "Basic Comm Control" (1.7.3-dev+5272) by AlliedModders LLC
    "Basic Commands" (1.7.3-dev+5272) by AlliedModders LLC
    "Basic Info Triggers" (1.7.3-dev+5272) by AlliedModders LLC
    "Basic Votes" (1.7.3-dev+5272) by AlliedModders LLC
    "Client Preferences" (1.7.3-dev+5272) by AlliedModders LLC
    "FM | Autokick immunity" (1.0) by fm!
    "FM | Casino" (0.0.4) by fm!
    "FM | Deagle" (1.0) by fm!
    "FM | Noblock Player" (1.5) by fm!
    "FM | Parachute Redux" (1.0) by fm!
    "FM | VIP Pack CSS" (1.2) by fm!
    "Fun Commands" (1.7.3-dev+5272) by AlliedModders LLC
    "Fun Votes" (1.7.3-dev+5272) by AlliedModders LLC
    "gameME Plugin" (4.3) by TTS Oetzel & Goerz GmbH
    "HANSE-Balance" (1.6.6) by red!
    "Immunity Reserve Slots [CONNECT]" (2.0.6) by Jamster
    "Kabelki" (0.5) by pRED* | fm!
    "Kill Assist" (1.5.0) by RedSword / Bob Le Ponge
    "Knife Fight" (1.3.9) by XARiUS, Otstrel.Ru Team, fm!
    "Komendy" (1.0) by fm!
    "Nextmap" (1.7.3-dev+5272) by AlliedModders LLC
    "Player Commands" (1.7.3-dev+5272) by AlliedModders LLC
    "Players Votes Redux" (1.0.1) by ReFlexPoison
    "Quake Sounds" (2.7) by dalto, Grrrrrrrrrrrrrrrrrrr, and psychonic
    "Remover" (1.0) by fm!
    "Round End Sound" (2.3.9) by FrozDark
    "Save Scores" (1.3.4) by exvel
    "Show Damage" (1.0.7) by exvel
    "Simple Chat Processor (Redux)" (1.1.4-fix2) by Simple Plugins, Mini
    "SM SKINCHOOSER" (2.3) by Andi67
    "Sound Commands" (1.7.3-dev+5272) by AlliedModders LLC
    "SourceBans" (1.4.11) by SourceBans Development Team
    "SourceComms" (0.9.9) by Alex
    "Swap Team" (1.0.0) by raydan
    "SwapTeam" (1.2.6) by Rogue - Originally by MistaGee
    "Team Bets" (2.6) by GrimReaper - Original by ferret
    "Very Basic High Ping Kicker" (1.4) by msleeper
    "VIP Deagle" (1.0) by fm!
    "Weapon Restrict" (3.0.9) by Dr!fter

    meta list
    [01] SourceMod (1.7.3-dev+5272) by AlliedModders LLC
    [02] CS Tools (1.7.3-dev+5272) by AlliedModders LLC
    [03] SDK Tools (1.7.3-dev+5272) by AlliedModders LLC
    [04] SDK Hooks (1.7.3-dev+5272) by AlliedModders LLC
    [05] Connect (1.2.0) by Asher "asherkin" Baker

    sm exts
    "Automatic Updater" (1.7.3-dev+5272) by AlliedModders LLC: Updates SourceMod gamedata files
    "Webternet" (1.7.3-dev+5272) by AlliedModders LLC: Extension for interacting with URLs
    "CS Tools" (1.7.3-dev+5272) by AlliedModders LLC: CS extended functionality
    "BinTools" (1.7.3-dev+5272) by AlliedModders LLC: Low-level C/C++ Calling API
    "SDK Tools" (1.7.3-dev+5272) by AlliedModders LLC: Source SDK Tools
    "Client Preferences" (1.7.3-dev+5272) by AlliedModders: Saves client preference settings
    "SQLite" (1.7.3-dev+5272) by AlliedModders LLC: SQLite Driver
    "Regex" (1.7.3-dev+5272) by AlliedModders LLC: Provides regex natives for plugins
    "SDK Hooks" (1.7.3-dev+5272) by AlliedModders LLC: Source SDK Hooks
    "Top Menus" (1.7.3-dev+5272) by AlliedModders: Creates sorted nested menus
    "Connect" (1.2.0) by Asher "asherkin" Baker: Forward for early connection
    "MySQL-DBI" (1.7.3-dev+5272) by AlliedModders LLC: MySQL driver implementation for DBI

    Вообще, есть предположение, что обнуление счета происходит не из-за гибернации, а из-за рестарта игры, вызванного этой гибернацией. Можно как-нибудь заблокировать этот рестарт?
     
  12. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.515
    Симпатии:
    1.969
    Мне крайне не хочется этим заниматься, проверять условия, при которых происходит проблема, поэтому просто оставлю здесь:
    PHP:
    #include <cstrike>

    new bool:bReset;

    public 
    OnClientPostAdminCheck(clientbReset false;

    public 
    OnClientDisconnect(client)
    {
        if (
    IsFakeClient(client) == falsebReset true;
    }

    public 
    Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)
    {
        if (
    reason == CSRoundEnd_GameStart && bReset)
        {
            for (new 
    1<= MaxClients; ++i)
            {
                if (
    IsClientInGame(i) && IsFakeClient(i) == false) return Plugin_Continue;
            }
            return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }
    За адекватность не ручаюсь, дополняйте "на свой вкус".
     
  13. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    @AlmazON, а что плагин должен делать? Поставил, никаких изменений нету. После ухода меня, как последнего игрока, боты кикаются с причиной <Punting bot, server is hibernating>, завершается раунд по 9 и 15 причине, добавляются новые боты, обнуляется счет, игра продолжается. Что с этим плагином, что без него все одинаково.
    Мой_ник ушёл <Disconnect by user.>
    Brad BOT ушёл <Punting bot, server is hibernating>
    Ethan BOT ушёл <Punting bot, server is hibernating>
    Ron BOT ушёл <Punting bot, server is hibernating>
    Wade BOT ушёл <Punting bot, server is hibernating>
    Round Terminated Reason: 9
    Wyatt BOT вступает в игру
    Wyatt > Спецназ
    Harold BOT вступает в игру
    Harold > Террорист
    Round Terminated Reason: 15
    Gary BOT вступает в игру
    Gary > Спецназ
    Tim BOT вступает в игру
    Tim > Террорист
    Perry BOT вступает в игру
    Perry > Спецназ
    Mark BOT вступает в игру
    Mark > Террорист

    Если что, причина конца раунда вот этим скриптом выводится:
    Код:
    public Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)
    {
            PrintToChatAll("\x04Round Terminated Reason: %d", reason);
            return Plugin_Continue;
    }  
     
  14. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    @AlmazON, поставил так
    #include <cstrike>

    new bool:bReset;

    public OnClientPostAdminCheck(client) bReset = false;

    public OnClientDisconnect(client)
    {
    if (IsFakeClient(client) == false) bReset = true;
    }

    public Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)
    {
    if (reason == CSRoundEnd_Draw && bReset)
    {
    for (new i = 1; i <= MaxClients; ++i)
    {
    if (IsClientInGame(i) && IsFakeClient(i) == false) return Plugin_Continue;
    }
    return Plugin_Handled;
    }
    return Plugin_Continue;
    }
    Абсолютно никаких изменений. По прежнему в чат выводится завершение раунда по 9 (ничья) и 15 (новая игра) причине и обнуляется командный счет.
     
  15. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.515
    Симпатии:
    1.969
    В общем-то, он по 15 должен сброситься, а по 9 - просто закончился раунд. Так что, предыдущее вернее.
    Ерундой не заниматься, скорее всего счёт переустановить стоит после сброса.
     
  16. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    Я как-то попробовал со своими скудными познаниями составить подобный плагин. С разных плагинов повыдергивал код, получилось так:
    PHP:
    #include <sourcemod>
    #include <sdktools>

    new    ScoreTStart 0,
        
    ScoreCTStart 0,
        
    ScoreTEnd 0,
        
    ScoreCTEnd 0;

    public 
    OnPluginStart()
        {
        
    HookEvent("round_start"Event_OnRoundStart);
        
    HookEvent("round_end"Event_OnRoundEnd);
        }

    public 
    Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
        {
        
    ScoreTEnd GetTeamScore(2),
        
    ScoreCTEnd GetTeamScore(3);
        }

    public 
    Event_OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    ScoreTStart GetTeamScore(2),
        
    ScoreCTStart GetTeamScore(3);
        if(
    ScoreTStart+ScoreCTStart ScoreTEnd+ScoreCTEnd)
            {
            
    SetTeamScore(2ScoreTEnd);
            
    SetTeamScore(3ScoreCTEnd);
            }
    }
    Но там вроде косяк был, что после смены карты восстанавливался предыдущий счет. Или что-то другое, уже и не помню.
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.515
    Симпатии:
    1.969
    Дописать:
    PHP:
    public OnMapEnd() ScoreTEnd ScoreCTEnd 0;
     
  18. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    Дописал, теперь нормально, после смены карты счет не восстанавливается. Вспомнил, какой еще косяк был и остается с этим плагином. Допустим, счет 3-0 в пользу теров. Я перезахожу, счет сохраняется прежним, захожу за теров, убиваю всех ботов, и счет заместо положенного 4-0 становится 1-0. То есть получается счет восстанавливается после перезахода, но только до первой победы.
     
  19. Wise Hand

    Wise Hand

    Сообщения:
    21
    Симпатии:
    3
    @AlmazON, проверил, в общем что получается: при счете 2-0 в перезахожу на сервер, bot_kill, счет становится 1-0, затем в начале следущего раунда счет становится 3-0. Снова bot_kill, счет становится 2-0, в начале следущего раунда счет 4-0. То есть получается, в начале раунда счет всегда верный, а в промежутке между концом одного раунда и началом другого неверный.
     
  20. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.515
    Симпатии:
    1.969
    У меня голова другим забита... Поставь на конце раунда тоже установку счёта, если верно понял:
    PHP:
    #include <sourcemod>
    #include <sdktools_functions>

    new ScoreTEnd 0,
        
    ScoreCTEnd 0;

    public 
    OnPluginStart()
    {
        
    HookEvent("round_start"Event_OnRoundStartEventHookMode_PostNoCopy);
        
    HookEvent("round_end"Event_OnRoundEnd);
    }

    public 
    Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        switch (
    GetEventInt(event"winner"))
        {
            case 
    2: ++ScoreTEnd;
            case 
    3: ++ScoreCTEnd;
        }
        
    SetTeamScore(2ScoreTEnd);
        
    SetTeamScore(3ScoreCTEnd);
    }

    public 
    Event_OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    SetTeamScore(2ScoreTEnd);
        
    SetTeamScore(3ScoreCTEnd);
    }

    public 
    OnMapEnd() ScoreTEnd ScoreCTEnd 0;
    Возможно, только в конце раунда и есть смысл ставить свой счёт.