Paranoiiik
хачю клиентмод
- Сообщения
- 2,047
- Реакции
- 1,490
Не знает ли никто способ достоверно узнать количество сыгранных раундов "на лету"? Не счёт команд, а конкретно сыгранных раундов.
Написал плуг для логирования, чтобы добиться максимальной точности перед использованием кода в "реальном" плагине, но хотелось бы более сокращённый способ заиметь.
Плюс есть проблема с тем, что если загрузить такой код "на лету", он не сможет начать отсчёт с уже сыгранного количества раундов.
Например, mp_maxrounds "200", игроки уже сыграли 100, а плагин никак не может узнать, что они эти 100 уже сыграли, и будет считать с 0, что не отразит реальное положение дел.
Не подходит, ибо в CS:S v34 такого нет
Не подходит, ибо это счёт команд, а он не зависит от реального количества сыгранных раундов
Не подходит - выдаёт просто "0"
Решение:
Написал плуг для логирования, чтобы добиться максимальной точности перед использованием кода в "реальном" плагине, но хотелось бы более сокращённый способ заиметь.
Плюс есть проблема с тем, что если загрузить такой код "на лету", он не сможет начать отсчёт с уже сыгранного количества раундов.
Например, 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");
C-подобный:
GetTeamScore / CS_GetTeamScore
C-подобный:
int iRounds = GetEntData(GetPlayerResourceEntity(), 560);
Решение:
Решение было найдено для CS:S v34, CS:S OB и CS:GO - Функция получения текущего по счёту раунда
Последнее редактирование: