From 7f4d4748fa4382b735900cbba4eb7ddcfb936d99 Mon Sep 17 00:00:00 2001 From: jeefo Date: Fri, 12 May 2023 22:12:22 +0300 Subject: [PATCH] fix: center-screen messages not appearing (fix: #446) fix: crash when creating too much threads refactor: fix typos in comments in headers --- cfg/addons/yapb/conf/lang/ru_lang.cfg | 6 +++--- ext/crlib | 2 +- inc/analyze.h | 20 +++++++++--------- inc/config.h | 4 ++-- inc/control.h | 10 ++++----- inc/engine.h | 12 +++++------ inc/graph.h | 14 ++++++------- inc/manager.h | 4 ++-- inc/module.h | 2 +- inc/practice.h | 2 +- inc/sounds.h | 2 +- inc/storage.h | 10 ++++----- inc/support.h | 14 ++++++------- inc/vistable.h | 2 +- inc/yapb.h | 20 +++++++++--------- src/analyze.cpp | 6 +++--- src/botlib.cpp | 14 ++++++------- src/control.cpp | 4 ++-- src/engine.cpp | 12 ++++++++--- src/graph.cpp | 10 ++++----- src/manager.cpp | 4 ++-- src/tasks.cpp | 30 +++++++++++++-------------- 22 files changed, 105 insertions(+), 99 deletions(-) diff --git a/cfg/addons/yapb/conf/lang/ru_lang.cfg b/cfg/addons/yapb/conf/lang/ru_lang.cfg index 0b2c83b..41722dd 100644 --- a/cfg/addons/yapb/conf/lang/ru_lang.cfg +++ b/cfg/addons/yapb/conf/lang/ru_lang.cfg @@ -522,13 +522,13 @@ 0. Выход [ORIGINAL] -Starting map analyzation. +Starting map analysis. [TRANSLATED] Начинается анализ карты. [ORIGINAL] -Completed map analyzation. +Completed map analysis. [TRANSLATED] Анализ карты завершён. @@ -1844,7 +1844,7 @@ Autostart analyzer if all other cases are failed. Автозапуск анализатора, если все остальные случаи оказались неудачными. [ORIGINAL] -Auto save results of analyzation to graph file. And re-add bots. +Auto save results of analysis to graph file. And re-add bots. [TRANSLATED] Автоматически сохранять результаты анализа в graph файл. И повторно добавлять ботов. diff --git a/ext/crlib b/ext/crlib index 9c2d3a6..8053580 160000 --- a/ext/crlib +++ b/ext/crlib @@ -1 +1 @@ -Subproject commit 9c2d3a60e330e2db3516a657289cfdae51c3053a +Subproject commit 8053580ddde4ad6c8de7b33d1e29131fb87facd1 diff --git a/inc/analyze.h b/inc/analyze.h index 627e1e9..6ac081a 100644 --- a/inc/analyze.h +++ b/inc/analyze.h @@ -7,7 +7,7 @@ #pragma once -// next code is based on cs-ebot implemntation, devised by EfeDursun125 +// next code is based on cs-ebot implementation, devised by EfeDursun125 class GraphAnalyze : public Singleton { public: GraphAnalyze () = default; @@ -16,21 +16,21 @@ public: private: float m_updateInterval {}; // time to update analyzer - bool m_basicsCreated {}; // basics waypoints were created? + bool m_basicsCreated {}; // basics nodes were created? bool m_isCrouch {}; // is node to be created as crouch ? bool m_isAnalyzing {}; // we're in analyzing ? - bool m_isAnalyzed {}; // current waypoint is analyzed + bool m_isAnalyzed {}; // current node is analyzed bool m_expandedNodes[kMaxNodes] {}; // all nodes expanded ? bool m_optimizedNodes[kMaxNodes] {}; // all nodes expanded ? public: - // start analyzation process + // start analysis process void start (); - // update analyzation process + // update analysis process void update (); - // suspend aanalyzing + // suspend analysis void suspend (); private: @@ -40,10 +40,10 @@ private: // set update interval (keeps game from freezing) void setUpdateInterval (); - // mark waypoints as goals + // mark nodes as goals void markGoals (); - // terminate analyzation and save data + // terminate analysis and save data void finish (); // optimize nodes a little @@ -59,7 +59,7 @@ public: return m_isCrouch; } - // is currently anaylyzing ? + // is currently analyzing ? bool isAnalyzing () const { return m_isAnalyzing; } @@ -75,5 +75,5 @@ public: } }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (GraphAnalyze, analyzer); diff --git a/inc/config.h b/inc/config.h index 7f4f5ea..aa6989b 100644 --- a/inc/config.h +++ b/inc/config.h @@ -122,7 +122,7 @@ public: // fix weapon prices (ie for elite) void adjustWeaponPrices (); - // find weapon info by weaponi d + // find weapon info by weapon id WeaponInfo &findWeaponById (int id); // translates bot message into needed language @@ -139,7 +139,7 @@ private: return line.substr (0, 1).findFirstOf ("#/;") != String::InvalidIndex; }; - // hash the lang string, only the letters + // hash the language string, only the letters uint32_t hashLangString (StringRef str); public: diff --git a/inc/control.h b/inc/control.h index c1ec69c..41a6d75 100644 --- a/inc/control.h +++ b/inc/control.h @@ -10,7 +10,7 @@ // command handler status CR_DECLARE_SCOPED_ENUM (BotCommandResult, Handled = 0, // command successfully handled - ListenServer, // command is only avaialble on listen server + ListenServer, // command is only available on listen server BadFormat // wrong params ) @@ -224,7 +224,7 @@ public: return m_ent; } - // global heloer for sending message to correct channel + // global helper for sending message to correct channel template void msg (const char *fmt, Args &&...args); public: @@ -242,7 +242,7 @@ public: bool handleMenuCommands (edict_t *ent); }; -// global heloer for sending message to correct channel +// global helper for sending message to correct channel template inline void BotControl::msg (const char *fmt, Args &&...args) { m_ignoreTranslate = game.isDedicated () && game.isNullEntity (m_ent); @@ -274,7 +274,7 @@ template inline void BotControl::msg (const char *fmt, Args & } } -// graph heloer for sending message to correct channel +// graph helper for sending message to correct channel template inline void BotGraph::msg (const char *fmt, Args &&...args) { if (m_silenceMessages) { return; // no messages while analyzing (too much spam) @@ -283,5 +283,5 @@ template inline void BotGraph::msg (const char *fmt, Args &&. } -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotControl, ctrl); diff --git a/inc/engine.h b/inc/engine.h index a6be92c..0a14cb4 100644 --- a/inc/engine.h +++ b/inc/engine.h @@ -194,7 +194,7 @@ public: // sends local registration stack for engine registration void registerCvars (bool gameVars = false); - // checks whether softwared rendering is enabled + // checks whether software rendering is enabled bool isSoftwareRenderer (); // load the cs binary in non metamod mode @@ -386,7 +386,7 @@ public: // prints center message to specified player template void clientPrint (edict_t *ent, const char *fmt, Args &&...args) { - if (isNullEntity (ent) || ent == getLocalEntity ()) { + if (isNullEntity (ent)) { print (fmt, cr::forward (args)...); return; } @@ -395,7 +395,7 @@ public: // prints message to client console template void centerPrint (edict_t *ent, const char *fmt, Args &&...args) { - if (isNullEntity (ent) || ent == getLocalEntity ()) { + if (isNullEntity (ent)) { print (fmt, cr::forward (args)...); return; } @@ -431,7 +431,7 @@ public: else if constexpr (cr::is_same ::value) { return static_cast (ptr->value); } - assert ("!Inavlid type requeted."); + assert ("!Invalid type requested."); } bool bool_ () const { @@ -525,11 +525,11 @@ public: } public: - static inline uint16_t fu16 (float value, float scale) { + static constexpr uint16_t fu16 (float value, float scale) { return cr::clamp (static_cast (value * cr::bit (static_cast (scale))), 0, USHRT_MAX); } - static inline short fs16 (float value, float scale) { + static constexpr short fs16 (float value, float scale) { return cr::clamp (static_cast (value * cr::bit (static_cast (scale))), -SHRT_MAX, SHRT_MAX); } }; diff --git a/inc/graph.h b/inc/graph.h index 627888e..0f0dd07 100644 --- a/inc/graph.h +++ b/inc/graph.h @@ -88,7 +88,7 @@ CR_DECLARE_SCOPED_ENUM (NotifySound, #include -// general waypoint header information structure +// general waypoint header information structure for podbot struct PODGraphHeader { char header[8]; int32_t fileVersion; @@ -97,7 +97,7 @@ struct PODGraphHeader { char author[32]; }; -// defines linked waypoints +// defines linked nodes struct PathLink { Vector velocity; int32_t distance; @@ -114,7 +114,7 @@ struct Path { PathVis vis; }; -// define waypoint structure for podbot (will convert on load) +// define waypoint structure for podbot (will convert on load) struct PODPath { int32_t number, flags; Vector origin; @@ -126,7 +126,7 @@ struct PODPath { PathVis vis; }; -// general stprage header information structure +// general storage header information structure struct StorageHeader { int32_t magic; int32_t version; @@ -328,7 +328,7 @@ public: return m_editor; } - // slicence all graph messages or not + // silence all graph messages or not void setMessageSilence (bool enable) { m_silenceMessages = enable; } @@ -344,7 +344,7 @@ public: } public: - // graph heloer for sending message to correct channel + // graph helper for sending message to correct channel template void msg (const char *fmt, Args &&...args); public: @@ -368,5 +368,5 @@ public: #include #include -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotGraph, graph); diff --git a/inc/manager.h b/inc/manager.h index 67ca338..15cd8bc 100644 --- a/inc/manager.h +++ b/inc/manager.h @@ -74,7 +74,7 @@ private: int m_bombSayStatus {}; // some bot is issued whine about bomb int m_lastRadio[kGameTeamNum] {}; // last radio message for team - bool m_leaderChoosen[kGameTeamNum] {}; // is team leader choose theese round + bool m_leaderChoosen[kGameTeamNum] {}; // is team leader choose thees round bool m_economicsGood[kGameTeamNum] {}; // is team able to buy anything bool m_bombPlanted {}; bool m_botsCanPause {}; @@ -326,7 +326,7 @@ public: } }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotManager, bots); // expose async worker diff --git a/inc/module.h b/inc/module.h index 3dcd66b..b167806 100644 --- a/inc/module.h +++ b/inc/module.h @@ -28,7 +28,7 @@ public: // gets the node nearest to origin virtual int getNearestNode (float *origin) = 0; - // checks wether node is valid + // checks whether node is valid virtual bool isNodeValid (int node) = 0; // gets the node origin diff --git a/inc/practice.h b/inc/practice.h index c037ad3..81822e3 100644 --- a/inc/practice.h +++ b/inc/practice.h @@ -126,5 +126,5 @@ public: } }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotPractice, practice); diff --git a/inc/sounds.h b/inc/sounds.h index 39f628f..5b6ce6f 100644 --- a/inc/sounds.h +++ b/inc/sounds.h @@ -36,5 +36,5 @@ public: void simulateNoise (int playerIndex); }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotSounds, sounds); diff --git a/inc/storage.h b/inc/storage.h index 52fc1a1..3338e25 100644 --- a/inc/storage.h +++ b/inc/storage.h @@ -72,20 +72,20 @@ public: // saves the data and compress with ulz template bool save (const SmallArray &data, ExtenHeader *exten = nullptr, int32_t passOptions = 0); - // report fatail error loading stuff + // report fatal error loading stuff template bool error (bool isGraph, bool isDebug, MemFile &file, const char *fmt, Args &&...args); // builds the filename to requested filename String buildPath (int32_t type, bool isMemoryLoad = false); - // converts storage option to stroage filename + // converts storage option to storage filename int32_t storageToBotFile (int32_t options); - // remove all bot related files frorm disk + // remove all bot related files from disk void unlinkFromDisk (); public: - // loading the graph may attemp to recurse loading, with converting or download, reset retry counter + // loading the graph may attempt to recurse loading, with converting or download, reset retry counter void resetRetries () { m_retries = 0; } @@ -98,6 +98,6 @@ public: #undef BOT_STORAGE_EXPLICIT_INSTANTIATIONS -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotStorage, bstor); diff --git a/inc/support.h b/inc/support.h index f0f5653..f6fa9a9 100644 --- a/inc/support.h +++ b/inc/support.h @@ -39,16 +39,16 @@ public: // check if entity is alive bool isAlive (edict_t *ent); - // checks if entitiy is fakeclient + // checks if entity is fakeclient bool isFakeClient (edict_t *ent); - // check if entitiy is a player + // check if entity is a player bool isPlayer (edict_t *ent); - // check if entitiy is a monster + // check if entity is a monster bool isMonster (edict_t *ent); - // check if entitiy is a item + // check if entity is a item bool isItem (edict_t *ent); // check if entity is a vip @@ -90,13 +90,13 @@ public: // send modified pings to all the clients void emitPings (edict_t *to); - // installs the sendto function intreception + // installs the sendto function interception void installSendTo (); // check if object inside frustum plane bool isObjectInsidePlane (FrustumPlane &plane, const Vector ¢er, float height, float radius); - // checks if same model ommiting the models directory + // checks if same model omitting the models directory bool isModel (const edict_t *ent, StringRef model); // get the current date and time as string @@ -143,5 +143,5 @@ public: static int32_t CR_STDCALL sendTo (int socket, const void *message, size_t length, int flags, const struct sockaddr *dest, int destLength); }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (BotSupport, util); diff --git a/inc/vistable.h b/inc/vistable.h index 7cbdeeb..6fe55ab 100644 --- a/inc/vistable.h +++ b/inc/vistable.h @@ -56,6 +56,6 @@ public: } }; -// explose global +// expose global CR_EXPOSE_GLOBAL_SINGLETON (GraphVistable, vistab); diff --git a/inc/yapb.h b/inc/yapb.h index ec8e13d..2e8d4d9 100644 --- a/inc/yapb.h +++ b/inc/yapb.h @@ -388,7 +388,7 @@ CR_DECLARE_SCOPED_ENUM_TYPE (AimFlags, uint32_t, Enemy = cr::bit (5), // aim at enemy Grenade = cr::bit (6), // aim for grenade throw Override = cr::bit (7), // overrides all others (blinded) - Danger = cr::bit (8) // additional danger falg + Danger = cr::bit (8) // additional danger flag ) // famas/glock burst mode status + m4a1/usp silencer @@ -416,7 +416,7 @@ CR_DECLARE_SCOPED_ENUM (FrustumSide, Num ) -// some hardcoded desire defines used to override calculated ones +// some hard-coded desire defines used to override calculated ones struct TaskPri { static constexpr auto Normal { 35.0f }; static constexpr auto Pause { 36.0f }; @@ -562,7 +562,7 @@ struct Client { int team2; // real bot team in free for all mode (csdm) int flags; // client flags int radio; // radio orders - int menu; // identifier to openen menu + int menu; // identifier to opened menu int ping; // when bot latency is enabled, client ping stored here int iconFlags[kGameMaxPlayers]; // flag holding chatter icons float iconTimestamp[kGameMaxPlayers]; // timers for chatter icons @@ -676,7 +676,7 @@ private: int m_plantedBombNodeIndex {}; // nearest to planted bomb node int m_currentNodeIndex {}; // current node index int m_travelStartIndex {}; // travel start index to double jump action - int m_previousNodes[5] {}; // previous node indices from node find + int m_previousNodes[5] {}; // previous node indexes from node find int m_pathFlags {}; // current node flags int m_needAvoidGrenade {}; // which direction to strafe away int m_campDirection {}; // camp Facing direction @@ -702,7 +702,7 @@ private: float m_lastCommandTime {}; // time bot last thinked float m_reloadCheckTime {}; // time to check reloading float m_zoomCheckTime {}; // time to check zoom again - float m_shieldCheckTime {}; // time to check shiled drawing again + float m_shieldCheckTime {}; // time to check shield drawing again float m_grenadeCheckTime {}; // time to check grenade usage float m_sniperStopTime {}; // bot switched to other weapon? float m_lastEquipTime {}; // last time we equipped in buyzone @@ -740,7 +740,7 @@ private: float m_joinServerTime {}; // time when bot joined the game float m_playServerTime {}; // time bot spent in the game float m_changeViewTime {}; // timestamp to change look at while at freezetime - float m_breakableTime {}; // breakeble acquired time + float m_breakableTime {}; // breakable acquired time float m_stuckTimestamp {}; // last time was stuck bool m_moveToGoal {}; // bot currently moving to goal?? @@ -782,7 +782,7 @@ private: edict_t *m_lastBreakable {}; // last acquired breakable edict_t *m_targetEntity {}; // the entity that the bot is trying to reach edict_t *m_avoidGrenade {}; // pointer to grenade entity to avoid - edict_t *m_hindrance {}; // the hidrance + edict_t *m_hindrance {}; // the hindrance Vector m_liftTravelPos {}; // lift travel position Vector m_moveAngles {}; // bot move angles @@ -1070,7 +1070,7 @@ public: int m_basePing {}; // base ping for bot int m_numEnemiesLeft {}; // number of enemies alive left on map int m_numFriendsLeft {}; // number of friend alive left on map - int m_retryJoin {}; // retry count for chosing team/class + int m_retryJoin {}; // retry count for choosing team/class int m_startAction {}; // team/class selection state int m_voteKickIndex {}; // index of player to vote against int m_lastVoteKick {}; // last index @@ -1094,7 +1094,7 @@ public: bool m_ignoreBuyDelay {}; // when reaching buyzone in the middle of the round don't do pauses bool m_inBombZone {}; // bot in the bomb zone or not bool m_inBuyZone {}; // bot currently in buy zone - bool m_inVIPZone {}; // bot in the vip satefy zone + bool m_inVIPZone {}; // bot in the vip safety zone bool m_buyingFinished {}; // done with buying bool m_buyPending {}; // bot buy is pending bool m_hasDefuser {}; // does bot has defuser @@ -1233,7 +1233,7 @@ public: return m_currentNodeIndex; } - // is low on admmo on index? + // is low on ammo on index? bool isLowOnAmmo (const int index, const float factor) const; // prints debug message diff --git a/src/analyze.cpp b/src/analyze.cpp index 6a82c30..69254d1 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -8,7 +8,7 @@ #include ConVar cv_graph_analyze_auto_start ("yb_graph_analyze_auto_start", "1", "Autostart analyzer if all other cases are failed."); -ConVar cv_graph_analyze_auto_save ("yb_graph_analyze_auto_save", "1", "Auto save results of analyzation to graph file. And re-add bots."); +ConVar cv_graph_analyze_auto_save ("yb_graph_analyze_auto_save", "1", "Auto save results of analysis to graph file. And re-add bots."); ConVar cv_graph_analyze_distance ("yb_graph_analyze_distance", "64", "The minimum distance to keep nodes from each other.", true, 42.0f, 128.0f); ConVar cv_graph_analyze_max_jump_height ("yb_graph_analyze_max_jump_height", "44", "Max jump height to test if next node will be unreachable.", true, 44.0f, 64.0f); ConVar cv_graph_analyze_fps ("yb_graph_analyze_fps", "30.0", "The FPS at which analyzer process is running. This keeps game from freezing during analyzing.", false, 25.0f, 99.0f); @@ -37,7 +37,7 @@ void GraphAnalyze::start () { for (auto &optimized : m_optimizedNodes) { optimized = false; } - ctrl.msg ("Starting map analyzation."); + ctrl.msg ("Starting map analysis."); } else { m_updateInterval = 0.0f; @@ -143,7 +143,7 @@ void GraphAnalyze::finish () { // un-silence all graph messages graph.setMessageSilence (false); - ctrl.msg ("Completed map analyzation."); + ctrl.msg ("Completed map analysis."); // auto save bots graph if (cv_graph_analyze_auto_save.bool_ ()) { diff --git a/src/botlib.cpp b/src/botlib.cpp index 5ee5730..08e7f9c 100644 --- a/src/botlib.cpp +++ b/src/botlib.cpp @@ -689,7 +689,7 @@ Vector Bot::getCampDirection (const Vector &dest) { } float minDistance = kInfiniteDistance; - int lookAtWaypoint = kInvalidNodeIndex; + int lookAtNode = kInvalidNodeIndex; const Path &path = graph[tempIndex]; for (auto &link : path.links) { @@ -700,12 +700,12 @@ Vector Bot::getCampDirection (const Vector &dest) { if (distance < minDistance) { minDistance = distance; - lookAtWaypoint = link.index; + lookAtNode = link.index; } } - if (graph.exists (lookAtWaypoint)) { - return graph[lookAtWaypoint].origin; + if (graph.exists (lookAtNode)) { + return graph[lookAtNode].origin; } } auto dangerIndex = practice.getIndex (m_team, m_currentNodeIndex, m_currentNodeIndex); @@ -1498,7 +1498,7 @@ void Bot::overrideConditions () { if (isKnifeMode () && (util.isPlayer (m_enemy) || (cv_attack_monsters.bool_ () && util.isMonster (m_enemy)))) { float length = pev->origin.distance2d (m_enemy->v.origin); - // do waypoint movement if enemy is not reachable with a knife + // do nodes movement if enemy is not reachable with a knife if (length > 250.0f && (m_states & Sense::SeeingEnemy)) { int nearestToEnemyPoint = graph.getNearest (m_enemy->v.origin); @@ -2490,7 +2490,7 @@ void Bot::checkRadioQueue () { float minDistance = kInfiniteDistance; int bombPoint = kInvalidNodeIndex; - // find nearest bomb waypoint to player + // find nearest bomb node to player for (auto &point : graph.m_goalPoints) { distance = graph[point].origin.distanceSq (m_radioEntity->v.origin); @@ -2500,7 +2500,7 @@ void Bot::checkRadioQueue () { } } - // mark this waypoint as restricted point + // mark this node as restricted point if (bombPoint != kInvalidNodeIndex && !graph.isVisited (bombPoint)) { // does this bot want to defuse? if (getCurrentTaskId () == Task::Normal) { diff --git a/src/control.cpp b/src/control.cpp index da65805..207cbc8 100644 --- a/src/control.cpp +++ b/src/control.cpp @@ -2335,7 +2335,7 @@ void BotControl::createMenus () { "0. Exit", &BotControl::menuGraphPage2); - // select waypoint radius menu + // select nodes radius menu m_menus.emplace ( Menu::NodeRadius, keys (9), "\\yWaypoint Radius\\w\n\n" @@ -2351,7 +2351,7 @@ void BotControl::createMenus () { "0. Exit", &BotControl::menuGraphRadius); - // waypoint add menu + // nodes add menu m_menus.emplace ( Menu::NodeType, keys (9), "\\yWaypoint Type\\w\n\n" diff --git a/src/engine.cpp b/src/engine.cpp index 8fd7f84..e5eb5af 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -38,8 +38,8 @@ void Game::precache () { m_drawModels[DrawLine::Simple] = m_engineWrap.precacheModel ("sprites/laserbeam.spr"); m_drawModels[DrawLine::Arrow] = m_engineWrap.precacheModel ("sprites/arrow1.spr"); - m_engineWrap.precacheSound ("weapons/xbow_hit1.wav"); // waypoint add - m_engineWrap.precacheSound ("weapons/mine_activate.wav"); // waypoint delete + m_engineWrap.precacheSound ("weapons/xbow_hit1.wav"); // node add + m_engineWrap.precacheSound ("weapons/mine_activate.wav"); // node delete m_engineWrap.precacheSound ("common/wpn_hudon.wav"); // path add/delete done m_mapFlags = 0; // reset map type as worldspawn is the first entity spawned @@ -474,10 +474,16 @@ uint8_t *Game::getVisibilitySet (Bot *bot, bool pvs) { void Game::sendClientMessage (bool console, edict_t *ent, StringRef message) { // helper to sending the client message - // do not send messages to fakeclients + // do not send messages to fake clients if (!util.isPlayer (ent) || util.isFakeClient (ent)) { return; } + + // if console message and destination is listenserver entity, just print via server message instead of through unreliable channel + if (console && ent == game.getLocalEntity ()) { + sendServerMessage (message); + return; + } const String &buffer = message; // used to split messages diff --git a/src/graph.cpp b/src/graph.cpp index 849e607..c88bcc5 100644 --- a/src/graph.cpp +++ b/src/graph.cpp @@ -675,7 +675,7 @@ void BotGraph::add (int type, const Vector &pos) { else { auto nearest = getEditorNearest (); - // do not allow to place waypoints "inside" waypoints, make at leat 10 units range + // do not allow to place node "inside" node, make at leat 10 units range if (exists (nearest) && newOrigin.distanceSq (m_paths[nearest].origin) < cr::sqrf (10.0f)) { msg ("Can't add node. It's way to near to %d node. Please move some units anywhere.", nearest); return; @@ -981,7 +981,7 @@ bool BotGraph::isConnected (int a, int b) { } int BotGraph::getFacingIndex () { - // find the waypoint the user is pointing at + // find the node the user is pointing at Twin result { kInvalidNodeIndex, 5.32f }; auto nearestNode = getEditorNearest (); @@ -991,7 +991,7 @@ int BotGraph::getFacingIndex () { for (const auto &path : m_paths) { - // skip nearest waypoint to editor, since this used mostly for adding / removing paths + // skip nearest node to editor, since this used mostly for adding / removing paths if (path.number == nearestNode) { continue; } @@ -999,12 +999,12 @@ int BotGraph::getFacingIndex () { const auto &to = path.origin - m_editor->v.origin; auto angles = (to.angles () - m_editor->v.v_angle).clampAngles (); - // skip the waypoints that are too far away from us, and we're not looking at them directly + // skip the nodes that are too far away from us, and we're not looking at them directly if (to.lengthSq () > cr::sqrf (500.0f) || cr::abs (angles.y) > result.second) { continue; } - // check if visible, (we're not using visiblity tables here, as they not valid at time of waypoint editing) + // check if visible, (we're not using visibility tables here, as they not valid at time of node editing) TraceResult tr {}; game.testLine (editorEyes, path.origin, TraceIgnore::Everything, m_editor, &tr); diff --git a/src/manager.cpp b/src/manager.cpp index c1c6ddc..837adbf 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -1973,11 +1973,11 @@ void BotThreadWorker::startup (int workers) { requestedThreadCount = 1; } } - requestedThreadCount = cr::clamp (requestedThreadCount, 1, hardwareConcurrency); + requestedThreadCount = cr::clamp (requestedThreadCount, 1, hardwareConcurrency - 1); // notify user game.print ("Starting up bot thread worker with %d threads.", requestedThreadCount); // start up the worker - m_botWorker.startup (static_cast (requestedThreadCount)); + m_botWorker.startup (static_cast (requestedThreadCount)); } diff --git a/src/tasks.cpp b/src/tasks.cpp index d07aa94..c76a6ba 100644 --- a/src/tasks.cpp +++ b/src/tasks.cpp @@ -18,7 +18,7 @@ void Bot::normal_ () { int debugGoal = cv_debug_goal.int_ (); - // user forced a waypoint as a goal? + // user forced a node as a goal? if (debugGoal != kInvalidNodeIndex && getTask ()->data != debugGoal) { clearSearchNodes (); @@ -127,7 +127,7 @@ void Bot::normal_ () { } } else { - // some goal waypoints are map dependant so check it out... + // some goal nodes are map dependent so check it out... if (game.mapIs (MapFlags::HostageRescue)) { // CT Bot has some hostages following? if (m_team == Team::CT && m_hasHostage) { @@ -190,7 +190,7 @@ void Bot::normal_ () { auto currIndex = getTask ()->data; auto destIndex = graph.exists (currIndex) ? currIndex : findBestGoal (); - // check for existence (this is fail over, for i.e. csdm, this should be not true with normal game play, only when spawned outside of covered area) + // check for existence (this is fail over, for i.e. CSDM, this should be not true with normal game play, only when spawned outside of covered area) if (!graph.exists (destIndex)) { destIndex = graph.getFarest (pev->origin, 1024.0f); } @@ -207,7 +207,8 @@ void Bot::normal_ () { } ensureCurrentNodeIndex (); - // do pathfinding if it's not the current waypoint + // do pathfinding if it's not the current + if (destIndex != m_currentNodeIndex) { findPath (m_currentNodeIndex, destIndex, pathSearchType); } @@ -256,7 +257,7 @@ void Bot::spraypaint_ () { m_entity = sprayOrigin; if (getTask ()->time - 0.5f < game.time ()) { - // emit spraycan sound + // emit spray can sound engfuncs.pfnEmitSound (ent (), CHAN_VOICE, "player/sprayer.wav", 1.0f, ATTN_NORM, 0, 100); game.testLine (getEyesPos (), getEyesPos () + forward * 128.0f, TraceIgnore::Monsters, ent (), &tr); @@ -350,9 +351,9 @@ void Bot::seekCover_ () { m_prevGoalIndex = kInvalidNodeIndex; } - // reached final waypoint? + // reached final node? else if (updateNavigation ()) { - // yep. activate hide behaviour + // yep. activate hide behavior completeTask (); m_prevGoalIndex = kInvalidNodeIndex; @@ -366,7 +367,7 @@ void Bot::seekCover_ () { m_lookAtSafe = dest; m_campDirection = 0; - // chosen waypoint is a camp waypoint? + // chosen node is a camp node? if (m_pathFlags & NodeFlag::Camp) { // use the existing camp node prefs if (m_pathFlags & NodeFlag::Crouch) { @@ -709,7 +710,7 @@ void Bot::moveToPos_ () { m_position = nullptr; } - // didn't choose goal waypoint yet? + // didn't choose goal node yet? else if (!hasActiveGoal ()) { int destIndex = kInvalidNodeIndex; int goal = getTask ()->data; @@ -804,7 +805,7 @@ void Bot::defuseBomb_ () { // exception: bomb has been defused if (bombPos.empty ()) { - // fix for stupid behaviour of CT's when bot is defused + // fix for stupid behavior of CT's when bot is defused for (const auto &bot : bots) { if (bot->m_team == m_team && bot->m_notKilled) { auto defendPoint = graph.getFarest (bot->pev->origin); @@ -1034,13 +1035,13 @@ void Bot::followUser_ () { getTask ()->data = kInvalidNodeIndex; } - // didn't choose goal waypoint yet? + // didn't choose goal node yet? if (!hasActiveGoal ()) { int destIndex = graph.getNearest (m_targetEntity->v.origin); auto points = graph.getNarestInRadius (200.0f, m_targetEntity->v.origin); for (auto &newIndex : points) { - // if waypoint not yet used, assign it as dest + // if node not yet used, assign it as dest if (newIndex != m_currentNodeIndex && !isOccupiedNode (newIndex)) { destIndex = newIndex; } @@ -1288,7 +1289,7 @@ void Bot::doublejump_ () { getTask ()->data = kInvalidNodeIndex; } - // didn't choose goal waypoint yet? + // didn't choose goal node yet? if (!hasActiveGoal ()) { int destIndex = graph.getNearest (m_doubleJumpOrigin); @@ -1339,7 +1340,7 @@ void Bot::escapeFromBomb_ () { startTask (Task::Camp, TaskPri::Camp, kInvalidNodeIndex, game.time () + 10.0f, true); } - // didn't choose goal waypoint yet? + // didn't choose goal node yet? else if (!hasActiveGoal ()) { int bestIndex = kInvalidNodeIndex; @@ -1591,7 +1592,6 @@ void Bot::pickupItem_ () { return EntitySearchResult::Continue; } } - int hostageNodeIndex = graph.getNearest (ent->v.origin); if (graph.exists (hostageNodeIndex)) {