fixed crash, when official csbots active
fixed baaaad waypoint dislpaying fixed bots equip in buyzone when has active enemy bots try to do their goals more ofter (again) fixed some issues with knife maps
This commit is contained in:
parent
9f02b92ee2
commit
64445029c7
9 changed files with 80 additions and 63 deletions
|
|
@ -56,13 +56,14 @@ enum TaskID
|
||||||
};
|
};
|
||||||
|
|
||||||
// supported cs's
|
// supported cs's
|
||||||
enum CSVersion
|
enum GameFlags
|
||||||
{
|
{
|
||||||
CSVERSION_CSTRIKE16 = (1 << 0), // Counter-Strike 1.6 and Above
|
GAME_CSTRIKE16 = (1 << 0), // Counter-Strike 1.6 and Above
|
||||||
CSVERSION_XASH = (1 << 1), // Counter-Strike 1.6 under the xash engine (additional flag)
|
GAME_XASH = (1 << 1), // Counter-Strike 1.6 under the xash engine (additional flag)
|
||||||
CSVERSION_CZERO = (1 << 2), // Counter-Strike: Condition Zero
|
GAME_CZERO = (1 << 2), // Counter-Strike: Condition Zero
|
||||||
CSVERSION_LEGACY = (1 << 3), // Counter-Strike 1.3-1.5 with/without Steam
|
GAME_LEGACY = (1 << 3), // Counter-Strike 1.3-1.5 with/without Steam
|
||||||
CSVERSION_MOBILITY = (1 << 4) // additional flag that bot is running on android (additional flag)
|
GAME_MOBILITY = (1 << 4), // additional flag that bot is running on android (additional flag)
|
||||||
|
GAME_OFFICIAL_CSBOT = (1 << 5) // additional flag that indicates offficial cs bots are ingame
|
||||||
};
|
};
|
||||||
|
|
||||||
// log levels
|
// log levels
|
||||||
|
|
@ -1104,7 +1105,8 @@ public:
|
||||||
|
|
||||||
edict_t *m_enemy; // pointer to enemy entity
|
edict_t *m_enemy; // pointer to enemy entity
|
||||||
float m_enemyUpdateTime; // time to check for new enemies
|
float m_enemyUpdateTime; // time to check for new enemies
|
||||||
float m_enemyReachableTimer; // time to recheck if Enemy reachable
|
float m_enemyReachableTimer; // time to recheck if enemy reachable
|
||||||
|
float m_enemyIgnoreTimer; // ignore enemy for some time
|
||||||
bool m_isEnemyReachable; // direct line to enemy
|
bool m_isEnemyReachable; // direct line to enemy
|
||||||
|
|
||||||
float m_seeEnemyTime; // time bot sees enemy
|
float m_seeEnemyTime; // time bot sees enemy
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ extern float g_lastRadioTime[2];
|
||||||
|
|
||||||
extern int g_mapType;
|
extern int g_mapType;
|
||||||
extern int g_numWaypoints;
|
extern int g_numWaypoints;
|
||||||
extern int g_gameVersion;
|
extern int g_gameFlags;
|
||||||
extern int g_fakeArgc;
|
extern int g_fakeArgc;
|
||||||
|
|
||||||
extern int g_highestDamageCT;
|
extern int g_highestDamageCT;
|
||||||
|
|
|
||||||
|
|
@ -963,7 +963,7 @@ void Bot::SwitchChatterIcon (bool show)
|
||||||
{
|
{
|
||||||
// this function depending on show boolen, shows/remove chatter, icon, on the head of bot.
|
// this function depending on show boolen, shows/remove chatter, icon, on the head of bot.
|
||||||
|
|
||||||
if ((g_gameVersion & CSVERSION_LEGACY) || yb_communication_type.GetInt () != 2)
|
if ((g_gameFlags & GAME_LEGACY) || yb_communication_type.GetInt () != 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = 0; i < GetMaxClients (); i++)
|
for (int i = 0; i < GetMaxClients (); i++)
|
||||||
|
|
@ -982,7 +982,7 @@ void Bot::InstantChatterMessage (int type)
|
||||||
{
|
{
|
||||||
// this function sends instant chatter messages.
|
// this function sends instant chatter messages.
|
||||||
|
|
||||||
if (yb_communication_type.GetInt () != 2 || g_chatterFactory[type].IsEmpty () || (g_gameVersion & CSVERSION_LEGACY) || !g_sendAudioFinished)
|
if (yb_communication_type.GetInt () != 2 || g_chatterFactory[type].IsEmpty () || (g_gameFlags & GAME_LEGACY) || !g_sendAudioFinished)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_notKilled)
|
if (m_notKilled)
|
||||||
|
|
@ -1033,7 +1033,7 @@ void Bot::RadioMessage (int message)
|
||||||
if (yb_communication_type.GetInt () == 0 || m_numFriendsLeft == 0)
|
if (yb_communication_type.GetInt () == 0 || m_numFriendsLeft == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (g_chatterFactory[message].IsEmpty () || (g_gameVersion & CSVERSION_LEGACY) || yb_communication_type.GetInt () != 2)
|
if (g_chatterFactory[message].IsEmpty () || (g_gameFlags & GAME_LEGACY) || yb_communication_type.GetInt () != 2)
|
||||||
g_radioInsteadVoice = true; // use radio instead voice
|
g_radioInsteadVoice = true; // use radio instead voice
|
||||||
|
|
||||||
m_radioSelect = message;
|
m_radioSelect = message;
|
||||||
|
|
@ -1044,7 +1044,7 @@ void Bot::ChatterMessage (int message)
|
||||||
{
|
{
|
||||||
// this function inserts the voice message into the message queue (mostly same as above)
|
// this function inserts the voice message into the message queue (mostly same as above)
|
||||||
|
|
||||||
if ((g_gameVersion & CSVERSION_LEGACY) || yb_communication_type.GetInt () != 2 || g_chatterFactory[message].IsEmpty () || m_numFriendsLeft == 0)
|
if ((g_gameFlags & GAME_LEGACY) || yb_communication_type.GetInt () != 2 || g_chatterFactory[message].IsEmpty () || m_numFriendsLeft == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool shouldExecute = false;
|
bool shouldExecute = false;
|
||||||
|
|
@ -1245,7 +1245,7 @@ void Bot::CheckMessageQueue (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_radioSelect != Radio_ReportingIn && g_radioInsteadVoice) || yb_communication_type.GetInt () != 2 || g_chatterFactory[m_radioSelect].IsEmpty () || (g_gameVersion & CSVERSION_LEGACY))
|
if ((m_radioSelect != Radio_ReportingIn && g_radioInsteadVoice) || yb_communication_type.GetInt () != 2 || g_chatterFactory[m_radioSelect].IsEmpty () || (g_gameFlags & GAME_LEGACY))
|
||||||
{
|
{
|
||||||
if (m_radioSelect < Radio_GoGoGo)
|
if (m_radioSelect < Radio_GoGoGo)
|
||||||
FakeClientCommand (GetEntity (), "radio1");
|
FakeClientCommand (GetEntity (), "radio1");
|
||||||
|
|
@ -1412,7 +1412,7 @@ void Bot::PurchaseWeapons (void)
|
||||||
|
|
||||||
|
|
||||||
// do this, because xash engine is not capable to run all the features goldsrc, but we have cs 1.6 on it, so buy table must be the same
|
// do this, because xash engine is not capable to run all the features goldsrc, but we have cs 1.6 on it, so buy table must be the same
|
||||||
bool isOldGame = (g_gameVersion & CSVERSION_LEGACY) && !(g_gameVersion & CSVERSION_XASH);
|
bool isOldGame = (g_gameFlags & GAME_LEGACY) && !(g_gameFlags & GAME_XASH);
|
||||||
|
|
||||||
switch (m_buyState)
|
switch (m_buyState)
|
||||||
{
|
{
|
||||||
|
|
@ -1810,14 +1810,21 @@ void Bot::SetConditionsOverride (void)
|
||||||
// special handling, if we have a knife in our hands
|
// special handling, if we have a knife in our hands
|
||||||
if (m_currentWeapon == WEAPON_KNIFE && IsValidPlayer (m_enemy) && (GetTaskId () != TASK_MOVETOPOSITION || GetTask ()->desire != TASKPRI_HIDE))
|
if (m_currentWeapon == WEAPON_KNIFE && IsValidPlayer (m_enemy) && (GetTaskId () != TASK_MOVETOPOSITION || GetTask ()->desire != TASKPRI_HIDE))
|
||||||
{
|
{
|
||||||
if ((pev->origin - m_enemy->v.origin).GetLength2D () > 100.0f && (m_states & STATE_SEEING_ENEMY))
|
float length = (pev->origin - m_enemy->v.origin).GetLength2D ();
|
||||||
|
|
||||||
|
// do waypoint movement if enemy is not reacheable with a knife
|
||||||
|
if (length > 100.0f && (m_states & STATE_SEEING_ENEMY))
|
||||||
{
|
{
|
||||||
int nearestToEnemyPoint = waypoints.FindNearest (m_enemy->v.origin);
|
int nearestToEnemyPoint = waypoints.FindNearest (m_enemy->v.origin);
|
||||||
|
|
||||||
if (nearestToEnemyPoint != -1 && nearestToEnemyPoint != m_currentWaypointIndex && fabsf (waypoints.GetPath (nearestToEnemyPoint)->origin.z - m_enemy->v.origin.z) < 16.0f)
|
if (nearestToEnemyPoint != -1 && nearestToEnemyPoint != m_currentWaypointIndex && fabsf (waypoints.GetPath (nearestToEnemyPoint)->origin.z - m_enemy->v.origin.z) < 16.0f)
|
||||||
{
|
{
|
||||||
PushTask (TASK_MOVETOPOSITION, TASKPRI_HIDE, nearestToEnemyPoint, GetWorldTime () + Random.Float (5.0f, 10.0f), true);
|
PushTask (TASK_MOVETOPOSITION, TASKPRI_HIDE, nearestToEnemyPoint, GetWorldTime () + Random.Float (5.0f, 10.0f), true);
|
||||||
|
|
||||||
|
m_isEnemyReachable = false;
|
||||||
m_enemy = NULL;
|
m_enemy = NULL;
|
||||||
|
|
||||||
|
m_enemyIgnoreTimer = GetWorldTime () + ((length / pev->maxspeed) * 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2004,7 +2011,7 @@ void Bot::ApplyTaskFilters (void)
|
||||||
g_taskFilters[TASK_ATTACK].desire = 0.0f;
|
g_taskFilters[TASK_ATTACK].desire = 0.0f;
|
||||||
|
|
||||||
// calculate desires to seek cover or hunt
|
// calculate desires to seek cover or hunt
|
||||||
if (IsValidPlayer (m_lastEnemy) && !m_lastEnemyOrigin.IsZero ())
|
if (IsValidPlayer (m_lastEnemy) && !m_lastEnemyOrigin.IsZero () && !m_hasC4)
|
||||||
{
|
{
|
||||||
float distance = (m_lastEnemyOrigin - pev->origin).GetLength ();
|
float distance = (m_lastEnemyOrigin - pev->origin).GetLength ();
|
||||||
|
|
||||||
|
|
@ -3196,10 +3203,16 @@ void Bot::RunTask_Normal (void)
|
||||||
}
|
}
|
||||||
else if (m_team == CT)
|
else if (m_team == CT)
|
||||||
{
|
{
|
||||||
if (!g_bombPlanted && GetNearbyFriendsNearPosition (pev->origin, 360.0f) < 4 && m_personality != PERSONALITY_RUSHER)
|
if (!g_bombPlanted && GetNearbyFriendsNearPosition (pev->origin, 210.0f) < 4)
|
||||||
{
|
{
|
||||||
int index = FindDefendWaypoint (m_currentPath->origin);
|
int index = FindDefendWaypoint (m_currentPath->origin);
|
||||||
|
|
||||||
|
float campTime = Random.Float (25.0f, 40.f);
|
||||||
|
|
||||||
|
// rusher bots don't like to camp too much
|
||||||
|
if (m_personality == PERSONALITY_RUSHER)
|
||||||
|
campTime *= 0.5f;
|
||||||
|
|
||||||
PushTask (TASK_CAMP, TASKPRI_CAMP, -1, GetWorldTime () + Random.Float (25.0, 40.0), true); // push camp task on to stack
|
PushTask (TASK_CAMP, TASKPRI_CAMP, -1, GetWorldTime () + Random.Float (25.0, 40.0), true); // push camp task on to stack
|
||||||
PushTask (TASK_MOVETOPOSITION, TASKPRI_MOVETOPOSITION, index, GetWorldTime () + Random.Float (5.0f, 11.0f), true); // push move command
|
PushTask (TASK_MOVETOPOSITION, TASKPRI_MOVETOPOSITION, index, GetWorldTime () + Random.Float (5.0f, 11.0f), true); // push move command
|
||||||
|
|
||||||
|
|
@ -6026,7 +6039,7 @@ void Bot::EquipInBuyzone (int buyCount)
|
||||||
checkBuyTime = (g_timeRoundStart + Random.Float (10.0f, 20.0f) + mp_buytime.GetFloat () < GetWorldTime ());
|
checkBuyTime = (g_timeRoundStart + Random.Float (10.0f, 20.0f) + mp_buytime.GetFloat () < GetWorldTime ());
|
||||||
|
|
||||||
// if bot is in buy zone, try to buy ammo for this weapon...
|
// if bot is in buy zone, try to buy ammo for this weapon...
|
||||||
if (m_lastEquipTime + 15.0f < GetWorldTime () && m_inBuyZone && checkBuyTime && !g_bombPlanted && m_moneyAmount > g_botBuyEconomyTable[0])
|
if (m_seeEnemyTime + 5.0f < GetWorldTime () && m_lastEquipTime + 15.0f < GetWorldTime () && m_inBuyZone && checkBuyTime && !g_bombPlanted && m_moneyAmount > g_botBuyEconomyTable[0])
|
||||||
{
|
{
|
||||||
m_buyingFinished = false;
|
m_buyingFinished = false;
|
||||||
m_buyState = buyCount;
|
m_buyState = buyCount;
|
||||||
|
|
|
||||||
|
|
@ -290,14 +290,14 @@ void Bot::PrepareChatMessage (char *text)
|
||||||
}
|
}
|
||||||
else if (*pattern == 'd')
|
else if (*pattern == 'd')
|
||||||
{
|
{
|
||||||
if (g_gameVersion == CSVERSION_CZERO)
|
if (g_gameFlags == GAME_CZERO)
|
||||||
{
|
{
|
||||||
if (Random.Long (1, 100) < 30)
|
if (Random.Long (1, 100) < 30)
|
||||||
strcat (m_tempStrings, "CZ");
|
strcat (m_tempStrings, "CZ");
|
||||||
else
|
else
|
||||||
strcat (m_tempStrings, "Condition Zero");
|
strcat (m_tempStrings, "Condition Zero");
|
||||||
}
|
}
|
||||||
else if (g_gameVersion == CSVERSION_CSTRIKE16 || g_gameVersion == CSVERSION_LEGACY)
|
else if (g_gameFlags == GAME_CSTRIKE16 || g_gameFlags == GAME_LEGACY)
|
||||||
{
|
{
|
||||||
if (Random.Long (1, 100) < 30)
|
if (Random.Long (1, 100) < 30)
|
||||||
strcat (m_tempStrings, "CS");
|
strcat (m_tempStrings, "CS");
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ bool Bot::LookupEnemy (void)
|
||||||
// this function tries to find the best suitable enemy for the bot
|
// this function tries to find the best suitable enemy for the bot
|
||||||
|
|
||||||
// do not search for enemies while we're blinded, or shooting disabled by user
|
// do not search for enemies while we're blinded, or shooting disabled by user
|
||||||
if (m_blindTime > GetWorldTime () || yb_ignore_enemies.GetBool ())
|
if (m_enemyIgnoreTimer > GetWorldTime () || m_blindTime > GetWorldTime () || yb_ignore_enemies.GetBool ())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
edict_t *player, *newEnemy = NULL;
|
edict_t *player, *newEnemy = NULL;
|
||||||
|
|
@ -269,10 +269,6 @@ bool Bot::LookupEnemy (void)
|
||||||
if (!ENGINE_CHECK_VISIBILITY (player, pvs))
|
if (!ENGINE_CHECK_VISIBILITY (player, pvs))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// skip glowed players, in free for all mode, we can't hit them
|
|
||||||
if (player->v.renderfx == kRenderFxGlowShell && yb_csdm_mode.GetInt () >= 1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// do some blind by smoke grenade
|
// do some blind by smoke grenade
|
||||||
if (m_blindRecognizeTime < GetWorldTime () && IsBehindSmokeClouds (player))
|
if (m_blindRecognizeTime < GetWorldTime () && IsBehindSmokeClouds (player))
|
||||||
{
|
{
|
||||||
|
|
@ -1115,7 +1111,7 @@ void Bot::CombatFight (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_fightStyle == 0 || ((pev->button & IN_RELOAD) || m_isReloading) || (UsesPistol () && distance < 400.0f))
|
if (m_fightStyle == 0 || ((pev->button & IN_RELOAD) || m_isReloading) || (UsesPistol () && distance < 400.0f) || m_currentWeapon == WEAPON_KNIFE)
|
||||||
{
|
{
|
||||||
if (m_strafeSetTime < GetWorldTime ())
|
if (m_strafeSetTime < GetWorldTime ())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ int g_lastRadio[2];
|
||||||
int g_storeAddbotVars[4];
|
int g_storeAddbotVars[4];
|
||||||
int g_radioSelect[32];
|
int g_radioSelect[32];
|
||||||
int g_fakeArgc = 0;
|
int g_fakeArgc = 0;
|
||||||
int g_gameVersion = 0;
|
int g_gameFlags = 0;
|
||||||
int g_numWaypoints = 0;
|
int g_numWaypoints = 0;
|
||||||
int g_mapType = 0;
|
int g_mapType = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -716,7 +716,7 @@ void InitConfig (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHATTER SYSTEM INITIALIZATION
|
// CHATTER SYSTEM INITIALIZATION
|
||||||
if (OpenConfig ("chatter.cfg", "Couldn't open chatter system configuration", &fp) && !(g_gameVersion & CSVERSION_LEGACY) && yb_communication_type.GetInt () == 2)
|
if (OpenConfig ("chatter.cfg", "Couldn't open chatter system configuration", &fp) && !(g_gameFlags & GAME_LEGACY) && yb_communication_type.GetInt () == 2)
|
||||||
{
|
{
|
||||||
Array <String> array;
|
Array <String> array;
|
||||||
|
|
||||||
|
|
@ -831,7 +831,7 @@ void InitConfig (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LOCALIZER INITITALIZATION
|
// LOCALIZER INITITALIZATION
|
||||||
if (OpenConfig ("lang.cfg", "Specified language not found", &fp, true) && !(g_gameVersion & CSVERSION_LEGACY))
|
if (OpenConfig ("lang.cfg", "Specified language not found", &fp, true) && !(g_gameFlags & GAME_LEGACY))
|
||||||
{
|
{
|
||||||
if (IsDedicatedServer ())
|
if (IsDedicatedServer ())
|
||||||
return; // dedicated server will use only english translation
|
return; // dedicated server will use only english translation
|
||||||
|
|
@ -881,7 +881,7 @@ void InitConfig (void)
|
||||||
}
|
}
|
||||||
fp.Close ();
|
fp.Close ();
|
||||||
}
|
}
|
||||||
else if (g_gameVersion & CSVERSION_LEGACY)
|
else if (g_gameFlags & GAME_LEGACY)
|
||||||
AddLogEntry (true, LL_DEFAULT, "Multilingual system disabled, due to your Counter-Strike Version!");
|
AddLogEntry (true, LL_DEFAULT, "Multilingual system disabled, due to your Counter-Strike Version!");
|
||||||
else if (strcmp (yb_language.GetString (), "en") != 0)
|
else if (strcmp (yb_language.GetString (), "en") != 0)
|
||||||
AddLogEntry (true, LL_ERROR, "Couldn't load language configuration");
|
AddLogEntry (true, LL_ERROR, "Couldn't load language configuration");
|
||||||
|
|
@ -922,20 +922,20 @@ void GameDLLInit (void)
|
||||||
// print game detection info
|
// print game detection info
|
||||||
String gameVersionStr;
|
String gameVersionStr;
|
||||||
|
|
||||||
if (g_gameVersion & CSVERSION_LEGACY)
|
if (g_gameFlags & GAME_LEGACY)
|
||||||
gameVersionStr.Assign ("Legacy");
|
gameVersionStr.Assign ("Legacy");
|
||||||
|
|
||||||
else if (g_gameVersion & CSVERSION_CZERO)
|
else if (g_gameFlags & GAME_CZERO)
|
||||||
gameVersionStr.Assign ("Condition Zero");
|
gameVersionStr.Assign ("Condition Zero");
|
||||||
|
|
||||||
else if (g_gameVersion & CSVERSION_CSTRIKE16)
|
else if (g_gameFlags & GAME_CSTRIKE16)
|
||||||
gameVersionStr.Assign ("v1.6");
|
gameVersionStr.Assign ("v1.6");
|
||||||
|
|
||||||
if (g_gameVersion & CSVERSION_XASH)
|
if (g_gameFlags & GAME_XASH)
|
||||||
{
|
{
|
||||||
gameVersionStr.Append (" @ Xash3D Engine");
|
gameVersionStr.Append (" @ Xash3D Engine");
|
||||||
|
|
||||||
if (g_gameVersion & CSVERSION_MOBILITY)
|
if (g_gameFlags & GAME_MOBILITY)
|
||||||
gameVersionStr.Append (" Mobile");
|
gameVersionStr.Append (" Mobile");
|
||||||
|
|
||||||
gameVersionStr.Replace ("Legacy", "1.6 Limited");
|
gameVersionStr.Replace ("Legacy", "1.6 Limited");
|
||||||
|
|
@ -1019,10 +1019,15 @@ int Spawn (edict_t *ent)
|
||||||
RoundInit ();
|
RoundInit ();
|
||||||
|
|
||||||
g_mapType = NULL; // reset map type as worldspawn is the first entity spawned
|
g_mapType = NULL; // reset map type as worldspawn is the first entity spawned
|
||||||
|
|
||||||
|
|
||||||
|
// detect official csbots here, as they causing crash in linkent code when active for some reason
|
||||||
|
if (!(g_gameFlags & GAME_LEGACY) && g_engfuncs.pfnCVarGetPointer ("bot_stop") != NULL)
|
||||||
|
g_gameFlags |= GAME_OFFICIAL_CSBOT;
|
||||||
}
|
}
|
||||||
else if (strcmp (entityClassname, "player_weaponstrip") == 0)
|
else if (strcmp (entityClassname, "player_weaponstrip") == 0)
|
||||||
{
|
{
|
||||||
if ((g_gameVersion & CSVERSION_LEGACY) && (STRING (ent->v.target))[0] == '0')
|
if ((g_gameFlags & GAME_LEGACY) && (STRING (ent->v.target))[0] == '0')
|
||||||
ent->v.target = ent->v.targetname = ALLOC_STRING ("fake");
|
ent->v.target = ent->v.targetname = ALLOC_STRING ("fake");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2425,12 +2430,12 @@ void pfnMessageBegin (int msgDest, int msgType, const float *origin, edict_t *ed
|
||||||
netmsg.SetId (NETMSG_SAYTEXT, GET_USER_MSG_ID (PLID, "SayText", NULL));
|
netmsg.SetId (NETMSG_SAYTEXT, GET_USER_MSG_ID (PLID, "SayText", NULL));
|
||||||
netmsg.SetId (NETMSG_RESETHUD, GET_USER_MSG_ID (PLID, "ResetHUD", NULL));
|
netmsg.SetId (NETMSG_RESETHUD, GET_USER_MSG_ID (PLID, "ResetHUD", NULL));
|
||||||
|
|
||||||
if (!(g_gameVersion & CSVERSION_LEGACY))
|
if (!(g_gameFlags & GAME_LEGACY))
|
||||||
netmsg.SetId (NETMSG_BOTVOICE, GET_USER_MSG_ID (PLID, "BotVoice", NULL));
|
netmsg.SetId (NETMSG_BOTVOICE, GET_USER_MSG_ID (PLID, "BotVoice", NULL));
|
||||||
}
|
}
|
||||||
netmsg.Reset ();
|
netmsg.Reset ();
|
||||||
|
|
||||||
if (msgDest == MSG_SPEC && msgType == netmsg.GetId (NETMSG_HLTV) && !(g_gameVersion & CSVERSION_LEGACY))
|
if (msgDest == MSG_SPEC && msgType == netmsg.GetId (NETMSG_HLTV) && !(g_gameFlags & GAME_LEGACY))
|
||||||
netmsg.SetMessage (NETMSG_HLTV);
|
netmsg.SetMessage (NETMSG_HLTV);
|
||||||
|
|
||||||
netmsg.HandleMessageIfRequired (msgType, NETMSG_WEAPONLIST);
|
netmsg.HandleMessageIfRequired (msgType, NETMSG_WEAPONLIST);
|
||||||
|
|
@ -3060,7 +3065,7 @@ DLL_GIVEFNPTRSTODLL GiveFnptrsToDll (enginefuncs_t *functionTable, globalvars_t
|
||||||
convars.PushRegisteredConVarsToEngine ();
|
convars.PushRegisteredConVarsToEngine ();
|
||||||
|
|
||||||
#ifdef PLATFORM_ANDROID
|
#ifdef PLATFORM_ANDROID
|
||||||
g_gameVersion |= (CSVERSION_LEGACY | CSVERSION_XASH | CSVERSION_MOBILITY);
|
g_gameFlags |= (GAME_LEGACY | GAME_XASH | GAME_MOBILITY);
|
||||||
|
|
||||||
if (g_isMetamod)
|
if (g_isMetamod)
|
||||||
return; // we should stop the attempt for loading the real gamedll, since metamod handle this for us
|
return; // we should stop the attempt for loading the real gamedll, since metamod handle this for us
|
||||||
|
|
@ -3089,13 +3094,13 @@ DLL_GIVEFNPTRSTODLL GiveFnptrsToDll (enginefuncs_t *functionTable, globalvars_t
|
||||||
int modType;
|
int modType;
|
||||||
} s_supportedMods[] =
|
} s_supportedMods[] =
|
||||||
{
|
{
|
||||||
{ "cstrike", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike v1.6", CSVERSION_CSTRIKE16 },
|
{ "cstrike", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike v1.6", GAME_CSTRIKE16 },
|
||||||
{ "cstrike", "cs.so", "cs.dylib", "mp.dll", "Counter-Strike v1.6 (Newer)", CSVERSION_CSTRIKE16 },
|
{ "cstrike", "cs.so", "cs.dylib", "mp.dll", "Counter-Strike v1.6 (Newer)", GAME_CSTRIKE16 },
|
||||||
{ "czero", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike: Condition Zero", CSVERSION_CZERO },
|
{ "czero", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike: Condition Zero", GAME_CZERO },
|
||||||
{ "czero", "cs.so", "cs.dylib", "mp.dll", "Counter-Strike: Condition Zero (Newer)", CSVERSION_CZERO },
|
{ "czero", "cs.so", "cs.dylib", "mp.dll", "Counter-Strike: Condition Zero (Newer)", GAME_CZERO },
|
||||||
{ "csv15", "cs_i386.so", "cs.dylib", "mp.dll", "CS 1.5 for Steam", CSVERSION_LEGACY },
|
{ "csv15", "cs_i386.so", "cs.dylib", "mp.dll", "CS 1.5 for Steam", GAME_LEGACY },
|
||||||
{ "csdm", "cs_i386.so", "cs.dylib", "mp.dll", "CSDM for Windows", CSVERSION_LEGACY },
|
{ "csdm", "cs_i386.so", "cs.dylib", "mp.dll", "CSDM for Windows", GAME_LEGACY },
|
||||||
{ "cs13", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike v1.3", CSVERSION_LEGACY }, // assume cs13 = cs15
|
{ "cs13", "cs_i386.so", "cs.dylib", "mp.dll", "Counter-Strike v1.3", GAME_LEGACY }, // assume cs13 = cs15
|
||||||
};
|
};
|
||||||
|
|
||||||
ModSupport *knownMod = NULL;
|
ModSupport *knownMod = NULL;
|
||||||
|
|
@ -3121,7 +3126,7 @@ DLL_GIVEFNPTRSTODLL GiveFnptrsToDll (enginefuncs_t *functionTable, globalvars_t
|
||||||
|
|
||||||
if (knownMod != NULL)
|
if (knownMod != NULL)
|
||||||
{
|
{
|
||||||
g_gameVersion |= knownMod->modType;
|
g_gameFlags |= knownMod->modType;
|
||||||
|
|
||||||
if (g_isMetamod)
|
if (g_isMetamod)
|
||||||
return; // we should stop the attempt for loading the real gamedll, since metamod handle this for us
|
return; // we should stop the attempt for loading the real gamedll, since metamod handle this for us
|
||||||
|
|
@ -3232,7 +3237,7 @@ void ConVarWrapper::PushRegisteredConVarsToEngine (bool gameVars)
|
||||||
static void LinkEntity_Helper (EntityPtr_t &entAddress, const char *name, entvars_t *pev)
|
static void LinkEntity_Helper (EntityPtr_t &entAddress, const char *name, entvars_t *pev)
|
||||||
{
|
{
|
||||||
// here we're see an ugliest hack :)
|
// here we're see an ugliest hack :)
|
||||||
if (entAddress == NULL || (g_gameVersion & CSVERSION_CZERO))
|
if (entAddress == NULL || (g_gameFlags & GAME_OFFICIAL_CSBOT))
|
||||||
entAddress = g_gameLib->GetFuncAddr <EntityPtr_t > (name);
|
entAddress = g_gameLib->GetFuncAddr <EntityPtr_t > (name);
|
||||||
|
|
||||||
if (entAddress == NULL)
|
if (entAddress == NULL)
|
||||||
|
|
|
||||||
|
|
@ -874,7 +874,7 @@ Bot::Bot (edict_t *bot, int difficulty, int personality, int team, int member, c
|
||||||
char *buffer = GET_INFOKEYBUFFER (bot);
|
char *buffer = GET_INFOKEYBUFFER (bot);
|
||||||
SET_CLIENT_KEYVALUE (clientIndex, buffer, "_vgui_menus", "0");
|
SET_CLIENT_KEYVALUE (clientIndex, buffer, "_vgui_menus", "0");
|
||||||
|
|
||||||
if (!(g_gameVersion & CSVERSION_LEGACY) && yb_latency_display.GetInt () == 1)
|
if (!(g_gameFlags & GAME_LEGACY) && yb_latency_display.GetInt () == 1)
|
||||||
SET_CLIENT_KEYVALUE (clientIndex, buffer, "*bot", "1");
|
SET_CLIENT_KEYVALUE (clientIndex, buffer, "*bot", "1");
|
||||||
|
|
||||||
rejectReason[0] = 0; // reset the reject reason template string
|
rejectReason[0] = 0; // reset the reject reason template string
|
||||||
|
|
@ -1135,6 +1135,7 @@ void Bot::NewRound (void)
|
||||||
|
|
||||||
m_buttonPushTime = 0.0f;
|
m_buttonPushTime = 0.0f;
|
||||||
m_enemyUpdateTime = 0.0f;
|
m_enemyUpdateTime = 0.0f;
|
||||||
|
m_enemyIgnoreTimer = 0.0f;
|
||||||
m_seeEnemyTime = 0.0f;
|
m_seeEnemyTime = 0.0f;
|
||||||
m_shootAtDeadTime = 0.0f;
|
m_shootAtDeadTime = 0.0f;
|
||||||
m_oldCombatDesire = 0.0f;
|
m_oldCombatDesire = 0.0f;
|
||||||
|
|
@ -1252,7 +1253,7 @@ void Bot::NewRound (void)
|
||||||
|
|
||||||
const float interval = (1.0f / 30.0f) * Random.Float (0.95f, 1.05f);
|
const float interval = (1.0f / 30.0f) * Random.Float (0.95f, 1.05f);
|
||||||
|
|
||||||
if (g_gameVersion & CSVERSION_LEGACY)
|
if (g_gameFlags & GAME_LEGACY)
|
||||||
m_thinkInterval = 0.0f;
|
m_thinkInterval = 0.0f;
|
||||||
else
|
else
|
||||||
m_thinkInterval = interval;
|
m_thinkInterval = interval;
|
||||||
|
|
@ -1320,7 +1321,7 @@ void Bot::StartGame (void)
|
||||||
{
|
{
|
||||||
m_startAction = GSM_IDLE; // switch back to idle
|
m_startAction = GSM_IDLE; // switch back to idle
|
||||||
|
|
||||||
if (g_gameVersion & CSVERSION_CZERO) // czero has spetsnaz and militia skins
|
if (g_gameFlags & GAME_CZERO) // czero has spetsnaz and militia skins
|
||||||
{
|
{
|
||||||
if (m_wantedClass < 1 || m_wantedClass > 5)
|
if (m_wantedClass < 1 || m_wantedClass > 5)
|
||||||
m_wantedClass = Random.Long (1, 5); // use random if invalid
|
m_wantedClass = Random.Long (1, 5); // use random if invalid
|
||||||
|
|
@ -1345,7 +1346,7 @@ void Bot::StartGame (void)
|
||||||
|
|
||||||
void BotManager::CalculatePingOffsets (void)
|
void BotManager::CalculatePingOffsets (void)
|
||||||
{
|
{
|
||||||
if ((g_gameVersion & CSVERSION_LEGACY) || yb_latency_display.GetInt () != 2)
|
if ((g_gameFlags & GAME_LEGACY) || yb_latency_display.GetInt () != 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int averagePing = 0;
|
int averagePing = 0;
|
||||||
|
|
@ -1405,7 +1406,7 @@ void BotManager::CalculatePingOffsets (void)
|
||||||
|
|
||||||
void BotManager::SendPingDataOffsets (edict_t *to)
|
void BotManager::SendPingDataOffsets (edict_t *to)
|
||||||
{
|
{
|
||||||
if ((g_gameVersion & CSVERSION_LEGACY) || yb_latency_display.GetInt () != 2 || IsEntityNull (to))
|
if ((g_gameFlags & GAME_LEGACY) || yb_latency_display.GetInt () != 2 || IsEntityNull (to))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(to->v.flags & FL_CLIENT) && !(((to->v.button & IN_SCORE) || !(to->v.oldbuttons & IN_SCORE))))
|
if (!(to->v.flags & FL_CLIENT) && !(((to->v.button & IN_SCORE) || !(to->v.oldbuttons & IN_SCORE))))
|
||||||
|
|
|
||||||
|
|
@ -136,9 +136,9 @@ bool IsVisible (const Vector &origin, edict_t *ent)
|
||||||
TraceLine (ent->v.origin + ent->v.view_ofs, origin, true, true, ent, &tr);
|
TraceLine (ent->v.origin + ent->v.view_ofs, origin, true, true, ent, &tr);
|
||||||
|
|
||||||
if (tr.flFraction != 1.0f)
|
if (tr.flFraction != 1.0f)
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector GetEntityOrigin (edict_t *ent)
|
Vector GetEntityOrigin (edict_t *ent)
|
||||||
|
|
@ -174,7 +174,7 @@ void DisplayMenuToClient (edict_t *ent, MenuText *menu)
|
||||||
for (int i = 0; i <= 9; i++)
|
for (int i = 0; i <= 9; i++)
|
||||||
tempText.Replace (FormatBuffer ("%d.", i), FormatBuffer ("\\r%d.\\w", i));
|
tempText.Replace (FormatBuffer ("%d.", i), FormatBuffer ("\\r%d.\\w", i));
|
||||||
|
|
||||||
if ((g_gameVersion & (CSVERSION_XASH | CSVERSION_MOBILITY)) && !yb_display_menu_text.GetBool ())
|
if ((g_gameFlags & (GAME_XASH | GAME_MOBILITY)) && !yb_display_menu_text.GetBool ())
|
||||||
text = " ";
|
text = " ";
|
||||||
else
|
else
|
||||||
text = (char *) tempText.GetBuffer ();
|
text = (char *) tempText.GetBuffer ();
|
||||||
|
|
@ -992,7 +992,7 @@ void CheckWelcomeMessage (void)
|
||||||
|
|
||||||
Array <String> sentences;
|
Array <String> sentences;
|
||||||
|
|
||||||
if (!(g_gameVersion & (CSVERSION_MOBILITY | CSVERSION_XASH)))
|
if (!(g_gameFlags & (GAME_MOBILITY | GAME_XASH)))
|
||||||
{
|
{
|
||||||
// add default messages
|
// add default messages
|
||||||
sentences.Push ("hello user,communication is acquired");
|
sentences.Push ("hello user,communication is acquired");
|
||||||
|
|
@ -1018,7 +1018,7 @@ void CheckWelcomeMessage (void)
|
||||||
|
|
||||||
if (receiveTime > 0.0f && receiveTime < GetWorldTime () && !alreadyReceived && (g_numWaypoints > 0 ? g_isCommencing : true))
|
if (receiveTime > 0.0f && receiveTime < GetWorldTime () && !alreadyReceived && (g_numWaypoints > 0 ? g_isCommencing : true))
|
||||||
{
|
{
|
||||||
if (!(g_gameVersion & (CSVERSION_MOBILITY | CSVERSION_XASH)))
|
if (!(g_gameFlags & (GAME_MOBILITY | GAME_XASH)))
|
||||||
ServerCommand ("speak \"%s\"", const_cast <char *> (sentences.GetRandomElement ().GetBuffer ()));
|
ServerCommand ("speak \"%s\"", const_cast <char *> (sentences.GetRandomElement ().GetBuffer ()));
|
||||||
|
|
||||||
ChartPrint ("----- %s v%s (Build: %u), {%s}, (c) 2016, by %s (%s)-----", PRODUCT_NAME, PRODUCT_VERSION, GenerateBuildNumber (), PRODUCT_DATE, PRODUCT_AUTHOR, PRODUCT_URL);
|
ChartPrint ("----- %s v%s (Build: %u), {%s}, (c) 2016, by %s (%s)-----", PRODUCT_NAME, PRODUCT_VERSION, GenerateBuildNumber (), PRODUCT_DATE, PRODUCT_AUTHOR, PRODUCT_URL);
|
||||||
|
|
@ -1051,13 +1051,13 @@ void CheckWelcomeMessage (void)
|
||||||
|
|
||||||
void DetectCSVersion (void)
|
void DetectCSVersion (void)
|
||||||
{
|
{
|
||||||
if (g_gameVersion & CSVERSION_CZERO)
|
if (g_gameFlags & GAME_CZERO)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// detect xash engine
|
// detect xash engine
|
||||||
if (g_engfuncs.pfnCVarGetPointer ("build") != NULL)
|
if (g_engfuncs.pfnCVarGetPointer ("build") != NULL)
|
||||||
{
|
{
|
||||||
g_gameVersion |= (CSVERSION_LEGACY | CSVERSION_XASH);
|
g_gameFlags |= (GAME_LEGACY | GAME_XASH);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1065,9 +1065,9 @@ void DetectCSVersion (void)
|
||||||
byte *detection = (*g_engfuncs.pfnLoadFileForMe) ("events/galil.sc", NULL);
|
byte *detection = (*g_engfuncs.pfnLoadFileForMe) ("events/galil.sc", NULL);
|
||||||
|
|
||||||
if (detection != NULL)
|
if (detection != NULL)
|
||||||
g_gameVersion |= CSVERSION_CSTRIKE16; // just to be sure
|
g_gameFlags |= GAME_CSTRIKE16; // just to be sure
|
||||||
else if (detection == NULL)
|
else if (detection == NULL)
|
||||||
g_gameVersion |= CSVERSION_LEGACY; // reset it to WON
|
g_gameFlags |= GAME_LEGACY; // reset it to WON
|
||||||
|
|
||||||
// if we have loaded the file free it
|
// if we have loaded the file free it
|
||||||
if (detection != NULL)
|
if (detection != NULL)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue