control: text changes in the control menu. replaced `waypoint with node` (#569)
Co-authored-by: jeefo <dmitry@jeefo.net>
This commit is contained in:
parent
e10f5f4c94
commit
30df1a5726
21 changed files with 253 additions and 238 deletions
|
|
@ -33,7 +33,7 @@
|
|||
\yBots Features\w
|
||||
|
||||
1. Weapon Mode Menu
|
||||
2. Waypoint Menu
|
||||
2. Graph Editor
|
||||
3. Select Personality
|
||||
|
||||
4. Toggle Debug Mode
|
||||
|
|
@ -216,14 +216,14 @@
|
|||
0. Schließen
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Operations (Page 1)\w
|
||||
\yGraph Editor (Page 1)\w
|
||||
|
||||
1. Show/Hide waypoints
|
||||
2. Cache waypoint
|
||||
1. Show/Hide nodes
|
||||
2. Cache node
|
||||
3. Create path
|
||||
4. Delete path
|
||||
5. Add waypoint
|
||||
6. Delete waypoint
|
||||
5. Add node
|
||||
6. Delete node
|
||||
7. Set Autopath Distance
|
||||
8. Set Radius
|
||||
|
||||
|
|
@ -248,15 +248,15 @@
|
|||
0. Schließen
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Operations (Page 2)\w
|
||||
\yGraph Editor (Page 2)\w
|
||||
|
||||
1. Waypoint stats
|
||||
2. Autowaypoint on/off
|
||||
1. Debug goal
|
||||
2. Autonode on/off
|
||||
3. Set flags
|
||||
4. Save waypoints
|
||||
4. Save graph
|
||||
5. Save without checking
|
||||
6. Load waypoints
|
||||
7. Check waypoints
|
||||
6. Load graph
|
||||
7. Check graph
|
||||
8. Noclip cheat on/off
|
||||
|
||||
9. Previous...
|
||||
|
|
@ -280,17 +280,17 @@
|
|||
0. Schließen
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Radius\w
|
||||
\yNode Radius\w
|
||||
|
||||
1. SetRadius 0
|
||||
2. SetRadius 8
|
||||
3. SetRadius 16
|
||||
4. SetRadius 32
|
||||
5. SetRadius 48
|
||||
6. SetRadius 64
|
||||
7. SetRadius 80
|
||||
8. SetRadius 96
|
||||
9. SetRadius 128
|
||||
1. 0 units
|
||||
2. 8 units
|
||||
3. 16 units
|
||||
4. 32 units
|
||||
5. 48 units
|
||||
6. 64 units
|
||||
7. 80 units
|
||||
8. 96 units
|
||||
9. 128 units
|
||||
|
||||
0. Exit
|
||||
|
||||
|
|
@ -310,7 +310,7 @@
|
|||
0. Schließen
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Type\w
|
||||
\yNode Type\w
|
||||
|
||||
1. Normal
|
||||
\r2. Terrorist Important
|
||||
|
|
@ -340,7 +340,7 @@
|
|||
0. Schließen
|
||||
|
||||
[ORIGINAL]
|
||||
\yToggle Waypoint Flags\w
|
||||
\yToggle Node Flags\w
|
||||
|
||||
1. Block with Hostage
|
||||
2. Terrorists Specific
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
\yBots Features\w
|
||||
|
||||
1. Weapon Mode Menu
|
||||
2. Waypoint Menu
|
||||
2. Graph Editor
|
||||
3. Select Personality
|
||||
|
||||
4. Toggle Debug Mode
|
||||
|
|
@ -169,6 +169,7 @@
|
|||
|
||||
[ORIGINAL]
|
||||
\ySelect an appearance\w
|
||||
|
||||
1. Phoenix Connexion
|
||||
2. L337 Krew
|
||||
3. Arctic Avengers
|
||||
|
|
@ -216,6 +217,7 @@
|
|||
|
||||
[ORIGINAL]
|
||||
\ySelect an appearance\w
|
||||
|
||||
1. Phoenix Connexion
|
||||
2. L337 Krew
|
||||
3. Arctic Avengers
|
||||
|
|
@ -266,14 +268,14 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Operations (Page 1)\w
|
||||
\yGraph Editor (Page 1)\w
|
||||
|
||||
1. Show/Hide waypoints
|
||||
2. Cache waypoint
|
||||
1. Show/Hide nodes
|
||||
2. Cache node
|
||||
3. Create path
|
||||
4. Delete path
|
||||
5. Add waypoint
|
||||
6. Delete waypoint
|
||||
5. Add node
|
||||
6. Delete node
|
||||
7. Set Autopath Distance
|
||||
8. Set Radius
|
||||
|
||||
|
|
@ -298,15 +300,15 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Operations (Page 2)\w
|
||||
\yGraph Editor (Page 2)\w
|
||||
|
||||
1. Debug goal
|
||||
2. Autowaypoint on/off
|
||||
2. Autonode on/off
|
||||
3. Set flags
|
||||
4. Save waypoints
|
||||
4. Save graph
|
||||
5. Save without checking
|
||||
6. Load waypoints
|
||||
7. Check waypoints
|
||||
6. Load graph
|
||||
7. Check graph
|
||||
8. Noclip cheat on/off
|
||||
|
||||
9. Previous...
|
||||
|
|
@ -330,17 +332,17 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Radius\w
|
||||
\yNode Radius\w
|
||||
|
||||
1. SetRadius 0
|
||||
2. SetRadius 8
|
||||
3. SetRadius 16
|
||||
4. SetRadius 32
|
||||
5. SetRadius 48
|
||||
6. SetRadius 64
|
||||
7. SetRadius 80
|
||||
8. SetRadius 96
|
||||
9. SetRadius 128
|
||||
1. 0 units
|
||||
2. 8 units
|
||||
3. 16 units
|
||||
4. 32 units
|
||||
5. 48 units
|
||||
6. 64 units
|
||||
7. 80 units
|
||||
8. 96 units
|
||||
9. 128 units
|
||||
|
||||
0. Exit
|
||||
|
||||
|
|
@ -360,7 +362,7 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yWaypoint Type\w
|
||||
\yNode Type\w
|
||||
|
||||
1. Normal
|
||||
\r2. Terrorist Important
|
||||
|
|
@ -390,7 +392,7 @@
|
|||
\w0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yDebug goal\w
|
||||
\yDebug Goal\w
|
||||
|
||||
1. Debug nearest node
|
||||
2. Debug facing node
|
||||
|
|
@ -408,7 +410,7 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\yToggle Waypoint Flags\w
|
||||
\yToggle Node Flags\w
|
||||
|
||||
1. Block with Hostage
|
||||
2. Terrorists Specific
|
||||
|
|
@ -438,7 +440,7 @@
|
|||
0. Выход
|
||||
|
||||
[ORIGINAL]
|
||||
\ySet Camp Point directions\w
|
||||
\ySet Camp Point Directions\w
|
||||
|
||||
1. Camp Start
|
||||
2. Camp End
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ private:
|
|||
void updateLookAnglesNewbie (const Vector &direction, float delta);
|
||||
void setIdealReactionTimers (bool actual = false);
|
||||
void updateHearing ();
|
||||
void postprocessGoals (const IntArray &goals, int result[]);
|
||||
void postProcessGoals (const IntArray &goals, int result[]);
|
||||
void updatePickups ();
|
||||
void ensureEntitiesClear ();
|
||||
void checkTerrain (float movedDistance, const Vector &dirNormal);
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ void GraphAnalyze::optimize () {
|
|||
cleanup ();
|
||||
|
||||
auto smooth = [] (const Array <int> &nodes) {
|
||||
Vector result;
|
||||
Vector result {};
|
||||
|
||||
for (const auto &node : nodes) {
|
||||
result += graph[node].origin;
|
||||
|
|
@ -198,7 +198,7 @@ void GraphAnalyze::optimize () {
|
|||
continue;
|
||||
}
|
||||
const auto &path = graph[i];
|
||||
Array <int> indexes;
|
||||
Array <int> indexes {};
|
||||
|
||||
for (const auto &link : path.links) {
|
||||
if (graph.exists (link.index) && !m_optimizedNodes[link.index]
|
||||
|
|
@ -303,7 +303,7 @@ void GraphAnalyze::displayOverlayMessage () {
|
|||
void GraphAnalyze::flood (const Vector &pos, const Vector &next, float range) {
|
||||
range *= 0.75f;
|
||||
|
||||
TraceResult tr;
|
||||
TraceResult tr {};
|
||||
game.testHull (pos, { next.x, next.y, next.z + 19.0f }, TraceIgnore::Monsters, head_hull, nullptr, &tr);
|
||||
|
||||
// we're can't reach next point
|
||||
|
|
|
|||
|
|
@ -887,7 +887,7 @@ void Bot::instantChatter (int type) {
|
|||
if (m_isAlive) {
|
||||
showChatterIcon (true);
|
||||
}
|
||||
MessageWriter msg;
|
||||
MessageWriter msg {};
|
||||
const int ownIndex = index ();
|
||||
|
||||
auto writeChatterSound = [&msg] (ChatterItem item) {
|
||||
|
|
@ -1161,18 +1161,18 @@ bool Bot::isWeaponRestrictedAMX (int wid) {
|
|||
|
||||
// check for weapon restrictions
|
||||
if (cr::bit (wid) & (kPrimaryWeaponMask | kSecondaryWeaponMask | Weapon::Shield)) {
|
||||
constexpr int ids[] = { 4, 25, 20, -1, 8, -1, 12, 19, -1, 5, 6, 13, 23, 17, 18, 1, 2, 21, 9, 24, 7, 16, 10, 22, -1, 3, 15, 14, 0, 11 };
|
||||
constexpr int kIds[] = { 4, 25, 20, -1, 8, -1, 12, 19, -1, 5, 6, 13, 23, 17, 18, 1, 2, 21, 9, 24, 7, 16, 10, 22, -1, 3, 15, 14, 0, 11 };
|
||||
|
||||
// verify restrictions
|
||||
return checkRestriction ("amx_restrweapons", ids);
|
||||
return checkRestriction ("amx_restrweapons", kIds);
|
||||
}
|
||||
|
||||
// check for equipment restrictions
|
||||
else {
|
||||
constexpr int ids[] = { -1, -1, -1, 3, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, 0, 1, 5 };
|
||||
constexpr int kIds[] = { -1, -1, -1, 3, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, 0, 1, 5 };
|
||||
|
||||
// verify restrictions
|
||||
return checkRestriction ("amx_restrequipammo", ids);
|
||||
return checkRestriction ("amx_restrequipammo", kIds);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1253,7 +1253,7 @@ void Bot::buyStuff () {
|
|||
}
|
||||
|
||||
int count = 0;
|
||||
Array <int32_t> choices;
|
||||
Array <int32_t> choices {};
|
||||
|
||||
// select the priority tab for this personality
|
||||
const int *pref = conf.getWeaponPrefs (m_personality) + kNumWeapons;
|
||||
|
|
@ -1658,10 +1658,10 @@ void Bot::overrideConditions () {
|
|||
|
||||
// special handling, if we have a knife in our hands
|
||||
if (isKnifeMode () && (util.isPlayer (m_enemy) || (cv_attack_monsters && util.isMonster (m_enemy)))) {
|
||||
const float length = pev->origin.distance2d (m_enemy->v.origin);
|
||||
const float distance2d = pev->origin.distance2d (m_enemy->v.origin);
|
||||
|
||||
// do nodes movement if enemy is not reachable with a knife
|
||||
if (length > 250.0f && (m_states & Sense::SeeingEnemy)) {
|
||||
if (distance2d > 250.0f && (m_states & Sense::SeeingEnemy)) {
|
||||
const int nearestToEnemyPoint = graph.getNearest (m_enemy->v.origin);
|
||||
|
||||
if (nearestToEnemyPoint != kInvalidNodeIndex
|
||||
|
|
@ -1669,18 +1669,18 @@ void Bot::overrideConditions () {
|
|||
&& cr::abs (graph[nearestToEnemyPoint].origin.z - m_enemy->v.origin.z) < 16.0f) {
|
||||
|
||||
if (tid != Task::MoveToPosition && !cr::fequal (getTask ()->desire, TaskPri::Hide)) {
|
||||
startTask (Task::MoveToPosition, TaskPri::Hide, nearestToEnemyPoint, game.time () + length / (m_moveSpeed * 2.0f), true);
|
||||
startTask (Task::MoveToPosition, TaskPri::Hide, nearestToEnemyPoint, game.time () + distance2d / (m_moveSpeed * 2.0f), true);
|
||||
}
|
||||
else {
|
||||
if (tid == Task::MoveToPosition && getTask ()->data != nearestToEnemyPoint) {
|
||||
clearTask (Task::MoveToPosition);
|
||||
startTask (Task::MoveToPosition, TaskPri::Hide, nearestToEnemyPoint, game.time () + length / (m_moveSpeed * 2.0f), true);
|
||||
startTask (Task::MoveToPosition, TaskPri::Hide, nearestToEnemyPoint, game.time () + distance2d / (m_moveSpeed * 2.0f), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (length <= 250.0f && (m_states & Sense::SeeingEnemy) && tid == Task::MoveToPosition) {
|
||||
if (distance2d <= 250.0f && (m_states & Sense::SeeingEnemy) && tid == Task::MoveToPosition) {
|
||||
clearTask (Task::MoveToPosition); // remove any move tasks
|
||||
}
|
||||
}
|
||||
|
|
@ -2839,7 +2839,6 @@ void Bot::frame () {
|
|||
if (m_thinkDelay.time <= game.time ()) {
|
||||
update ();
|
||||
|
||||
|
||||
// delay next execution for thinking
|
||||
m_thinkDelay.time = game.time () + m_thinkDelay.interval;
|
||||
|
||||
|
|
@ -2975,7 +2974,7 @@ void Bot::logicDuringFreezetime () {
|
|||
pev->button |= IN_JUMP;
|
||||
m_jumpTime = game.time ();
|
||||
}
|
||||
static Array <Bot *> teammates;
|
||||
static Array <Bot *> teammates {};
|
||||
teammates.clear ();
|
||||
|
||||
for (const auto &bot : bots) {
|
||||
|
|
@ -3342,7 +3341,7 @@ void Bot::showDebugOverlay () {
|
|||
if (!game.isNullEntity (m_pickupItem)) {
|
||||
pickup = m_pickupItem->v.classname.str ();
|
||||
}
|
||||
String aimFlags;
|
||||
String aimFlags {};
|
||||
|
||||
for (uint32_t i = 0u; i < 9u; ++i) {
|
||||
auto bit = cr::bit (i);
|
||||
|
|
@ -3680,7 +3679,7 @@ void Bot::debugMsgInternal (StringRef str) {
|
|||
if (level <= 2) {
|
||||
return;
|
||||
}
|
||||
String printBuf;
|
||||
String printBuf {};
|
||||
printBuf.assignf ("%s: %s", pev->netname.str (), str);
|
||||
|
||||
bool playMessage = false;
|
||||
|
|
@ -3739,9 +3738,9 @@ Vector Bot::isBombAudible () {
|
|||
}
|
||||
|
||||
bool Bot::canRunHeavyWeight () {
|
||||
constexpr auto interval = 1.0f / 10.0f;
|
||||
constexpr auto kInterval = 1.0f / 10.0f;
|
||||
|
||||
if (m_heavyTimestamp + interval < game.time ()) {
|
||||
if (m_heavyTimestamp + kInterval < game.time ()) {
|
||||
m_heavyTimestamp = game.time ();
|
||||
|
||||
return true;
|
||||
|
|
@ -4032,7 +4031,7 @@ bool Bot::isBombDefusing (const Vector &bombOrigin) {
|
|||
return false;
|
||||
}
|
||||
bool defusingInProgress = false;
|
||||
constexpr auto distanceToBomb = cr::sqrf (165.0f);
|
||||
constexpr auto kDistanceToBomb = cr::sqrf (165.0f);
|
||||
|
||||
for (const auto &client : util.getClients ()) {
|
||||
if (!(client.flags & ClientFlags::Used) || !(client.flags & ClientFlags::Alive)) {
|
||||
|
|
@ -4048,7 +4047,7 @@ bool Bot::isBombDefusing (const Vector &bombOrigin) {
|
|||
}
|
||||
|
||||
// if close enough, mark as progressing
|
||||
if (bombDistanceSq < distanceToBomb && (bot->getCurrentTaskId () == Task::DefuseBomb || bot->m_hasProgressBar)) {
|
||||
if (bombDistanceSq < kDistanceToBomb && (bot->getCurrentTaskId () == Task::DefuseBomb || bot->m_hasProgressBar)) {
|
||||
defusingInProgress = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -4059,7 +4058,7 @@ bool Bot::isBombDefusing (const Vector &bombOrigin) {
|
|||
if (client.team == m_team) {
|
||||
|
||||
// if close enough, mark as progressing
|
||||
if (bombDistanceSq < distanceToBomb && ((client.ent->v.button | client.ent->v.oldbuttons) & IN_USE)) {
|
||||
if (bombDistanceSq < kDistanceToBomb && ((client.ent->v.button | client.ent->v.oldbuttons) & IN_USE)) {
|
||||
defusingInProgress = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -4132,8 +4131,8 @@ void Bot::refreshCreatureStatus (char *infobuffer) {
|
|||
|
||||
bool Bot::isCreature () {
|
||||
// current creature models are: zombie, chicken
|
||||
constexpr auto modelMaskZombie = (('o' << 8) + 'z');
|
||||
constexpr auto modelMaskChicken = (('h' << 8) + 'c');
|
||||
constexpr auto kModelMaskZombie = (('o' << 8) + 'z');
|
||||
constexpr auto kModelMaskChicken = (('h' << 8) + 'c');
|
||||
|
||||
return m_isOnInfectedTeam || m_modelMask == modelMaskZombie || m_modelMask == modelMaskChicken;
|
||||
return m_isOnInfectedTeam || m_modelMask == kModelMaskZombie || m_modelMask == kModelMaskChicken;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ void Bot::prepareChatMessage (StringRef message) {
|
|||
auto getRoundTime = [] () -> String {
|
||||
auto roundTimeSecs = static_cast <int> (bots.getRoundEndTime () - game.time ());
|
||||
|
||||
String roundTime;
|
||||
String roundTime {};
|
||||
roundTime.assignf ("%02d:%02d", cr::clamp (roundTimeSecs / 60, 0, 59), cr::clamp (cr::abs (roundTimeSecs % 60), 0, 59));
|
||||
|
||||
return roundTime;
|
||||
|
|
@ -208,7 +208,7 @@ void Bot::prepareChatMessage (StringRef message) {
|
|||
|
||||
// get the game name alias
|
||||
auto getGameName = [] () -> String {
|
||||
String gameName;
|
||||
String gameName {};
|
||||
|
||||
if (game.is (GameFlags::ConditionZero)) {
|
||||
if (rg.chance (30)) {
|
||||
|
|
@ -308,7 +308,7 @@ bool Bot::isReplyingToChat () {
|
|||
if (m_sayTextBuffer.entityIndex != -1 && !m_sayTextBuffer.sayText.empty ()) {
|
||||
// check is time to chat is good
|
||||
if (m_sayTextBuffer.timeNextChat < game.time () + rg (m_sayTextBuffer.chatDelay / 2, m_sayTextBuffer.chatDelay)) {
|
||||
String replyText;
|
||||
String replyText {};
|
||||
|
||||
if (rg.chance (m_sayTextBuffer.chatProbability + rg (40, 70)) && checkChatKeywords (replyText)) {
|
||||
prepareChatMessage (replyText);
|
||||
|
|
|
|||
|
|
@ -775,7 +775,7 @@ bool Bot::isPenetrableObstacle2 (const Vector &dest, int) {
|
|||
int thikness = 0;
|
||||
int numHits = 0;
|
||||
|
||||
Vector point;
|
||||
Vector point {};
|
||||
TraceResult tr {};
|
||||
|
||||
game.testLine (source, dest, TraceIgnore::Everything, ent (), &tr);
|
||||
|
|
@ -980,7 +980,11 @@ void Bot::selectWeapons (float distance, int index, int id, int choosen) {
|
|||
if (distance >= 750.0f && !isShieldDrawn ()) {
|
||||
pev->button |= IN_ATTACK2; // draw the shield
|
||||
}
|
||||
else if (isShieldDrawn () || (!game.isNullEntity (m_enemy) && ((m_enemy->v.button & IN_RELOAD) || !seesEntity (m_enemy->v.origin)))) {
|
||||
else if (isShieldDrawn ()
|
||||
|| m_isReloading
|
||||
|| !seesEntity (m_enemy->v.origin)
|
||||
|| (!game.isNullEntity (m_enemy) && (m_enemy->v.button & IN_RELOAD))) {
|
||||
|
||||
pev->button |= IN_ATTACK2; // draw out the shield
|
||||
}
|
||||
m_shieldCheckTime = game.time () + 1.0f;
|
||||
|
|
@ -1298,7 +1302,7 @@ void Bot::attackMovement () {
|
|||
}
|
||||
const bool isFullView = !!(m_enemyParts & (Visibility::Head | Visibility::Body));
|
||||
|
||||
if (m_lastFightStyleCheck + 3.0f < game.time ()) {
|
||||
if (m_lastFightStyleCheck < game.time ()) {
|
||||
if (usesSniper ()) {
|
||||
m_fightStyle = Fight::Stay;
|
||||
}
|
||||
|
|
@ -1350,7 +1354,7 @@ void Bot::attackMovement () {
|
|||
&& isInViewCone (m_enemyOrigin))) {
|
||||
m_fightStyle = Fight::Strafe;
|
||||
}
|
||||
m_lastFightStyleCheck = game.time ();
|
||||
m_lastFightStyleCheck = game.time () + 3.0f;
|
||||
}
|
||||
|
||||
if (distance < 96.0f && !usesKnife ()) {
|
||||
|
|
@ -1472,7 +1476,7 @@ void Bot::attackMovement () {
|
|||
}
|
||||
|
||||
if (!isInWater () && !isOnLadder () && (m_moveSpeed > 0.0f || m_strafeSpeed > 0.0f)) {
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
pev->v_angle.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
const auto &front = forward * m_moveSpeed * 0.2f;
|
||||
|
|
@ -1734,7 +1738,7 @@ int Bot::bestWeaponCarried () {
|
|||
|
||||
void Bot::decideFollowUser () {
|
||||
// this function forces bot to follow user
|
||||
static Array <edict_t *> users;
|
||||
static Array <edict_t *> users {};
|
||||
users.clear ();
|
||||
|
||||
// search friends near us
|
||||
|
|
@ -2293,7 +2297,8 @@ bool Bot::isEnemyNoticeable (float range) {
|
|||
constexpr float kCloseRange = 300.0f;
|
||||
constexpr float kFarRange = 1000.0f;
|
||||
|
||||
float rangeModifier;
|
||||
float rangeModifier {};
|
||||
|
||||
if (range < kCloseRange) {
|
||||
rangeModifier = 0.0f;
|
||||
}
|
||||
|
|
@ -2309,7 +2314,7 @@ bool Bot::isEnemyNoticeable (float range) {
|
|||
|
||||
// moving players are easier to spot
|
||||
float playerSpeedSq = m_enemy->v.velocity.lengthSq ();
|
||||
float farChance, closeChance;
|
||||
float farChance {}, closeChance {};
|
||||
|
||||
constexpr float kRunSpeed = cr::sqrf (200.0f);
|
||||
constexpr float kWalkSpeed = cr::sqrf (30.0f);
|
||||
|
|
|
|||
|
|
@ -46,8 +46,9 @@ void BotConfig::loadMainConfig (bool isFirstLoad) {
|
|||
}
|
||||
return false;
|
||||
};
|
||||
String line;
|
||||
MemFile file;
|
||||
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// this is does the same as exec of engine, but not overwriting values of cvars specified in cv_ignore_cvars_on_changelevel
|
||||
if (openConfig (product.nameLower, "Bot main config file is not found.", &file, false)) {
|
||||
|
|
@ -121,8 +122,8 @@ void BotConfig::loadMainConfig (bool isFirstLoad) {
|
|||
void BotConfig::loadNamesConfig () {
|
||||
setupMemoryFiles ();
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
constexpr auto kMaxNameLen = 32;
|
||||
|
||||
|
|
@ -179,8 +180,8 @@ void BotConfig::loadWeaponsConfig () {
|
|||
to[i] = data[i].as <int> ();
|
||||
}
|
||||
};
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// weapon data initialization
|
||||
if (openConfig ("weapon", "Weapon configuration file not found. Loading defaults.", &file)) {
|
||||
|
|
@ -231,8 +232,8 @@ void BotConfig::loadWeaponsConfig () {
|
|||
void BotConfig::loadChatterConfig () {
|
||||
setupMemoryFiles ();
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// chatter initialization
|
||||
if (game.is (GameFlags::HasBotVoice) && cv_radio_mode.as <int> () == 2 && openConfig ("chatter", "Couldn't open chatter system configuration", &file)) {
|
||||
|
|
@ -372,8 +373,8 @@ void BotConfig::loadChatterConfig () {
|
|||
void BotConfig::loadChatConfig () {
|
||||
setupMemoryFiles ();
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// chat config initialization
|
||||
if (openConfig ("chat", "Chat file not found.", &file, true)) {
|
||||
|
|
@ -474,13 +475,13 @@ void BotConfig::loadLanguageConfig () {
|
|||
if (game.is (GameFlags::Legacy)) {
|
||||
return; // legacy versions will use only english translation
|
||||
}
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// localizer initialization
|
||||
if (openConfig ("lang", "Specified language not found.", &file, true)) {
|
||||
String temp;
|
||||
Twin <String, String> lang;
|
||||
String temp {};
|
||||
Twin <String, String> lang {};
|
||||
|
||||
auto trimWithoutWs = [] (String in) -> String {
|
||||
return in.trim ("\r\n");
|
||||
|
|
@ -534,8 +535,8 @@ void BotConfig::loadAvatarsConfig () {
|
|||
return;
|
||||
}
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// avatars initialization
|
||||
if (openConfig ("avatars", "Avatars config file not found. Avatars will not be displayed.", &file)) {
|
||||
|
|
@ -553,8 +554,8 @@ void BotConfig::loadAvatarsConfig () {
|
|||
void BotConfig::loadDifficultyConfig () {
|
||||
setupMemoryFiles ();
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// initialize defaults
|
||||
m_difficulty[Difficulty::Noob] = {
|
||||
|
|
@ -658,8 +659,8 @@ void BotConfig::loadMapSpecificConfig () {
|
|||
}
|
||||
|
||||
void BotConfig::loadCustomConfig () {
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
auto setDefaults = [&] () {
|
||||
m_custom["C4ModelName"] = "c4.mdl";
|
||||
|
|
@ -670,6 +671,7 @@ void BotConfig::loadCustomConfig () {
|
|||
m_custom["ZMDelayCvar"] = "zp_delay";
|
||||
m_custom["ZMInfectedTeam"] = "T";
|
||||
};
|
||||
|
||||
setDefaults ();
|
||||
|
||||
// has errors ?
|
||||
|
|
@ -711,8 +713,8 @@ void BotConfig::loadCustomConfig () {
|
|||
void BotConfig::loadLogosConfig () {
|
||||
setupMemoryFiles ();
|
||||
|
||||
String line;
|
||||
MemFile file;
|
||||
String line {};
|
||||
MemFile file {};
|
||||
|
||||
// logos initialization
|
||||
if (openConfig ("logos", "Logos config file not found. Loading defaults.", &file)) {
|
||||
|
|
@ -867,7 +869,8 @@ uint32_t BotConfig::hashLangString (StringRef str) {
|
|||
auto test = [] (const char ch) {
|
||||
return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
|
||||
};
|
||||
String res;
|
||||
|
||||
String res {};
|
||||
|
||||
for (const auto &ch : str) {
|
||||
if (!test (ch)) {
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ int BotControl::cmdCvars () {
|
|||
|
||||
const bool isSave = isSaveMain || isSaveMap;
|
||||
|
||||
File cfg;
|
||||
File cfg {};
|
||||
|
||||
// if save requested, dump cvars to main config
|
||||
if (isSave) {
|
||||
|
|
@ -375,8 +375,8 @@ int BotControl::cmdNode () {
|
|||
}
|
||||
|
||||
// should be moved to class?
|
||||
static HashMap <String, BotCmd> commands;
|
||||
static StringArray descriptions;
|
||||
static HashMap <String, BotCmd> commands {};
|
||||
static StringArray descriptions {};
|
||||
|
||||
// fill only once
|
||||
if (descriptions.empty ()) {
|
||||
|
|
@ -898,7 +898,7 @@ int BotControl::cmdNodeUpload () {
|
|||
msg ("\n");
|
||||
}
|
||||
else {
|
||||
String status;
|
||||
String status {};
|
||||
auto code = http.getLastStatusCode ();
|
||||
|
||||
if (code == HttpClientResult::Forbidden) {
|
||||
|
|
@ -1871,7 +1871,8 @@ bool BotControl::executeCommands () {
|
|||
}
|
||||
return false;
|
||||
};
|
||||
String cmd;
|
||||
|
||||
String cmd {};
|
||||
|
||||
// give some help
|
||||
if (hasArg (1) && arg <StringRef> (1) == "help") {
|
||||
|
|
@ -2012,15 +2013,16 @@ void BotControl::showMenu (int id) {
|
|||
.writeByte (last ? HLFalse : HLTrue)
|
||||
.writeString (text.chars ());
|
||||
};
|
||||
constexpr size_t maxMenuSentLength = 140;
|
||||
|
||||
constexpr size_t kMaxMenuSentLength = 140;
|
||||
|
||||
for (const auto &display : m_menus) {
|
||||
if (display.ident == id) {
|
||||
String text = (game.is (GameFlags::Xash3D | GameFlags::Mobility) && !cv_display_menu_text) ? " " : display.text.chars ();
|
||||
|
||||
// split if needed
|
||||
if (text.length () > maxMenuSentLength) {
|
||||
auto chunks = text.split (maxMenuSentLength);
|
||||
if (text.length () > kMaxMenuSentLength) {
|
||||
auto chunks = text.split (kMaxMenuSentLength);
|
||||
|
||||
// send in chunks
|
||||
for (size_t i = 0; i < chunks.length (); ++i) {
|
||||
|
|
@ -2069,7 +2071,7 @@ void BotControl::kickBotByMenu (int page) {
|
|||
static StringRef backKey = conf.translate ("Back");
|
||||
static StringRef moreKey = conf.translate ("More");
|
||||
|
||||
String menus;
|
||||
String menus {};
|
||||
menus.assignf ("\\y%s (%d/4):\\w\n\n", headerTitle, page);
|
||||
|
||||
int menuKeys = (page == 4) ? cr::bit (9) : (cr::bit (8) | cr::bit (9));
|
||||
|
|
@ -2283,7 +2285,7 @@ void BotControl::createMenus () {
|
|||
Menu::Features, keys (5),
|
||||
"\\yBots Features\\w\n\n"
|
||||
"1. Weapon Mode Menu\n"
|
||||
"2. Waypoint Menu\n"
|
||||
"2. Graph Editor\n"
|
||||
"3. Select Personality\n\n"
|
||||
"4. Toggle Debug Mode\n"
|
||||
"5. Command Menu\n\n"
|
||||
|
|
@ -2410,33 +2412,33 @@ void BotControl::createMenus () {
|
|||
"0. Exit",
|
||||
&BotControl::menuCommands);
|
||||
|
||||
// main waypoint menu
|
||||
// main node menu
|
||||
m_menus.emplace (
|
||||
Menu::NodeMainPage1, keys (9),
|
||||
"\\yWaypoint Operations (Page 1)\\w\n\n"
|
||||
"1. Show/Hide waypoints\n"
|
||||
"2. Cache waypoint\n"
|
||||
"\\yGraph Editor (Page 1)\\w\n\n"
|
||||
"1. Show/Hide nodes\n"
|
||||
"2. Cache node\n"
|
||||
"3. Create path\n"
|
||||
"4. Delete path\n"
|
||||
"5. Add waypoint\n"
|
||||
"6. Delete waypoint\n"
|
||||
"5. Add node\n"
|
||||
"6. Delete node\n"
|
||||
"7. Set Autopath Distance\n"
|
||||
"8. Set Radius\n\n"
|
||||
"9. Next...\n\n"
|
||||
"0. Exit",
|
||||
&BotControl::menuGraphPage1);
|
||||
|
||||
// main waypoint menu (page 2)
|
||||
// main node menu (page 2)
|
||||
m_menus.emplace (
|
||||
Menu::NodeMainPage2, keys (9),
|
||||
"\\yWaypoint Operations (Page 2)\\w\n\n"
|
||||
"\\yGraph Editor (Page 2)\\w\n\n"
|
||||
"1. Debug goal\n"
|
||||
"2. Autowaypoint on/off\n"
|
||||
"2. Autonode on/off\n"
|
||||
"3. Set flags\n"
|
||||
"4. Save waypoints\n"
|
||||
"4. Save graph\n"
|
||||
"5. Save without checking\n"
|
||||
"6. Load waypoints\n"
|
||||
"7. Check waypoints\n"
|
||||
"6. Load graph\n"
|
||||
"7. Check graph\n"
|
||||
"8. Noclip cheat on/off\n\n"
|
||||
"9. Previous...\n\n"
|
||||
"0. Exit",
|
||||
|
|
@ -2445,23 +2447,23 @@ void BotControl::createMenus () {
|
|||
// select nodes radius menu
|
||||
m_menus.emplace (
|
||||
Menu::NodeRadius, keys (9),
|
||||
"\\yWaypoint Radius\\w\n\n"
|
||||
"1. SetRadius 0\n"
|
||||
"2. SetRadius 8\n"
|
||||
"3. SetRadius 16\n"
|
||||
"4. SetRadius 32\n"
|
||||
"5. SetRadius 48\n"
|
||||
"6. SetRadius 64\n"
|
||||
"7. SetRadius 80\n"
|
||||
"8. SetRadius 96\n"
|
||||
"9. SetRadius 128\n\n"
|
||||
"\\yNode Radius\\w\n\n"
|
||||
"1. 0 units\n"
|
||||
"2. 8 units\n"
|
||||
"3. 16 units\n"
|
||||
"4. 32 units\n"
|
||||
"5. 48 units\n"
|
||||
"6. 64 units\n"
|
||||
"7. 80 units\n"
|
||||
"8. 96 units\n"
|
||||
"9. 128 units\n\n"
|
||||
"0. Exit",
|
||||
&BotControl::menuGraphRadius);
|
||||
|
||||
// nodes add menu
|
||||
m_menus.emplace (
|
||||
Menu::NodeType, keys (9),
|
||||
"\\yWaypoint Type\\w\n\n"
|
||||
"\\yNode Type\\w\n\n"
|
||||
"1. Normal\n"
|
||||
"\\r2. Terrorist Important\n"
|
||||
"3. Counter-Terrorist Important\n"
|
||||
|
|
@ -2484,10 +2486,10 @@ void BotControl::createMenus () {
|
|||
"0. Exit",
|
||||
&BotControl::menuGraphDebug);
|
||||
|
||||
// set waypoint flag menu
|
||||
// set node flag menu
|
||||
m_menus.emplace (
|
||||
Menu::NodeFlag, keys (9),
|
||||
"\\yToggle Waypoint Flags\\w\n\n"
|
||||
"\\yToggle Node Flags\\w\n\n"
|
||||
"1. Block with Hostage\n"
|
||||
"2. Terrorists Specific\n"
|
||||
"3. CTs Specific\n"
|
||||
|
|
@ -2503,7 +2505,7 @@ void BotControl::createMenus () {
|
|||
// set camp directions menu
|
||||
m_menus.emplace (
|
||||
Menu::CampDirections, keys (2),
|
||||
"\\ySet Camp Point directions\\w\n\n"
|
||||
"\\ySet Camp Point Directions\\w\n\n"
|
||||
"1. Camp Start\n"
|
||||
"2. Camp End\n\n"
|
||||
"0. Exit",
|
||||
|
|
|
|||
|
|
@ -287,13 +287,13 @@ bool Game::isDedicated () {
|
|||
const char *Game::getRunningModName () {
|
||||
// this function returns mod name without path
|
||||
|
||||
static String name;
|
||||
static String name {};
|
||||
|
||||
if (!name.empty ()) {
|
||||
return name.chars ();
|
||||
}
|
||||
|
||||
char engineModName[256];
|
||||
char engineModName[256] {};
|
||||
engfuncs.pfnGetGameDir (engineModName);
|
||||
|
||||
name = engineModName;
|
||||
|
|
@ -428,11 +428,11 @@ void Game::sendClientMessage (bool console, edict_t *ent, StringRef message) {
|
|||
};
|
||||
|
||||
// do not excess limit
|
||||
constexpr size_t maxSendLength = 125;
|
||||
constexpr size_t kMaxSendLength = 125;
|
||||
|
||||
// split up the string into chunks if needed (maybe check if it's multibyte?)
|
||||
if (buffer.length () > maxSendLength) {
|
||||
auto chunks = buffer.split (maxSendLength);
|
||||
if (buffer.length () > kMaxSendLength) {
|
||||
auto chunks = buffer.split (kMaxSendLength);
|
||||
|
||||
// send in chunks
|
||||
for (size_t i = 0; i < chunks.length (); ++i) {
|
||||
|
|
@ -447,11 +447,11 @@ void Game::sendServerMessage (StringRef message) {
|
|||
// helper to sending the client message
|
||||
|
||||
// do not excess limit
|
||||
constexpr size_t maxSendLength = 175;
|
||||
constexpr size_t kMaxSendLength = 175;
|
||||
|
||||
// split up the string into chunks if needed (maybe check if it's multibyte?)
|
||||
if (message.length () > maxSendLength) {
|
||||
auto chunks = message.split (maxSendLength);
|
||||
if (message.length () > kMaxSendLength) {
|
||||
auto chunks = message.split (kMaxSendLength);
|
||||
|
||||
// send in chunks
|
||||
for (size_t i = 0; i < chunks.length (); ++i) {
|
||||
|
|
@ -463,7 +463,7 @@ void Game::sendServerMessage (StringRef message) {
|
|||
}
|
||||
|
||||
void Game::sendHudMessage (edict_t *ent, const hudtextparms_t &htp, StringRef message) {
|
||||
constexpr size_t maxSendLength = 512;
|
||||
constexpr size_t kMaxSendLength = 512;
|
||||
|
||||
if (game.isNullEntity (ent)) {
|
||||
return;
|
||||
|
|
@ -490,7 +490,7 @@ void Game::sendHudMessage (edict_t *ent, const hudtextparms_t &htp, StringRef me
|
|||
if (htp.effect == 2) {
|
||||
msg.writeShort (MessageWriter::fu16 (htp.fxTime, 8.0f));
|
||||
}
|
||||
msg.writeString (message.substr (0, maxSendLength).chars ());
|
||||
msg.writeString (message.substr (0, kMaxSendLength).chars ());
|
||||
}
|
||||
|
||||
void Game::prepareBotArgs (edict_t *ent, String str) {
|
||||
|
|
@ -709,7 +709,7 @@ void Game::registerCvars (bool gameVars) {
|
|||
self.ptr = engfuncs.pfnCVarGetPointer (reg.name);
|
||||
|
||||
if (!self.ptr) {
|
||||
static cvar_t reg_;
|
||||
static cvar_t reg_ {};
|
||||
|
||||
// fix metamod' memlocs not found
|
||||
if (is (GameFlags::Metamod)) {
|
||||
|
|
@ -1087,8 +1087,8 @@ bool Game::hasEntityInGame (StringRef classname) {
|
|||
}
|
||||
|
||||
void Game::printBotVersion () {
|
||||
String gameVersionStr;
|
||||
StringArray botRuntimeFlags;
|
||||
String gameVersionStr {};
|
||||
StringArray botRuntimeFlags {};
|
||||
|
||||
if (is (GameFlags::Legacy)) {
|
||||
gameVersionStr.assign ("Legacy");
|
||||
|
|
@ -1324,6 +1324,7 @@ float LightMeasure::getLightLevel (const Vector &point) {
|
|||
}
|
||||
return recursiveLightPoint <msurface_t, mnode_t> (m_worldModel->nodes, point, endPoint);
|
||||
};
|
||||
|
||||
return !recursiveCheck () ? kInvalidLightLevel : 100 * cr::sqrtf (cr::min (75.0f, static_cast <float> (m_point.avg ())) / 75.0f);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,8 +76,8 @@ int BotGraph::clearConnections (int index) {
|
|||
};
|
||||
auto &path = m_paths[index];
|
||||
|
||||
Connection sorted[kMaxNodeLinks];
|
||||
Connection top;
|
||||
Connection sorted[kMaxNodeLinks] {};
|
||||
Connection top {};
|
||||
|
||||
for (int i = 0; i < kMaxNodeLinks; ++i) {
|
||||
auto &cur = sorted[i];
|
||||
|
|
@ -208,7 +208,6 @@ int BotGraph::clearConnections (int index) {
|
|||
return false;
|
||||
};
|
||||
|
||||
|
||||
for (int i = 2; i < kMaxNodeLinks; ++i) {
|
||||
while (inspect_p0 (i)) {}
|
||||
}
|
||||
|
|
@ -561,7 +560,7 @@ IntArray BotGraph::getNearestInRadius (float radius, const Vector &origin, int m
|
|||
|
||||
const float radiusSq = cr::sqrf (radius);
|
||||
|
||||
IntArray result;
|
||||
IntArray result {};
|
||||
const auto &bucket = getNodesInBucket (origin);
|
||||
|
||||
if (bucket.length () < kMaxNodeLinks || radius > cr::sqrf (256.0f)) {
|
||||
|
|
@ -1367,7 +1366,7 @@ void BotGraph::syncCollectOnline () {
|
|||
|
||||
// decode answer
|
||||
if (lc.open (localFile, "rt")) {
|
||||
String lines;
|
||||
String lines {};
|
||||
|
||||
if (lc.getLine (lines)) {
|
||||
wanted = lines.split (",");
|
||||
|
|
@ -1429,7 +1428,7 @@ void BotGraph::calculatePathRadius (int index) {
|
|||
// calculate "wayzones" for the nearest node (meaning a dynamic distance area to vary node origin)
|
||||
|
||||
auto &path = m_paths[index];
|
||||
Vector start, direction;
|
||||
Vector start {}, direction {};
|
||||
|
||||
if ((path.flags & (NodeFlag::Ladder | NodeFlag::Goal | NodeFlag::Camp | NodeFlag::Rescue | NodeFlag::Crouch)) || m_jumpLearnNode) {
|
||||
path.radius = 0.0f;
|
||||
|
|
@ -1570,7 +1569,7 @@ void BotGraph::initNarrowPlaces () {
|
|||
m_narrowChecked = true;
|
||||
return;
|
||||
}
|
||||
TraceResult tr;
|
||||
TraceResult tr {};
|
||||
|
||||
const auto distance = 178.0f;
|
||||
const auto worldspawn = game.getStartEntity ();
|
||||
|
|
@ -1608,7 +1607,7 @@ void BotGraph::initNarrowPlaces () {
|
|||
}
|
||||
const Vector &ang = ((path.origin - m_paths[link.index].origin).normalize () * distance).angles ();
|
||||
|
||||
Vector forward, right, upward;
|
||||
Vector forward {}, right {}, upward {};
|
||||
ang.angleVectors (&forward, &right, &upward);
|
||||
|
||||
// helper lambda
|
||||
|
|
@ -1823,7 +1822,7 @@ bool BotGraph::canDownload () {
|
|||
|
||||
bool BotGraph::saveGraphData () {
|
||||
auto options = StorageOption::Graph | StorageOption::Exten;
|
||||
String editorName;
|
||||
String editorName {};
|
||||
|
||||
if (game.isNullEntity (m_editor) && !m_graphAuthor.empty ()) {
|
||||
editorName = m_graphAuthor;
|
||||
|
|
@ -1876,7 +1875,7 @@ bool BotGraph::saveGraphData () {
|
|||
void BotGraph::saveOldFormat () {
|
||||
PODGraphHeader header {};
|
||||
|
||||
String editorName;
|
||||
String editorName {};
|
||||
|
||||
if (game.isNullEntity (m_editor) && !m_graphAuthor.empty ()) {
|
||||
editorName = m_graphAuthor;
|
||||
|
|
@ -1896,7 +1895,7 @@ void BotGraph::saveOldFormat () {
|
|||
header.fileVersion = StorageVersion::Podbot;
|
||||
header.pointNumber = length ();
|
||||
|
||||
File fp;
|
||||
File fp {};
|
||||
|
||||
// file was opened
|
||||
if (fp.open (bstor.buildPath (BotFile::PodbotPWF), "wb")) {
|
||||
|
|
@ -2327,7 +2326,7 @@ void BotGraph::frame () {
|
|||
|
||||
// very helpful stuff..
|
||||
auto getNodeData = [this] (StringRef type, int node) -> String {
|
||||
String message, flags;
|
||||
String message {}, flags {};
|
||||
|
||||
const auto &p = m_paths[node];
|
||||
bool jumpPoint = false;
|
||||
|
|
@ -2384,7 +2383,7 @@ void BotGraph::frame () {
|
|||
const int dangerIndexCT = practice.getIndex (Team::CT, nearestIndex, nearestIndex);
|
||||
const int dangerIndexT = practice.getIndex (Team::Terrorist, nearestIndex, nearestIndex);
|
||||
|
||||
String practiceText;
|
||||
String practiceText {};
|
||||
practiceText.assignf (" Node practice data (index / damage):\n"
|
||||
" CT: %d / %d\n"
|
||||
" T: %d / %d\n\n", dangerIndexCT, dangerIndexCT != kInvalidNodeIndex ? practice.getDamage (Team::CT, nearestIndex, dangerIndexCT) : 0, dangerIndexT, dangerIndexT != kInvalidNodeIndex ? practice.getDamage (Team::Terrorist, nearestIndex, dangerIndexT) : 0);
|
||||
|
|
@ -2514,10 +2513,10 @@ bool BotGraph::checkNodes (bool teleportPlayer) {
|
|||
// ensure valid capacity
|
||||
assert (length > 8 && length < static_cast <size_t> (kMaxNodes));
|
||||
|
||||
PathWalk walk;
|
||||
PathWalk walk {};
|
||||
walk.init (length);
|
||||
|
||||
Array <bool> visited;
|
||||
Array <bool> visited {};
|
||||
visited.resize (length);
|
||||
|
||||
// first check incoming connectivity, initialize the "visited" table
|
||||
|
|
@ -2554,7 +2553,7 @@ bool BotGraph::checkNodes (bool teleportPlayer) {
|
|||
}
|
||||
|
||||
// then check outgoing connectivity
|
||||
Array <IntArray> outgoingPaths; // store incoming paths for speedup
|
||||
Array <IntArray> outgoingPaths {}; // store incoming paths for speedup
|
||||
outgoingPaths.resize (length);
|
||||
|
||||
for (const auto &path : m_paths) {
|
||||
|
|
@ -2630,7 +2629,7 @@ void BotGraph::addBasic () {
|
|||
ladderLeft.z = ladderRight.z;
|
||||
|
||||
TraceResult tr {};
|
||||
Vector up, down, front, back;
|
||||
Vector up {}, down {}, front {}, back {};
|
||||
|
||||
Vector diff = ((ladderLeft - ladderRight) ^ nullptr) * 15.0f;
|
||||
front = back = game.getEntityOrigin (ent);
|
||||
|
|
@ -2675,7 +2674,7 @@ void BotGraph::addBasic () {
|
|||
game.searchEntities ("classname", classname, [&] (edict_t *ent) {
|
||||
Vector pos = game.getEntityOrigin (ent);
|
||||
|
||||
TraceResult tr;
|
||||
TraceResult tr {};
|
||||
game.testLine (pos, pos - Vector (0.0f, 0.0f, 999.0f), TraceIgnore::Monsters, nullptr, &tr);
|
||||
tr.vecEndPos.z += 36.0f;
|
||||
|
||||
|
|
@ -2815,10 +2814,10 @@ void BotGraph::eraseFromBucket (const Vector &pos, int index) {
|
|||
}
|
||||
|
||||
int BotGraph::locateBucket (const Vector &pos) {
|
||||
constexpr auto width = 8192;
|
||||
constexpr auto kWidth = 8192;
|
||||
|
||||
auto hash = [&] (float axis, int32_t shift) {
|
||||
return ((static_cast <int> (axis) + width) & 0x007f80) >> shift;
|
||||
return ((static_cast <int> (axis) + kWidth) & 0x007f80) >> shift;
|
||||
};
|
||||
return hash (pos.x, 15) + hash (pos.y, 7);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ int32_t ServerQueryHook::sendTo (int socket, const void *message, size_t length,
|
|||
};
|
||||
|
||||
auto packet = reinterpret_cast <const uint8_t *> (message);
|
||||
constexpr int32_t packetLength = 5;
|
||||
constexpr int32_t kPacketLength = 5;
|
||||
|
||||
// player replies response
|
||||
if (length > packetLength && memcmp (packet, "\xff\xff\xff\xff", packetLength - 1) == 0) {
|
||||
if (length > kPacketLength && memcmp (packet, "\xff\xff\xff\xff", kPacketLength - 1) == 0) {
|
||||
if (packet[4] == 'D') {
|
||||
QueryBuffer buffer { packet, length, packetLength };
|
||||
QueryBuffer buffer { packet, length, kPacketLength };
|
||||
auto count = buffer.read <uint8_t> ();
|
||||
|
||||
for (uint8_t i = 0; i < count; ++i) {
|
||||
|
|
@ -32,7 +32,7 @@ int32_t ServerQueryHook::sendTo (int socket, const void *message, size_t length,
|
|||
return send (buffer.data ());
|
||||
}
|
||||
else if (packet[4] == 'I') {
|
||||
QueryBuffer buffer { packet, length, packetLength };
|
||||
QueryBuffer buffer { packet, length, kPacketLength };
|
||||
buffer.skip <uint8_t> (); // protocol
|
||||
|
||||
// skip server name, folder, map game
|
||||
|
|
@ -48,7 +48,7 @@ int32_t ServerQueryHook::sendTo (int socket, const void *message, size_t length,
|
|||
return send (buffer.data ());
|
||||
}
|
||||
else if (packet[4] == 'm') {
|
||||
QueryBuffer buffer { packet, length, packetLength };
|
||||
QueryBuffer buffer { packet, length, kPacketLength };
|
||||
|
||||
buffer.shiftToEnd (); // shift to the end of buffer
|
||||
buffer.write <uint8_t> (0); // zero out bot count
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ BotCreateResult BotManager::create (StringRef name, int difficulty, int personal
|
|||
// then sends result to bot constructor
|
||||
|
||||
edict_t *bot = nullptr;
|
||||
String resultName;
|
||||
String resultName {};
|
||||
|
||||
// do not allow create bots when there is no graph
|
||||
if (!graph.length ()) {
|
||||
|
|
@ -254,7 +254,7 @@ BotCreateResult BotManager::create (StringRef name, int difficulty, int personal
|
|||
}
|
||||
|
||||
if (hasNamePrefix) {
|
||||
String prefixed; // temp buffer for storing modified name
|
||||
String prefixed {}; // temp buffer for storing modified name
|
||||
prefixed.assignf ("%s %s", cv_name_prefix.as <StringRef> (), resultName);
|
||||
|
||||
// buffer has been modified, copy to real name
|
||||
|
|
@ -624,13 +624,13 @@ void BotManager::serverFill (int selection, int personality, int difficulty, int
|
|||
else {
|
||||
selection = 5;
|
||||
}
|
||||
constexpr char teams[6][12] = { "", {"Terrorists"}, {"CTs"}, "", "", {"Random"}, };
|
||||
constexpr char kTeams[6][12] = { "", {"Terrorists"}, {"CTs"}, "", "", {"Random"}, };
|
||||
const auto toAdd = numToAdd == -1 ? maxClients - (getHumansCount () + getBotCount ()) : numToAdd;
|
||||
|
||||
for (int i = 0; i <= toAdd; ++i) {
|
||||
addbot ("", difficulty, personality, selection, -1, true);
|
||||
}
|
||||
ctrl.msg ("Fill server with %s bots...", &teams[selection][0]);
|
||||
ctrl.msg ("Fill server with %s bots...", &kTeams[selection][0]);
|
||||
}
|
||||
|
||||
void BotManager::kickEveryone (bool instant, bool zeroQuota) {
|
||||
|
|
@ -846,7 +846,7 @@ void BotManager::setWeaponMode (int selection) {
|
|||
|
||||
selection--;
|
||||
|
||||
constexpr int std[7][kNumWeapons] = {
|
||||
constexpr int kStd[7][kNumWeapons] = {
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Knife only
|
||||
{-1, -1, -1, 2, 2, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Pistols only
|
||||
{-1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Shotgun only
|
||||
|
|
@ -856,7 +856,7 @@ void BotManager::setWeaponMode (int selection) {
|
|||
{-1, -1, -1, 2, 2, 0, 1, 2, 2, 2, 1, 2, 0, 2, 0, 0, 1, 0, 1, 1, 2, 2, 0, 1, 2, 1} // Standard
|
||||
};
|
||||
|
||||
constexpr int as[7][kNumWeapons] = {
|
||||
constexpr int kAs[7][kNumWeapons] = {
|
||||
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Knife only
|
||||
{-1, -1, -1, 2, 2, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Pistols only
|
||||
{-1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // Shotgun only
|
||||
|
|
@ -865,19 +865,19 @@ void BotManager::setWeaponMode (int selection) {
|
|||
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 1, -1, -1}, // Snipers only
|
||||
{-1, -1, -1, 2, 2, 0, 1, 1, 1, 1, 1, 1, 0, 2, 0, -1, 1, 0, 1, 1, 0, 0, -1, 1, 1, 1} // Standard
|
||||
};
|
||||
constexpr char modes[7][12] = { {"Knife"}, {"Pistol"}, {"Shotgun"}, {"Machine Gun"}, {"Rifle"}, {"Sniper"}, {"Standard"} };
|
||||
constexpr char kModes[7][12] = { {"Knife"}, {"Pistol"}, {"Shotgun"}, {"Machine Gun"}, {"Rifle"}, {"Sniper"}, {"Standard"} };
|
||||
|
||||
// get the raw weapons array
|
||||
auto tab = conf.getRawWeapons ();
|
||||
|
||||
// set the correct weapon mode
|
||||
for (int i = 0; i < kNumWeapons; ++i) {
|
||||
tab[i].teamStandard = std[selection][i];
|
||||
tab[i].teamAS = as[selection][i];
|
||||
tab[i].teamStandard = kStd[selection][i];
|
||||
tab[i].teamAS = kAs[selection][i];
|
||||
}
|
||||
cv_jasonmode.set (selection == 0 ? 1 : 0);
|
||||
|
||||
ctrl.msg ("%s weapon mode selected.", &modes[selection][0]);
|
||||
ctrl.msg ("%s weapon mode selected.", &kModes[selection][0]);
|
||||
}
|
||||
|
||||
void BotManager::listBots () {
|
||||
|
|
@ -2207,7 +2207,7 @@ bool BotManager::isLineBlockedBySmoke (const Vector &from, const Vector &to, flo
|
|||
float alongDist = toGrenade | sightDir;
|
||||
|
||||
// compute closest point to grenade along line of sight ray
|
||||
Vector close;
|
||||
Vector close {};
|
||||
|
||||
// constrain closest point to line segment
|
||||
if (alongDist < 0.0f) {
|
||||
|
|
|
|||
|
|
@ -255,19 +255,19 @@ int Bot::findGoalPost (int tactic, IntArray *defensive, IntArray *offensive) {
|
|||
int goalChoices[4] = { kInvalidNodeIndex, kInvalidNodeIndex, kInvalidNodeIndex, kInvalidNodeIndex };
|
||||
|
||||
if (tactic == GoalTactic::Defensive && !(*defensive).empty ()) { // careful goal
|
||||
postprocessGoals (*defensive, goalChoices);
|
||||
postProcessGoals (*defensive, goalChoices);
|
||||
}
|
||||
else if (tactic == GoalTactic::Camp && !graph.m_campPoints.empty ()) { // camp node goal
|
||||
// pickup sniper points if possible for sniping bots
|
||||
if (!graph.m_sniperPoints.empty () && usesSniper ()) {
|
||||
postprocessGoals (graph.m_sniperPoints, goalChoices);
|
||||
postProcessGoals (graph.m_sniperPoints, goalChoices);
|
||||
}
|
||||
else {
|
||||
postprocessGoals (graph.m_campPoints, goalChoices);
|
||||
postProcessGoals (graph.m_campPoints, goalChoices);
|
||||
}
|
||||
}
|
||||
else if (tactic == GoalTactic::Offensive && !(*offensive).empty ()) { // offensive goal
|
||||
postprocessGoals (*offensive, goalChoices);
|
||||
postProcessGoals (*offensive, goalChoices);
|
||||
}
|
||||
else if (tactic == GoalTactic::Goal && !graph.m_goalPoints.empty ()) // map goal node
|
||||
{
|
||||
|
|
@ -299,7 +299,7 @@ int Bot::findGoalPost (int tactic, IntArray *defensive, IntArray *offensive) {
|
|||
}
|
||||
}
|
||||
else {
|
||||
postprocessGoals (graph.m_goalPoints, goalChoices);
|
||||
postProcessGoals (graph.m_goalPoints, goalChoices);
|
||||
}
|
||||
}
|
||||
else if (tactic == GoalTactic::RescueHostage && !graph.m_rescuePoints.empty ()) {
|
||||
|
|
@ -359,7 +359,7 @@ int Bot::findGoalPost (int tactic, IntArray *defensive, IntArray *offensive) {
|
|||
return m_chosenGoalIndex = goalChoices[0]; // return and store goal
|
||||
}
|
||||
|
||||
void Bot::postprocessGoals (const IntArray &goals, int result[]) {
|
||||
void Bot::postProcessGoals (const IntArray &goals, int result[]) {
|
||||
// this function filters the goals, so new goal is not bot's old goal, and array of goals doesn't contains duplicate goals
|
||||
|
||||
int recurseCount = 0;
|
||||
|
|
@ -369,6 +369,10 @@ void Bot::postprocessGoals (const IntArray &goals, int result[]) {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!isOccupiedNode (index)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// check if historical goal
|
||||
for (const auto &hg : m_goalHist) {
|
||||
if (hg == index) {
|
||||
|
|
@ -381,8 +385,9 @@ void Bot::postprocessGoals (const IntArray &goals, int result[]) {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
return isOccupiedNode (index);
|
||||
return false;
|
||||
};
|
||||
|
||||
static IntArray resulting {};
|
||||
resulting.clear ();
|
||||
|
||||
|
|
@ -400,8 +405,10 @@ void Bot::postprocessGoals (const IntArray &goals, int result[]) {
|
|||
refill (graph.m_goalPoints);
|
||||
}
|
||||
else {
|
||||
if (!goals.empty ()) {
|
||||
resulting.insert (0, goals);
|
||||
}
|
||||
}
|
||||
|
||||
for (int index = 0; index < 4; ++index) {
|
||||
const auto goal = resulting.random ();
|
||||
|
|
@ -514,7 +521,7 @@ void Bot::doPlayerAvoidance (const Vector &normal) {
|
|||
const float interval = m_frameInterval * (pev->velocity.lengthSq2d () > 0.0f ? 7.5f : 2.0f);
|
||||
|
||||
// use our movement angles, try to predict where we should be next frame
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
m_moveAngles.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
Vector predict = pev->origin + forward * pev->maxspeed * interval;
|
||||
|
|
@ -865,8 +872,7 @@ void Bot::checkFall () {
|
|||
else if (pev->origin.z + 128.0f < m_checkFallPoint[1].z && pev->origin.z + 128.0f < m_checkFallPoint[0].z) {
|
||||
fixFall = true;
|
||||
}
|
||||
|
||||
if (m_currentNodeIndex != kInvalidNodeIndex) {
|
||||
else if (m_currentNodeIndex != kInvalidNodeIndex) {
|
||||
if (pev->origin.distanceSq (m_checkFallPoint[1]) <= cr::sqrf (32.0f) && pev->origin.z + 16.0f < m_checkFallPoint[1].z) {
|
||||
fixFall = true;
|
||||
}
|
||||
|
|
@ -1938,7 +1944,7 @@ int Bot::findNearestNode () {
|
|||
const float distanceSq = path.origin.distanceSq (pev->origin);
|
||||
|
||||
if (distanceSq < nearestDistanceSq) {
|
||||
TraceResult tr;
|
||||
TraceResult tr {};
|
||||
game.testLine (getEyesPos (), path.origin, TraceIgnore::Monsters, ent (), &tr);
|
||||
|
||||
if (tr.flFraction >= 1.0f && !tr.fStartSolid) {
|
||||
|
|
@ -2125,7 +2131,7 @@ int Bot::findDefendNode (const Vector &origin) {
|
|||
} while (sorting);
|
||||
|
||||
if (nodeIndex[0] == kInvalidNodeIndex) {
|
||||
IntArray found;
|
||||
IntArray found {};
|
||||
|
||||
for (const auto &path : graph) {
|
||||
if (origin.distanceSq (path.origin) < cr::sqrf (kMaxDistance)
|
||||
|
|
@ -2168,7 +2174,7 @@ int Bot::findCoverNode (float maxDistance) {
|
|||
const int srcIndex = m_currentNodeIndex;
|
||||
const int enemyIndex = graph.getNearest (m_lastEnemyOrigin);
|
||||
|
||||
IntArray enemies;
|
||||
IntArray enemies {};
|
||||
|
||||
int nodeIndex[kMaxNodeLinks] {};
|
||||
float nearestDistance[kMaxNodeLinks] {};
|
||||
|
|
@ -2467,8 +2473,8 @@ bool Bot::advanceMovement () {
|
|||
bool willJump = false;
|
||||
float jumpDistanceSq = 0.0f;
|
||||
|
||||
Vector src;
|
||||
Vector dst;
|
||||
Vector src {};
|
||||
Vector dst {};
|
||||
|
||||
// try to find out about future connection flags
|
||||
if (m_pathWalk.hasNext ()) {
|
||||
|
|
@ -2685,7 +2691,7 @@ bool Bot::isBlockedForward (const Vector &normal, TraceResult *tr) {
|
|||
bool Bot::canStrafeLeft (TraceResult *tr) {
|
||||
// this function checks if bot can move sideways
|
||||
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
pev->v_angle.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
Vector src = pev->origin;
|
||||
|
|
@ -2698,7 +2704,6 @@ bool Bot::canStrafeLeft (TraceResult *tr) {
|
|||
if (tr->flFraction < 1.0f) {
|
||||
return false; // bot's body will hit something
|
||||
}
|
||||
|
||||
src = dest;
|
||||
dest = dest + forward * 40.0f;
|
||||
|
||||
|
|
@ -2715,7 +2720,7 @@ bool Bot::canStrafeLeft (TraceResult *tr) {
|
|||
bool Bot::canStrafeRight (TraceResult *tr) {
|
||||
// this function checks if bot can move sideways
|
||||
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
pev->v_angle.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
Vector src = pev->origin;
|
||||
|
|
@ -2894,7 +2899,7 @@ bool Bot::canDuckUnder (const Vector &normal) {
|
|||
// this function check if bot can duck under obstacle
|
||||
|
||||
TraceResult tr {};
|
||||
Vector baseHeight;
|
||||
Vector baseHeight {};
|
||||
|
||||
// use center of the body first...
|
||||
if (isDucking ()) {
|
||||
|
|
@ -2946,7 +2951,7 @@ bool Bot::isBlockedLeft () {
|
|||
if (m_moveSpeed < 0.0f) {
|
||||
direction = -48.0f;
|
||||
}
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
pev->angles.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
// do a trace to the left...
|
||||
|
|
@ -2966,7 +2971,7 @@ bool Bot::isBlockedRight () {
|
|||
if (m_moveSpeed < 0.0f) {
|
||||
direction = -48.0f;
|
||||
}
|
||||
Vector right, forward;
|
||||
Vector right {}, forward {};
|
||||
pev->angles.angleVectors (&forward, &right, nullptr);
|
||||
|
||||
// do a trace to the right...
|
||||
|
|
|
|||
|
|
@ -473,7 +473,7 @@ bool DijkstraAlgo::find (int srcIndex, int destIndex, NodeAdderFn onAddedNode, i
|
|||
}
|
||||
}
|
||||
}
|
||||
static SmallArray <int> pathInReverse;
|
||||
static SmallArray <int> pathInReverse {};
|
||||
pathInReverse.clear ();
|
||||
|
||||
for (int i = destIndex; i != kInvalidNodeIndex; i = m_parent[i]) {
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ void BotPractice::save () {
|
|||
if (!graph.length () || graph.hasChanged ()) {
|
||||
return; // no action
|
||||
}
|
||||
SmallArray <DangerSaveRestore> data;
|
||||
SmallArray <DangerSaveRestore> data {};
|
||||
data.reserve (m_data.length ());
|
||||
|
||||
// copy hash-map data to our vector
|
||||
|
|
@ -167,7 +167,7 @@ void BotPractice::load () {
|
|||
if (!graph.length ()) {
|
||||
return; // no action
|
||||
}
|
||||
SmallArray <DangerSaveRestore> data;
|
||||
SmallArray <DangerSaveRestore> data {};
|
||||
m_data.clear ();
|
||||
|
||||
const bool dataLoaded = bstor.load <DangerSaveRestore> (data);
|
||||
|
|
|
|||
|
|
@ -331,7 +331,7 @@ String BotStorage::buildPath (int32_t file, bool isMemoryLoad, bool withoutMapNa
|
|||
{ BotFile::EbotEWP, FilePath (folders.ebot, "ewp")},
|
||||
};
|
||||
|
||||
static StringArray path;
|
||||
static StringArray path {};
|
||||
path.clear ();
|
||||
|
||||
// if not memory file we're don't need game dir
|
||||
|
|
@ -389,7 +389,7 @@ int32_t BotStorage::storageToBotFile (int32_t options) {
|
|||
void BotStorage::unlinkFromDisk () {
|
||||
// this function removes graph file from the hard disk
|
||||
|
||||
StringArray unlinkable;
|
||||
StringArray unlinkable {};
|
||||
bots.kickEveryone (true);
|
||||
|
||||
// if we're delete graph, delete all corresponding to it files
|
||||
|
|
@ -413,7 +413,7 @@ void BotStorage::unlinkFromDisk () {
|
|||
StringRef BotStorage::getRunningPath () {
|
||||
// this function get's relative path against bot library (bot library should reside in bin dir)
|
||||
|
||||
static String path;
|
||||
static String path {};
|
||||
|
||||
// we're do not do relative (against bot's library) paths on android
|
||||
if (plat.android) {
|
||||
|
|
@ -441,7 +441,7 @@ StringRef BotStorage::getRunningPath () {
|
|||
}
|
||||
|
||||
StringRef BotStorage::getRunningPathVFS () {
|
||||
static String path;
|
||||
static String path {};
|
||||
|
||||
// we're do not do relative (against bot's library) paths on android
|
||||
if (plat.android) {
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ void BotSupport::decalTrace (entvars_t *pev, TraceResult *trace, int logotypeInd
|
|||
.writeByte (decalIndex);
|
||||
}
|
||||
else {
|
||||
MessageWriter msg;
|
||||
MessageWriter msg {};
|
||||
|
||||
msg.start (MSG_BROADCAST, SVC_TEMPENTITY)
|
||||
.writeByte (message)
|
||||
|
|
@ -282,7 +282,7 @@ void BotSupport::checkWelcome () {
|
|||
auto graphModified = graph.getModifiedBy ();
|
||||
|
||||
// legacy welcome message, to respect the original code
|
||||
constexpr StringRef legacyWelcomeMessage = "Welcome to POD-Bot V2.5 by Count Floyd\n"
|
||||
constexpr StringRef kLegacyWelcomeMessage = "Welcome to POD-Bot V2.5 by Count Floyd\n"
|
||||
"Visit http://www.nuclearbox.com/podbot/ or\n"
|
||||
" http://www.botepidemic.com/podbot for Updates\n";
|
||||
|
||||
|
|
@ -328,7 +328,7 @@ void BotSupport::checkWelcome () {
|
|||
|
||||
// send the hud message
|
||||
game.sendHudMessage (receiveEnt, textParams,
|
||||
sendLegacyWelcome ? legacyWelcomeMessage.chars () : modernWelcomeMessage.chars ());
|
||||
sendLegacyWelcome ? kLegacyWelcomeMessage.chars () : modernWelcomeMessage.chars ());
|
||||
|
||||
m_welcomeReceiveTime = 0.0f;
|
||||
m_needToSendWelcome = false;
|
||||
|
|
@ -440,7 +440,7 @@ void BotSupport::syncCalculatePings () {
|
|||
if (!(client.flags & ClientFlags::Used) || isFakeClient (client.ent)) {
|
||||
continue;
|
||||
}
|
||||
int ping, loss;
|
||||
int ping {}, loss {};
|
||||
engfuncs.pfnGetPlayerStats (client.ent, &ping, &loss);
|
||||
|
||||
// @note: for those who asking on a email, we CAN call pfnGetPlayerStats hl-engine function in a separate thread
|
||||
|
|
@ -502,7 +502,7 @@ void BotSupport::syncCalculatePings () {
|
|||
}
|
||||
|
||||
void BotSupport::emitPings (edict_t *to) {
|
||||
static MessageWriter msg;
|
||||
static MessageWriter msg {};
|
||||
|
||||
auto isThirdpartyBot = [] (edict_t *ent) {
|
||||
return !bots[ent] && (ent->v.flags & FL_FAKECLIENT);
|
||||
|
|
@ -530,7 +530,7 @@ void BotSupport::emitPings (edict_t *to) {
|
|||
}
|
||||
|
||||
void BotSupport::resetPings (edict_t *to) {
|
||||
static MessageWriter msg;
|
||||
static MessageWriter msg {};
|
||||
|
||||
// no reset if game isn't support them
|
||||
if (!game.is (GameFlags::HasFakePings)) {
|
||||
|
|
@ -636,7 +636,7 @@ float BotSupport::getWaveLength (StringRef filename) {
|
|||
uint32_t dataChunkLength;
|
||||
} header {};
|
||||
|
||||
static WaveEndianessHelper weh;
|
||||
static WaveEndianessHelper weh {};
|
||||
|
||||
if (fp.read (&header, sizeof (WavHeader)) == 0) {
|
||||
logger.error ("Wave File %s - has wrong or unsupported format", filePath);
|
||||
|
|
|
|||
|
|
@ -973,7 +973,7 @@ void Bot::defuseBomb_ () {
|
|||
|
||||
// if defusing is not already started, maybe crouch before
|
||||
if (!m_hasProgressBar && m_duckDefuseCheckTime < game.time ()) {
|
||||
Vector botDuckOrigin, botStandOrigin;
|
||||
Vector botDuckOrigin {}, botStandOrigin {};
|
||||
|
||||
if (pev->button & IN_DUCK) {
|
||||
botDuckOrigin = pev->origin;
|
||||
|
|
|
|||
|
|
@ -285,8 +285,8 @@ void Bot::updateLookAnglesNewbie (const Vector &direction, float delta) {
|
|||
const float noTargetRatio = 0.3f;
|
||||
const float offsetDelay = 1.2f;
|
||||
|
||||
Vector stiffness;
|
||||
Vector randomize;
|
||||
Vector stiffness {};
|
||||
Vector randomize {};
|
||||
|
||||
m_idealAngles = direction.get2d ();
|
||||
m_idealAngles.clampAngles ();
|
||||
|
|
@ -368,7 +368,7 @@ bool Frustum::isObjectInsidePlane (const Plane &plane, const Vector ¢er, flo
|
|||
}
|
||||
|
||||
void Frustum::calculate (Planes &planes, const Vector &viewAngle, const Vector &viewOffset) {
|
||||
Vector forward, right, up;
|
||||
Vector forward {}, right {}, up {};
|
||||
viewAngle.angleVectors (&forward, &right, &up);
|
||||
|
||||
auto fc = viewOffset + forward * kMaxViewDistance;
|
||||
|
|
@ -541,7 +541,6 @@ void Bot::setAimDirection () {
|
|||
const auto &destOrigin = m_destOrigin + pev->view_ofs;
|
||||
m_lookAt = destOrigin;
|
||||
|
||||
|
||||
if (m_moveToGoal && m_seeEnemyTime + 4.0f < game.time ()
|
||||
&& !m_isStuck && !(pev->button & IN_DUCK)
|
||||
&& m_currentNodeIndex != kInvalidNodeIndex
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ void GraphVistable::rebuild () {
|
|||
return;
|
||||
}
|
||||
TraceResult tr {};
|
||||
uint8_t res, shift;
|
||||
uint8_t res {}, shift {};
|
||||
|
||||
if (!graph.exists (m_sliceIndex)) {
|
||||
m_sliceIndex = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue