Life State Notifier v1.0
Требования:
dhooks
Игры:
css:ob, css:34.
Код
// @note void CBasePlayer::SharedSpawn()
// @note Вызывается до `item_pickup`/`SDKHook_WeaponEquip`/`player_spawn`, когда оружие/бронь ещё не выданы, но они могут быть, если остались с прошлого раунда.
forward void OnPlayerSpawnPre(int client);
// Погиб / перемещён в наблюдатели / покинул сервер.
// @note `player_death` недостаточно, т.к. не вызывается после взрыва бомбы и `ChangeClientTeam(client, 1)`.
// @note `IsClientInGame` может быть `false`.
forward void OnPlayerDied(int client);
#if defined LIFE_STATE_NOTIFIER1
public void OnPlayerSpawnPre(int client) { LIFE_STATE_NOTIFIER1(client); }
public void OnPlayerDied(int client) { LIFE_STATE_NOTIFIER1(client); }
#elseif defined LIFE_STATE_NOTIFIER2
public void OnPlayerSpawnPre(int client) { LIFE_STATE_NOTIFIER2(client, true); }
public void OnPlayerDied(int client) { LIFE_STATE_NOTIFIER2(client, false); }
#endif
/*
Если хочется ОДИН callback (для удобства), есть два варианта:
// 1
#define LIFE_STATE_NOTIFIER1 OnLifeStateChanged
#include <life_state_notifier>
void OnLifeStateChanged(int client)
{
}
// 2
#define LIFE_STATE_NOTIFIER2 OnLifeStateChanged
#include <life_state_notifier>
void OnLifeStateChanged(int client, bool alive)
{
}
*/
Буду и сам использовать, решил поделиться.
В OnPlayerDied удобно очищать всякие прицепленные к игроку entity.
Можно создать FL_ALIVE флаг для игрока и проверять его, вместо IsPlayerAlive спама (особенно в OnPlayerRunCmd и подобных).