[CS:S v34] Узнать количество сыгранных раундов

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Не знает ли никто способ достоверно узнать количество сыгранных раундов "на лету"? Не счёт команд, а конкретно сыгранных раундов.
Написал плуг для логирования, чтобы добиться максимальной точности перед использованием кода в "реальном" плагине, но хотелось бы более сокращённый способ заиметь.

Плюс есть проблема с тем, что если загрузить такой код "на лету", он не сможет начать отсчёт с уже сыгранного количества раундов.
Например, mp_maxrounds "200", игроки уже сыграли 100, а плагин никак не может узнать, что они эти 100 уже сыграли, и будет считать с 0, что не отразит реальное положение дел.
C-подобный:
#pragma semicolon 1
#pragma newdecls required

int     iRounds, iMaxRounds;
char    szLog[PLATFORM_MAX_PATH];

public void OnPluginStart()
{
    HookEvent("round_end", eventRoundEnd, EventHookMode_Pre);
    BuildPath(Path_SM, szLog, sizeof szLog, "logs/iRounds.log");
}

public void OnMapStart()
{
    ConVar cvar = FindConVar("mp_maxrounds");
    iMaxRounds = cvar.IntValue;
    iRounds = 0;
    LogToFileEx(szLog, "К А Р Т А     С Т А Р Т О В А Л А | СЫГРАНО - %i / МАКСИМУМ - %i", iRounds, iMaxRounds); // Я же параноик. Просто хочу убедиться в том, что действительно iRounds "0" и iMaxRounds вычислено правильно
}

public void eventRoundEnd(Event event, const char[] name, bool dontBroadcast)
{
    iRounds++;
    int iResult       = iMaxRounds - (iRounds - 1),    // Ибо после OnMapStart СРУЗУ ЖЕ почему-то происходит round_end, хотя никто не играл (и не успел бы)
        iRoundsLast   = iRounds - 2,                   // Чтобы узнать последний раунд с учётом условия выше
        iRoundsEnd    = iRounds - 1;                   // Чтобы понять, что карта закончилась
 
    if(iRounds < 2)                     LogToFileEx(szLog,  "Ни одного не сыграно");
    else if(iRounds == iRoundsLast)     LogToFileEx(szLog,  "П О С Л Е Д Н И Й     Р А У Н Д        | Сыграно - %i / Максимум - %i",  iRoundsLast, iMaxRounds);
    else                                LogToFileEx(szLog,  "Сыграно - %i | Осталось - %i",                                           iRoundsEnd,  iResult);
 
    if(iRoundsEnd == iMaxRounds)        LogToFileEx(szLog,  "К А Р Т А     З А К О Н Ч И Л А С Ь    | Сыграно - %i / Максимум - %i",  iRoundsEnd,  iMaxRounds);
}

C-подобный:
int iRounds = GameRules_GetProp("m_nRoundsPlayed");
Не подходит, ибо в CS:S v34 такого нет
C-подобный:
GetTeamScore / CS_GetTeamScore
Не подходит, ибо это счёт команд, а он не зависит от реального количества сыгранных раундов
C-подобный:
int iRounds = GetEntData(GetPlayerResourceEntity(), 560);
Не подходит - выдаёт просто "0"

Решение:
 
Последнее редактирование:

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
@Paranoiiik, попробуйте
C-подобный:
int iRounds = GameRules_GetProp("m_nRoundsPlayed");
О, такого способа никак не ожидал, потому не писал игру.. CS:S v34
Сообщения автоматически склеены:

Не счёт команд, а конкретно сыгранных раундов.
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
О, такого способа никак не ожидал, потому не писал игру.. CS:S v34
Сообщения автоматически склеены:
Дай бинарник сервера для в34.
В ксго есть функа, которая возвращает m_actualRoundsPlayed, надо чекнуть в34
int GetRoundsPlayed( void ) const { return m_actualRoundsPlayed; }
1629654009361.png

В крайнем случае можно ее хукнуть, если она существует
 

Rolzzandik

Участник
Сообщения
492
Реакции
234

Muinez

Участник
Сообщения
132
Реакции
120
Если ничего не поможет, то можно сделать еще 1 плагин который будет считать кол-во раундов и сувать их в квар (ну или натив сделать)
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Если ничего не поможет, то можно сделать еще 1 плагин который будет считать кол-во раундов и сувать их в квар (ну или натив сделать)
Отпадает необходимость ещё в одном плагине, ибо его код можно вставить в основной, так как оба плагина будут ставить одновременно, и проблему это не решит
 

Muinez

Участник
Сообщения
132
Реакции
120
Отпадает необходимость ещё в одном плагине, ибо его код можно вставить в основной, так как оба плагина будут ставить одновременно, и проблему это не решит
а зачем плагин который будет считать выгружать/перезагружать
 

WeSTMan

А вот тут текст!
Сообщения
833
Реакции
516
Усе, что нельзя на sp, я делаю на ext)
 
Сверху Снизу