Не работает техническая пауза в wingman

pchelovek

Добрая душа
Сообщения
76
Реакции
71
Операционная система
Linux
Привет!
С некоторых времён (2021.01.07) в соревновательных режимах появилась отдельные технические паузы при вылете игрока, которые запускаются автоматически и не затрагивают тактические.

Запускаю голый сервер на Linux без SM в режиме напарников (game_type 0; game_mode 2).
С ключем -maxplayers_override 4 (При подключении последнего, игра сокращает вармап, значит понимает, что все вошли.)

Тактические паузы:
mp_team_timeout_max 1
mp_team_timeout_time 60

Технические паузы:
mp_technical_timeout_per_team 1
mp_technical_timeout_duration_s 120

mp_freezetime 10

После дисконнекта игрока, должна автоматически включиться техническая пауза во время фризтайма на следующем раунде, но этого не происходит.
На официальных серверах Valve это нормально работает.
Может кто-нибудь то же сталкивался или успешно настраивал или хотя бы есть догадки, почему это не работает?
 
Решение
Имеете ввиду в бэкэнде Valve и вызываются снаружи?
Вполне возможно, но тогда должен быть способ вызвать это на сервере.
Я нашел как можно вызвать принудительно тактическую паузу, но как вызвать техническую пока не понятно.
timeout_terrorist_start technical
timeout_ct_start technical

КАЙМАН

Клоун
Сообщения
517
Реакции
88
Мб это отдельно реализовано , независимо от конфига . Не могу словами обьяснить , но скорее всего регистрация игрока идет по своему в напарниках . Сервера все таки другое
 

pchelovek

Добрая душа
Сообщения
76
Реакции
71
Мб это отдельно реализовано , независимо от конфига . Не могу словами обьяснить , но скорее всего регистрация игрока идет по своему в напарниках . Сервера все таки другое
Имеете ввиду в бэкэнде Valve и вызываются снаружи?
Вполне возможно, но тогда должен быть способ вызвать это на сервере.
Я нашел как можно вызвать принудительно тактическую паузу, но как вызвать техническую пока не понятно.
 

xstage

🏹
Сообщения
726
Реакции
754
Имеете ввиду в бэкэнде Valve и вызываются снаружи?
Вполне возможно, но тогда должен быть способ вызвать это на сервере.
Я нашел как можно вызвать принудительно тактическую паузу, но как вызвать техническую пока не понятно.
timeout_terrorist_start technical
timeout_ct_start technical
 
Решение

pchelovek

Добрая душа
Сообщения
76
Реакции
71
timeout_terrorist_start technical
timeout_ct_start technical
Большое спасибо! Не знал, что так можно. Видимо именно это мне и нужно, но...
Тактические паузы с помощью этих команд берутся прекрасно.
А технические не срабатывают, действительно вызывается техническая и отображается соответствующее сообщение на экране, но на следующем фризтайме, ничего не происходит.
Попробовал пока в некоторых режимах, и с не полным составом команд.
Поигрался с количеством, видно что именно технические тратятся, и когда лимит исчерпан, больше не срабатывает.

При отправке команды в консоль падает:
Match pause is enabled - TimeOutTs
А в момент старта раунда (начала фризтайма):
Match pause is disabled - TimeOutTs

Если брать во время фризтайма, сразу обе строки прилетают, получается она пытается включиться и тут же выключается.
Попробую завтра еще протестить по хорошему.
 

xstage

🏹
Сообщения
726
Реакции
754
Большое спасибо! Не знал, что так можно. Видимо именно это мне и нужно, но...
Тактические паузы с помощью этих команд берутся прекрасно.
А технические не срабатывают, действительно вызывается техническая и отображается соответствующее сообщение на экране, но на следующем фризтайме, ничего не происходит.
Попробовал пока в некоторых режимах, и с не полным составом команд.
Поигрался с количеством, видно что именно технические тратятся, и когда лимит исчерпан, больше не срабатывает.

При отправке команды в консоль падает:
Match pause is enabled - TimeOutTs
А в момент старта раунда (начала фризтайма):
Match pause is disabled - TimeOutTs

Если брать во время фризтайма, сразу обе строки прилетают, получается она пытается включиться и тут же выключается.
Попробую завтра еще протестить по хорошему.
Я сам эти команды не использовал, нашел через ida. Мне кажется проще уже использовать просто тактические паузы. У технических пауз нет ни одного свойства, кроме m_bTechnicalTimeOut, без понятия как с ними взаимодействовать. Написал плагин фикс, он на основе обычных пауз.

C-подобный:
#include <sdktools>

int g_nLimitTimeOuts[2];

public void OnPluginStart()
{
    AddCommandListener(TechnicalCommand_Callback, "timeout_ct_start");
    AddCommandListener(TechnicalCommand_Callback, "timeout_terrorist_start");
}

public void OnMapStart()
{
    g_nLimitTimeOuts[0] = g_nLimitTimeOuts[1] = FindConVar("mp_technical_timeout_per_team").IntValue;
}

static Action TechnicalCommand_Callback(int iClient, const char[] sCommand, int iArgc)
{
    if(iArgc < 1)
    {
        return Plugin_Continue;
    }
    
    if(GameRules_GetProp("m_bCTTimeOutActive") || GameRules_GetProp("m_bTerroristTimeOutActive"))
    {
        return Plugin_Handled;
    }

    char sArg[32];
    GetCmdArg(1, sArg, sizeof(sArg));
    
    if(!strcmp(sArg, "technical", false))
    {
        float fTimeOut = float(FindConVar("mp_technical_timeout_duration_s").IntValue);
        
        if(sCommand[8] == 'c')
        {
            if(g_nLimitTimeOuts[0] <= 0)
            {
                return Plugin_Handled;
            }
        
            GameRules_SetProp("m_bCTTimeOutActive", true);
            GameRules_SetPropFloat("m_flCTTimeOutRemaining", fTimeOut);
            g_nLimitTimeOuts[0]--;
        }
        else
        {
            if(g_nLimitTimeOuts[1] <= 0)
            {
                return Plugin_Handled;
            }
        
            GameRules_SetProp("m_bTerroristTimeOutActive", true);
            GameRules_SetPropFloat("m_flTerroristTimeOutRemaining", fTimeOut);
            g_nLimitTimeOuts[1]--;
        }
        
        PrintCenterTextAll("#SFUI_Notice_Match_Will_Pause_Technical");
        GameRules_SetProp("m_bMatchWaitingForResume", true);
    }
    
    return Plugin_Handled;
}
 

pchelovek

Добрая душа
Сообщения
76
Реакции
71
Я сам эти команды не использовал, нашел через ida. Мне кажется проще уже использовать просто тактические паузы. У технических пауз нет ни одного свойства, кроме m_bTechnicalTimeOut, без понятия как с ними взаимодействовать. Написал плагин фикс, он на основе обычных пауз.
Огромное спасибо за помощь!
Те команды точно правильные, думаю они должны работать, просто я что то еще упускаю, отмечу их как решение.

Еще можно спросить, что такое ida, и откуда вы берете все эти свойства типа "m_bCTTimeOutActive" и "#SFUI_Notice_Match_Will_Pause_Technical", что является первоисточником?
 
Последнее редактирование:

xstage

🏹
Сообщения
726
Реакции
754
Огромное спасибо за помощь!
Те команды точно правильные, думаю они должны работать, просто я что то еще упускаю, отмечу их как решение.

Еще можно спросить, что такое ida, и откуда вы берете свойства все эти свойства типа "m_bCTTimeOutActive" и "#SFUI_Notice_Match_Will_Pause_Technical", что является первоисточником?
Там возможно придется с памятью возиться, в любом случае не думаю, что стоит потраченного времени, отличий между тактическим и техническим перерывами не вижу. Плагин будет вызывать тактический перерыв используя mp_technical_timeout_per_team и mp_technical_timeout_duration_s. (Только писать в show_survival_respawn_status будет не "Технический перерыв (команда): время", а просто "Перерыв (команда): время").

IDA - IDA — Википедия
Через неё в данном случае открываем server.so/dll. Но там нужны уже определенные знания.

#SFUI_Notice_Match_Will_Pause_Technical - это сообщение из файла локализации csgo/resource/csgo_russian.txt
1674680766998.png


Что бы получить свойства в консоль сервера:
1) sm_dump_netprops netprops.txt
2) sm_dump_datamaps datamaps.txt
Сгенерирует файлы в /csgo
 
Сверху Снизу