-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обычный счётчик миссов обнуляется каждый раунд (по крайней мере должен обнуляться). Но в таком случае, если наш ресольвер тапает условного игрока со второго выстрела, то каждый новый раунд мы будем по одному разу миссать. Значит если игрок с прошлого раунда сохранился, обнулять его счётчик не нужно. Для определения самого игрока я использую Steam ID.
Заводим глобальный массив Steam IDs:
Функция инициализации массива:
Основная функция:
Саму функцию вызываем в event listener:
Заводим глобальный массив Steam IDs:
C++:
unsigned long steam_ids[65];
Функция инициализации массива:
C++:
void misc::init_player_ids()
{
for (int i = 0; i < 65; i++)
{
auto e = static_cast<player_t*>(g_csgo.m_entitylist()->GetClientEntity(i));
if (!e)
{
steam_ids[i] = 0;
continue;
}
player_info_t player_info;
g_csgo.m_engine()->GetPlayerInfo(e->EntIndex(), &player_info);
steam_ids[i] = player_info.iSteamID;
}
}
Основная функция:
C++:
void misc::reset_missed_shots()
{
if (!g_csgo.m_engine()->IsInGame())
return;
static bool should_init = true;
if (should_init)
{
should_init = false;
init_player_ids(); // Один раз записываем в массив Steam IDs игроков.
}
for (int i = 0; i < 65; i++)
{
auto e = static_cast<player_t*>(g_csgo.m_entitylist()->GetClientEntity(i));
if (!e)
continue;
player_info_t player_info;
g_csgo.m_engine()->GetPlayerInfo(e->EntIndex(), &player_info);
if (player_info.iSteamID != steam_ids[i]) // Если текущий Steam ID игрока отличается от начального Steam ID,
{
steam_ids[i] = player_info.iSteamID; // то записываем в массив новый
g_ctx.m_globals.missed_shots[i] = 0; // и обнуляем счётчик миссов для игрока по этому индексу.
}
}
}
Саму функцию вызываем в event listener:
C++:
if (!strcmp(event->GetName(), "round_start"))
misc::get().reset_missed_shots();
Последнее редактирование: