continue drop-out cs code

This commit is contained in:
mittorn 2017-01-10 20:43:37 +00:00
parent 5d3c1fe7b5
commit f49a454cfa
7 changed files with 48 additions and 153 deletions

View File

@ -112,7 +112,7 @@ CNavNode *CHLBot::AddNode(const Vector *destPos, const Vector *normal, NavDirTyp
return node;
}
void TextProgressToAllPlayers(const char *message)
static void TextProgressToAllPlayers(const char *message)
{
hudtextparms_t textParms;

View File

@ -17,11 +17,12 @@ CHLBotManager::CHLBotManager()
m_flNextCVarCheck = 0.0f;
m_zoneCount = 0;
#if 0
SetLooseBomb(NULL);
m_isBombPlanted = false;
m_bombDefuser = NULL;
#endif
m_isLearningMap = false;
m_isAnalysisRequested = false;
m_editCmd = EDIT_NONE;
@ -84,12 +85,12 @@ void CHLBotManager::RestartRound()
{
// extend
CBotManager::RestartRound();
#if 0
SetLooseBomb(NULL);
m_isBombPlanted = false;
m_earliestBombPlantTimestamp = gpGlobals->time + RANDOM_FLOAT(10.0f, 30.0f);
m_bombDefuser = NULL;
#endif
m_editCmd = EDIT_NONE;
ResetRadioMessageTimestamps();
@ -208,7 +209,7 @@ void CHLBotManager::ServerActivate()
m_isMapDataLoaded = false;
m_zoneCount = 0;
m_gameScenario = SCENARIO_DEATHMATCH;
//m_gameScenario = SCENARIO_DEATHMATCH;
ValidateMapData();
RestartRound();
@ -344,15 +345,15 @@ void CHLBotManager::ServerCommand(const char *pcmd)
#endif
if (FStrEq(pcmd, "bot_add"))
{
BotAddCommand(BOT_TEAM_ANY, FROM_CONSOLE);
BotAddCommand(FROM_CONSOLE);
}
else if (FStrEq(pcmd, "bot_add_t"))
{
BotAddCommand(BOT_TEAM_T, FROM_CONSOLE);
BotAddCommand(FROM_CONSOLE);
}
else if (FStrEq(pcmd, "bot_add_ct"))
{
BotAddCommand(BOT_TEAM_CT, FROM_CONSOLE);
BotAddCommand(FROM_CONSOLE);
}
else if (FStrEq(pcmd, "bot_kill"))
{
@ -725,7 +726,7 @@ BOOL CHLBotManager::ClientCommand(CBasePlayer *pPlayer, const char *pcmd)
// Process the "bot_add" console command
bool CHLBotManager::BotAddCommand(BotProfileTeamType team, bool isFromConsole)
bool CHLBotManager::BotAddCommand(bool isFromConsole)
{
// dont allow bots to join if the Navigation Area is being generated
if (m_isLearningMap)
@ -735,22 +736,8 @@ bool CHLBotManager::BotAddCommand(BotProfileTeamType team, bool isFromConsole)
if (!isFromConsole || CMD_ARGC() < 2)
{
// if team not specified, check cv_bot_join_team cvar for preference
if (team == BOT_TEAM_ANY)
{
if (!Q_stricmp(cv_bot_join_team.string, "T"))
team = BOT_TEAM_T;
else if (!Q_stricmp(cv_bot_join_team.string, "CT"))
team = BOT_TEAM_CT;
else
{
team = BOT_TEAM_T;
}
}
// try to add a bot by name
profile = TheBotProfiles->GetRandomProfile(GetDifficultyLevel(), team);
profile = TheBotProfiles->GetRandomProfile(GetDifficultyLevel());
if (profile == NULL)
{
@ -774,7 +761,7 @@ bool CHLBotManager::BotAddCommand(BotProfileTeamType team, bool isFromConsole)
return true;
}
profile = TheBotProfiles->GetProfile(CMD_ARGV(1), team);
profile = TheBotProfiles->GetProfile(CMD_ARGV(1));
if (profile == NULL)
{
CONSOLE_ECHO("Error - no profile for '%s' exists.\n", CMD_ARGV(1));
@ -783,7 +770,7 @@ bool CHLBotManager::BotAddCommand(BotProfileTeamType team, bool isFromConsole)
}
// create the bot
if (AddBot(profile, team))
if (AddBot(profile))
{
if (isFromConsole)
{
@ -836,7 +823,7 @@ void CHLBotManager::MaintainBotQuota()
{
// don't try to add a bot if all teams are full
//if (!mp->TeamFull(TERRORIST) || !mp->TeamFull(CT))
BotAddCommand(BOT_TEAM_ANY);
BotAddCommand();
}
else if (desiredBotCount < botsInGame)
{
@ -915,11 +902,11 @@ void CHLBotManager::ValidateMapData()
CONSOLE_ECHO("Navigation map loaded.\n");
m_zoneCount = 0;
m_gameScenario = SCENARIO_DEATHMATCH;
// m_gameScenario = SCENARIO_DEATHMATCH;
// Search all entities in the map and set the game type and
// store all zones (bomb target, etc).
#if 0
CBaseEntity *entity = NULL;
int i;
for (i = 1; i < gpGlobals->maxEntities; ++i)
@ -1006,9 +993,9 @@ void CHLBotManager::ValidateMapData()
CONSOLE_ECHO("Warning: Too many zones, some will be ignored.\n");
}
}
#endif
// Collect nav areas that overlap each zone
for (i = 0; i < m_zoneCount; ++i)
for (int i = 0; i < m_zoneCount; ++i)
{
Zone *zone = &m_zone[i];
@ -1039,7 +1026,7 @@ void CHLBotManager::ValidateMapData()
}
}
bool CHLBotManager::AddBot(const BotProfile *profile, BotProfileTeamType team)
bool CHLBotManager::AddBot(const BotProfile *profile)
{
CHLBot *pBot = CreateBot<CHLBot>(profile);
if (pBot == NULL)
@ -1146,6 +1133,7 @@ void CHLBotManager::OnEvent(GameEventType event, CBaseEntity *entity, CBaseEntit
{
switch (event)
{
#if 0
case EVENT_BOMB_PLANTED:
m_isBombPlanted = true;
m_bombPlantTimestamp = gpGlobals->time;
@ -1166,6 +1154,7 @@ void CHLBotManager::OnEvent(GameEventType event, CBaseEntity *entity, CBaseEntit
case EVENT_TERRORISTS_WIN:
case EVENT_CTS_WIN:
#endif
case EVENT_ROUND_DRAW:
m_isRoundOver = true;
break;
@ -1183,7 +1172,7 @@ void CHLBotManager::OnEvent(GameEventType event, CBaseEntity *entity, CBaseEntit
}
// Get the time remaining before the planted bomb explodes
#if 0
float CHLBotManager::GetBombTimeLeft() const
{
return 10;//(g_pGameRules->m_iC4Timer - (gpGlobals->time - m_bombPlantTimestamp));
@ -1210,7 +1199,7 @@ bool CHLBotManager::IsImportantPlayer(CBasePlayer *player) const
// everyone is equally important in a deathmatch
return false;
}
#endif
// Return priority of player (0 = max pri)
unsigned int CHLBotManager::GetPlayerPriority(CBasePlayer *player) const

View File

@ -55,8 +55,9 @@ public:
virtual void OnEvent(GameEventType event, CBaseEntity *entity = NULL, CBaseEntity *other = NULL);
virtual unsigned int GetPlayerPriority(CBasePlayer *player) const; // return priority of player (0 = max pri)
#if 0
virtual bool IsImportantPlayer(CBasePlayer *player) const; // return true if player is important to scenario (VIP, bomb carrier, etc)
#endif
public:
void ValidateMapData();
bool IsLearningMap() const { return m_isLearningMap; }
@ -79,7 +80,7 @@ public:
return BOT_EXPERT;
}
#if 0
// the supported game scenarios
enum GameScenarioType
{
@ -89,7 +90,7 @@ public:
SCENARIO_ESCORT_VIP
};
GameScenarioType GetScenario() const { return m_gameScenario; }
#endif
// "zones"
// depending on the game mode, these are bomb zones, rescue zones, etc.
enum { MAX_ZONES = 4 }; // max # of zones in a map
@ -153,7 +154,7 @@ public:
return &m_zone[ RANDOM_LONG(0, m_zoneCount - 1) ];
}
#if 0
bool IsBombPlanted() const { return m_isBombPlanted; } // returns true if bomb has been planted
float GetBombPlantTimestamp() const { return m_bombPlantTimestamp; } // return time bomb was planted
bool IsTimeToPlantBomb() const { return (gpGlobals->time >= m_earliestBombPlantTimestamp); } // return true if it's ok to try to plant bomb
@ -162,7 +163,7 @@ public:
CBaseEntity *GetLooseBomb() { return m_looseBomb; } // return the bomb if it is loose on the ground
CNavArea *GetLooseBombArea() const { return m_looseBombArea; } // return area that bomb is in/near
void SetLooseBomb(CBaseEntity *bomb);
#endif
float GetRadioMessageTimestamp(GameEventType event, int teamID) const; // return the last time the given radio message was sent for given team
float GetRadioMessageInterval(GameEventType event, int teamID) const; // return the interval since the last time this message was sent
void SetRadioMessageTimestamp(GameEventType event, int teamID);
@ -201,10 +202,10 @@ public:
static void MonitorBotCVars();
static void MaintainBotQuota();
static bool AddBot(const BotProfile *profile, BotProfileTeamType team);
static bool AddBot(const BotProfile *profile);
#define FROM_CONSOLE true
static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole = false); // process the "bot_add" console command
static bool BotAddCommand(bool isFromConsole = false); // process the "bot_add" console command
private:
static float m_flNextCVarCheck;
@ -212,18 +213,18 @@ private:
static bool m_isLearningMap;
static bool m_isAnalysisRequested;
GameScenarioType m_gameScenario; // what kind of game are we playing
//GameScenarioType m_gameScenario; // what kind of game are we playing
Zone m_zone[ MAX_ZONES ];
int m_zoneCount;
#if 0
bool m_isBombPlanted; // true if bomb has been planted
float m_bombPlantTimestamp; // time bomb was planted
float m_earliestBombPlantTimestamp; // don't allow planting until after this time has elapsed
CBasePlayer *m_bombDefuser; // the player currently defusing a bomb
EHANDLE m_looseBomb; // will be non-NULL if bomb is loose on the ground
CNavArea *m_looseBombArea; // area that bomb is is/near
#endif
bool m_isRoundOver; // true if the round has ended
float m_radioMsgTimestamp[24][2];

View File

@ -10,8 +10,6 @@ const char *GameEventName[NUM_GAME_EVENTS + 1] =
"EVENT_WEAPON_FIRED_ON_EMPTY",
"EVENT_WEAPON_RELOADED",
"EVENT_HE_GRENADE_EXPLODED",
"EVENT_FLASHBANG_GRENADE_EXPLODED",
"EVENT_SMOKE_GRENADE_EXPLODED",
"EVENT_GRENADE_BOUNCED",
"EVENT_BEING_SHOT_AT",
"EVENT_PLAYER_BLINDED_BY_FLASHBANG",
@ -20,55 +18,23 @@ const char *GameEventName[NUM_GAME_EVENTS + 1] =
"EVENT_PLAYER_DIED",
"EVENT_PLAYER_LANDED_FROM_HEIGHT",
"EVENT_PLAYER_TOOK_DAMAGE",
"EVENT_HOSTAGE_DAMAGED",
"EVENT_HOSTAGE_KILLED",
"EVENT_DOOR",
"EVENT_BREAK_GLASS",
"EVENT_BREAK_WOOD",
"EVENT_BREAK_METAL",
"EVENT_BREAK_FLESH",
"EVENT_BREAK_CONCRETE",
"EVENT_BOMB_PLANTED",
"EVENT_BOMB_DROPPED",
"EVENT_BOMB_PICKED_UP",
"EVENT_BOMB_BEEP",
"EVENT_BOMB_DEFUSING",
"EVENT_BOMB_DEFUSE_ABORTED",
"EVENT_BOMB_DEFUSED",
"EVENT_BOMB_EXPLODED",
"EVENT_HOSTAGE_USED",
"EVENT_HOSTAGE_RESCUED",
"EVENT_ALL_HOSTAGES_RESCUED",
"EVENT_VIP_ESCAPED",
"EVENT_VIP_ASSASSINATED",
"EVENT_TERRORISTS_WIN",
"EVENT_CTS_WIN",
"EVENT_ROUND_DRAW",
"EVENT_ROUND_WIN",
"EVENT_ROUND_LOSS",
"EVENT_ROUND_START",
"EVENT_PLAYER_SPAWNED",
"EVENT_CLIENT_CORPSE_SPAWNED",
"EVENT_BUY_TIME_START",
"EVENT_PLAYER_LEFT_BUY_ZONE",
"EVENT_DEATH_CAMERA_START",
"EVENT_KILL_ALL",
"EVENT_ROUND_TIME",
"EVENT_DIE",
"EVENT_KILL",
"EVENT_HEADSHOT",
"EVENT_KILL_FLASHBANGED",
"EVENT_TUTOR_BUY_MENU_OPENNED",
"EVENT_TUTOR_AUTOBUY",
"EVENT_PLAYER_BOUGHT_SOMETHING",
"EVENT_TUTOR_NOT_BUYING_ANYTHING",
"EVENT_TUTOR_NEED_TO_BUY_PRIMARY_WEAPON",
"EVENT_TUTOR_NEED_TO_BUY_PRIMARY_AMMO",
"EVENT_TUTOR_NEED_TO_BUY_SECONDARY_AMMO",
"EVENT_TUTOR_NEED_TO_BUY_ARMOR",
"EVENT_TUTOR_NEED_TO_BUY_DEFUSE_KIT",
"EVENT_TUTOR_NEED_TO_BUY_GRENADE",
"EVENT_CAREER_TASK_DONE",
"EVENT_START_RADIO_1",
"EVENT_RADIO_COVER_ME",
"EVENT_RADIO_YOU_TAKE_THE_POINT",
@ -97,9 +63,7 @@ const char *GameEventName[NUM_GAME_EVENTS + 1] =
"EVENT_NEW_MATCH",
"EVENT_PLAYER_CHANGED_TEAM",
"EVENT_BULLET_IMPACT",
"EVENT_GAME_COMMENCE",
"EVENT_WEAPON_ZOOMED",
"EVENT_HOSTAGE_CALLED_FOR_HELP",
NULL,
};

View File

@ -63,11 +63,6 @@ bool BotProfile::HasPistolPreference() const
// Return true if this profile is valid for the specified team
bool BotProfile::IsValidForTeam(BotProfileTeamType team) const
{
return (team == BOT_TEAM_ANY || m_teams == BOT_TEAM_ANY || team == m_teams);
}
BotProfileManager::BotProfileManager()
{
m_nextSkin = 0;
@ -441,20 +436,10 @@ void BotProfileManager::Init(const char *filename, unsigned int *checksum)
token = c + 1;
}
}
else if (!Q_stricmp("Team", attributeName))
{
if (!Q_stricmp(token, "T"))
{
profile->m_teams = BOT_TEAM_T;
}
else if (!Q_stricmp(token, "CT"))
{
profile->m_teams = BOT_TEAM_CT;
}
else
{
profile->m_teams = BOT_TEAM_ANY;
}
}
else
{
@ -595,7 +580,7 @@ int BotProfileManager::FindVoiceBankIndex(const char *filename)
// Return random unused profile that matches the given difficulty level
const BotProfile *BotProfileManager::GetRandomProfile(BotDifficultyType difficulty, BotProfileTeamType team) const
const BotProfile *BotProfileManager::GetRandomProfile(BotDifficultyType difficulty) const
{
#ifdef RANDOM_LONG
@ -614,8 +599,8 @@ const BotProfile *BotProfileManager::GetRandomProfile(BotDifficultyType difficul
continue;
// Match team choice
if ( !profile->IsValidForTeam( team ) )
continue;
// if ( !profile->IsValidForTeam( team ) )
// continue;
profiles.AddToTail( profile );
}

View File

@ -52,13 +52,6 @@ enum
LastCustomSkin = FirstCustomSkin + NumCustomSkins - 1,
};
enum BotProfileTeamType
{
BOT_TEAM_T,
BOT_TEAM_CT,
BOT_TEAM_ANY
};
class BotProfile
{
public:
@ -75,7 +68,7 @@ public:
m_voicePitch = 100;
m_reactionTime = 0.3f;
m_attackDelay = 0.0f;
m_teams = BOT_TEAM_ANY;
//m_teams = BOT_TEAM_ANY;
m_voiceBank = 0;
m_prefersSilencer = false;
}
@ -95,7 +88,7 @@ public:
float GetReactionTime() const { return m_reactionTime; }
float GetAttackDelay() const { return m_attackDelay; }
int GetVoiceBank() const { return m_voiceBank; }
bool IsValidForTeam(BotProfileTeamType team) const;
//bool IsValidForTeam(BotProfileTeamType team) const;
bool PrefersSilencer() const { return m_prefersSilencer; }
private:
@ -119,7 +112,7 @@ private:
int m_voicePitch;
float m_reactionTime;
float m_attackDelay;
enum BotProfileTeamType m_teams;
//enum BotProfileTeamType m_teams;
bool m_prefersSilencer;
int m_voiceBank;
};
@ -165,8 +158,8 @@ inline void BotProfile::Inherit(const BotProfile *parent, const BotProfile *base
if (parent->m_attackDelay != baseline->m_attackDelay)
m_attackDelay = parent->m_attackDelay;
if (parent->m_teams != baseline->m_teams)
m_teams = parent->m_teams;
// if (parent->m_teams != baseline->m_teams)
// m_teams = parent->m_teams;
if (parent->m_voiceBank != baseline->m_voiceBank)
m_voiceBank = parent->m_voiceBank;
@ -183,20 +176,20 @@ public:
void Init(const char *filename, unsigned int *checksum = NULL);
void Reset();
const BotProfile *GetProfile (const char *name, BotProfileTeamType team) const
const BotProfile *GetProfile (const char *name) const
{
FOR_EACH_LL (m_profileList, it)
{
BotProfile *profile = m_profileList[it];
if (!Q_stricmp (name, profile->GetName ()) && profile->IsValidForTeam (team))
//if (!Q_stricmp (name, profile->GetName ()) && profile->IsValidForTeam (team))
return profile;
}
return NULL;
}
const BotProfileList *GetProfileList() const { return &m_profileList; }
const BotProfile *GetRandomProfile(BotDifficultyType difficulty, BotProfileTeamType team) const;
const BotProfile *GetRandomProfile(BotDifficultyType difficulty) const;
const char *GetCustomSkin(int index);
const char *GetCustomSkinModelname(int index);

View File

@ -40,8 +40,6 @@ enum GameEventType
EVENT_WEAPON_RELOADED, // tell bots the player is reloading his weapon (argumens: 1 = reloader, 2 = NULL)
EVENT_HE_GRENADE_EXPLODED, // tell bots the HE grenade is exploded (argumens: 1 = grenade thrower, 2 = NULL)
EVENT_FLASHBANG_GRENADE_EXPLODED, // tell bots the flashbang grenade is exploded (argumens: 1 = grenade thrower, 2 = explosion origin)
EVENT_SMOKE_GRENADE_EXPLODED, // tell bots the smoke grenade is exploded (argumens: 1 = grenade thrower, 2 = NULL)
EVENT_GRENADE_BOUNCED,
EVENT_BEING_SHOT_AT,
@ -51,8 +49,6 @@ enum GameEventType
EVENT_PLAYER_DIED, // tell bots the player is killed (argumens: 1 = victim, 2 = killer)
EVENT_PLAYER_LANDED_FROM_HEIGHT, // tell bots the player is fell with some damage (argumens: 1 = felled player, 2 = NULL)
EVENT_PLAYER_TOOK_DAMAGE, // tell bots the player is take damage (argumens: 1 = victim, 2 = attacker)
EVENT_HOSTAGE_DAMAGED, // tell bots the player has injured a hostage (argumens: 1 = hostage, 2 = injurer)
EVENT_HOSTAGE_KILLED, // tell bots the player has killed a hostage (argumens: 1 = hostage, 2 = killer)
EVENT_DOOR, // tell bots the door is moving (argumens: 1 = door, 2 = NULL)
EVENT_BREAK_GLASS, // tell bots the glass has break (argumens: 1 = glass, 2 = NULL)
@ -61,49 +57,18 @@ enum GameEventType
EVENT_BREAK_FLESH, // tell bots the flesh has break (argumens: 1 = flesh, 2 = NULL)
EVENT_BREAK_CONCRETE, // tell bots the concrete has break (argumens: 1 = concrete, 2 = NULL)
EVENT_BOMB_PLANTED, // tell bots the bomb has been planted (argumens: 1 = planter, 2 = NULL)
EVENT_BOMB_DROPPED, // tell bots the bomb has been dropped (argumens: 1 = NULL, 2 = NULL)
EVENT_BOMB_PICKED_UP, // let the bots hear the bomb pickup (argumens: 1 = player that pickup c4, 2 = NULL)
EVENT_BOMB_BEEP, // let the bots hear the bomb beeping (argumens: 1 = c4, 2 = NULL)
EVENT_BOMB_DEFUSING, // tell the bots someone has started defusing (argumens: 1 = defuser, 2 = NULL)
EVENT_BOMB_DEFUSE_ABORTED, // tell the bots someone has aborted defusing (argumens: 1 = NULL, 2 = NULL)
EVENT_BOMB_DEFUSED, // tell the bots the bomb is defused (argumens: 1 = defuser, 2 = NULL)
EVENT_BOMB_EXPLODED, // let the bots hear the bomb exploding (argumens: 1 = NULL, 2 = NULL)
EVENT_HOSTAGE_USED, // tell bots the hostage is used (argumens: 1 = user, 2 = NULL)
EVENT_HOSTAGE_RESCUED, // tell bots the hostage is rescued (argumens: 1 = rescuer (CBasePlayer *), 2 = hostage (CHostage *))
EVENT_ALL_HOSTAGES_RESCUED, // tell bots the all hostages are rescued (argumens: 1 = NULL, 2 = NULL)
EVENT_VIP_ESCAPED, // tell bots the VIP is escaped (argumens: 1 = NULL, 2 = NULL)
EVENT_VIP_ASSASSINATED, // tell bots the VIP is assassinated (argumens: 1 = NULL, 2 = NULL)
EVENT_TERRORISTS_WIN, // tell bots the terrorists won the round (argumens: 1 = NULL, 2 = NULL)
EVENT_CTS_WIN, // tell bots the CTs won the round (argumens: 1 = NULL, 2 = NULL)
EVENT_ROUND_DRAW, // tell bots the round was a draw (argumens: 1 = NULL, 2 = NULL)
EVENT_ROUND_WIN, // tell carreer the round was a win (argumens: 1 = NULL, 2 = NULL)
EVENT_ROUND_LOSS, // tell carreer the round was a loss (argumens: 1 = NULL, 2 = NULL)
EVENT_ROUND_START, // tell bots the round was started (when freeze period is expired) (argumens: 1 = NULL, 2 = NULL)
EVENT_PLAYER_SPAWNED, // tell bots the player is spawned (argumens: 1 = spawned player, 2 = NULL)
EVENT_CLIENT_CORPSE_SPAWNED,
EVENT_BUY_TIME_START,
EVENT_PLAYER_LEFT_BUY_ZONE,
EVENT_DEATH_CAMERA_START,
EVENT_KILL_ALL,
EVENT_ROUND_TIME,
EVENT_DIE,
EVENT_KILL,
EVENT_HEADSHOT,
EVENT_KILL_FLASHBANGED,
EVENT_TUTOR_BUY_MENU_OPENNED,
EVENT_TUTOR_AUTOBUY,
EVENT_PLAYER_BOUGHT_SOMETHING,
EVENT_TUTOR_NOT_BUYING_ANYTHING,
EVENT_TUTOR_NEED_TO_BUY_PRIMARY_WEAPON,
EVENT_TUTOR_NEED_TO_BUY_PRIMARY_AMMO,
EVENT_TUTOR_NEED_TO_BUY_SECONDARY_AMMO,
EVENT_TUTOR_NEED_TO_BUY_ARMOR,
EVENT_TUTOR_NEED_TO_BUY_DEFUSE_KIT,
EVENT_TUTOR_NEED_TO_BUY_GRENADE,
EVENT_CAREER_TASK_DONE,
EVENT_START_RADIO_1,
EVENT_RADIO_COVER_ME,
@ -134,9 +99,7 @@ enum GameEventType
EVENT_NEW_MATCH, // tell bots the game is new (argumens: 1 = NULL, 2 = NULL)
EVENT_PLAYER_CHANGED_TEAM, // tell bots the player is switch his team (also called from ClientPutInServer()) (argumens: 1 = switcher, 2 = NULL)
EVENT_BULLET_IMPACT, // tell bots the player is shoot at wall (argumens: 1 = shooter, 2 = shoot trace end position)
EVENT_GAME_COMMENCE, // tell bots the game is commencing (argumens: 1 = NULL, 2 = NULL)
EVENT_WEAPON_ZOOMED, // tell bots the player is switch weapon zoom (argumens: 1 = zoom switcher, 2 = NULL)
EVENT_HOSTAGE_CALLED_FOR_HELP, // tell bots the hostage is talking (argumens: 1 = listener, 2 = NULL)
NUM_GAME_EVENTS,
};