From 7adeda4113069ef2ef4deb2d345094a3c507801b Mon Sep 17 00:00:00 2001 From: RGreenlees Date: Fri, 12 Apr 2024 16:40:50 +0100 Subject: [PATCH 1/4] Add cloak behaviour Bots will no longer see cloaked players, and have a chance based on cloak level, movement and size of the players. Bots will also sneak when approaching enemies while cloaked. --- main/source/detour/DetourNavMeshQuery.cpp | 13 +- main/source/detour/Include/DetourNavMesh.h | 138 +++---- .../detour/Include/DetourNavMeshQuery.h | 20 +- main/source/detour/Include/DetourNode.h | 26 +- main/source/mod/AvHAICommander.cpp | 372 +++++------------- main/source/mod/AvHAIMath.cpp | 2 + main/source/mod/AvHAINavigation.cpp | 271 ++++++++----- main/source/mod/AvHAINavigation.h | 1 + main/source/mod/AvHAIPlayer.cpp | 203 ++++++---- main/source/mod/AvHAIPlayer.h | 2 + main/source/mod/AvHAIPlayerManager.cpp | 123 ++++-- main/source/mod/AvHAIPlayerManager.h | 2 + main/source/mod/AvHAITask.cpp | 25 +- 13 files changed, 609 insertions(+), 589 deletions(-) diff --git a/main/source/detour/DetourNavMeshQuery.cpp b/main/source/detour/DetourNavMeshQuery.cpp index 03f06a09..d80b9916 100644 --- a/main/source/detour/DetourNavMeshQuery.cpp +++ b/main/source/detour/DetourNavMeshQuery.cpp @@ -1130,6 +1130,9 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, { // Remove node from open list and put it in closed list. dtNode* bestNode = m_openList->pop(); + + if (!bestNode) { continue; } + bestNode->flags &= ~DT_NODE_OPEN; bestNode->flags |= DT_NODE_CLOSED; @@ -1143,14 +1146,16 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, // Get current poly and tile. // The API input has been cheked already, skip checking internal data. const dtPolyRef bestRef = bestNode->id; - const dtMeshTile* bestTile = 0; - const dtPoly* bestPoly = 0; + const dtMeshTile* bestTile = nullptr; + const dtPoly* bestPoly = nullptr; m_nav->getTileAndPolyByRefUnsafe(bestRef, &bestTile, &bestPoly); + + if (!bestTile || !bestPoly || !bestTile->links) { continue; } // Get parent poly and tile. dtPolyRef parentRef = 0; - const dtMeshTile* parentTile = 0; - const dtPoly* parentPoly = 0; + const dtMeshTile* parentTile = nullptr; + const dtPoly* parentPoly = nullptr; if (bestNode->pidx) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; if (parentRef) diff --git a/main/source/detour/Include/DetourNavMesh.h b/main/source/detour/Include/DetourNavMesh.h index 312ef4e3..d78f8a79 100644 --- a/main/source/detour/Include/DetourNavMesh.h +++ b/main/source/detour/Include/DetourNavMesh.h @@ -163,7 +163,7 @@ enum OffMeshState struct dtPoly { /// Index to first link in linked list. (Or #DT_NULL_LINK if there is no link.) - unsigned int firstLink; + unsigned int firstLink = DT_NULL_LINK; /// The indices of the polygon's vertices. /// The actual vertices are located in dtMeshTile::verts. @@ -173,14 +173,14 @@ struct dtPoly unsigned short neis[DT_VERTS_PER_POLYGON]; /// The user defined polygon flags. - unsigned int flags; + unsigned int flags = 0; /// The number of vertices in the polygon. - unsigned char vertCount; + unsigned char vertCount = 0; /// The bit packed area id and polygon type. /// @note Use the structure's set and get methods to acess this value. - unsigned char areaAndtype; + unsigned char areaAndtype = 0; /// Sets the user defined area id. [Limit: < #DT_MAX_AREAS] inline void setArea(unsigned char a) { areaAndtype = (areaAndtype & 0xc0) | (a & 0x3f); } @@ -200,10 +200,10 @@ struct dtPoly /// Defines the location of detail sub-mesh data within a dtMeshTile. struct dtPolyDetail { - unsigned int vertBase; ///< The offset of the vertices in the dtMeshTile::detailVerts array. - unsigned int triBase; ///< The offset of the triangles in the dtMeshTile::detailTris array. - unsigned char vertCount; ///< The number of vertices in the sub-mesh. - unsigned char triCount; ///< The number of triangles in the sub-mesh. + unsigned int vertBase = 0; ///< The offset of the vertices in the dtMeshTile::detailVerts array. + unsigned int triBase = 0; ///< The offset of the triangles in the dtMeshTile::detailTris array. + unsigned char vertCount = 0; ///< The number of vertices in the sub-mesh. + unsigned char triCount = 0; ///< The number of triangles in the sub-mesh. }; /// Defines a link between polygons. @@ -211,12 +211,12 @@ struct dtPolyDetail /// @see dtMeshTile struct dtLink { - dtPolyRef ref; ///< Neighbour reference. (The neighbor that is linked to.) - unsigned int next; ///< Index of the next link. - unsigned char edge; ///< Index of the polygon edge that owns this link. - unsigned char side; ///< If a boundary link, defines on which side the link is. - unsigned char bmin; ///< If a boundary link, defines the minimum sub-edge area. - unsigned char bmax; ///< If a boundary link, defines the maximum sub-edge area. + dtPolyRef ref = 0; ///< Neighbour reference. (The neighbor that is linked to.) + unsigned int next = 0; ///< Index of the next link. + unsigned char edge = 0; ///< Index of the polygon edge that owns this link. + unsigned char side = 0; ///< If a boundary link, defines on which side the link is. + unsigned char bmin = 0; ///< If a boundary link, defines the minimum sub-edge area. + unsigned char bmax = 0; ///< If a boundary link, defines the maximum sub-edge area. int OffMeshID = -1; ///< If an off-mesh connection, this will be the UserID of the connection that made this link }; @@ -225,8 +225,8 @@ struct dtLink /// @see dtMeshTile struct dtBVNode { - unsigned short bmin[3]; ///< Minimum bounds of the node's AABB. [(x, y, z)] - unsigned short bmax[3]; ///< Maximum bounds of the node's AABB. [(x, y, z)] + unsigned short bmin[3] = { 0 }; ///< Minimum bounds of the node's AABB. [(x, y, z)] + unsigned short bmax[3] = { 0 }; ///< Maximum bounds of the node's AABB. [(x, y, z)] int i; ///< The node's index. (Negative for escape sequence.) }; @@ -235,7 +235,7 @@ struct dtBVNode struct dtOffMeshConnection { /// The endpoints of the connection. [(ax, ay, az, bx, by, bz)] - float pos[6] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; + float pos[6] = { 0.0f }; /// The radius of the endpoints. [Limit: >= 0] float rad = 0.0f; @@ -280,65 +280,65 @@ struct dtOffMeshConnection /// @ingroup detour struct dtMeshHeader { - int magic; ///< Tile magic number. (Used to identify the data format.) - int version; ///< Tile data format version number. - int x; ///< The x-position of the tile within the dtNavMesh tile grid. (x, y, layer) - int y; ///< The y-position of the tile within the dtNavMesh tile grid. (x, y, layer) - int layer; ///< The layer of the tile within the dtNavMesh tile grid. (x, y, layer) - unsigned int userId; ///< The user defined id of the tile. - int polyCount; ///< The number of polygons in the tile. - int vertCount; ///< The number of vertices in the tile. - int maxLinkCount; ///< The number of allocated links. - int detailMeshCount; ///< The number of sub-meshes in the detail mesh. + int magic = 0; ///< Tile magic number. (Used to identify the data format.) + int version = 0; ///< Tile data format version number. + int x = 0; ///< The x-position of the tile within the dtNavMesh tile grid. (x, y, layer) + int y = 0; ///< The y-position of the tile within the dtNavMesh tile grid. (x, y, layer) + int layer = 0; ///< The layer of the tile within the dtNavMesh tile grid. (x, y, layer) + unsigned int userId = 0; ///< The user defined id of the tile. + int polyCount = 0; ///< The number of polygons in the tile. + int vertCount = 0; ///< The number of vertices in the tile. + int maxLinkCount = 0; ///< The number of allocated links. + int detailMeshCount = 0; ///< The number of sub-meshes in the detail mesh. /// The number of unique vertices in the detail mesh. (In addition to the polygon vertices.) - int detailVertCount; + int detailVertCount = 0; - int detailTriCount; ///< The number of triangles in the detail mesh. - int bvNodeCount; ///< The number of bounding volume nodes. (Zero if bounding volumes are disabled.) - int offMeshConCount; ///< The number of off-mesh connections. + int detailTriCount = 0; ///< The number of triangles in the detail mesh. + int bvNodeCount = 0; ///< The number of bounding volume nodes. (Zero if bounding volumes are disabled.) + int offMeshConCount = 0; ///< The number of off-mesh connections. - int offMeshBase; ///< The index of the first polygon which is an off-mesh connection. - float walkableHeight; ///< The height of the agents using the tile. - float walkableRadius; ///< The radius of the agents using the tile. - float walkableClimb; ///< The maximum climb height of the agents using the tile. - float bmin[3]; ///< The minimum bounds of the tile's AABB. [(x, y, z)] - float bmax[3]; ///< The maximum bounds of the tile's AABB. [(x, y, z)] + int offMeshBase = 0; ///< The index of the first polygon which is an off-mesh connection. + float walkableHeight = 0.0f; ///< The height of the agents using the tile. + float walkableRadius = 0.0f; ///< The radius of the agents using the tile. + float walkableClimb = 0.0f; ///< The maximum climb height of the agents using the tile. + float bmin[3] = { 0.0f }; ///< The minimum bounds of the tile's AABB. [(x, y, z)] + float bmax[3] = { 0.0f }; ///< The maximum bounds of the tile's AABB. [(x, y, z)] /// The bounding volume quantization factor. - float bvQuantFactor; + float bvQuantFactor = 0.0f; }; /// Defines a navigation mesh tile. /// @ingroup detour struct dtMeshTile { - unsigned int salt; ///< Counter describing modifications to the tile. + unsigned int salt = 0; ///< Counter describing modifications to the tile. - unsigned int linksFreeList; ///< Index to the next free link. - dtMeshHeader* header; ///< The tile header. - dtPoly* polys; ///< The tile polygons. [Size: dtMeshHeader::polyCount] - float* verts; ///< The tile vertices. [Size: dtMeshHeader::vertCount] - dtLink* links; ///< The tile links. [Size: dtMeshHeader::maxLinkCount] - dtPolyDetail* detailMeshes; ///< The tile's detail sub-meshes. [Size: dtMeshHeader::detailMeshCount] + unsigned int linksFreeList = 0; ///< Index to the next free link. + dtMeshHeader* header = nullptr; ///< The tile header. + dtPoly* polys = nullptr; ///< The tile polygons. [Size: dtMeshHeader::polyCount] + float* verts = nullptr; ///< The tile vertices. [Size: dtMeshHeader::vertCount] + dtLink* links = nullptr; ///< The tile links. [Size: dtMeshHeader::maxLinkCount] + dtPolyDetail* detailMeshes = nullptr; ///< The tile's detail sub-meshes. [Size: dtMeshHeader::detailMeshCount] /// The detail mesh's unique vertices. [(x, y, z) * dtMeshHeader::detailVertCount] - float* detailVerts; + float* detailVerts = nullptr; /// The detail mesh's triangles. [(vertA, vertB, vertC, triFlags) * dtMeshHeader::detailTriCount]. /// See dtDetailTriEdgeFlags and dtGetDetailTriEdgeFlags. - unsigned char* detailTris; + unsigned char* detailTris = nullptr; /// The tile bounding volume nodes. [Size: dtMeshHeader::bvNodeCount] /// (Will be null if bounding volumes are disabled.) - dtBVNode* bvTree; + dtBVNode* bvTree = nullptr; - dtOffMeshConnection** offMeshCons; ///< The tile off-mesh connections. [Size: dtMeshHeader::offMeshConCount] + dtOffMeshConnection** offMeshCons = nullptr; ///< The tile off-mesh connections. [Size: dtMeshHeader::offMeshConCount] - unsigned char* data; ///< The tile data. (Not directly accessed under normal situations.) - int dataSize; ///< Size of the tile data. - int flags; ///< Tile flags. (See: #dtTileFlags) - dtMeshTile* next; ///< The next free tile, or the next tile in the spatial grid. + unsigned char* data = nullptr; ///< The tile data. (Not directly accessed under normal situations.) + int dataSize = 0; ///< Size of the tile data. + int flags = 0; ///< Tile flags. (See: #dtTileFlags) + dtMeshTile* next = nullptr; ///< The next free tile, or the next tile in the spatial grid. private: dtMeshTile(const dtMeshTile&); dtMeshTile& operator=(const dtMeshTile&); @@ -359,11 +359,11 @@ inline int dtGetDetailTriEdgeFlags(unsigned char triFlags, int edgeIndex) /// @ingroup detour struct dtNavMeshParams { - float orig[3]; ///< The world space origin of the navigation mesh's tile space. [(x, y, z)] - float tileWidth; ///< The width of each tile. (Along the x-axis.) - float tileHeight; ///< The height of each tile. (Along the z-axis.) - int maxTiles; ///< The maximum number of tiles the navigation mesh can contain. This and maxPolys are used to calculate how many bits are needed to identify tiles and polygons uniquely. - int maxPolys; ///< The maximum number of polygons each tile can contain. This and maxTiles are used to calculate how many bits are needed to identify tiles and polygons uniquely. + float orig[3] = { 0.0f }; ///< The world space origin of the navigation mesh's tile space. [(x, y, z)] + float tileWidth = 0.0f; ///< The width of each tile. (Along the x-axis.) + float tileHeight = 0.0f; ///< The height of each tile. (Along the z-axis.) + int maxTiles = 0; ///< The maximum number of tiles the navigation mesh can contain. This and maxPolys are used to calculate how many bits are needed to identify tiles and polygons uniquely. + int maxPolys = 0; ///< The maximum number of polygons each tile can contain. This and maxTiles are used to calculate how many bits are needed to identify tiles and polygons uniquely. }; /// A navigation mesh based on tiles of convex polygons. @@ -700,20 +700,20 @@ private: void closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest, bool* posOverPoly) const; dtNavMeshParams m_params; ///< Current initialization params. TODO: do not store this info twice. - float m_orig[3]; ///< Origin of the tile (0,0) - float m_tileWidth, m_tileHeight; ///< Dimensions of each tile. - int m_maxTiles; ///< Max number of tiles. - int m_tileLutSize; ///< Tile hash lookup size (must be pot). - int m_tileLutMask; ///< Tile hash lookup mask. + float m_orig[3] = { 0.0f }; ///< Origin of the tile (0,0) + float m_tileWidth = 0.0f, m_tileHeight = 0.0f; ///< Dimensions of each tile. + int m_maxTiles = 0; ///< Max number of tiles. + int m_tileLutSize = 0; ///< Tile hash lookup size (must be pot). + int m_tileLutMask = 0; ///< Tile hash lookup mask. - dtMeshTile** m_posLookup; ///< Tile hash lookup. - dtMeshTile* m_nextFree; ///< Freelist of tiles. - dtMeshTile* m_tiles; ///< List of tiles. + dtMeshTile** m_posLookup = nullptr; ///< Tile hash lookup. + dtMeshTile* m_nextFree = nullptr; ///< Freelist of tiles. + dtMeshTile* m_tiles = nullptr; ///< List of tiles. #ifndef DT_POLYREF64 - unsigned int m_saltBits; ///< Number of salt bits in the tile ID. - unsigned int m_tileBits; ///< Number of tile bits in the tile ID. - unsigned int m_polyBits; ///< Number of poly bits in the tile ID. + unsigned int m_saltBits = 0; ///< Number of salt bits in the tile ID. + unsigned int m_tileBits = 0; ///< Number of tile bits in the tile ID. + unsigned int m_polyBits = 0; ///< Number of poly bits in the tile ID. #endif friend class dtNavMeshQuery; diff --git a/main/source/detour/Include/DetourNavMeshQuery.h b/main/source/detour/Include/DetourNavMeshQuery.h index e43dd3f4..57ba6538 100644 --- a/main/source/detour/Include/DetourNavMeshQuery.h +++ b/main/source/detour/Include/DetourNavMeshQuery.h @@ -34,9 +34,9 @@ /// @ingroup detour class dtQueryFilter { - float m_areaCost[DT_MAX_AREAS]; ///< Cost per area type. (Used by default implementation.) - unsigned int m_includeFlags; ///< Flags for polygons that can be visited. (Used by default implementation.) - unsigned int m_excludeFlags; ///< Flags for polygons that should not be visted. (Used by default implementation.) + float m_areaCost[DT_MAX_AREAS] = { 1.0f }; ///< Cost per area type. (Used by default implementation.) + unsigned int m_includeFlags = 0; ///< Flags for polygons that can be visited. (Used by default implementation.) + unsigned int m_excludeFlags = 0; ///< Flags for polygons that should not be visted. (Used by default implementation.) public: dtQueryFilter(); @@ -130,25 +130,25 @@ public: struct dtRaycastHit { /// The hit parameter. (FLT_MAX if no wall hit.) - float t; + float t = 0.0f; /// hitNormal The normal of the nearest wall hit. [(x, y, z)] - float hitNormal[3]; + float hitNormal[3] = { 0.0f }; /// The index of the edge on the final polygon where the wall was hit. - int hitEdgeIndex; + int hitEdgeIndex = 0; /// Pointer to an array of reference ids of the visited polygons. [opt] - dtPolyRef* path; + dtPolyRef* path = nullptr; /// The number of visited polygons. [opt] - int pathCount; + int pathCount = 0; /// The maximum number of polygons the @p path array can hold. - int maxPath; + int maxPath = 0; /// The cost of the path until hit. - float pathCost; + float pathCost = 0; }; /// Provides custom polygon query behavior. diff --git a/main/source/detour/Include/DetourNode.h b/main/source/detour/Include/DetourNode.h index db097470..7bcbeeb1 100644 --- a/main/source/detour/Include/DetourNode.h +++ b/main/source/detour/Include/DetourNode.h @@ -35,13 +35,13 @@ static const int DT_NODE_PARENT_BITS = 24; static const int DT_NODE_STATE_BITS = 2; struct dtNode { - float pos[3]; ///< Position of the node. - float cost; ///< Cost from previous node to current node. - float total; ///< Cost up to the node. + float pos[3] = { 0.0f }; ///< Position of the node. + float cost = 0.0f; ///< Cost from previous node to current node. + float total = 0.0f; ///< Cost up to the node. unsigned int pidx : DT_NODE_PARENT_BITS; ///< Index to parent node. unsigned int state : DT_NODE_STATE_BITS; ///< extra state information. A polyRef can have multiple nodes with different extra info. see DT_MAX_STATES_PER_NODE unsigned int flags : 3; ///< Node flags. A combination of dtNodeFlags. - dtPolyRef id; ///< Polygon ref the node corresponds to. + dtPolyRef id = 0; ///< Polygon ref the node corresponds to. }; static const int DT_MAX_STATES_PER_NODE = 1 << DT_NODE_STATE_BITS; // number of extra states per node. See dtNode::state @@ -97,12 +97,12 @@ private: dtNodePool(const dtNodePool&); dtNodePool& operator=(const dtNodePool&); - dtNode* m_nodes; - dtNodeIndex* m_first; - dtNodeIndex* m_next; - const int m_maxNodes; - const int m_hashSize; - int m_nodeCount; + dtNode* m_nodes = nullptr; + dtNodeIndex* m_first = nullptr; + dtNodeIndex* m_next = nullptr; + const int m_maxNodes = 0; + const int m_hashSize = 0; + int m_nodeCount = 0; }; class dtNodeQueue @@ -159,9 +159,9 @@ private: void bubbleUp(int i, dtNode* node); void trickleDown(int i, dtNode* node); - dtNode** m_heap; - const int m_capacity; - int m_size; + dtNode** m_heap = nullptr; + const int m_capacity = 0; + int m_size = 0; }; diff --git a/main/source/mod/AvHAICommander.cpp b/main/source/mod/AvHAICommander.cpp index b6d9ead9..dabcf8d4 100644 --- a/main/source/mod/AvHAICommander.cpp +++ b/main/source/mod/AvHAICommander.cpp @@ -145,7 +145,7 @@ bool AICOMM_UpgradeStructure(AvHAIPlayer* pBot, AvHAIBuildableStructure* Structu bool AICOMM_RecycleStructure(AvHAIPlayer* pBot, AvHAIBuildableStructure* StructureToRecycle) { - if (!StructureToRecycle || StructureToRecycle->StructureType == STRUCTURE_MARINE_DEPLOYEDMINE) { return false; } + if (!StructureToRecycle || StructureToRecycle->StructureType == STRUCTURE_MARINE_DEPLOYEDMINE || UTIL_StructureIsRecycling(StructureToRecycle->edict)) { return false; } return AICOMM_ResearchTech(pBot, StructureToRecycle, BUILD_RECYCLE); } @@ -956,11 +956,11 @@ bool AICOMM_IsRequestValid(ai_commander_request* Request) return !IsPlayerBuffed(Requestor) && !AITAC_ItemExistsInLocation(Requestor->v.origin, DEPLOYABLE_ITEM_CATALYSTS, RequestorTeam, AI_REACHABILITY_MARINE, 0.0f, UTIL_MetresToGoldSrcUnits(5.0f), false); case BUILD_PHASEGATE: - return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, STRUCTURE_MARINE_PHASEGATE, Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, STRUCTURE_MARINE_PHASEGATE, Requestor->v.origin, UTIL_MetresToGoldSrcUnits(10.0f)); case BUILD_TURRET_FACTORY: - return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, (STRUCTURE_MARINE_TURRETFACTORY | STRUCTURE_MARINE_ADVTURRETFACTORY), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, (STRUCTURE_MARINE_TURRETFACTORY | STRUCTURE_MARINE_ADVTURRETFACTORY), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(15.0f)); case BUILD_ARMORY: - return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, (STRUCTURE_MARINE_ARMOURY | STRUCTURE_MARINE_ADVARMOURY), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, (STRUCTURE_MARINE_ARMOURY | STRUCTURE_MARINE_ADVARMOURY), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(15.0f)); case BUILD_COMMANDSTATION: return !AITAC_IsStructureOfTypeNearLocation(RequestorTeam, STRUCTURE_MARINE_COMMCHAIR, Requestor->v.origin, UTIL_MetresToGoldSrcUnits(10.0f)); case BUILD_SCAN: @@ -2927,305 +2927,124 @@ bool AICOMM_CheckForNextSupportAction(AvHAIPlayer* pBot) } - if (NextRequest->RequestType == BUILD_PHASEGATE) + + if (NextRequest->RequestType == BUILD_PHASEGATE && !AITAC_ResearchIsComplete(CommanderTeam, TECH_RESEARCH_PHASETECH)) { - if (!AITAC_ResearchIsComplete(CommanderTeam, TECH_RESEARCH_PHASETECH)) - { - char msg[128]; - sprintf(msg, "We haven't got phase tech yet, %s. Ask again later.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - - if (pBot->Player->GetResources() < BALANCE_VAR(kPhaseGateCost)) - { - if (!NextRequest->bAcknowledged) - { - char msg[128]; - sprintf(msg, "Just waiting on resources, %s. Will drop asap.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bAcknowledged = true; - return false; - } - return false; - } - - Vector IdealDeployLocation = Requestor->v.origin + (UTIL_GetForwardVector2D(Requestor->v.angles) * 75.0f); - Vector ProjectedDeployLocation = AdjustPointForPathfinding(IdealDeployLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE)); - - if (!vIsZero(ProjectedDeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_PHASEGATE, ProjectedDeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - Vector DeployLocation = UTIL_GetRandomPointOnNavmeshInRadius(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_PHASEGATE, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - DeployLocation = UTIL_GetRandomPointOnNavmeshInRadiusIgnoreReachability(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_PHASEGATE, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - + char msg[128]; + sprintf(msg, "We haven't got phase tech yet, %s. Ask again later.", STRING(Requestor->v.netname)); + BotSay(pBot, true, 0.5f, msg); + NextRequest->bResponded = true; return false; - } - if (NextRequest->RequestType == BUILD_ARMORY || NextRequest->RequestType == BUILD_COMMANDSTATION) + if (NextRequest->RequestType == BUILD_OBSERVATORY && !AITAC_ResearchIsComplete(CommanderTeam, TECH_RESEARCH_PHASETECH)) { - float RequiredRes = (NextRequest->RequestType == BUILD_ARMORY) ? BALANCE_VAR(kArmoryCost) : BALANCE_VAR(kCommandStationCost); + DeployableSearchFilter ArmouryFilter; + ArmouryFilter.DeployableTeam = CommanderTeam; + ArmouryFilter.DeployableTypes = (STRUCTURE_MARINE_ARMOURY | STRUCTURE_MARINE_ADVARMOURY); + ArmouryFilter.IncludeStatusFlags = STRUCTURE_STATUS_COMPLETED; + ArmouryFilter.ExcludeStatusFlags = STRUCTURE_STATUS_RECYCLING; - if (pBot->Player->GetResources() < RequiredRes) - { - if (!NextRequest->bAcknowledged) - { - char msg[128]; - sprintf(msg, "Just waiting on resources, %s. Will drop asap.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bAcknowledged = true; - return false; - } - return false; - } + bool bHasArmoury = AITAC_DeployableExistsAtLocation(ZERO_VECTOR, &ArmouryFilter); - Vector IdealDeployLocation = Requestor->v.origin + (UTIL_GetForwardVector2D(Requestor->v.angles) * 75.0f); - Vector ProjectedDeployLocation = AdjustPointForPathfinding(IdealDeployLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE)); - - AvHAIDeployableStructureType StructureToDeploy = (NextRequest->RequestType == BUILD_ARMORY) ? STRUCTURE_MARINE_ARMOURY : STRUCTURE_MARINE_COMMCHAIR; - - if (!vIsZero(ProjectedDeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, ProjectedDeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - Vector DeployLocation = UTIL_GetRandomPointOnNavmeshInRadius(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - DeployLocation = UTIL_GetRandomPointOnNavmeshInRadiusIgnoreReachability(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - } - else + if (!bHasArmoury) { char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); + sprintf(msg, "We haven't got an armory yet, %s. Ask again later.", STRING(Requestor->v.netname)); BotSay(pBot, true, 0.5f, msg); NextRequest->bResponded = true; return false; } - - return false; - } - if (NextRequest->RequestType == BUILD_TURRET_FACTORY) + + float RequiredRes = 0.0f; + AvHAIDeployableStructureType StructureToDeploy = STRUCTURE_NONE; + + switch (NextRequest->RequestType) { - if (pBot->Player->GetResources() < BALANCE_VAR(kTurretFactoryCost)) - { - if (!NextRequest->bAcknowledged) - { - char msg[128]; - sprintf(msg, "Just waiting on resources, %s. Will drop asap.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bAcknowledged = true; - return false; - } - return false; - } - - Vector IdealDeployLocation = Requestor->v.origin + (UTIL_GetForwardVector2D(Requestor->v.angles) * 75.0f); - Vector ProjectedDeployLocation = AdjustPointForPathfinding(IdealDeployLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE)); - - if (!vIsZero(ProjectedDeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRETFACTORY, ProjectedDeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - Vector DeployLocation = UTIL_GetRandomPointOnNavmeshInRadius(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRETFACTORY, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - } - - DeployLocation = UTIL_GetRandomPointOnNavmeshInRadiusIgnoreReachability(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - - if (!vIsZero(DeployLocation)) - { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRETFACTORY, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } - - return false; - + case BUILD_ARMORY: + RequiredRes = BALANCE_VAR(kArmoryCost); + StructureToDeploy = STRUCTURE_MARINE_ARMOURY; + break; + case BUILD_COMMANDSTATION: + RequiredRes = BALANCE_VAR(kCommandStationCost); + StructureToDeploy = STRUCTURE_MARINE_COMMCHAIR; + break; + case BUILD_OBSERVATORY: + RequiredRes = BALANCE_VAR(kObservatoryCost); + StructureToDeploy = STRUCTURE_MARINE_OBSERVATORY; + break; + case BUILD_TURRET_FACTORY: + RequiredRes = BALANCE_VAR(kTurretFactoryCost); + StructureToDeploy = STRUCTURE_MARINE_TURRETFACTORY; + case BUILD_TURRET: + RequiredRes = BALANCE_VAR(kSentryCost); + StructureToDeploy = STRUCTURE_MARINE_TURRET; + case BUILD_PHASEGATE: + RequiredRes = BALANCE_VAR(kPhaseGateCost); + StructureToDeploy = STRUCTURE_MARINE_PHASEGATE; + default: + break; } - if (NextRequest->RequestType == BUILD_TURRET) + // Invalid commander request + if (StructureToDeploy == STRUCTURE_NONE) { - if (pBot->Player->GetResources() < BALANCE_VAR(kSentryCost)) + NextRequest->bResponded = true; + return false; + } + + if (pBot->Player->GetResources() < RequiredRes) + { + if (!NextRequest->bAcknowledged) { - if (!NextRequest->bAcknowledged) - { - char msg[128]; - sprintf(msg, "Just waiting on resources, %s. Will drop asap.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bAcknowledged = true; - return false; - } + char msg[128]; + sprintf(msg, "Just waiting on resources, %s. Will drop asap.", STRING(Requestor->v.netname)); + BotSay(pBot, true, 0.5f, msg); + NextRequest->bAcknowledged = true; return false; } + return false; + } - Vector IdealDeployLocation = Requestor->v.origin + (UTIL_GetForwardVector2D(Requestor->v.angles) * 75.0f); - Vector ProjectedDeployLocation = AdjustPointForPathfinding(IdealDeployLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE)); + Vector IdealDeployLocation = Requestor->v.origin + (UTIL_GetForwardVector2D(Requestor->v.angles) * 75.0f); + Vector ProjectedDeployLocation = AdjustPointForPathfinding(IdealDeployLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE)); - if (!vIsZero(ProjectedDeployLocation)) + if (!vIsZero(ProjectedDeployLocation)) + { + bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, ProjectedDeployLocation, STRUCTURE_PURPOSE_NONE); + + if (bSuccess) { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRET, ProjectedDeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } + NextRequest->bResponded = true; + return true; } + } - Vector DeployLocation = UTIL_GetRandomPointOnNavmeshInRadius(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + Vector DeployLocation = UTIL_GetRandomPointOnNavmeshInRadius(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - if (!vIsZero(DeployLocation)) + if (!vIsZero(DeployLocation)) + { + bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, DeployLocation, STRUCTURE_PURPOSE_NONE); + + if (bSuccess) { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRET, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } + NextRequest->bResponded = true; + return true; } + } - DeployLocation = UTIL_GetRandomPointOnNavmeshInRadiusIgnoreReachability(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + DeployLocation = UTIL_GetRandomPointOnNavmeshInRadiusIgnoreReachability(GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE), Requestor->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); - if (!vIsZero(DeployLocation)) + if (!vIsZero(DeployLocation)) + { + bool bSuccess = AICOMM_DeployStructure(pBot, StructureToDeploy, DeployLocation, STRUCTURE_PURPOSE_NONE); + + if (bSuccess) { - bool bSuccess = AICOMM_DeployStructure(pBot, STRUCTURE_MARINE_TURRET, DeployLocation, STRUCTURE_PURPOSE_NONE); - - if (bSuccess) - { - NextRequest->bResponded = true; - return true; - } - else - { - char msg[128]; - sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); - BotSay(pBot, true, 0.5f, msg); - NextRequest->bResponded = true; - return false; - } + NextRequest->bResponded = true; + return true; } else { @@ -3235,9 +3054,14 @@ bool AICOMM_CheckForNextSupportAction(AvHAIPlayer* pBot) NextRequest->bResponded = true; return false; } - + } + else + { + char msg[128]; + sprintf(msg, "I can't find a good deploy spot, %s. Try again elsewhere.", STRING(Requestor->v.netname)); + BotSay(pBot, true, 0.5f, msg); + NextRequest->bResponded = true; return false; - } return false; @@ -3679,6 +3503,10 @@ void AICOMM_ReceiveChatRequest(AvHAIPlayer* Commander, edict_t* Requestor, const { NewRequestType = BUILD_COMMANDSTATION; } + else if (!stricmp(Request, "obs") || !stricmp(Request, "observatory")) + { + NewRequestType = BUILD_OBSERVATORY; + } if (NewRequestType == MESSAGE_NULL) { return; } diff --git a/main/source/mod/AvHAIMath.cpp b/main/source/mod/AvHAIMath.cpp index f994a361..13d823b4 100644 --- a/main/source/mod/AvHAIMath.cpp +++ b/main/source/mod/AvHAIMath.cpp @@ -815,6 +815,8 @@ float UTIL_CalculateSlopeAngleBetweenPoints(const Vector StartPoint, const Vecto // Function to check if a finite line intersects with an AABB bool vlineIntersectsAABB(Vector lineStart, Vector lineEnd, Vector BoxMinPosition, Vector BoxMaxPosition) { + if (vPointOverlaps3D(lineStart, BoxMinPosition, BoxMaxPosition) || vPointOverlaps3D(lineEnd, BoxMinPosition, BoxMaxPosition)) { return true; } + Vector RayDir = UTIL_GetVectorNormal(lineEnd - lineStart); float LineLength = vDist3D(lineStart, lineEnd); Vector dirfrac; diff --git a/main/source/mod/AvHAINavigation.cpp b/main/source/mod/AvHAINavigation.cpp index 3827e949..3b55d255 100644 --- a/main/source/mod/AvHAINavigation.cpp +++ b/main/source/mod/AvHAINavigation.cpp @@ -2522,6 +2522,27 @@ void CheckAndHandleDoorObstruction(AvHAIPlayer* pBot) DoorTrigger* Trigger = UTIL_GetNearestDoorTrigger(pBot->CurrentFloorPosition, Door, nullptr, true); + // Fail-safe: If the bot cannot reach any trigger for whatever reason, then telepathically trigger one otherwise it will be stuck forever + if (!Trigger) + { + for (auto it = Door->TriggerEnts.begin(); it != Door->TriggerEnts.end(); it++) + { + if (it->NextActivationTime > gpGlobals->time) + { + Trigger = nullptr; + break; + } + + Trigger = &(*it); + } + + if (Trigger) + { + Trigger->Entity->Use(pBot->Player, pBot->Player, USE_TOGGLE, 0.0f); + return; + } + } + if (Trigger && Trigger->NextActivationTime < gpGlobals->time) { if (Trigger->TriggerType == DOOR_BUTTON) @@ -2562,45 +2583,56 @@ edict_t* UTIL_GetDoorBlockingPathPoint(AvHAIPlayer* pBot, bot_path_node* PathNod { Vector TargetLoc = Vector(FromLoc.x, FromLoc.y, PathNode->requiredZ); - UTIL_TraceLine(FromLoc, TargetLoc, ignore_monsters, dont_ignore_glass, (pBot!= nullptr) ? pBot->Edict->v.pContainingEntity : nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } - } Vector TargetLoc2 = Vector(ToLoc.x, ToLoc.y, PathNode->requiredZ); - UTIL_TraceLine(TargetLoc, TargetLoc2, ignore_monsters, dont_ignore_glass, (pBot != nullptr) ? pBot->Edict->v.pContainingEntity : nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(TargetLoc, TargetLoc2, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(TargetLoc, TargetLoc2, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(TargetLoc, TargetLoc2, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } @@ -2610,70 +2642,90 @@ edict_t* UTIL_GetDoorBlockingPathPoint(AvHAIPlayer* pBot, bot_path_node* PathNod { Vector TargetLoc = Vector(ToLoc.x, ToLoc.y, FromLoc.z); - UTIL_TraceLine(FromLoc, TargetLoc, ignore_monsters, dont_ignore_glass, (pBot != nullptr) ? pBot->Edict->v.pContainingEntity : nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } - UTIL_TraceLine(TargetLoc, ToLoc + Vector(0.0f, 0.0f, 10.0f), ignore_monsters, dont_ignore_glass, (pBot != nullptr) ? pBot->Edict->v.pContainingEntity : nullptr, &doorHit); + Vector NextTargetLoc = ToLoc + Vector(0.0f, 0.0f, 10.0f); if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(TargetLoc, NextTargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(TargetLoc, NextTargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(TargetLoc, NextTargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } } + Vector StartTrace = FromLoc + Vector(0.0f, 0.0f, 16.0f); Vector EndTrace = ToLoc + Vector(0.0f, 0.0f, 16.0f); - UTIL_TraceLine(StartTrace, EndTrace, ignore_monsters, dont_ignore_glass, (pBot != nullptr) ? pBot->Edict->v.pContainingEntity : nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(StartTrace, EndTrace, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(StartTrace, EndTrace, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(StartTrace, EndTrace, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } - return nullptr; } @@ -2908,45 +2960,56 @@ edict_t* UTIL_GetDoorBlockingPathPoint(const Vector FromLocation, const Vector T { Vector TargetLoc = Vector(FromLoc.x, FromLoc.y, ToLocation.z); - UTIL_TraceLine(FromLoc, TargetLoc, ignore_monsters, dont_ignore_glass, nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0 ) + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; } } + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; + } + } } Vector TargetLoc2 = Vector(ToLoc.x, ToLoc.y, ToLocation.z); - UTIL_TraceLine(TargetLoc, TargetLoc2, ignore_monsters, dont_ignore_glass, nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc2, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(FromLoc, TargetLoc2, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc2, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } @@ -2956,64 +3019,84 @@ edict_t* UTIL_GetDoorBlockingPathPoint(const Vector FromLocation, const Vector T { Vector TargetLoc = Vector(ToLoc.x, ToLoc.y, FromLoc.z); - UTIL_TraceLine(FromLoc, TargetLoc, ignore_monsters, dont_ignore_glass, nullptr, &doorHit); - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } - UTIL_TraceLine(TargetLoc, ToLoc + Vector(0.0f, 0.0f, 10.0f), ignore_monsters, dont_ignore_glass, nullptr, &doorHit); - - if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(TargetLoc, ToLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(TargetLoc, ToLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(TargetLoc, ToLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } + } - UTIL_TraceLine(FromLoc, ToLoc + Vector(0.0f, 0.0f, 10.0f), ignore_monsters, dont_ignore_glass, nullptr, &doorHit); + Vector TargetLoc = ToLoc + Vector(0.0f, 0.0f, 10.0f); if (!FNullEnt(SearchDoor)) { - if (doorHit.pHit == SearchDoor) { return doorHit.pHit; } + if (vlineIntersectsAABB(FromLoc, TargetLoc, SearchDoor->v.absmin, SearchDoor->v.absmax)) + { + return SearchDoor; + } } else { - if (!FNullEnt(doorHit.pHit)) + for (auto it = NavDoors.begin(); it != NavDoors.end(); it++) { - if (strcmp(STRING(doorHit.pHit->v.classname), "func_door") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_seethroughdoor") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "func_door_rotating") == 0 - || strcmp(STRING(doorHit.pHit->v.classname), "avhweldable") == 0) + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->DoorEdict->v.absmin, it->DoorEdict->v.absmax)) { - return doorHit.pHit; + return it->DoorEdict; + } + } + + for (auto it = NavWeldableObstacles.begin(); it != NavWeldableObstacles.end(); it++) + { + if (vlineIntersectsAABB(FromLoc, TargetLoc, it->WeldableEdict->v.absmin, it->WeldableEdict->v.absmax)) + { + return it->WeldableEdict; } } } @@ -3406,7 +3489,9 @@ void GroundMove(AvHAIPlayer* pBot, const Vector StartPoint, const Vector EndPoin LeapDist = UTIL_MetresToGoldSrcUnits(1.0f); } - if (CanBotLeap(pBot) && vDist2DSq(pBot->Edict->v.origin, EndPoint) > sqrf(LeapDist) && UTIL_PointIsDirectlyReachable(pBot->BotNavInfo.NavProfile, pBot->Edict->v.origin, EndPoint)) + bool bIsAmbush = (pBot->BotNavInfo.MoveStyle == MOVESTYLE_AMBUSH); + + if (!bIsAmbush && CanBotLeap(pBot) && vDist2DSq(pBot->Edict->v.origin, EndPoint) > sqrf(LeapDist) && UTIL_PointIsDirectlyReachable(pBot->BotNavInfo.NavProfile, pBot->Edict->v.origin, EndPoint)) { float CombatWeaponEnergyCost = GetEnergyCostForWeapon(pBot->DesiredCombatWeapon); float RequiredEnergy = (CombatWeaponEnergyCost + GetLeapCost(pBot)) - (GetPlayerEnergyRegenPerSecond(pEdict) * 0.5f); // We allow for around .5s of regen time as well @@ -7770,7 +7855,6 @@ void UTIL_PopulateTriggersForEntity(edict_t* Entity, vector& Trigge void UTIL_PopulateWeldableObstacles() { - UTIL_ClearWeldablesData(); CBaseEntity* currWeldable = NULL; while (((currWeldable = UTIL_FindEntityByClassname(currWeldable, "avhweldable")) != NULL)) @@ -8394,6 +8478,7 @@ void UTIL_PopulateDoors() NewDoor.DoorEntity = ToggleRef; NewDoor.DoorEdict = DoorEnt->edict(); NewDoor.CurrentState = ToggleRef->m_toggle_state; + NewDoor.DoorName = STRING(NewDoor.DoorEdict->v.targetname); const char* DoorName = STRING(NewDoor.DoorEdict->v.targetname); diff --git a/main/source/mod/AvHAINavigation.h b/main/source/mod/AvHAINavigation.h index ed682b64..56be92d2 100644 --- a/main/source/mod/AvHAINavigation.h +++ b/main/source/mod/AvHAINavigation.h @@ -88,6 +88,7 @@ typedef struct _NAV_DOOR vector StopPoints; // Where does this door/platform stop when triggered? NavDoorType DoorType = DOORTYPE_DOOR; vector AffectedConnections; + const char* DoorName; } nav_door; typedef struct _NAV_WELDABLE diff --git a/main/source/mod/AvHAIPlayer.cpp b/main/source/mod/AvHAIPlayer.cpp index 540ba70e..6f876c6c 100644 --- a/main/source/mod/AvHAIPlayer.cpp +++ b/main/source/mod/AvHAIPlayer.cpp @@ -465,11 +465,18 @@ void BotAlienAttackNonPlayerTarget(AvHAIPlayer* pBot, edict_t* Target) } } - if (IsPlayerLerk(pBot->Edict)) + bool bPlayerCloaked = pBot->Player->GetOpacity() < 0.5f && !GetHasUpgrade(pBot->Edict->v.iuser4, MASK_SENSORY_NEARBY); + + if (IsPlayerLerk(pBot->Edict) || bPlayerCloaked) { if (AITAC_ShouldBotBeCautious(pBot)) { - MoveTo(pBot, AttackPoint, MOVESTYLE_HIDE, 100.0f); + if (bPlayerCloaked) + { + pBot->BotNavInfo.bShouldWalk = true; + } + + MoveTo(pBot, AttackPoint, MOVESTYLE_AMBUSH, 100.0f); } else { @@ -1398,7 +1405,9 @@ void BotUpdateView(AvHAIPlayer* pBot) float bot_reaction_time = (IsPlayerMarine(pBot->Edict)) ? pBot->BotSkillSettings.marine_bot_reaction_time : pBot->BotSkillSettings.alien_bot_reaction_time; - bool bIsVisible = (bInFOV && (bHasLOS || bIsTracked)); + bool bIsPlayerInvisible = UTIL_IsCloakedPlayerInvisible(pBot->Edict, PlayerRef); + + bool bIsVisible = !bIsPlayerInvisible && (bInFOV && (bHasLOS || bIsTracked)); if (bIsVisible != TrackingInfo->bIsVisible) { @@ -1416,7 +1425,9 @@ void BotUpdateView(AvHAIPlayer* pBot) TrackingInfo->bHasLOS = bHasLOS; - if (bInFOV && (bHasLOS || bIsTracked)) + bool bCanSeeEnemy = (!bIsPlayerInvisible && bHasLOS); + + if (bInFOV && (bCanSeeEnemy || bIsTracked)) { Vector FloorLocation = UTIL_GetEntityGroundLocation(Enemy); Vector BotVelocity = Enemy->v.velocity; @@ -1462,7 +1473,7 @@ void BotUpdateView(AvHAIPlayer* pBot) continue; } - if (!bInFOV || !bHasLOS) + if (!bInFOV || !bCanSeeEnemy) { if (gpGlobals->time < TrackingInfo->EndTrackingTime) { @@ -1540,6 +1551,35 @@ void BotUpdateView(AvHAIPlayer* pBot) } } +bool UTIL_IsCloakedPlayerInvisible(edict_t* Observer, AvHPlayer* Player) +{ + if (Player->GetOpacity() > 0.6f) { return false; } + + if (Player->GetIsCloaked()) { return true; } + + switch (Player->GetUser3()) + { + case AVH_USER3_ALIEN_PLAYER1: + case AVH_USER3_ALIEN_PLAYER2: + case AVH_USER3_ALIEN_PLAYER3: + { + if (Player->GetOpacity() < 0.3f) { return true; } + + return (vDist3DSq(Observer->v.origin, Player->pev->origin) > sqrf(UTIL_MetresToGoldSrcUnits(10.0f)) || Player->pev->velocity.Length2D() < 50.0f); + } + case AVH_USER3_ALIEN_PLAYER4: + case AVH_USER3_ALIEN_PLAYER5: + { + if (Player->GetOpacity() > 0.4f) { return false; } + if (Player->GetOpacity() < 0.2f) { return true; } + + return vDist3DSq(Observer->v.origin, Player->pev->origin) > sqrf(UTIL_MetresToGoldSrcUnits(10.0f)); + } + } + + return false; +} + void BotClearEnemyTrackingInfo(enemy_status* TrackingInfo) { TrackingInfo->bIsVisible = false; @@ -1848,64 +1888,11 @@ void EndBotFrame(AvHAIPlayer* pBot) void CustomThink(AvHAIPlayer* pBot) { - if (IsPlayerMarine(pBot->Player)) + if (IsPlayerMarine(pBot->Edict)) { return; } + + if (!PlayerHasAlienUpgradeOfType(pBot->Edict, HIVE_TECH_SENSORY)) { - if (!PlayerHasWeapon(pBot->Player, WEAPON_MARINE_MINES)) - { - AvHAIDroppedItem* NearestMines = AITAC_FindClosestItemToLocation(pBot->Edict->v.origin, DEPLOYABLE_ITEM_MINES, pBot->Player->GetTeam(), AI_REACHABILITY_MARINE, 0.0f, 5000.0f, false); - - if (NearestMines) - { - AITASK_SetPickupTask(pBot, &pBot->PrimaryBotTask, NearestMines->edict, true); - } - } - else - { - DeployableSearchFilter MineStructureFilter; - MineStructureFilter.DeployableTeam = pBot->Player->GetTeam(); - MineStructureFilter.DeployableTypes = STRUCTURE_MARINE_INFANTRYPORTAL; - MineStructureFilter.ReachabilityTeam = pBot->Player->GetTeam(); - MineStructureFilter.ReachabilityFlags = AI_REACHABILITY_MARINE; - - AvHAIBuildableStructure NearestIP = AITAC_FindClosestDeployableToLocation(pBot->Edict->v.origin, &MineStructureFilter); - - if (NearestIP.IsValid()) - { - AITASK_SetMineStructureTask(pBot, &pBot->PrimaryBotTask, NearestIP.edict, true); - } - } - - BotProgressTask(pBot, &pBot->PrimaryBotTask); - - return; - } - - - if (IsPlayerMarine(pBot->Player)) - { - pBot->CurrentEnemy = BotGetNextEnemyTarget(pBot); - - if (pBot->CurrentEnemy < 0) - { - MoveTo(pBot, AITAC_GetTeamStartingLocation(AIMGR_GetEnemyTeam(pBot->Player->GetTeam())), MOVESTYLE_NORMAL); - } - else - { - MarineCombatThink(pBot); - } - - return; - } - - if (!IsPlayerOnos(pBot->Edict)) - { - if (pBot->Player->GetResources() < BALANCE_VAR(kOnosCost)) - { - pBot->Player->GiveResources(70.0f); - } - - BotEvolveLifeform(pBot, pBot->CurrentFloorPosition, ALIEN_LIFEFORM_FIVE); - + BotEvolveUpgrade(pBot, pBot->CurrentFloorPosition, ALIEN_EVOLUTION_TEN); return; } @@ -1918,8 +1905,7 @@ void CustomThink(AvHAIPlayer* pBot) else { AlienCombatThink(pBot); - } - + } } void DroneThink(AvHAIPlayer* pBot) @@ -2344,6 +2330,9 @@ AvHAICombatStrategy GetSkulkCombatStrategyForTarget(AvHAIPlayer* pBot, enemy_sta return COMBAT_STRATEGY_ATTACK; } + // We're invisible, so go get them + if (pBot->Player->GetOpacity() < 0.1f) { return COMBAT_STRATEGY_ATTACK; } + AvHTeamNumber BotTeam = pBot->Player->GetTeam(); AvHTeamNumber EnemyTeam = AIMGR_GetEnemyTeam(BotTeam); @@ -2955,7 +2944,7 @@ bool RegularMarineCombatThink(AvHAIPlayer* pBot) AvHAIBuildableStructure NearestArmouryRef = AITAC_FindClosestDeployableToLocation(pBot->Edict->v.origin, &NearestArmoury); - if (NearestArmouryRef.IsValid() && !IsAreaAffectedBySpores(NearestArmouryRef.Location)) + if (NearestArmouryRef.IsValid() && (!IsAreaAffectedBySpores(NearestArmouryRef.Location) || PlayerHasHeavyArmour(pBot->Edict))) { if (!TrackedEnemyRef->bHasLOS || (IsPlayerAlien(pBot->Edict) && vDist2DSq(NearestArmouryRef.Location, CurrentEnemy->v.origin) > sqrf(UTIL_MetresToGoldSrcUnits(10.0f)))) { @@ -3299,7 +3288,7 @@ void AIPlayerSetMarineSweeperPrimaryTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Tas AvHAIBuildableStructure UnbuiltIP = AITAC_FindClosestDeployableToLocation(CommChairLocation, &StructureFilter); - if (UnbuiltIP.IsValid()) + if (UnbuiltIP.IsValid() && (!IsAreaAffectedBySpores(UnbuiltIP.Location) || PlayerHasHeavyArmour(pBot->Edict))) { AITASK_SetBuildTask(pBot, Task, UnbuiltIP.edict, true); return; @@ -3310,7 +3299,7 @@ void AIPlayerSetMarineSweeperPrimaryTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Tas AvHAIBuildableStructure UnbuiltStructure = AITAC_FindClosestDeployableToLocation(CommChairLocation, &StructureFilter); - if (UnbuiltStructure.IsValid()) + if (UnbuiltStructure.IsValid() && (!IsAreaAffectedBySpores(UnbuiltStructure.Location) || PlayerHasHeavyArmour(pBot->Edict))) { AITASK_SetBuildTask(pBot, Task, UnbuiltStructure.edict, true); return; @@ -3340,7 +3329,7 @@ void AIPlayerSetMarineSweeperPrimaryTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Tas AvHAIBuildableStructure AttackedStructure = AITAC_FindClosestDeployableToLocation(CommChairLocation, &AttackedStructureFilter); - if (AttackedStructure.IsValid()) + if (AttackedStructure.IsValid() && (!IsAreaAffectedBySpores(AttackedStructure.Location) || PlayerHasHeavyArmour(pBot->Edict))) { AITASK_SetWeldTask(pBot, Task, AttackedStructure.edict, true); return; @@ -3632,11 +3621,14 @@ void AIPlayerSetWantsAndNeedsCOMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Ta // We really need some health or ammo, hit the armoury if (NearestArmoury.IsValid()) { - Task->TaskType = TASK_RESUPPLY; - Task->bTaskIsUrgent = true; - Task->TaskLocation = NearestArmoury.Location; - Task->TaskTarget = NearestArmoury.edict; - return; + if (!IsAreaAffectedBySpores(NearestArmoury.Location) || PlayerHasHeavyArmour(pBot->Edict)) + { + Task->TaskType = TASK_RESUPPLY; + Task->bTaskIsUrgent = true; + Task->TaskLocation = NearestArmoury.Location; + Task->TaskTarget = NearestArmoury.edict; + return; + } } } @@ -3691,11 +3683,14 @@ void AIPlayerSetWantsAndNeedsMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task // We really need some health or ammo, either hit the armoury, or ask for a resupply if (NearestArmoury.IsValid()) { - Task->TaskType = TASK_RESUPPLY; - Task->bTaskIsUrgent = true; - Task->TaskLocation = NearestArmoury.Location; - Task->TaskTarget = NearestArmoury.edict; - return; + if (!IsAreaAffectedBySpores(NearestArmoury.Location) || PlayerHasHeavyArmour(pBot->Edict)) + { + Task->TaskType = TASK_RESUPPLY; + Task->bTaskIsUrgent = true; + Task->TaskLocation = NearestArmoury.Location; + Task->TaskTarget = NearestArmoury.edict; + return; + } } else { @@ -3971,7 +3966,7 @@ void AIPlayerSetSecondaryMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) AvHAIBuildableStructure UnbuiltIP = AITAC_FindClosestDeployableToLocation(pBot->Edict->v.origin, &UnbuiltFilter); - if (UnbuiltIP.IsValid()) + if (UnbuiltIP.IsValid() && (!IsAreaAffectedBySpores(UnbuiltIP.Location) || PlayerHasHeavyArmour(pBot->Edict))) { float ThisDist = vDist2D(UnbuiltIP.Location, pBot->Edict->v.origin); int NumBuilders = AITAC_GetNumPlayersOfTeamInArea(BotTeam, UnbuiltIP.Location, ThisDist - 5.0f, false, pBot->Edict, AVH_USER3_COMMANDER_PLAYER); @@ -4009,7 +4004,7 @@ void AIPlayerSetSecondaryMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) } } - if (NearestStructure.IsValid()) + if (NearestStructure.IsValid() && (!IsAreaAffectedBySpores(NearestStructure.Location) || PlayerHasHeavyArmour(pBot->Edict))) { AITASK_SetBuildTask(pBot, Task, NearestStructure.edict, true); return; @@ -4121,6 +4116,8 @@ void AIPlayerSetSecondaryMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) { AvHAIBuildableStructure ThisStructure = (*it); + if (ThisStructure.edict->v.waterlevel > 0) { continue; } + int NumMines = AITAC_GetNumDeployablesNearLocation(ThisStructure.Location, &MineFilter); if (NumMines < 4) @@ -4168,8 +4165,6 @@ void AIPlayerSetSecondaryMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) } } - - } bool AIPlayerMustFinishCurrentTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) @@ -5351,6 +5346,10 @@ void AIPlayerThink(AvHAIPlayer* pBot) { TestNavThink(pBot); } + else if (avh_botdebugmode.value == 3) + { + CustomThink(pBot); + } else { switch (GetGameRules()->GetMapMode()) @@ -5479,7 +5478,7 @@ void BotSwitchToWeapon(AvHAIPlayer* pBot, AvHAIWeapon NewWeaponSlot) bool ShouldBotThink(AvHAIPlayer* pBot) { - return NavmeshLoaded() && GetGameRules()->GetGameStarted() && (IsPlayerActiveInGame(pBot->Edict) || IsPlayerCommander(pBot->Edict)) && !IsPlayerGestating(pBot->Edict); + return NavmeshLoaded() && GetGameRules()->GetGameStarted() && !AIMGR_HasMatchEnded() && (IsPlayerActiveInGame(pBot->Edict) || IsPlayerCommander(pBot->Edict)) && !IsPlayerGestating(pBot->Edict); } void BotResumePlay(AvHAIPlayer* pBot) @@ -6904,6 +6903,15 @@ void AIPlayerSetSecondaryAlienTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) return; } + // If we're engaging an enemy turret then finish the job + if (Task->TaskType == TASK_ATTACK) + { + if (vDist2DSq(pBot->Edict->v.origin, Task->TaskTarget->v.origin) < sqrf(UTIL_MetresToGoldSrcUnits(20.0f))) + { + return; + } + } + DeployableSearchFilter AttackedStructuresFilter; AttackedStructuresFilter.DeployableTypes = (IsPlayerLerk(pBot->Edict)) ? SEARCH_ALL_STRUCTURES : STRUCTURE_ALIEN_RESTOWER; AttackedStructuresFilter.DeployableTeam = BotTeam; @@ -6945,6 +6953,24 @@ void AIPlayerSetSecondaryAlienTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) return; } + DeployableSearchFilter EnemyStructures; + EnemyStructures.DeployableTypes = SEARCH_ALL_STRUCTURES; + EnemyStructures.DeployableTeam = BotTeam; + EnemyStructures.ReachabilityTeam = BotTeam; + EnemyStructures.ReachabilityFlags = pBot->BotNavInfo.NavProfile.ReachabilityFlag; + EnemyStructures.MaxSearchRadius = UTIL_MetresToGoldSrcUnits(10.0f); + + vector NearbyEnemyStructures = AITAC_FindAllDeployables(pBot->Edict->v.origin, &EnemyStructures); + + for (auto it = NearbyEnemyStructures.begin(); it != NearbyEnemyStructures.end(); it++) + { + if (UTIL_PlayerHasLOSToEntity(pBot->Edict, it->edict, UTIL_MetresToGoldSrcUnits(20.0f), false)) + { + AITASK_SetAttackTask(pBot, Task, it->edict, false); + return; + } + } + } void AIPlayerSetWantsAndNeedsAlienTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) @@ -7200,6 +7226,8 @@ bool SkulkCombatThink(AvHAIPlayer* pBot) if (pBot->CurrentCombatStrategy == COMBAT_STRATEGY_ATTACK || (pBot->CurrentCombatStrategy == COMBAT_STRATEGY_AMBUSH && bShouldBreakAmbush)) { + bool bIsCloaked = (UTIL_IsCloakedPlayerInvisible(CurrentEnemy, pBot->Player) || pBot->Player->GetOpacity() < 0.5f); + AvHAIWeapon DesiredWeapon = WEAPON_SKULK_BITE; // If we have xenocide, then choose it if we have lots of good targets in blast radius @@ -7235,7 +7263,7 @@ bool SkulkCombatThink(AvHAIPlayer* pBot) } } - if (DesiredWeapon != WEAPON_SKULK_XENOCIDE) + if (!bIsCloaked && DesiredWeapon != WEAPON_SKULK_XENOCIDE) { if (!IsPlayerParasited(CurrentEnemy) && DistToEnemy > sqrf(UTIL_MetresToGoldSrcUnits(5.0f))) { @@ -7267,9 +7295,12 @@ bool SkulkCombatThink(AvHAIPlayer* pBot) } } - MoveTo(pBot, MoveTarget, MOVESTYLE_NORMAL); + BotMoveStyle DesiredMoveStyle = (bIsCloaked) ? MOVESTYLE_AMBUSH : MOVESTYLE_NORMAL; + pBot->BotNavInfo.bShouldWalk = bIsCloaked && !GetHasUpgrade(pBot->Edict->v.iuser4, MASK_SENSORY_NEARBY); - if (DistToEnemy > sqrf(UTIL_MetresToGoldSrcUnits(5.0f))) + MoveTo(pBot, MoveTarget, DesiredMoveStyle); + + if (!bIsCloaked && DistToEnemy > sqrf(UTIL_MetresToGoldSrcUnits(5.0f))) { if (CanBotLeap(pBot)) { diff --git a/main/source/mod/AvHAIPlayer.h b/main/source/mod/AvHAIPlayer.h index 4d64ce20..b407e769 100644 --- a/main/source/mod/AvHAIPlayer.h +++ b/main/source/mod/AvHAIPlayer.h @@ -66,6 +66,8 @@ void BotClearEnemyTrackingInfo(enemy_status* TrackingInfo); bool IsPlayerInBotFOV(AvHAIPlayer* Observer, edict_t* TargetPlayer); void UpdateAIPlayerViewFrustum(AvHAIPlayer* pBot); +bool UTIL_IsCloakedPlayerInvisible(edict_t* Observer, AvHPlayer* Player); + Vector GetVisiblePointOnPlayerFromObserver(edict_t* Observer, edict_t* TargetPlayer); diff --git a/main/source/mod/AvHAIPlayerManager.cpp b/main/source/mod/AvHAIPlayerManager.cpp index 14b877c9..c1653b97 100644 --- a/main/source/mod/AvHAIPlayerManager.cpp +++ b/main/source/mod/AvHAIPlayerManager.cpp @@ -101,7 +101,7 @@ void AIMGR_UpdateAIPlayerCounts() // If bots are disabled or we've exceeded max AI time and no humans are playing, ensure we've removed all bots from the game // Max AI time is configurable in nsbots.ini, and helps prevent infinite stalemates // Default time is 90 minutes before bots start leaving to let the map cycle - if (!AIMGR_IsBotEnabled() || (bMatchExceededMaxLength && AIMGR_GetNumActiveHumanPlayers() == 0)) + if (!AIMGR_IsBotEnabled() || (bMatchExceededMaxLength && AIMGR_GetNumActiveHumanPlayers() == 0) || (AIMGR_HasMatchEnded() && gpGlobals->time - GetGameRules()->GetVictoryTime() > 5.0f)) { if (AIMGR_GetNumAIPlayers() > 0) { @@ -113,38 +113,6 @@ void AIMGR_UpdateAIPlayerCounts() if (!AIMGR_ShouldStartPlayerBalancing()) { return; } - // If game has ended, kick bots that have dropped back to the ready room - if (GetGameRules()->GetVictoryTeam() != TEAM_IND) - { - AIMGR_RemoveBotsInReadyRoom(); - return; - } - - - - BotFillTiming CurrentFillTiming = CONFIG_GetBotFillTiming(); - - if (!GetGameRules()->GetGameStarted()) - { - if (CurrentFillTiming == FILLTIMING_ROUNDSTART) { return; } // Do nothing if we're only meant to add bots after round start, and the round hasn't started - - if (CurrentFillTiming == FILLTIMING_ALLHUMANS) - { - for (int i = 1; i <= gpGlobals->maxClients; i++) - { - edict_t* PlayerEdict = INDEXENT(i); - if (FNullEnt(PlayerEdict) || PlayerEdict->free || (PlayerEdict->v.flags & FL_FAKECLIENT)) { continue; } // Ignore fake clients - - AvHPlayer* PlayerRef = dynamic_cast(CBaseEntity::Instance(PlayerEdict)); - - if (!PlayerRef) { continue; } - - if (PlayerRef->GetInReadyRoom()) { return; } // If there is a human in the ready room, don't add any more bots - } - } - } - - if (avh_botautomode.value == 1) // Fill teams: bots will be added and removed to maintain a minimum player count { AIMGR_UpdateFillTeams(); @@ -298,6 +266,28 @@ void AIMGR_RemoveAIPlayerFromTeam(int Team) AvHTeamNumber teamA = GetGameRules()->GetTeamANumber(); AvHTeamNumber teamB = GetGameRules()->GetTeamBNumber(); + if (AIMGR_HasMatchEnded() && Team == 0) + { + vector::iterator ItemToRemove = ActiveAIPlayers.end(); // Current bot to be kicked + + for (auto it = ActiveAIPlayers.begin(); it != ActiveAIPlayers.end(); it++) + { + if (IsPlayerInReadyRoom(it->Edict)) + { + ItemToRemove = it; + break; + } + } + + if (ItemToRemove != ActiveAIPlayers.end()) + { + ItemToRemove->Player->Kick(); + + ActiveAIPlayers.erase(ItemToRemove); + return; + } + } + if (Team > 0) { DesiredTeam = (Team == 1) ? teamA : teamB; @@ -1190,7 +1180,43 @@ vector AIMGR_GetNonAIPlayersOnTeam(AvHTeamNumber Team) bool AIMGR_ShouldStartPlayerBalancing() { - return (bPlayerSpawned && gpGlobals->time - AIStartedTime > AI_GRACE_PERIOD) || (gpGlobals->time - AIStartedTime > AI_MAX_START_TIMEOUT); + if (gpGlobals->time - AIStartedTime < AI_GRACE_PERIOD) { return false; } + + if (AIMGR_HasMatchEnded()) { return false; } + + BotFillTiming FillTiming = CONFIG_GetBotFillTiming(); + + switch (FillTiming) + { + case FILLTIMING_MAPLOAD: + return true; + case FILLTIMING_ROUNDSTART: + return GetGameRules()->GetGameStarted(); + default: + break; + } + + if (!bPlayerSpawned) + { + return (gpGlobals->time - AIStartedTime > AI_MAX_START_TIMEOUT); + } + + // We've started adding bots, keep going + if (AIMGR_GetNumAIPlayers() > 0) { return true; } + + for (int i = 1; i <= gpGlobals->maxClients; i++) + { + edict_t* PlayerEdict = INDEXENT(i); + if (FNullEnt(PlayerEdict) || PlayerEdict->free || (PlayerEdict->v.flags & FL_FAKECLIENT)) { continue; } // Ignore fake clients + + AvHPlayer* PlayerRef = dynamic_cast(CBaseEntity::Instance(PlayerEdict)); + + if (!PlayerRef) { continue; } + + if (PlayerRef->GetInReadyRoom()) { return false; } // If there is a human in the ready room, don't add any more bots + } + + return true; } void AIMGR_UpdateAIMapData() @@ -1280,6 +1306,9 @@ void AIMGR_OnBotEnabled() UnloadNavigationData(); } + CONFIG_ParseConfigFile(); + CONFIG_PopulateBotNames(); + AITAC_ClearMapAIData(true); bBotsEnabled = true; @@ -1353,13 +1382,31 @@ void AIMGR_UpdateAISystem() if (AIMGR_IsBotEnabled()) { - if (AIMGR_GetNavMeshStatus() == NAVMESH_STATUS_PENDING) + if (!AIMGR_HasMatchEnded()) { - AIMGR_LoadNavigationData(); - } + if (AIMGR_GetNavMeshStatus() == NAVMESH_STATUS_PENDING) + { + AIMGR_LoadNavigationData(); + } - AIMGR_UpdateAIMapData(); + AIMGR_UpdateAIMapData(); + } AIMGR_UpdateAIPlayers(); } +} + +bool AIMGR_HasMatchEnded() +{ + // Game has finished + if (GetGameRules()->GetVictoryTeam() != TEAM_IND) { return true; } + + // Game is still going, but if it's exceeded the max AI match time and there are no humans playing, consider the match over + // Helps prevent stalemates if bots get stuck and keeps map rotations going + float MaxMinutes = CONFIG_GetMaxAIMatchTimeMinutes(); + float MaxSeconds = MaxMinutes * 60.0f; + + bool bMatchExceededMaxLength = (GetGameRules()->GetGameTime() > MaxSeconds); + + return (bMatchExceededMaxLength && AIMGR_GetNumActiveHumanPlayers() == 0); } \ No newline at end of file diff --git a/main/source/mod/AvHAIPlayerManager.h b/main/source/mod/AvHAIPlayerManager.h index 530ad9a9..1057bafe 100644 --- a/main/source/mod/AvHAIPlayerManager.h +++ b/main/source/mod/AvHAIPlayerManager.h @@ -122,4 +122,6 @@ void AIMGR_OnBotDisabled(); void AIMGR_UpdateAISystem(); +bool AIMGR_HasMatchEnded(); + #endif \ No newline at end of file diff --git a/main/source/mod/AvHAITask.cpp b/main/source/mod/AvHAITask.cpp index 0e0661b1..3fbe5c70 100644 --- a/main/source/mod/AvHAITask.cpp +++ b/main/source/mod/AvHAITask.cpp @@ -563,6 +563,8 @@ bool AITASK_IsResupplyTaskStillValid(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) if (!UTIL_StructureIsFullyBuilt(Task->TaskTarget) || UTIL_StructureIsRecycling(Task->TaskTarget)) { return false; } + if (IsAreaAffectedBySpores(Task->TaskTarget->v.origin) && !PlayerHasHeavyArmour(pBot->Edict)) { return false; } + return ( (pBot->Edict->v.health < pBot->Edict->v.max_health) || (UTIL_GetPlayerPrimaryAmmoReserve(pBot->Player) < UTIL_GetPlayerPrimaryMaxAmmoReserve(pBot->Player)) @@ -1095,11 +1097,18 @@ void BotProgressMoveTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) { Task->TaskStartedTime = gpGlobals->time; - if (IsPlayerLerk(pBot->Edict)) + bool bPlayerCloaked = pBot->Player->GetOpacity() < 0.5f && !GetHasUpgrade(pBot->Edict->v.iuser4, MASK_SENSORY_NEARBY); + + if (IsPlayerLerk(pBot->Edict) || bPlayerCloaked) { if (AITAC_ShouldBotBeCautious(pBot)) { - MoveTo(pBot, Task->TaskLocation, MOVESTYLE_HIDE, 100.0f); + if (bPlayerCloaked) + { + pBot->BotNavInfo.bShouldWalk = true; + } + + MoveTo(pBot, Task->TaskLocation, MOVESTYLE_AMBUSH, 100.0f); } else { @@ -1649,11 +1658,19 @@ void BotProgressGuardTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) if (vDist2DSq(pBot->Edict->v.origin, Task->TaskLocation) > sqrf(UTIL_MetresToGoldSrcUnits(10.0f))) { Task->TaskStartedTime = 0.0f; - if (IsPlayerLerk(pBot->Edict)) + + bool bPlayerCloaked = pBot->Player->GetOpacity() < 0.5f && !GetHasUpgrade(pBot->Edict->v.iuser4, MASK_SENSORY_NEARBY); + + if (IsPlayerLerk(pBot->Edict) || bPlayerCloaked) { if (AITAC_ShouldBotBeCautious(pBot)) { - MoveTo(pBot, Task->TaskLocation, MOVESTYLE_HIDE, 100.0f); + if (bPlayerCloaked) + { + pBot->BotNavInfo.bShouldWalk = true; + } + + MoveTo(pBot, Task->TaskLocation, MOVESTYLE_AMBUSH, 100.0f); } else { From 261ff5cef11fac50e5ace2aab8bff4c994758360 Mon Sep 17 00:00:00 2001 From: RGreenlees Date: Sun, 14 Apr 2024 20:50:26 +0100 Subject: [PATCH 2/4] Improved guard behaviour and randomisation * Improved the bot guard behaviour * Improved randomisation of bot names and chamber sequences * Fixed bug where bots would drop hives within range of siege bases * Fixed bug where requesting turret factories and sentry turrets from the AI commander would place a phase gate instead --- main/source/mod/AvHAICommander.cpp | 3 + main/source/mod/AvHAIConfig.cpp | 127 +++++++++---------------- main/source/mod/AvHAIConstants.h | 2 +- main/source/mod/AvHAITactical.cpp | 8 +- main/source/mod/AvHAITask.cpp | 144 +++++++++++++++++++++++------ main/source/mod/AvHAITask.h | 1 + 6 files changed, 171 insertions(+), 114 deletions(-) diff --git a/main/source/mod/AvHAICommander.cpp b/main/source/mod/AvHAICommander.cpp index dabcf8d4..67d6b10b 100644 --- a/main/source/mod/AvHAICommander.cpp +++ b/main/source/mod/AvHAICommander.cpp @@ -2978,12 +2978,15 @@ bool AICOMM_CheckForNextSupportAction(AvHAIPlayer* pBot) case BUILD_TURRET_FACTORY: RequiredRes = BALANCE_VAR(kTurretFactoryCost); StructureToDeploy = STRUCTURE_MARINE_TURRETFACTORY; + break; case BUILD_TURRET: RequiredRes = BALANCE_VAR(kSentryCost); StructureToDeploy = STRUCTURE_MARINE_TURRET; + break; case BUILD_PHASEGATE: RequiredRes = BALANCE_VAR(kPhaseGateCost); StructureToDeploy = STRUCTURE_MARINE_PHASEGATE; + break; default: break; } diff --git a/main/source/mod/AvHAIConfig.cpp b/main/source/mod/AvHAIConfig.cpp index 5ab6d921..cf39cbd4 100644 --- a/main/source/mod/AvHAIConfig.cpp +++ b/main/source/mod/AvHAIConfig.cpp @@ -16,7 +16,7 @@ std::unordered_map TeamSizeMap; bot_skill BotSkillLevels[4]; -AvHMessageID ChamberSequence[3] = { ALIEN_BUILD_DEFENSE_CHAMBER, ALIEN_BUILD_MOVEMENT_CHAMBER, ALIEN_BUILD_SENSORY_CHAMBER }; +std::vector ChamberSequence; string DefaultBotNames[MAX_PLAYERS] = { "MrRobot", "Wall-E", @@ -173,6 +173,7 @@ void CONFIG_PopulateBotNames() if (BotNames.size() > 2) { auto rng = std::default_random_engine{}; + rng.seed(time(0)); std::shuffle(begin(BotNames), end(BotNames), rng); } @@ -187,6 +188,7 @@ void CONFIG_PopulateBotNames() if (DefaultNames.size() > 2) { auto rng = std::default_random_engine{}; + rng.seed(time(0)); std::shuffle(begin(DefaultNames), end(DefaultNames), rng); } @@ -255,6 +257,15 @@ void CONFIG_ParseConfigFile() BotSkillLevels[3].alien_bot_motion_tracking_skill = 1.0f; BotSkillLevels[3].alien_bot_view_speed = 2.0f; + ChamberSequence.clear(); + ChamberSequence.push_back(ALIEN_BUILD_DEFENSE_CHAMBER); + ChamberSequence.push_back(ALIEN_BUILD_MOVEMENT_CHAMBER); + ChamberSequence.push_back(ALIEN_BUILD_SENSORY_CHAMBER); + + std::srand(time(0)); + auto rng = std::default_random_engine{}; + rng.seed(time(0)); + std::shuffle(std::begin(ChamberSequence), std::end(ChamberSequence), rng); string BotConfigFile = string(getModDirectory()) + "/nsbots.ini"; @@ -503,12 +514,6 @@ void CONFIG_ParseConfigFile() if (!stricmp(keyChar, "ChamberSequence")) { - AvHMessageID HiveOneTech = MESSAGE_NULL; - AvHMessageID HiveTwoTech = MESSAGE_NULL; - AvHMessageID HiveThreeTech = MESSAGE_NULL; - - std::vector AvailableTechs = { ALIEN_BUILD_DEFENSE_CHAMBER, ALIEN_BUILD_MOVEMENT_CHAMBER, ALIEN_BUILD_SENSORY_CHAMBER }; - auto firstTechDelimiter = value.find("/"); if (firstTechDelimiter == std::string::npos) @@ -533,104 +538,64 @@ void CONFIG_ParseConfigFile() const char* SecondTechChar = SecondTech.c_str(); const char* ThirdTechChar = ThirdTech.c_str(); - if (!stricmp(FirstTechChar, "movement")) + if (!stricmp(FirstTechChar, "defense")) { - HiveOneTech = ALIEN_BUILD_MOVEMENT_CHAMBER; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_MOVEMENT_CHAMBER), AvailableTechs.end()); - + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_DEFENSE_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[0], ChamberSequence[Index]); } - else if (!stricmp(FirstTechChar, "defense")) + else if (!stricmp(FirstTechChar, "movement")) { - HiveOneTech = ALIEN_BUILD_DEFENSE_CHAMBER; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_DEFENSE_CHAMBER), AvailableTechs.end()); + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_MOVEMENT_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[0], ChamberSequence[Index]); } else if (!stricmp(FirstTechChar, "sensory")) { - HiveOneTech = ALIEN_BUILD_SENSORY_CHAMBER; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_SENSORY_CHAMBER), AvailableTechs.end()); + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_SENSORY_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[0], ChamberSequence[Index]); } - if (!stricmp(SecondTechChar, "movement")) + + if (!stricmp(SecondTechChar, "defense")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_MOVEMENT_CHAMBER) != AvailableTechs.end()) - { - HiveTwoTech = ALIEN_BUILD_MOVEMENT_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_MOVEMENT_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_DEFENSE_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[1], ChamberSequence[Index]); } - else if (!stricmp(SecondTechChar, "defense")) + else if (!stricmp(SecondTechChar, "movement")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_DEFENSE_CHAMBER) != AvailableTechs.end()) - { - HiveTwoTech = ALIEN_BUILD_DEFENSE_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_DEFENSE_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_MOVEMENT_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[1], ChamberSequence[Index]); } else if (!stricmp(SecondTechChar, "sensory")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_SENSORY_CHAMBER) != AvailableTechs.end()) - { - HiveTwoTech = ALIEN_BUILD_SENSORY_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_SENSORY_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_SENSORY_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[1], ChamberSequence[Index]); } - if (!stricmp(ThirdTechChar, "movement")) + if (!stricmp(ThirdTechChar, "defense")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_MOVEMENT_CHAMBER) != AvailableTechs.end()) - { - HiveThreeTech = ALIEN_BUILD_MOVEMENT_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_MOVEMENT_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_DEFENSE_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[2], ChamberSequence[Index]); } - else if (!stricmp(ThirdTechChar, "defense")) + else if (!stricmp(ThirdTechChar, "movement")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_DEFENSE_CHAMBER) != AvailableTechs.end()) - { - HiveThreeTech = ALIEN_BUILD_DEFENSE_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_DEFENSE_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_MOVEMENT_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[2], ChamberSequence[Index]); } else if (!stricmp(ThirdTechChar, "sensory")) { - if (std::find(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_SENSORY_CHAMBER) != AvailableTechs.end()) - { - HiveThreeTech = ALIEN_BUILD_SENSORY_CHAMBER; - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), ALIEN_BUILD_SENSORY_CHAMBER), AvailableTechs.end()); - } + auto Element = std::find(ChamberSequence.begin(), ChamberSequence.end(), ALIEN_BUILD_SENSORY_CHAMBER); + int Index = Element - ChamberSequence.begin(); + std::swap(ChamberSequence[2], ChamberSequence[Index]); } - if (HiveOneTech == MESSAGE_NULL) - { - int random = rand() % AvailableTechs.size(); - HiveOneTech = AvailableTechs[random]; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), HiveOneTech), AvailableTechs.end()); - } - - if (HiveTwoTech == MESSAGE_NULL) - { - int random = rand() % AvailableTechs.size(); - HiveTwoTech = AvailableTechs[random]; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), HiveTwoTech), AvailableTechs.end()); - } - - if (HiveThreeTech == MESSAGE_NULL) - { - int random = rand() % AvailableTechs.size(); - HiveThreeTech = AvailableTechs[random]; - - AvailableTechs.erase(std::remove(AvailableTechs.begin(), AvailableTechs.end(), HiveTwoTech), AvailableTechs.end()); - } - - ChamberSequence[0] = HiveOneTech; - ChamberSequence[1] = HiveTwoTech; - ChamberSequence[2] = HiveThreeTech; - continue; } } diff --git a/main/source/mod/AvHAIConstants.h b/main/source/mod/AvHAIConstants.h index 26055e27..5eec3bf8 100644 --- a/main/source/mod/AvHAIConstants.h +++ b/main/source/mod/AvHAIConstants.h @@ -322,7 +322,7 @@ typedef struct _BOT_GUARD_INFO { Vector GuardLocation = g_vecZero; // What position are we guarding? Vector GuardStandPosition = g_vecZero; // Where the bot should stand to guard position (moves around a bit) - Vector GuardPoints[8]; // All potential areas to watch that an enemy could approach from + std::vector GuardPoints; // All potential areas to watch that an enemy could approach from int NumGuardPoints = 0; // How many watch areas there are for the current location Vector GuardLookLocation = g_vecZero; // Which area are we currently watching? float GuardStartLookTime = 0.0f; // When did we start watching the current area? diff --git a/main/source/mod/AvHAITactical.cpp b/main/source/mod/AvHAITactical.cpp index 9dc96c3a..7e35c356 100644 --- a/main/source/mod/AvHAITactical.cpp +++ b/main/source/mod/AvHAITactical.cpp @@ -4711,23 +4711,25 @@ bool AITAC_ShouldBotBuildHive(AvHAIPlayer* pBot, AvHAIHiveDefinition** EligibleH // Must be an empty hive DeployableSearchFilter EnemyFortificationsFilter; - EnemyFortificationsFilter.DeployableTeam = EnemyTeam; - EnemyFortificationsFilter.MaxSearchRadius = UTIL_MetresToGoldSrcUnits(10.0f); + EnemyFortificationsFilter.DeployableTeam = EnemyTeam; if (AIMGR_GetTeamType(EnemyTeam) == AVH_CLASS_TYPE_MARINE) { - EnemyFortificationsFilter.DeployableTypes = (STRUCTURE_MARINE_PHASEGATE | STRUCTURE_MARINE_TURRETFACTORY | STRUCTURE_MARINE_ADVTURRETFACTORY); + EnemyFortificationsFilter.MaxSearchRadius = UTIL_MetresToGoldSrcUnits(20.0f); + EnemyFortificationsFilter.DeployableTypes = (STRUCTURE_MARINE_PHASEGATE | STRUCTURE_MARINE_TURRETFACTORY | STRUCTURE_MARINE_ADVTURRETFACTORY | STRUCTURE_MARINE_SIEGETURRET); EnemyFortificationsFilter.ExcludeStatusFlags = STRUCTURE_STATUS_RECYCLING; EnemyFortificationsFilter.IncludeStatusFlags = STRUCTURE_STATUS_COMPLETED; // This is important to prevent exploiting the AI. Those structures have to be built first! } else { + EnemyFortificationsFilter.MaxSearchRadius = UTIL_MetresToGoldSrcUnits(10.0f); EnemyFortificationsFilter.DeployableTypes = (STRUCTURE_ALIEN_OFFENCECHAMBER); } // Enemy have built some stuff, wait until it's clear before building if (AITAC_DeployableExistsAtLocation(ThisHive->FloorLocation, &EnemyFortificationsFilter)) { continue; } + // Should be clear to drop dat hive! float ThisDist = vDist2DSq(pBot->Edict->v.origin, ThisHive->FloorLocation); diff --git a/main/source/mod/AvHAITask.cpp b/main/source/mod/AvHAITask.cpp index 3fbe5c70..0d17f17d 100644 --- a/main/source/mod/AvHAITask.cpp +++ b/main/source/mod/AvHAITask.cpp @@ -1192,7 +1192,7 @@ void BotProgressPickupTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) { AvHAIWeapon CurrentPrimaryWeapon = UTIL_GetPlayerPrimaryWeapon(pBot->Player); - if (CurrentPrimaryWeapon != WEAPON_NONE && CurrentPrimaryWeapon != UTIL_GetWeaponTypeFromEdict(Task->TaskTarget)) + if (CurrentPrimaryWeapon != WEAPON_INVALID && CurrentPrimaryWeapon != UTIL_GetWeaponTypeFromEdict(Task->TaskTarget)) { if (GetPlayerCurrentWeapon(pBot->Player) != CurrentPrimaryWeapon) { @@ -2821,9 +2821,9 @@ void BotGuardLocation(AvHAIPlayer* pBot, const Vector GuardLocation) { float DistFromGuardLocation = vDist2DSq(pBot->Edict->v.origin, GuardLocation); - if (DistFromGuardLocation > sqrf(UTIL_MetresToGoldSrcUnits(10.0f))) + if (DistFromGuardLocation > sqrf(UTIL_MetresToGoldSrcUnits(5.0f))) { - memset(&pBot->GuardInfo, 0, sizeof(AvHAIGuardInfo)); + UTIL_ClearGuardInfo(pBot); MoveTo(pBot, GuardLocation, MOVESTYLE_NORMAL, UTIL_MetresToGoldSrcUnits(10.0f)); return; } @@ -2836,15 +2836,38 @@ void BotGuardLocation(AvHAIPlayer* pBot, const Vector GuardLocation) if (gpGlobals->time > pBot->GuardInfo.ThisGuardLookTime) { - if (pBot->GuardInfo.NumGuardPoints > 0) + if (pBot->GuardInfo.GuardPoints.size() > 0) { - int NewGuardLookIndex = irandrange(0, (pBot->GuardInfo.NumGuardPoints - 1)); + if (pBot->GuardInfo.GuardPoints.size() == 1) + { + pBot->GuardInfo.GuardLookLocation = (*pBot->GuardInfo.GuardPoints.begin()); + } + else + { + Vector NewLookPoint = pBot->GuardInfo.GuardLookLocation; + + int HighestScore = 0.0f; + + for (auto it = pBot->GuardInfo.GuardPoints.begin(); it != pBot->GuardInfo.GuardPoints.end(); it++) + { + if (vEquals((*it), pBot->GuardInfo.GuardLookLocation)) { continue; } + + float thisScore = frandrange(0.01f, 1.0f); + + if (thisScore > HighestScore) + { + NewLookPoint = (*it); + HighestScore = thisScore; + } + } + + pBot->GuardInfo.GuardLookLocation = NewLookPoint; + } - pBot->GuardInfo.GuardLookLocation = pBot->GuardInfo.GuardPoints[NewGuardLookIndex]; } else { - pBot->GuardInfo.GuardLookLocation = UTIL_GetRandomPointOnNavmeshInRadius(BaseNavProfiles[SKULK_BASE_NAV_PROFILE], pBot->Edict->v.origin, UTIL_MetresToGoldSrcUnits(5.0f)); + pBot->GuardInfo.GuardLookLocation = UTIL_GetRandomPointOnNavmeshInRadius(BaseNavProfiles[SKULK_BASE_NAV_PROFILE], pBot->Edict->v.origin, UTIL_MetresToGoldSrcUnits(3.0f)); pBot->GuardInfo.GuardLookLocation.z = pBot->CurrentEyePosition.z; } @@ -2854,7 +2877,7 @@ void BotGuardLocation(AvHAIPlayer* pBot, const Vector GuardLocation) if (gpGlobals->time > pBot->GuardInfo.ThisGuardStandTime) { - pBot->GuardInfo.GuardStandPosition = UTIL_GetRandomPointOnNavmeshInRadius(pBot->BotNavInfo.NavProfile, GuardLocation, UTIL_MetresToGoldSrcUnits(5.0f)); + pBot->GuardInfo.GuardStandPosition = UTIL_GetRandomPointOnNavmeshInRadius(pBot->BotNavInfo.NavProfile, GuardLocation, UTIL_MetresToGoldSrcUnits(3.0f)); pBot->GuardInfo.ThisGuardStandTime = gpGlobals->time + frandrange(5.0f, 10.0f); } @@ -2878,7 +2901,14 @@ void BotGuardLocation(AvHAIPlayer* pBot, const Vector GuardLocation) void UTIL_ClearGuardInfo(AvHAIPlayer* pBot) { - memset(&pBot->GuardInfo, 0, sizeof(AvHAIGuardInfo)); + pBot->GuardInfo.GuardLocation = ZERO_VECTOR; + pBot->GuardInfo.GuardLookLocation = ZERO_VECTOR; + pBot->GuardInfo.GuardPoints.clear(); + pBot->GuardInfo.GuardStandPosition = ZERO_VECTOR; + pBot->GuardInfo.GuardStartLookTime = 0.0f; + pBot->GuardInfo.GuardStartStandTime = 0.0f; + pBot->GuardInfo.ThisGuardLookTime = 0.0f; + pBot->GuardInfo.ThisGuardStandTime = 0.0f; } void AITASK_GenerateGuardWatchPoints(AvHAIPlayer* pBot, const Vector& GuardLocation) @@ -2903,51 +2933,107 @@ void AITASK_GenerateGuardWatchPoints(AvHAIPlayer* pBot, const Vector& GuardLocat { const AvHAIHiveDefinition* ThisHive = (*it); + if (UTIL_QuickTrace(pEdict, GuardLocation, ThisHive->Location)) { continue; } + if (UTIL_QuickTrace(pEdict, GuardLocation + Vector(0.0f, 0.0f, 10.0f), ThisHive->Location) || vDist2DSq(GuardLocation, ThisHive->Location) < sqrf(UTIL_MetresToGoldSrcUnits(10.0f))) { continue; } - dtStatus SearchResult = FindPathClosestToPoint(NavProfile, ThisHive->FloorLocation, GuardLocation, path, 500.0f); + dtStatus SearchResult = FindPathClosestToPoint(NavProfile, GuardLocation, ThisHive->FloorLocation, path, 500.0f); if (dtStatusSucceed(SearchResult) && path.size() > 0) { - Vector FinalApproachDir = UTIL_GetVectorNormal2D(path.back().Location - prev(prev(path.end()))->Location); - Vector ProspectiveNewGuardLoc = GuardLocation - (FinalApproachDir * 300.0f); + Vector FurthestPoint = UTIL_GetFurthestVisiblePointOnPath(GuardLocation + Vector(0.0f, 0.0f, 64.0f), path, true); + FurthestPoint.z += 64.0f; - ProspectiveNewGuardLoc.z = prev(prev(path.end()))->Location.z; + Vector LookDir = UTIL_GetVectorNormal(FurthestPoint - GuardLocation); - pBot->GuardInfo.GuardPoints[pBot->GuardInfo.NumGuardPoints++] = ProspectiveNewGuardLoc; + bool bShouldAdd = true; + + for (auto it = pBot->GuardInfo.GuardPoints.begin(); it != pBot->GuardInfo.GuardPoints.end(); it++) + { + Vector ThisLookDir = UTIL_GetVectorNormal((*it) - GuardLocation); + + if (UTIL_GetDotProduct(ThisLookDir, LookDir) > 0.8f) + { + bShouldAdd = false; + break; + } + } + + if (bShouldAdd) + { + pBot->GuardInfo.GuardPoints.push_back(FurthestPoint); + } } } if (AIMGR_GetEnemyTeamType(pBot->Player->GetTeam()) == AVH_CLASS_TYPE_MARINE) { - - dtStatus SearchResult = FindPathClosestToPoint(NavProfile, AITAC_GetTeamStartingLocation(EnemyTeam), GuardLocation, path, 500.0f); - - if (dtStatusSucceed(SearchResult) && path.size() > 0) + if (!UTIL_QuickTrace(nullptr, GuardLocation, AITAC_GetTeamStartingLocation(EnemyTeam))) { - Vector FinalApproachDir = UTIL_GetVectorNormal2D(path.back().Location - prev(prev(path.end()))->Location); - Vector ProspectiveNewGuardLoc = GuardLocation - (FinalApproachDir * 300.0f); + dtStatus SearchResult = FindPathClosestToPoint(NavProfile, GuardLocation, AITAC_GetTeamStartingLocation(EnemyTeam), path, 500.0f); - ProspectiveNewGuardLoc.z = prev(prev(path.end()))->Location.z; + if (dtStatusSucceed(SearchResult) && path.size() > 0) + { + Vector FurthestPoint = UTIL_GetFurthestVisiblePointOnPath(GuardLocation + Vector(0.0f, 0.0f, 64.0f), path, true); + FurthestPoint.z += 64.0f; - pBot->GuardInfo.GuardPoints[pBot->GuardInfo.NumGuardPoints++] = ProspectiveNewGuardLoc; + Vector LookDir = UTIL_GetVectorNormal(FurthestPoint - GuardLocation); + + bool bShouldAdd = true; + + for (auto it = pBot->GuardInfo.GuardPoints.begin(); it != pBot->GuardInfo.GuardPoints.end(); it++) + { + Vector ThisLookDir = UTIL_GetVectorNormal((*it) - GuardLocation); + + if (UTIL_GetDotProduct(ThisLookDir, LookDir) > 0.8f) + { + bShouldAdd = false; + break; + } + } + + if (bShouldAdd) + { + pBot->GuardInfo.GuardPoints.push_back(FurthestPoint); + } + } } } if (AIMGR_GetTeamType(pBot->Player->GetTeam()) == AVH_CLASS_TYPE_MARINE) { - if (vDist2DSq(GuardLocation, AITAC_GetTeamStartingLocation(pBot->Player->GetTeam())) > sqrf(UTIL_MetresToGoldSrcUnits(15.0f))) + if (!UTIL_QuickTrace(pEdict, GuardLocation, AITAC_GetTeamStartingLocation(pBot->Player->GetTeam()))) { - dtStatus SearchResult = FindPathClosestToPoint(NavProfile, AITAC_GetTeamStartingLocation(pBot->Player->GetTeam()), GuardLocation, path, 500.0f); - if (dtStatusSucceed(SearchResult) && path.size() > 0) + if (vDist2DSq(GuardLocation, AITAC_GetTeamStartingLocation(pBot->Player->GetTeam())) > sqrf(UTIL_MetresToGoldSrcUnits(15.0f))) { - Vector FinalApproachDir = UTIL_GetVectorNormal2D(path.back().Location - prev(prev(path.end()))->Location); - Vector ProspectiveNewGuardLoc = GuardLocation - (FinalApproachDir * 300.0f); + dtStatus SearchResult = FindPathClosestToPoint(NavProfile, GuardLocation, AITAC_GetTeamStartingLocation(pBot->Player->GetTeam()), path, 500.0f); - ProspectiveNewGuardLoc.z = prev(prev(path.end()))->Location.z; + if (dtStatusSucceed(SearchResult) && path.size() > 0) + { + Vector FurthestPoint = UTIL_GetFurthestVisiblePointOnPath(GuardLocation + Vector(0.0f, 0.0f, 64.0f), path, true); + FurthestPoint.z += 64.0f; - pBot->GuardInfo.GuardPoints[pBot->GuardInfo.NumGuardPoints++] = ProspectiveNewGuardLoc; + Vector LookDir = UTIL_GetVectorNormal(FurthestPoint - GuardLocation); + + bool bShouldAdd = true; + + for (auto it = pBot->GuardInfo.GuardPoints.begin(); it != pBot->GuardInfo.GuardPoints.end(); it++) + { + Vector ThisLookDir = UTIL_GetVectorNormal((*it) - GuardLocation); + + if (UTIL_GetDotProduct(ThisLookDir, LookDir) > 0.8f) + { + bShouldAdd = false; + break; + } + } + + if (bShouldAdd) + { + pBot->GuardInfo.GuardPoints.push_back(FurthestPoint); + } + } } } } diff --git a/main/source/mod/AvHAITask.h b/main/source/mod/AvHAITask.h index afb8297b..674bd49a 100644 --- a/main/source/mod/AvHAITask.h +++ b/main/source/mod/AvHAITask.h @@ -118,4 +118,5 @@ void BotAlienHealTarget(AvHAIPlayer* pBot, edict_t* HealTarget); void RegisterBotAlienBuildAttempt(AvHAIPlayer* pBot, AvHAIPlayerTask* Task, Vector PlacementLocation, AvHAIDeployableStructureType DesiredStructure); + #endif \ No newline at end of file From 3e360579483d1892e5631846b2e3302f316771a4 Mon Sep 17 00:00:00 2001 From: RGreenlees Date: Tue, 16 Apr 2024 17:39:23 +0100 Subject: [PATCH 3/4] Lift improvements * Fixed bots getting into a clusterfuck when multiple try to use a lift at the same time. * Improved nav meshes for various maps * Added new console commands for debugging to force bots to evolve * If there is no CC, infantry portal or hives in NS mode, bots will revert to deathmatch behaviour to finish the game * Fixed bots flying off target when leaping/blinking sometimes * If there is no armoury to retreat to, marines won't back off and will attack (stops clustering around the CC for no reason). --- main/navmeshes/co_kestrel.nav | Bin 857402 -> 857486 bytes main/navmeshes/ns_askr_b6.nav | Bin 2238788 -> 2240059 bytes main/navmeshes/ns_lost.nav | Bin 1379953 -> 1380037 bytes main/navmeshes/ns_machina.nav | Bin 2654691 -> 2655699 bytes main/navmeshes/ns_nothing.nav | Bin 1560146 -> 1564928 bytes main/source/mod/AvHAIConstants.h | 3 +- main/source/mod/AvHAINavigation.cpp | 928 ++++++++++++++++--------- main/source/mod/AvHAINavigation.h | 8 +- main/source/mod/AvHAIPlayer.cpp | 97 ++- main/source/mod/AvHAIPlayer.h | 3 + main/source/mod/AvHAIPlayerManager.cpp | 41 ++ main/source/mod/AvHAIPlayerManager.h | 2 + main/source/mod/AvHConsoleCommands.cpp | 100 ++- 13 files changed, 836 insertions(+), 346 deletions(-) diff --git a/main/navmeshes/co_kestrel.nav b/main/navmeshes/co_kestrel.nav index d9f025693ed004bac0b4ec909f7e084d02b008b1..bd5ed480410f267b570ef77b6a0369b67f0bfb04 100644 GIT binary patch delta 1297 zcmYk*e`rl%9LMqVJm=T$cF$&;B}p5zG}4R>x3#z}BuRD&NoyEM`H>_^XsxxhY3cTD zjU-7dA!#9zdzPdTOKWLKYiWPX&y@W#-|zED+o|t)o%cD<+1+i=9^Wo&=_tFmK;rY^4YRl@&Z^NQ;jhtqj_u|hsWjdczm8To(NAmPex})i8!qqSX@RSMlAy0%SQ-Y6lp8wbQ zc>VysrzzhH^7+?Y?U}D~P;luI>ZxGU7gV;-6B9R&eM7 z>Yo)8E*(N8!80%<*p!=XR#pm{4xm~Em!6;o@hmIH ztc(dZ?L{@CI&=8nLQ_VrSyC?8RD)^~9D0E27d-N3nw6!3PrFbJf~LEuK9rpo6z`eZ u+H$qu?+KSxSSe>~cerjxZ>V^iTbHr59oecpa#Zt7-_Fyw`Sh(VKl2|jaR}T1 delta 1219 zcmYk*e@GKy9LMqJHgCUg{%Z6`)D)E%5hgj~Dybn75fM2;B4UgY5&aPn5fYIhA`%u7 z;}D66h$xYYict{_azsc(M2Lk&gp_|sMD&N6*>m4_Ne7?jb$j?c&vv)F3nR^sZZ+Sj zH)0)1sgC)G9+lc0v#`fD`fS6EN5`vEreo^(bo@F2ouE!gCtR?NNM_DZ&d_`$t(k?? zf_%!u47C1|$w8O~dr>9_;1eW&%Va-HLDP~<_QIr)UvDK0mG6}CoQxwfzLjyw9i4m=^@u)O+!U?zx&*3|)Dwk$E9D^Zv z2D7lTLYgT!3VC=6Gf-VA%~m)JgYX!pp}b0(HsoLc3RUuQgsY{JgbehFbUq6m5A~z{(B|<0Db}b761SM diff --git a/main/navmeshes/ns_askr_b6.nav b/main/navmeshes/ns_askr_b6.nav index 87f283146b5b9aaef9f5b3778b13e7c03cd410ec..6763fd2e587d03cdebe00aa64d772d084b8a68c2 100644 GIT binary patch delta 52275 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%0A}_rmjkT>OfUvVIv81ZL^?Rv+Y;qq;f?vW znOPheo2{(IWoBrPQ^Ik2C_byBTcz5Y)xkz5X<$|{FpIr(^fHXc7NhdfPTaH;p8VvA zcJwSrJ&bl_vtmZ9gY}E%V?ReXP}}XusnuS?!88U_VPg7qoJ7mutJi@Z0``|$`<(13 zTLxYitGIxJj-D8FT}S6FNx5YsT6$tTdWox;aV>)|jJM)oofls?vSp}M-Vo+lKaZpV z`6WC! z3sbJTj+ma~NMop0181XZUf;ncD zT07&Brv7cD$*9$B9cX~0!=%L`sX+(v&0N7kNMo4vyo+*omU3#?8Fj}rsmyw}bY%)w zM|!*)H)j37*eHe=f$SDI6jC#K7qN_vU z8`U&X$K&s5vm-DGcfHiB27GydH-+9+^n)*Lc1~y!aa$bBO_|6vbxw(4 z%$aKC*UlatFTMe(iOk`YV;3?PPH-pMD;DWECe{}WU*<;KH&dP0bfaVcUd7yHRb*q- z0jDCGBD0pVL6^QU&6wqQDsVg;iB~aRSq?=MI<(KBj+}6A!$vRG`M|jwWL7`p`1OMf zyv$dA4-@aC4X3l;OFjC}NpY(w=bb(X6>}lfT}-&>$o3ZVl^-K*j8?Wn9=2X{M29=- z=TPB>l|j%`;%8fOcc9^#XR8WME+?p+72RV*Upfbg^ydO z9(`gZWwF+zdZsi;T~OOhx}A0Hzr_5;L5+|Y{ug2D=L|8iqZ*|Cr-qqC4OXV^J=;39 z%`GeG+@D`Tj81JhHNS_0@_+pYkr3mGRJU{H{UT6$X0gUe3pRL@`qtc-T5Vd(r2b>= zq)w44HF|xEq$^%0sm{2isV~=WoHVkKH|fQ?OH*mrBj>$pBd?oDBd?c8$|Q0lejnU2 zwfJr;Y5j_gsrS}3Pu=JQlQJFHnA-XC=Bcyx1d?_({xWrl-7+=Hm0(i6`Cp2Zth0vu PlV%MsL!%1k-Twaoqwf82 delta 51257 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 z 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 diff --git a/main/navmeshes/ns_lost.nav b/main/navmeshes/ns_lost.nav index 54be67ac7d5630ebec211cf759ecc790b6eec7c7..378f2586f97550df493a612e26d6953c7f8f0e84 100644 GIT binary patch delta 764 zcmXYvUr1A77{<@HxwEOYrk*1eO)3&+vn~pPb|Dm_%b+F^T?9ccvb3}`QZ)aBmZ_yQ zpECbe8h8;A(LkcBbrTpQ=|zN4;AO(ta&2p?=N%pRo!`Uve$RI<&KDi8`7lxQYL6;? zp=nzElA$^1!}+FW7dv}=s?Vnc3$csB1*DK{BAbbmY#}aEM2bmC*r$xP zFBRpBZoj5o^>1CDiY&d^!QAQJ7DGhSb{?_uyDq{9--r4QwRYUre$;lVpEaiv63IOmVeY za;xNkYQwQKm)vP?jHbA;kx8{rw&Qt&2C~Xd_%Z4|+<}e3r{{Uw9{yYEx delta 691 zcmWlXUr19?9LLYO^WNQUxu)GK5hxKs)+{P0a8OXJpqHR#J@n99i!7}y4U^0=luWIp z`OW3Dzk_;+2vXQXPxcZN6y-w?Jrq3_45w>bn|*%|pYu6<&iUQ@aPPZROLns5)p}i* zR!X&fc9c#3vR&mBSNBKsU_=WB@sKKF5{r0=O?<>p0%QfLCPA{2gh&mkC97s5+UfbS z@#ojoQKimB5B!*(O9o`$7tL&&m{V%)9+U445v8>9Bj|I(v%Yy}YrQrQS#ZMo1mX)$ zOvjNCokTF_#PBBPG+`v?H0o2BVbHDcFH)y*TyzGnMQyN_sCFC^oyAKENAeuqoag9y z9L=+L;DzV{Dx!-x{FmxPTGWN2=n@VVIJ#Ki=!XJFyRjr8Rb=QaGW1}o$gr=(P+wxW zg8d~<_97{|ia(-0?EObw!#IUqWnOm6yxfo7W%e5wqtIMouc@#PAW~r;#3+Rw%T5T{ ziWAj0v2&Sy2t%S<_%0ewYHCdw3i8D7uezRn!E!L`l3CJwSs=O`=1TLaUdL$(kIV!WxTd x8ts(%kl!|d2Fu-m-xg0Fq0Y3~^B!8Jj;sv(Fti{{yM?=Y0SG diff --git a/main/navmeshes/ns_machina.nav b/main/navmeshes/ns_machina.nav index 3e0fdb9fec05ac720707bff3607893cdf2d87081..831f4a2c46e0b9150779aa21a6315ade3b0f029e 100644 GIT binary patch delta 1161 zcmZvbUr19?9LLYy-9MdfTItlKuF`q#e5i+BoUA|WST7=h6k!;FP(gpRG7!PCOcbpY zBCZlc8A%i?dyxehl)HsQpi~c01olS}!iUrz%AtMFxx2#$FMM`>clUgLf9{_j9TDk6 zZ$x@pBIRaEgoG4Itb~xRYn0fq9_;K0NL>MmV*)ZT0}HSM8?b{kkPaLm17rdxaDgn4 z4K{(zU<=3rxxfwbKt3n{9a;@Lk|{Q?&|j=tq?O*kJoWXC4I*0X0g)ZFcaOtcoyF;SOaH-wr-s-Q|s zBi(C}B=uP{t(Bx$#%0=T4=yfv(EDUOuzNY=lj|nd)?8XgI4p9=NFnlIm5@9iD~Hd) z*F3cy{a0LH;=K}W=E<4R>$)`2QsUyn)c8gU6FfgQx&c2FwZDdXD!zYlicxb|l+_Y_ zqMJvC#Mr!&q033VSjb$@+6n!)%PcBJe?DNhPnZxpwX>0^&@I?%Pi{9ur-%)ms@`(w zl{QHziP15(uZPFD=~LrEH?PwzN!^=FN7Y>?q03<+l(ygtW-8&aQ}dh}OI0_Tw{EPz zY1OO08;r7%Rk@11RJ6~lBSPn2f}z_sZhofW597+Yl32t^X>>+Nvt7u zYGdE@yU#yiBSrd#0|c8c>CgMUuaAAIcHs8S#jjkrAv)mm8v{6?D>yF%{1CC;LH2^K hP05|i!SuIJKF}{x@Met;GS;Qw|Ld<$Ol_mp=KrVL?g#(? delta 391 zcmYk%zb^w}7zgm@IoI}3?og-g`Ee-s9*J0ci^$!@Kr9B6#bOaPkQhibjdbWAaEXQ7 zN}}6Y=?w;(7%fCdj5bSsuQAA*&-=XZ@cq7dpBf>*)k1ETSZ5}3Z9!=w3Qh!NFgL3; zhwBa}B+XA;`fn=r96#C_oVm7=bKh;trzp!OG;z}{z`(MJz>u$P1d>M69OyGm#)66;!Lr5 lwcUAD`WINQ2%9-Ns)(f&OTq1d*kCEj9*Tw%)vIDn{srn5TEzeW diff --git a/main/navmeshes/ns_nothing.nav b/main/navmeshes/ns_nothing.nav index a307e35c61bacdc70dde8474eb2b8f0b21db542a..a0c01e9b2fd03645eb42e7b161b33713c910be1e 100644 GIT binary patch delta 300915 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

lLiQC_8~Qk0jgQ7bz!(q4VYWiX%r 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%0Di*?%mFG?SNy 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 LEB&*qZxj9x;MYFq diff --git a/main/source/mod/AvHAIConstants.h b/main/source/mod/AvHAIConstants.h index 5eec3bf8..00946ad8 100644 --- a/main/source/mod/AvHAIConstants.h +++ b/main/source/mod/AvHAIConstants.h @@ -228,6 +228,7 @@ typedef struct _OFF_MESH_CONN Vector FromLocation = g_vecZero; Vector ToLocation = g_vecZero; edict_t* TargetObject = nullptr; + bool bBiDirectional = false; } AvHAIOffMeshConnection; typedef struct _STRUCTURE_OBSTACLE @@ -749,11 +750,11 @@ typedef struct AVH_AI_PLAYER vector DangerTurrets; - AvHAIPlayerTask* CurrentTask = nullptr; // Bot's current task they're performing AvHAIPlayerTask PrimaryBotTask; AvHAIPlayerTask SecondaryBotTask; AvHAIPlayerTask WantsAndNeedsTask; AvHAIPlayerTask CommanderTask; // Task assigned by the commander + AvHAIPlayerTask* CurrentTask = &PrimaryBotTask; // Bot's current task they're performing float BotNextTaskEvaluationTime = 0.0f; diff --git a/main/source/mod/AvHAINavigation.cpp b/main/source/mod/AvHAINavigation.cpp index 3b55d255..ac8e2594 100644 --- a/main/source/mod/AvHAINavigation.cpp +++ b/main/source/mod/AvHAINavigation.cpp @@ -1091,6 +1091,7 @@ bool LoadNavMesh(const char* mapname) NewMapConnection.TargetObject = nullptr; NewMapConnection.FromLocation = Vector(def.pos[0], -def.pos[2], def.pos[1]); NewMapConnection.ToLocation = Vector(def.pos[3], -def.pos[5], def.pos[4]); + NewMapConnection.bBiDirectional = def.bBiDir; for (int ii = 0; ii < BUILDING_NAV_MESH; ii++) { @@ -1680,7 +1681,7 @@ dtStatus FindFlightPathToPoint(const nav_profile &NavProfile, Vector FromLocatio for (int nVert = 0; nVert < nVertCount; nVert++) { Vector NextPathPoint = g_vecZero; - Vector PrevPoint = (path.size() > 0) ? path.back().Location : FromFloorLocation; + Vector PrevPoint = (path.size() > 0) ? path.back().Location : FromLocation; // The path point output by Detour uses the OpenGL, right-handed coordinate system. Convert to Goldsrc coordinates NextPathPoint.x = StraightPath[nIndex++]; @@ -1992,13 +1993,55 @@ dtStatus FindPathClosestToPoint(const nav_profile& NavProfile, const Vector From return DT_SUCCESS; } -dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, const Vector FromLocation, const Vector ToLocation, vector& path, float MaxAcceptableDistance) +Vector NAV_GetNearestLiftDisembarkPoint(nav_door* LiftReference) +{ + AvHAIOffMeshConnection* NearestConnection = UTIL_GetOffMeshConnectionForLift(LiftReference); + + if (!NearestConnection) { return ZERO_VECTOR; } + + Vector DesiredStartStop = ZERO_VECTOR; + Vector DesiredEndStop = ZERO_VECTOR; + float minStartDist = 0.0f; + float minEndDist = 0.0f; + + // Find the desired stop point for us to get onto the lift + for (auto it = LiftReference->StopPoints.begin(); it != LiftReference->StopPoints.end(); it++) + { + Vector LiftStopPoint = (*it) + Vector(0.0f, 0.0f, LiftReference->DoorEdict->v.size.z * 0.5f); + + float thisStartDist = vDist3DSq(LiftStopPoint, NearestConnection->FromLocation); + float thisEndDist = vDist3DSq(LiftStopPoint, NearestConnection->ToLocation); + if (vIsZero(DesiredStartStop) || thisStartDist < minStartDist) + { + DesiredStartStop = *it; + minStartDist = thisStartDist; + } + + if (vIsZero(DesiredEndStop) || thisEndDist < minEndDist) + { + DesiredEndStop = *it; + minEndDist = thisEndDist; + } + } + + Vector LiftPosition = UTIL_GetCentreOfEntity(LiftReference->DoorEdict); + + bool bIsLiftMoving = (LiftReference->DoorEdict->v.velocity.Length() > 0.0f); + bool bIsLiftMovingToStart = bIsLiftMoving && (vDist3DSq(LiftReference->DoorEntity->m_vecFinalDest, DesiredStartStop) < sqrf(50.0f)); + bool bIsLiftMovingToEnd = bIsLiftMoving && (vDist3DSq(LiftReference->DoorEntity->m_vecFinalDest, DesiredEndStop) < sqrf(50.0f)); + bool bIsLiftAtOrNearStart = (vDist3DSq(LiftPosition, DesiredStartStop) < sqrf(50.0f)); + bool bIsLiftAtOrNearEnd = (vDist3DSq(LiftPosition, DesiredEndStop) < sqrf(50.0f)); + + return (bIsLiftAtOrNearStart || bIsLiftMovingToStart) ? NearestConnection->FromLocation : NearestConnection->ToLocation; +} + +dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, const Vector ToLocation, vector& path, float MaxAcceptableDistance) { if (!pBot) { return DT_FAILURE; } if (pBot->BotNavInfo.NavProfile.bFlyingProfile) { - return FindFlightPathToPoint(pBot->BotNavInfo.NavProfile, FromLocation, ToLocation, path, MaxAcceptableDistance); + return FindFlightPathToPoint(pBot->BotNavInfo.NavProfile, pBot->Edict->v.origin, ToLocation, path, MaxAcceptableDistance); } const dtNavMeshQuery* m_navQuery = UTIL_GetNavMeshQueryForProfile(pBot->BotNavInfo.NavProfile); @@ -2007,12 +2050,39 @@ dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, bool bHasWelder = (m_navFilter->getIncludeFlags() & SAMPLE_POLYFLAGS_WELD); - if (!m_navQuery || !m_navMesh || !m_navFilter || vIsZero(FromLocation) || vIsZero(ToLocation)) + if (!m_navQuery || !m_navMesh || !m_navFilter || vIsZero(ToLocation)) { return DT_FAILURE; } + Vector FromLocation = pBot->CurrentFloorPosition; + Vector FromFloorLocation = AdjustPointForPathfinding(FromLocation); + + nav_door* LiftReference = UTIL_GetNavDoorByEdict(pBot->Edict->v.groundentity); + bool bMustDisembarkLiftFirst = false; + Vector LiftStart = ZERO_VECTOR; + Vector LiftEnd = ZERO_VECTOR; + + if (LiftReference) + { + LiftEnd = NAV_GetNearestLiftDisembarkPoint(LiftReference); + + if (!vIsZero(LiftEnd)) + { + FromLocation = LiftEnd; + + AvHAIOffMeshConnection* LiftOffMesh = UTIL_GetOffMeshConnectionForLift(LiftReference); + + if (LiftOffMesh) + { + LiftStart = (vEquals(LiftEnd, LiftOffMesh->ToLocation, 5.0f)) ? LiftOffMesh->FromLocation : LiftOffMesh->ToLocation; + bMustDisembarkLiftFirst = true; + FromFloorLocation = LiftEnd; + } + } + } + Vector ToFloorLocation = AdjustPointForPathfinding(ToLocation); float pStartPos[3] = { FromFloorLocation.x, FromFloorLocation.z, -FromFloorLocation.y }; @@ -2093,6 +2163,19 @@ dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, Vector NodeFromLocation = FromFloorLocation; + if (bMustDisembarkLiftFirst) + { + bot_path_node StartPathNode; + StartPathNode.FromLocation = LiftStart; + StartPathNode.Location = LiftEnd; + StartPathNode.flag = SAMPLE_POLYFLAGS_LIFT; + StartPathNode.area = SAMPLE_POLYAREA_LIFT; + + path.push_back(StartPathNode); + + NodeFromLocation = LiftEnd; + } + for (int nVert = 0; nVert < nVertCount; nVert++) { bot_path_node NextPathNode; @@ -3319,12 +3402,14 @@ void NewMove(AvHAIPlayer* pBot) // Used to anticipate if we're about to enter a crouch area so we can start crouching early unsigned char NextArea = SAMPLE_POLYAREA_GROUND; + SamplePolyFlags NextNavFlags = SAMPLE_POLYFLAGS_DISABLED; if (pBot->BotNavInfo.CurrentPathPoint < pBot->BotNavInfo.CurrentPath.size() - 1) { bot_path_node NextPathNode = pBot->BotNavInfo.CurrentPath[pBot->BotNavInfo.CurrentPathPoint + 1]; NextArea = NextPathNode.area; + NextNavFlags = (SamplePolyFlags)NextPathNode.flag; bool bIsNearNextPoint = (vDist2DSq(pBot->Edict->v.origin, NextPathNode.FromLocation) <= sqrf(50.0f)); @@ -3399,7 +3484,7 @@ void NewMove(AvHAIPlayer* pBot) // While moving, check to make sure we're not obstructed by a func_breakable, e.g. vent or window. CheckAndHandleBreakableObstruction(pBot, MoveFrom, MoveTo, CurrentNavFlags); - if (CurrentNavFlags != SAMPLE_POLYFLAGS_LIFT) + if (CurrentNavFlags != SAMPLE_POLYFLAGS_LIFT && NextNavFlags != SAMPLE_POLYFLAGS_LIFT) { CheckAndHandleDoorObstruction(pBot); } @@ -4083,6 +4168,61 @@ DoorTrigger* UTIL_GetDoorTriggerByEntity(edict_t* TriggerEntity) return nullptr; } +bool HasDoorBeenTriggered(nav_door* DoorRef) +{ + if (!DoorRef) { return false; } + + for (auto it = DoorRef->TriggerEnts.begin(); it != DoorRef->TriggerEnts.end(); it++) + { + if (it->bIsActivated && gpGlobals->time < it->NextActivationTime) + { + return true; + } + } + + return false; +} + +void NAV_ForceActivateTrigger(AvHAIPlayer* pBot, DoorTrigger* TriggerRef) +{ + if (!TriggerRef || !TriggerRef->Entity) { return; } + + + + switch (TriggerRef->TriggerType) + { + case DOOR_TRIGGER: + TriggerRef->Entity->Touch(pBot->Player); + break; + case DOOR_USE: + case DOOR_BUTTON: + TriggerRef->Entity->Use(pBot->Player, pBot->Player, USE_TOGGLE, 0.0f); + break; + default: + break; + } +} + +DoorTrigger* NAV_GetTriggerReachableFromLift(float LiftHeight, nav_door* Lift) +{ + DoorTrigger* Result = nullptr; + + for (auto it = Lift->TriggerEnts.begin(); it != Lift->TriggerEnts.end(); it++) + { + if (!it->bIsActivated) { continue; } + + Vector ClosestPointOnButton = UTIL_GetClosestPointOnEntityToLocation(UTIL_GetCentreOfEntity(Lift->DoorEdict), (*it).Edict); + Vector ClosestPointOnLift = UTIL_GetClosestPointOnEntityToLocation(ClosestPointOnButton, Lift->DoorEdict); + + if (vDist2DSq(ClosestPointOnButton, ClosestPointOnLift) < sqrf(max_player_use_reach) && fabs(LiftHeight - ClosestPointOnButton.z) < 64.0f) + { + return &(*it); + } + } + + return nullptr; +} + void LiftMove(AvHAIPlayer* pBot, const Vector StartPoint, const Vector EndPoint) { nav_door* NearestLift = UTIL_GetClosestLiftToPoints(StartPoint, EndPoint); @@ -4131,230 +4271,229 @@ void LiftMove(AvHAIPlayer* pBot, const Vector StartPoint, const Vector EndPoint) bool bIsOnLift = (pBot->Edict->v.groundentity == NearestLift->DoorEdict); bool bWaitingToEmbark = (!bIsOnLift && vDist3DSq(pBot->Edict->v.origin, StartPoint) < vDist3DSq(pBot->Edict->v.origin, EndPoint)) || (bIsOnLift && !bIsLiftMoving && bIsLiftAtOrNearStart); - - // Do nothing if we're on a moving lift - if (bIsLiftMoving && bIsOnLift) + if (bIsOnLift) { - Vector LiftEdge = UTIL_GetClosestPointOnEntityToLocation(StartPoint, NearestLift->DoorEdict); - - bool bFullyOnLift = vDist2DSq(pBot->Edict->v.origin, LiftEdge) > sqrf(GetPlayerRadius(pBot->Player) * 2.0f); - - if (!bFullyOnLift) + // We're approaching our destination, get off + if (bIsLiftAtOrNearEnd) { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->Edict->v.origin); + MoveToWithoutNav(pBot, EndPoint); + return; } - if (!UTIL_QuickHullTrace(pBot->Edict, pBot->Edict->v.origin, pBot->CollisionHullTopLocation + Vector(0.0f, 0.0f, 64.0f))) + // Either the lift is moving, or is about to start moving + if (bIsLiftMoving || (bIsLiftAtOrNearStart && HasDoorBeenTriggered(NearestLift))) { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->Edict->v.origin); + Vector LiftEdge = UTIL_GetClosestPointOnEntityToLocation(StartPoint, NearestLift->DoorEdict); + + bool bFullyOnLift = vDist2DSq(pBot->Edict->v.origin, LiftEdge) > sqrf(GetPlayerRadius(pBot->Player) * 2.0f); + + if (!bFullyOnLift) + { + pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->Edict->v.origin); + } + + if (!UTIL_QuickHullTrace(pBot->Edict, pBot->Edict->v.origin, pBot->CollisionHullTopLocation + Vector(0.0f, 0.0f, 64.0f))) + { + pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->Edict->v.origin); + } + + return; } + // We're on the lift, but it's not about to start moving. + + + // We're trapped half-way. Some dick must have hit the button and stopped the lift part-way + // Activate force powers! + if (!bIsLiftAtOrNearStart) + { + for (auto it = NearestLift->TriggerEnts.begin(); it != NearestLift->TriggerEnts.end(); it++) + { + if (it->bIsActivated) + { + NAV_ForceActivateTrigger(pBot, &(*it)); + return; + } + } + } + + // We're not trapped, see if there is a button we can reach from where we are + + DoorTrigger* NearestTrigger = NAV_GetTriggerReachableFromLift(pBot->Edict->v.origin.z, NearestLift); + + if (NearestTrigger) + { + if (IsPlayerInUseRange(pBot->Edict, NearestTrigger->Edict)) + { + BotUseObject(pBot, NearestTrigger->Edict, false); + return; + } + else + { + pBot->desiredMovementDir = UTIL_GetVectorNormal2D(UTIL_GetCentreOfEntity(NearestTrigger->Edict) - pBot->Edict->v.origin); + } + + return; + } + + // Otherwise, we're able to get back to the start, so do that + MoveToWithoutNav(pBot, StartPoint); return; + } // if we've reached our stop, or we can directly get to the end point. Move straight there - - Vector BotNavPosition = UTIL_ProjectPointToNavmesh(pBot->CollisionHullBottomLocation); - - BotNavPosition = (vIsZero(BotNavPosition)) ? pBot->CollisionHullBottomLocation : BotNavPosition; - - if ((bIsOnLift && !bIsLiftMoving && bIsLiftAtOrNearEnd) || UTIL_PointIsDirectlyReachable(BotNavPosition, EndPoint)) + if (UTIL_PointIsDirectlyReachable(pBot->CollisionHullBottomLocation, EndPoint)) { MoveToWithoutNav(pBot, EndPoint); return; } - // We must be either waiting to embark, or we've stopped elsewhere on our journey and need to get the lift moving again - - // Lift is leaving without us! Get on it quick - if (bIsLiftMoving && !bIsLiftMovingToStart && bIsLiftAtOrNearStart && !bIsOnLift) + // Lift is at the embark point + if (bIsLiftAtOrNearStart) { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->CollisionHullBottomLocation); - BotJump(pBot); - return; - } - - if (bIsLiftMoving) - { - if (vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(50.0f)) + // Lift has been triggered or started moving, get on board before it leaves + if (HasDoorBeenTriggered(NearestLift) || bIsLiftMovingToEnd) { - NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); - } - return; - } - - if (bIsLiftAtOrNearStart && vEquals(DesiredStartStop, DesiredEndStop)) - { - if (!bIsOnLift) - { - if (vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(50.0f)) - { - NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); - return; - } - - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->CollisionHullBottomLocation); - } - return; - } - - // Lift is stopped somewhere else, summon it - if (!bIsLiftMoving) - { - DoorTrigger* NearestLiftTrigger = nullptr; - - if (bIsLiftAtOrNearStart) - { - float NearestDist = 0.0f; - - for (auto it = NearestLift->TriggerEnts.begin(); it != NearestLift->TriggerEnts.end(); it++) - { - if (it->bIsActivated) - { - Vector CheckLocation = UTIL_GetCentreOfEntity(NearestLift->DoorEdict); - CheckLocation.z = pBot->Edict->v.origin.z; - - Vector ButtonLocation = UTIL_GetClosestPointOnEntityToLocation(CheckLocation, it->Edict); - Vector NearestPointOnLift = UTIL_GetClosestPointOnEntityToLocation(ButtonLocation, NearestLift->DoorEdict); - - NearestPointOnLift.z = pBot->Edict->v.origin.z; - - float thisDist = vDist3DSq(ButtonLocation, NearestPointOnLift); - - if (thisDist < sqrf(64.0f)) - { - if (!NearestLiftTrigger || thisDist < NearestDist) - { - NearestLiftTrigger = &(*it); - NearestDist = thisDist; - } - - } - } - } - } - - if (!NearestLiftTrigger) - { - NearestLiftTrigger = UTIL_GetNearestDoorTrigger(pBot->Edict->v.origin, NearestLift, nullptr, false); - } - - if (NearestLiftTrigger) - { - // If the trigger is on cooldown, or the door/train is designed to automatically return without being summoned, then just wait for it to come back - if (gpGlobals->time < NearestLiftTrigger->NextActivationTime || (NearestLift->DoorType == DOORTYPE_TRAIN && !(NearestLift->DoorEdict->v.spawnflags & SF_TRAIN_WAIT_RETRIGGER)) || (NearestLift->DoorType == DOORTYPE_DOOR && NearestLift->DoorEntity && NearestLift->DoorEntity->GetToggleState() == TS_AT_TOP && NearestLift->DoorEntity->m_flWait > 0.0f && !FBitSet(NearestLift->DoorEdict->v.spawnflags, SF_DOOR_NO_AUTO_RETURN))) - { - if (!bIsOnLift && !bIsLiftAtOrNearStart) - { - // Make sure we won't be squashed by the lift coming down on us - if (vBBOverlaps2D(pBot->Edict->v.absmin, pBot->Edict->v.absmax, NearestLift->DoorEdict->v.absmin, NearestLift->DoorEdict->v.absmax)) - { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(StartPoint - DesiredStartStop); - } - else - { - if (vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(32.0f)) - { - NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); - } - } - - } - else - { - bool bFullyOnLift = false; - - if (bIsOnLift) - { - Vector LiftEdge = UTIL_GetClosestPointOnEntityToLocation(StartPoint, NearestLift->DoorEdict); - - bFullyOnLift = vDist2DSq(pBot->Edict->v.origin, LiftEdge) > (sqrf(GetPlayerRadius(pBot->Player) * 1.1f) ); - } - - if (bIsLiftAtOrNearStart && (!bIsOnLift || !bFullyOnLift) ) - { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - StartPoint); - } - } - return; - } - - if (bIsLiftAtOrNearStart) - { - Vector ButtonFloorLocation = UTIL_GetClosestPointOnEntityToLocation(pBot->Edict->v.origin, NearestLiftTrigger->Edict); - - Vector NearestPointOnLiftToButton = UTIL_GetClosestPointOnEntityToLocation(ButtonFloorLocation, NearestLift->DoorEdict); - - bool ButtonReachableFromLift = (NearestLiftTrigger->TriggerType == DOOR_TRIGGER) ? vBBOverlaps2D(NearestLiftTrigger->Edict->v.absmin, NearestLiftTrigger->Edict->v.absmax, NearestLift->DoorEdict->v.absmin, NearestLift->DoorEdict->v.absmax) : (!vIsZero(ButtonFloorLocation) && (vDist2DSq(ButtonFloorLocation, NearestPointOnLiftToButton) <= sqrf(64.0f))); - - if (ButtonReachableFromLift) - { - if (NearestLiftTrigger->TriggerType == DOOR_BUTTON) - { - if (IsPlayerInUseRange(pBot->Edict, NearestLiftTrigger->Edict)) - { - BotUseObject(pBot, NearestLiftTrigger->Edict, false); - return; - } - } - else - { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(NearestLiftTrigger->Edict->v.origin - pBot->Edict->v.origin); - } - - if (!bIsOnLift) - { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - pBot->Edict->v.origin); - return; - } - else - { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(ButtonFloorLocation - pBot->Edict->v.origin); - return; - } - } - } - - if (NearestLiftTrigger->TriggerType == DOOR_BUTTON) - { - Vector UseLocation = UTIL_GetButtonFloorLocation(pBot->Edict->v.origin, NearestLiftTrigger->Edict); - - NAV_SetUseMovementTask(pBot, NearestLiftTrigger->Edict, NearestLiftTrigger); - } - else if (NearestLiftTrigger->TriggerType == DOOR_TRIGGER) - { - NAV_SetTouchMovementTask(pBot, NearestLiftTrigger->Edict, NearestLiftTrigger); - } - else if (NearestLiftTrigger->TriggerType == DOOR_WELD) - { - NAV_SetWeldMovementTask(pBot, NearestLiftTrigger->Edict, NearestLiftTrigger); - } - else if (NearestLiftTrigger->TriggerType == DOOR_BREAK) - { - NAV_SetBreakMovementTask(pBot, NearestLiftTrigger->Edict, NearestLiftTrigger); - } - - return; - } - else - { - if (!bIsOnLift && vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(50.0f) && !bIsLiftAtOrNearStart) + if (vDistanceFromLine2D(StartPoint, LiftPosition, pBot->Edict->v.origin) > sqrf(50.0f)) { NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); } else { - if (!bIsOnLift && bIsLiftAtOrNearStart) + MoveToWithoutNav(pBot, LiftPosition); + } + + + return; + } + + if (bIsLiftMovingToStart) + { + if (vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(100.0f)) + { + NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); + } + else + { + if (vBBOverlaps2D(pBot->Edict->v.absmin, pBot->Edict->v.absmax, NearestLift->DoorEdict->v.absmin, NearestLift->DoorEdict->v.absmax)) { - pBot->desiredMovementDir = UTIL_GetVectorNormal2D(LiftPosition - StartPoint); + Vector NearestPointOnLift = UTIL_GetClosestPointOnEntityToLocation(pBot->Edict->v.origin, NearestLift->DoorEdict); + pBot->desiredMovementDir = UTIL_GetVectorNormal2D(pBot->Edict->v.origin - LiftPosition); + } + } + return; + } + + DoorTrigger* TriggerToActivate = NAV_GetTriggerReachableFromLift(pBot->Edict->v.origin.z, NearestLift); + + if (TriggerToActivate) + { + if (vDistanceFromLine2D(StartPoint, LiftPosition, pBot->Edict->v.origin) > sqrf(50.0f)) + { + NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); + } + else + { + MoveToWithoutNav(pBot, LiftPosition); + } + + return; + } + + TriggerToActivate = UTIL_GetNearestDoorTrigger(pBot->Edict->v.origin, NearestLift, nullptr, false); + + if (!TriggerToActivate) + { + for (auto it = NearestLift->TriggerEnts.begin(); it != NearestLift->TriggerEnts.end(); it++) + { + if (it->bIsActivated) + { + NAV_ForceActivateTrigger(pBot, &(*it)); + return; } } } + else + { + if (TriggerToActivate->TriggerType == DOOR_BUTTON) + { + Vector UseLocation = UTIL_GetButtonFloorLocation(pBot->Edict->v.origin, TriggerToActivate->Edict); - + NAV_SetUseMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_TRIGGER) + { + NAV_SetTouchMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_WELD) + { + NAV_SetWeldMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_BREAK) + { + NAV_SetBreakMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + } + return; } + // Lift is at the end point, summon it + + // Lift is on its way + if (HasDoorBeenTriggered(NearestLift) || bIsLiftMoving) + { + if (vDist2DSq(pBot->Edict->v.origin, StartPoint) > sqrf(100.0f)) + { + NAV_SetMoveMovementTask(pBot, StartPoint, nullptr); + } + else + { + if (vBBOverlaps2D(pBot->Edict->v.absmin, pBot->Edict->v.absmax, NearestLift->DoorEdict->v.absmin, NearestLift->DoorEdict->v.absmax)) + { + Vector NearestPointOnLift = UTIL_GetClosestPointOnEntityToLocation(pBot->Edict->v.origin, NearestLift->DoorEdict); + pBot->desiredMovementDir = UTIL_GetVectorNormal2D(pBot->Edict->v.origin - LiftPosition); + } + } + return; + } + + DoorTrigger* TriggerToActivate = UTIL_GetNearestDoorTrigger(pBot->Edict->v.origin, NearestLift, nullptr, false); + + if (!TriggerToActivate) + { + for (auto it = NearestLift->TriggerEnts.begin(); it != NearestLift->TriggerEnts.end(); it++) + { + if (it->bIsActivated) + { + NAV_ForceActivateTrigger(pBot, &(*it)); + return; + } + } + } + else + { + if (TriggerToActivate->TriggerType == DOOR_BUTTON) + { + Vector UseLocation = UTIL_GetButtonFloorLocation(pBot->Edict->v.origin, TriggerToActivate->Edict); + + NAV_SetUseMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_TRIGGER) + { + NAV_SetTouchMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_WELD) + { + NAV_SetWeldMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + else if (TriggerToActivate->TriggerType == DOOR_BREAK) + { + NAV_SetBreakMovementTask(pBot, TriggerToActivate->Edict, TriggerToActivate); + } + } + } void PhaseGateMove(AvHAIPlayer* pBot, const Vector StartPoint, const Vector EndPoint) @@ -4471,12 +4610,12 @@ bool IsBotOffWalkNode(const AvHAIPlayer* pBot, Vector MoveStart, Vector MoveEnd, if (vDist2DSq(pBot->Edict->v.origin, NearestPointOnLine) > sqrf(GetPlayerRadius(pBot->Edict) * 3.0f)) { return true; } - if (!FNullEnt(pBot->Edict->v.groundentity)) - { - nav_door* Door = UTIL_GetNavDoorByEdict(pBot->Edict->v.groundentity); + //if (!FNullEnt(pBot->Edict->v.groundentity)) + //{ + // nav_door* Door = UTIL_GetNavDoorByEdict(pBot->Edict->v.groundentity); - if (Door) { return false; } - } + // if (Door) { return false; } + //} if (vEquals2D(NearestPointOnLine, MoveStart) && !UTIL_PointIsDirectlyReachable(pBot->CurrentFloorPosition, MoveStart)) { return true; } if (vEquals2D(NearestPointOnLine, MoveEnd) && !UTIL_PointIsDirectlyReachable(pBot->CurrentFloorPosition, MoveEnd)) { return true; } @@ -6067,7 +6206,7 @@ void OnosUpdateBotMoveProfile(AvHAIPlayer* pBot, BotMoveStyle MoveStyle) bool NAV_MergeAndUpdatePath(AvHAIPlayer* pBot, std::vector& NewPath) { - if (pBot->BotNavInfo.CurrentPath.size() == 0 || pBot->BotNavInfo.CurrentPathPoint >= pBot->BotNavInfo.CurrentPath.size()) + if (pBot->BotNavInfo.NavProfile.bFlyingProfile || pBot->BotNavInfo.CurrentPath.size() == 0 || pBot->BotNavInfo.CurrentPathPoint >= pBot->BotNavInfo.CurrentPath.size()) { pBot->BotNavInfo.CurrentPath.clear(); pBot->BotNavInfo.CurrentPath.insert(pBot->BotNavInfo.CurrentPath.end(), NewPath.begin(), NewPath.end()); @@ -6122,15 +6261,106 @@ bool NAV_MergeAndUpdatePath(AvHAIPlayer* pBot, std::vector& NewPa return true; } +bool NAV_GenerateNewBasePath(AvHAIPlayer* pBot, const Vector NewDestination, const BotMoveStyle MoveStyle, const float MaxAcceptableDist) +{ + nav_status* BotNavInfo = &pBot->BotNavInfo; + + dtStatus PathFindingStatus = DT_FAILURE; + + vector PendingPath; + bool bIsFlyingProfile = BotNavInfo->NavProfile.bFlyingProfile; + + + if (bIsFlyingProfile) + { + PathFindingStatus = FindFlightPathToPoint(BotNavInfo->NavProfile, pBot->Edict->v.origin, NewDestination, PendingPath, MaxAcceptableDist); + } + else + { + Vector NavAdjustedDestination = AdjustPointForPathfinding(NewDestination); + if (vIsZero(NavAdjustedDestination)) { return false; } + + PathFindingStatus = FindPathClosestToPoint(pBot, BotNavInfo->MoveStyle, NavAdjustedDestination, PendingPath, MaxAcceptableDist); + } + + BotNavInfo->NextForceRecalc = 0.0f; + BotNavInfo->bNavProfileChanged = false; + + if (dtStatusSucceed(PathFindingStatus)) + { + if (!NAV_MergeAndUpdatePath(pBot, PendingPath)) + { + if (!AbortCurrentMove(pBot, NewDestination)) + { + return true; + } + else + { + ClearBotPath(pBot); + NAV_ClearMovementTask(pBot); + pBot->BotNavInfo.CurrentPath.insert(pBot->BotNavInfo.CurrentPath.begin(), PendingPath.begin(), PendingPath.end()); + BotNavInfo->CurrentPathPoint = 0; + } + } + + BotNavInfo->ActualMoveDestination = BotNavInfo->CurrentPath.back().Location; + BotNavInfo->TargetDestination = NewDestination; + + pBot->BotNavInfo.StuckInfo.bPathFollowFailed = false; + ClearBotStuckMovement(pBot); + pBot->BotNavInfo.TotalStuckTime = 0.0f; + BotNavInfo->PathDestination = NewDestination; + + return true; + } + + return false; +} + +bool NAV_GenerateNewMoveTaskPath(AvHAIPlayer* pBot, const Vector NewDestination, const BotMoveStyle MoveStyle) +{ + nav_status* BotNavInfo = &pBot->BotNavInfo; + + dtStatus PathFindingStatus = DT_FAILURE; + + vector PendingPath; + bool bIsFlyingProfile = BotNavInfo->NavProfile.bFlyingProfile; + + if (bIsFlyingProfile) + { + PathFindingStatus = FindFlightPathToPoint(BotNavInfo->NavProfile, pBot->Edict->v.origin, NewDestination, PendingPath, max_player_use_reach); + } + else + { + Vector NavAdjustedDestination = AdjustPointForPathfinding(NewDestination); + if (vIsZero(NavAdjustedDestination)) { return false; } + + PathFindingStatus = FindPathClosestToPoint(pBot, BotNavInfo->MoveStyle, NavAdjustedDestination, PendingPath, max_player_use_reach); + } + + if (dtStatusSucceed(PathFindingStatus)) + { + pBot->BotNavInfo.CurrentPath.clear(); + pBot->BotNavInfo.CurrentPathPoint = 0; + pBot->BotNavInfo.SpecialMovementFlags = 0; + + pBot->BotNavInfo.CurrentPath.insert(pBot->BotNavInfo.CurrentPath.begin(), PendingPath.begin(), PendingPath.end()); + BotNavInfo->CurrentPathPoint = 0; + + pBot->BotNavInfo.StuckInfo.bPathFollowFailed = false; + ClearBotStuckMovement(pBot); + pBot->BotNavInfo.TotalStuckTime = 0.0f; + BotNavInfo->PathDestination = NewDestination; + + return true; + } + + return false; +} + bool MoveTo(AvHAIPlayer* pBot, const Vector Destination, const BotMoveStyle MoveStyle, const float MaxAcceptableDist) { -#ifdef DEBUG - if (pBot == AIMGR_GetDebugAIPlayer()) - { - bool bBreak = true; // Add a break point here if you want to debug a specific bot - } -#endif - + // Trying to move nowhere, or our current location. Do nothing if (vIsZero(Destination) || (vDist2D(pBot->Edict->v.origin, Destination) <= 6.0f && (fabs(pBot->CollisionHullBottomLocation.z - Destination.z) < 50.0f))) { pBot->BotNavInfo.StuckInfo.bPathFollowFailed = false; @@ -6150,110 +6380,110 @@ bool MoveTo(AvHAIPlayer* pBot, const Vector Destination, const BotMoveStyle Move bool bForceRecalculation = (pBot->BotNavInfo.NextForceRecalc > 0.0f && gpGlobals->time >= pBot->BotNavInfo.NextForceRecalc); bool bIsPerformingMoveTask = (BotNavInfo->MovementTask.TaskType != MOVE_TASK_NONE && vEquals(Destination, BotNavInfo->MovementTask.TaskLocation, GetPlayerRadius(pBot->Player))); bool bEndGoalChanged = (!vEquals(Destination, BotNavInfo->TargetDestination, GetPlayerRadius(pBot->Player)) && !bIsPerformingMoveTask); - bool bMoveTaskGenerated = (BotNavInfo->MovementTask.TaskType == MOVE_TASK_NONE || (vEquals(BotNavInfo->PathDestination, BotNavInfo->MovementTask.TaskLocation, GetPlayerRadius(pBot->Player)))); + + bool bShouldGenerateMainPath = (bEndGoalChanged || bNavProfileChanged || bForceRecalculation); + bool bShouldGenerateMoveTaskPath = (bIsPerformingMoveTask && !vEquals(BotNavInfo->PathDestination, BotNavInfo->MovementTask.TaskLocation, GetPlayerRadius(pBot->Player))); - - // Only recalculate the path if there isn't a path, or something has changed and enough time has elapsed since the last path calculation - bool bShouldCalculatePath = (bNavProfileChanged || bForceRecalculation || BotNavInfo->CurrentPath.size() == 0 || bEndGoalChanged || !bMoveTaskGenerated); - - if (bShouldCalculatePath) + if (bShouldGenerateMainPath || bShouldGenerateMoveTaskPath) { if (!bIsFlyingProfile && !pBot->BotNavInfo.IsOnGround && !IsPlayerClimbingWall(pBot->Edict)) - { + { if (pBot->BotNavInfo.CurrentPath.size() > 0) { BotFollowPath(pBot); } - return true; + return true; } - dtStatus PathFindingStatus = DT_FAILURE; - - vector PendingPath; - - if (bIsFlyingProfile) + if (bShouldGenerateMainPath) { - PathFindingStatus = FindFlightPathToPoint(pBot->BotNavInfo.NavProfile, pBot->Edict->v.origin, Destination, PendingPath, MaxAcceptableDist); - } - else - { - Vector NavAdjustedDestination = AdjustPointForPathfinding(Destination); - if (vIsZero(NavAdjustedDestination)) { return false; } + bool bSucceeded = NAV_GenerateNewBasePath(pBot, Destination, MoveStyle, MaxAcceptableDist); - PathFindingStatus = FindPathClosestToPoint(pBot, pBot->BotNavInfo.MoveStyle, pBot->CurrentFloorPosition, NavAdjustedDestination, PendingPath, MaxAcceptableDist); - } - - pBot->BotNavInfo.NextForceRecalc = 0.0f; - pBot->BotNavInfo.bNavProfileChanged = false; - - if (dtStatusSucceed(PathFindingStatus)) - { - if (!NAV_MergeAndUpdatePath(pBot, PendingPath)) + if (!bSucceeded) { - if (!AbortCurrentMove(pBot, Destination)) + if (pBot->BotNavInfo.CurrentPath.size() == 0) { - return true; - } - else - { - ClearBotPath(pBot); - NAV_ClearMovementTask(pBot); - pBot->BotNavInfo.CurrentPath.insert(pBot->BotNavInfo.CurrentPath.begin(), PendingPath.begin(), PendingPath.end()); - BotNavInfo->CurrentPathPoint = 0; - } - } + pBot->BotNavInfo.StuckInfo.bPathFollowFailed = true; - pBot->BotNavInfo.StuckInfo.bPathFollowFailed = false; - ClearBotStuckMovement(pBot); - pBot->BotNavInfo.TotalStuckTime = 0.0f; - BotNavInfo->PathDestination = Destination; - - if (!bIsPerformingMoveTask) - { - BotNavInfo->ActualMoveDestination = BotNavInfo->CurrentPath.back().Location; - BotNavInfo->TargetDestination = Destination; - } - - - } - else - { - if (pBot->BotNavInfo.CurrentPath.size() == 0) - { - pBot->BotNavInfo.StuckInfo.bPathFollowFailed = true; - - if (!UTIL_PointIsOnNavmesh(pBot->CollisionHullBottomLocation, pBot->BotNavInfo.NavProfile) && !vIsZero(BotNavInfo->LastNavMeshPosition)) - { - MoveDirectlyTo(pBot, BotNavInfo->LastNavMeshPosition); - - if (vDist2DSq(pBot->CurrentFloorPosition, BotNavInfo->LastNavMeshPosition) < sqrf(8.0f)) + if (!UTIL_PointIsOnNavmesh(pBot->CollisionHullBottomLocation, pBot->BotNavInfo.NavProfile) && !vIsZero(BotNavInfo->LastNavMeshPosition)) { - BotNavInfo->LastNavMeshPosition = g_vecZero; - } + MoveDirectlyTo(pBot, BotNavInfo->LastNavMeshPosition); - return true; - } - else - { - if (!vIsZero(BotNavInfo->UnstuckMoveLocation) && vDist2DSq(pBot->CurrentFloorPosition, BotNavInfo->UnstuckMoveLocation) < sqrf(8.0f)) - { - BotNavInfo->UnstuckMoveLocation = ZERO_VECTOR; - } + if (vDist2DSq(pBot->CurrentFloorPosition, BotNavInfo->LastNavMeshPosition) < sqrf(8.0f)) + { + BotNavInfo->LastNavMeshPosition = g_vecZero; + } - if (vIsZero(BotNavInfo->UnstuckMoveLocation)) - { - BotNavInfo->UnstuckMoveLocation = FindClosestPointBackOnPath(pBot); - } - - if (!vIsZero(BotNavInfo->UnstuckMoveLocation)) - { - MoveDirectlyTo(pBot, BotNavInfo->UnstuckMoveLocation); return true; } + else + { + if (!vIsZero(BotNavInfo->UnstuckMoveLocation) && vDist2DSq(pBot->CurrentFloorPosition, BotNavInfo->UnstuckMoveLocation) < sqrf(8.0f)) + { + BotNavInfo->UnstuckMoveLocation = ZERO_VECTOR; + } + + if (vIsZero(BotNavInfo->UnstuckMoveLocation)) + { + BotNavInfo->UnstuckMoveLocation = FindClosestPointBackOnPath(pBot); + } + + if (!vIsZero(BotNavInfo->UnstuckMoveLocation)) + { + MoveDirectlyTo(pBot, BotNavInfo->UnstuckMoveLocation); + return true; + } + } } + else + { + BotFollowPath(pBot); + } + return false; } } + else + { + bool bSucceeded = NAV_GenerateNewMoveTaskPath(pBot, BotNavInfo->MovementTask.TaskLocation, MoveStyle); + + if (!bSucceeded) + { + if (!FNullEnt(pBot->Edict->v.groundentity)) + { + nav_door* Door = UTIL_GetNavDoorByEdict(pBot->Edict->v.groundentity); + + if (Door) + { + + } + } + + + if (!FNullEnt(BotNavInfo->MovementTask.TaskTarget)) + { + CBaseEntity* TargetEntity = CBaseEntity::Instance(BotNavInfo->MovementTask.TaskTarget); + + if (!TargetEntity) { return false; } + + switch (BotNavInfo->MovementTask.TaskType) + { + case MOVE_TASK_TOUCH: + TargetEntity->Touch(pBot->Player); + return true; + break; + case MOVE_TASK_USE: + TargetEntity->Use(pBot->Player, pBot->Player, USE_TOGGLE, 0.0f); + return true; + break; + default: + break; + + } + } + } + } + } if (!bIsPerformingMoveTask && BotNavInfo->MovementTask.TaskType != MOVE_TASK_NONE) @@ -6408,11 +6638,14 @@ void SkipAheadInFlightPath(AvHAIPlayer* pBot) if (UTIL_QuickHullTrace(pBot->Edict, pBot->Edict->v.origin, prev(BotNavInfo->CurrentPath.end())->Location, head_hull, false)) { pBot->BotNavInfo.CurrentPathPoint = (BotNavInfo->CurrentPath.size() - 1); + BotNavInfo->CurrentPath[pBot->BotNavInfo.CurrentPathPoint].FromLocation = pBot->Edict->v.origin; return; } - // If we are currently in a low area or approaching one, don't try to skip ahead in case it screws us up - if (CurrentPathPoint->area == SAMPLE_POLYAREA_CROUCH || (next(CurrentPathPoint) != BotNavInfo->CurrentPath.end() && next(CurrentPathPoint)->area == SAMPLE_POLYAREA_CROUCH)) { return; } + // If we are approaching a low area or lift, don't try to skip ahead in case it screws us up + if (CurrentPathPoint->area == SAMPLE_POLYAREA_CROUCH + || CurrentPathPoint->area == SAMPLE_POLYAREA_LIFT + || (next(CurrentPathPoint) != BotNavInfo->CurrentPath.end() && (next(CurrentPathPoint)->area == SAMPLE_POLYAREA_CROUCH || next(CurrentPathPoint)->area == SAMPLE_POLYAREA_LIFT))) { return; } for (auto it = prev(BotNavInfo->CurrentPath.end()); it != next(CurrentPathPoint); it--) { @@ -6471,13 +6704,24 @@ void BotFollowFlightPath(AvHAIPlayer* pBot, bool bAllowSkip) } } + + if (CurrentPathPoint->flag == SAMPLE_POLYFLAGS_LIFT) { LiftMove(pBot, CurrentPathPoint->FromLocation, CurrentMoveDest); return; } - if (bAllowSkip && CurrentPathPoint->area != SAMPLE_POLYAREA_CROUCH && next(CurrentPathPoint) != BotNavInfo->CurrentPath.end() && next(CurrentPathPoint)->area != SAMPLE_POLYAREA_CROUCH) + SamplePolyAreas NextArea = SAMPLE_POLYAREA_GROUND; + SamplePolyFlags NextFlags = SAMPLE_POLYFLAGS_DISABLED; + + if (next(CurrentPathPoint) != BotNavInfo->CurrentPath.end()) + { + NextArea = (SamplePolyAreas)next(CurrentPathPoint)->area; + NextFlags = (SamplePolyFlags)next(CurrentPathPoint)->flag; + } + + if (bAllowSkip && CurrentPathPoint->area != SAMPLE_POLYAREA_CROUCH && CurrentPathPoint->flag != SAMPLE_POLYFLAGS_LIFT && NextArea != SAMPLE_POLYAREA_CROUCH && NextFlags != SAMPLE_POLYFLAGS_LIFT) { SkipAheadInFlightPath(pBot); CurrentPathPoint = (BotNavInfo->CurrentPath.begin() + BotNavInfo->CurrentPathPoint); @@ -6691,7 +6935,7 @@ void BotFollowPath(AvHAIPlayer* pBot) pBot->desiredMovementDir = UTIL_GetVectorNormal2D(-pBot->Edict->v.groundentity->v.velocity); return; } - MoveToWithoutNav(pBot, CurrentNode.Location); + pBot->desiredMovementDir = -UTIL_GetForwardVector2D(pBot->Edict->v.angles); return; } @@ -6701,20 +6945,8 @@ void BotFollowPath(AvHAIPlayer* pBot) { if ((*it)->pev->groundentity == pBot->Edict) { - if (vDist2DSq(pBot->Edict->v.origin, CurrentNode.FromLocation) > sqrf(GetPlayerRadius(pBot->Edict))) - { - MoveToWithoutNav(pBot, CurrentNode.FromLocation); - return; - } - else - { - if (pBot->BotNavInfo.CurrentPathPoint > 0) - { - bot_path_node PrevNode = pBot->BotNavInfo.CurrentPath[pBot->BotNavInfo.CurrentPathPoint - 1]; - MoveToWithoutNav(pBot, PrevNode.FromLocation); - return; - } - } + pBot->desiredMovementDir = UTIL_GetForwardVector2D(pBot->Edict->v.angles); + return; } } @@ -7186,7 +7418,7 @@ bool BotRecalcPath(AvHAIPlayer* pBot, const Vector Destination) return false; } - dtStatus FoundPath = FindPathClosestToPoint(pBot, pBot->BotNavInfo.MoveStyle, pBot->CurrentFloorPosition, ValidNavmeshPoint, pBot->BotNavInfo.CurrentPath, max_ai_use_reach); + dtStatus FoundPath = FindPathClosestToPoint(pBot, pBot->BotNavInfo.MoveStyle, ValidNavmeshPoint, pBot->BotNavInfo.CurrentPath, max_ai_use_reach); if (dtStatusSucceed(FoundPath) && pBot->BotNavInfo.CurrentPath.size() > 0) { @@ -8069,25 +8301,36 @@ void UTIL_UpdateDoors(bool bInitial) Vector DoorCentre = UTIL_GetCentreOfEntity(NavDoor->DoorEdict); - bool bThisConnectionAffected = false; + bool bThisConnectionAffected = (vlineIntersectsAABB(ConnStart, MidPoint, NavDoor->DoorEdict->v.absmin, NavDoor->DoorEdict->v.absmax) || vlineIntersectsAABB(MidPoint, ConnEnd, NavDoor->DoorEdict->v.absmin, NavDoor->DoorEdict->v.absmax)); - Vector NearestPointOnLine = vClosestPointOnLine(ConnStart, MidPoint, DoorCentre); - if (vPointOverlaps3D(NearestPointOnLine, DoorCentre - HalfExtents, DoorCentre + HalfExtents)) + if (bThisConnectionAffected) { - UTIL_ModifyOffMeshConnectionFlag(ThisConnection, SAMPLE_POLYFLAGS_WELD); - bThisConnectionAffected = true; - } - else - { - NearestPointOnLine = vClosestPointOnLine(MidPoint, ConnEnd, DoorCentre); - if (vPointOverlaps3D(NearestPointOnLine, DoorCentre - HalfExtents, DoorCentre + HalfExtents)) + if (ThisConnection->bBiDirectional) { UTIL_ModifyOffMeshConnectionFlag(ThisConnection, SAMPLE_POLYFLAGS_WELD); - bThisConnectionAffected = true; + } + else + { + DoorTrigger* NearestTrigger = UTIL_GetNearestDoorTrigger(ConnStart, NavDoor, nullptr, true); + + if (!NearestTrigger) + { + UTIL_ModifyOffMeshConnectionFlag(ThisConnection, SAMPLE_POLYFLAGS_DISABLED); + } + else + { + if (NearestTrigger->TriggerType == DOOR_WELD) + { + UTIL_ModifyOffMeshConnectionFlag(ThisConnection, SAMPLE_POLYFLAGS_WELD); + } + else + { + UTIL_ModifyOffMeshConnectionFlag(ThisConnection, ThisConnection->DefaultConnectionFlags); + } + } } } - - if (!bThisConnectionAffected) + else { if (ThisConnection->ConnectionFlags != ThisConnection->DefaultConnectionFlags) { @@ -8252,6 +8495,8 @@ void UTIL_UpdateDoorTriggers(nav_door* Door) DoorActivationType NewActivationType = DOOR_NONE; + bool bButtonHasBeenPressed = false; + for (auto it = Door->TriggerEnts.begin(); it != Door->TriggerEnts.end();) { if (FNullEnt(it->Edict) || it->Edict->free) @@ -8335,6 +8580,7 @@ void UTIL_UpdateDoorTriggers(nav_door* Door) if (it->LastToggleState == TS_AT_BOTTOM || (bButtonIsToggle && it->LastToggleState == TS_AT_TOP)) { it->NextActivationTime = gpGlobals->time + fmaxf(it->ActivationDelay, 1.0f); + bButtonHasBeenPressed = true; } it->LastToggleState = NewState; @@ -8343,6 +8589,14 @@ void UTIL_UpdateDoorTriggers(nav_door* Door) it++; } + if (bButtonHasBeenPressed) + { + for (auto it = Door->TriggerEnts.begin(); it != Door->TriggerEnts.end(); it++) + { + it->NextActivationTime = gpGlobals->time + fmaxf(it->ActivationDelay, 1.0f); + } + } + Door->ActivationType = NewActivationType; } @@ -8536,6 +8790,31 @@ nav_door* UTIL_GetNavDoorByEdict(const edict_t* DoorEdict) return nullptr; } +AvHAIOffMeshConnection* UTIL_GetOffMeshConnectionForLift(nav_door* LiftRef) +{ + if (!LiftRef) { return nullptr; } + + AvHAIOffMeshConnection* NearestConnection = nullptr; + float MinDist = 0.0f; + + for (auto it = BaseMapConnections.begin(); it != BaseMapConnections.end(); it++) + { + if (!(it->ConnectionFlags & SAMPLE_POLYFLAGS_LIFT)) { continue; } + + Vector LiftLocation = UTIL_GetCentreOfEntity(LiftRef->DoorEdict); + + float ThisDist = fminf(vDist3DSq(it->FromLocation, LiftLocation), vDist3DSq(it->ToLocation, LiftLocation)); + + if (!NearestConnection || ThisDist < MinDist) + { + NearestConnection = &(*it); + MinDist = ThisDist; + } + } + + return NearestConnection; +} + // TODO: Find the topmost point when open, and topmost point when closed, and see how closely they align to the top and bottom point parameters nav_door* UTIL_GetClosestLiftToPoints(const Vector StartPoint, const Vector EndPoint) { @@ -8944,6 +9223,7 @@ bool NAV_IsMovementTaskStillValid(AvHAIPlayer* pBot) if (MoveTask->TaskType == MOVE_TASK_USE) { + if (MoveTask->TriggerToActivate) return MoveTask->TriggerToActivate && MoveTask->TriggerToActivate->bIsActivated && MoveTask->TriggerToActivate->NextActivationTime < gpGlobals->time; } diff --git a/main/source/mod/AvHAINavigation.h b/main/source/mod/AvHAINavigation.h index 56be92d2..0966f9c6 100644 --- a/main/source/mod/AvHAINavigation.h +++ b/main/source/mod/AvHAINavigation.h @@ -257,6 +257,9 @@ DoorTrigger* UTIL_GetDoorTriggerByEntity(edict_t* TriggerEntity); bool UTIL_TriggerHasBeenRecentlyActivated(edict_t* TriggerEntity); +// Directly calls the Use function on this trigger, regardless of where the bot is +void NAV_ForceActivateTrigger(AvHAIPlayer* pBot, DoorTrigger* TriggerRef); + // Will check for any func_breakable which might be in the way (e.g. window, vent) and make the bot aim and attack it to break it. Marines will switch to knife to break it. void CheckAndHandleBreakableObstruction(AvHAIPlayer* pBot, const Vector MoveFrom, const Vector MoveTo, unsigned int MovementFlags); @@ -349,13 +352,13 @@ void HandlePlayerAvoidance(AvHAIPlayer* pBot, const Vector MoveDestination); Vector AdjustPointForPathfinding(const Vector Point); Vector AdjustPointForPathfinding(const Vector Point, const nav_profile& NavProfile); -// Special path finding that takes the presence of phase gates into account +// Special path finding for lerks dtStatus FindFlightPathToPoint(const nav_profile& NavProfile, Vector FromLocation, Vector ToLocation, vector& path, float MaxAcceptableDistance); Vector UTIL_FindHighestSuccessfulTracePoint(const Vector TraceFrom, const Vector TargetPoint, const Vector NextPoint, const float IterationStep, const float MinIdealHeight, const float MaxHeight); // Similar to FindPathToPoint, but you can specify a max acceptable distance for partial results. Will return a failure if it can't reach at least MaxAcceptableDistance away from the ToLocation -dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, const Vector FromLocation, const Vector ToLocation, vector& path, float MaxAcceptableDistance); +dtStatus FindPathClosestToPoint(AvHAIPlayer* pBot, const BotMoveStyle MoveStyle, const Vector ToLocation, vector& path, float MaxAcceptableDistance); dtStatus FindPathClosestToPoint(const nav_profile& NavProfile, const Vector FromLocation, const Vector ToLocation, vector& path, float MaxAcceptableDistance); dtStatus DEBUG_TestFindPath(const nav_profile& NavProfile, const Vector FromLocation, const Vector ToLocation, vector& path, float MaxAcceptableDistance); @@ -481,6 +484,7 @@ void UTIL_ApplyTempObstaclesToDoor(nav_door* DoorRef, const int Area); nav_door* UTIL_GetNavDoorByEdict(const edict_t* DoorEdict); nav_door* UTIL_GetClosestLiftToPoints(const Vector StartPoint, const Vector EndPoint); +AvHAIOffMeshConnection* UTIL_GetOffMeshConnectionForLift(nav_door* LiftRef); Vector UTIL_AdjustPointAwayFromNavWall(const Vector Location, const float MaxDistanceFromWall); diff --git a/main/source/mod/AvHAIPlayer.cpp b/main/source/mod/AvHAIPlayer.cpp index 6f876c6c..75ff2b60 100644 --- a/main/source/mod/AvHAIPlayer.cpp +++ b/main/source/mod/AvHAIPlayer.cpp @@ -195,7 +195,7 @@ bool BotUseObject(AvHAIPlayer* pBot, edict_t* Target, bool bContinuous) if (AimDot >= 0.95f) { - pBot->Button |= IN_USE; + //pBot->Button |= IN_USE; pBot->LastUseTime = gpGlobals->time; CBaseEntity* UsedObject = CBaseEntity::Instance(Target); @@ -333,8 +333,13 @@ void BotLeap(AvHAIPlayer* pBot, const Vector TargetLocation) float Dot = UTIL_GetDotProduct2D(FaceAngle, MoveDir); - if (Dot >= 0.98f) + if (Dot >= 0.95f) { + // Just give the bot a nudge and make sure they don't miss and end up somewhere they don't want to be + float MoveSpeed = vSize2D(pBot->Edict->v.velocity); + Vector NewVelocity = MoveDir * MoveSpeed; + NewVelocity.z = pBot->Edict->v.velocity.z; + pBot->Button |= IN_ATTACK2; pBot->BotNavInfo.bIsJumping = true; pBot->BotNavInfo.LeapAttemptedTime = gpGlobals->time; @@ -1725,6 +1730,8 @@ void StartNewBotFrame(AvHAIPlayer* pBot) { edict_t* pEdict = pBot->Edict; + if (!pBot->CurrentTask) { pBot->CurrentTask = &pBot->PrimaryBotTask; } + ClearBotInputs(pBot); pBot->CurrentEyePosition = GetPlayerEyePosition(pEdict); @@ -2197,6 +2204,8 @@ void UpdateAIMarinePlayerNSRole(AvHAIPlayer* pBot) void AIPlayerNSThink(AvHAIPlayer* pBot) { + return; + AvHTeam* BotTeam = GetGameRules()->GetTeam(pBot->Player->GetTeam()); if (!BotTeam) { return; } @@ -2676,8 +2685,10 @@ AvHAICombatStrategy GetMarineCombatStrategyForTarget(AvHAIPlayer* pBot, enemy_st float DistToEnemy = vDist2DSq(pBot->Edict->v.origin, CurrentEnemy->LastSeenLocation); + bool bCanRetreat = AITAC_IsCompletedStructureOfTypeNearLocation(BotTeam, (STRUCTURE_MARINE_COMMCHAIR | STRUCTURE_MARINE_ARMOURY | STRUCTURE_MARINE_ADVARMOURY), ZERO_VECTOR, 0.0f); + // If we are doing something important, don't get distracted by enemies that aren't an immediate threat - if (pBot->CurrentTask && pBot->CurrentTask->TaskType == TASK_DEFEND || pBot->CommanderTask.TaskType != TASK_NONE) + if (pBot->CurrentTask && (pBot->CurrentTask->TaskType == TASK_DEFEND || pBot->CommanderTask.TaskType != TASK_NONE)) { if ((!CurrentEnemy->bHasLOS || DistToEnemy > sqrf(UTIL_MetresToGoldSrcUnits(10.0f))) && (!vIsZero(pBot->CurrentTask->TaskLocation) && !UTIL_PlayerHasLOSToLocation(CurrentEnemy->EnemyEdict, pBot->CurrentTask->TaskLocation, UTIL_MetresToGoldSrcUnits(30.0f)))) { @@ -2685,7 +2696,7 @@ AvHAICombatStrategy GetMarineCombatStrategyForTarget(AvHAIPlayer* pBot, enemy_st } } - if (pBot->CurrentCombatStrategy == COMBAT_STRATEGY_RETREAT) + if (bCanRetreat && pBot->CurrentCombatStrategy == COMBAT_STRATEGY_RETREAT) { int MinDesiredAmmo = imini(UTIL_GetPlayerPrimaryMaxAmmoReserve(pBot->Player), UTIL_GetPlayerPrimaryWeaponMaxClipSize(pBot->Player) * 2); @@ -2698,7 +2709,7 @@ AvHAICombatStrategy GetMarineCombatStrategyForTarget(AvHAIPlayer* pBot, enemy_st int NumEnemyAllies = AITAC_GetNumPlayersOnTeamWithLOS(EnemyTeam, EnemyEdict->v.origin, UTIL_MetresToGoldSrcUnits(10.0f), EnemyEdict); int NumFriendlies = AITAC_GetNumPlayersOnTeamWithLOS(BotTeam, pBot->Edict->v.origin, UTIL_MetresToGoldSrcUnits(10.0f), pBot->Edict); - if (CurrentHealthPercent < 0.3f || (CurrentHealthPercent < 0.5f && NumEnemyAllies > 0) || UTIL_GetPlayerPrimaryAmmoReserve(pBot->Player) < UTIL_GetPlayerPrimaryWeaponMaxClipSize(pBot->Player)) + if (bCanRetreat && (CurrentHealthPercent < 0.3f || (CurrentHealthPercent < 0.5f && NumEnemyAllies > 0) || UTIL_GetPlayerPrimaryAmmoReserve(pBot->Player) < UTIL_GetPlayerPrimaryWeaponMaxClipSize(pBot->Player))) { return COMBAT_STRATEGY_RETREAT; } @@ -2797,8 +2808,6 @@ void AIPlayerNSMarineThink(AvHAIPlayer* pBot) if (MarineCombatThink(pBot)) { return; } } - if (!pBot->CurrentTask) { pBot->CurrentTask = &pBot->PrimaryBotTask; } - if (gpGlobals->time >= pBot->BotNextTaskEvaluationTime) { pBot->BotNextTaskEvaluationTime = gpGlobals->time + frandrange(0.2f, 0.5f); @@ -4199,7 +4208,6 @@ bool AIPlayerMustFinishCurrentTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) void AIPlayerNSAlienThink(AvHAIPlayer* pBot) { - if (!pBot->CurrentTask) { pBot->CurrentTask = &pBot->PrimaryBotTask; } if (pBot->CurrentEnemy > -1) { @@ -4686,8 +4694,6 @@ void AIPlayerCOMarineThink(AvHAIPlayer* pBot) void AIPlayerCOAlienThink(AvHAIPlayer* pBot) { - if (!pBot->CurrentTask) { pBot->CurrentTask = &pBot->PrimaryBotTask; } - AvHMessageID NextCombatUpgrade = GetNextAIPlayerCOAlienUpgrade(pBot); if (NextCombatUpgrade != MESSAGE_NULL) @@ -4762,7 +4768,7 @@ void AIPlayerSetPrimaryCOMarineTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) } // Nothing to attack, just hunt down remaining enemy players. Shouldn't happen in vanilla combat mode, but a plugin might change behaviour - if (FNullEnt(StructureToAttack)) + if (!StructureToAttack || FNullEnt(StructureToAttack)) { vector AllEnemyPlayers = AIMGR_GetAllPlayersOnTeam(EnemyTeam); @@ -5108,7 +5114,7 @@ void AIPlayerSetPrimaryCOAlienTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) } // Nothing to attack, just hunt down remaining enemy players. Shouldn't happen in vanilla combat mode, but a plugin might change behaviour - if (FNullEnt(StructureToAttack)) + if (!StructureToAttack || FNullEnt(StructureToAttack)) { vector AllEnemyPlayers = AIMGR_GetAllPlayersOnTeam(EnemyTeam); edict_t* TargetPlayer = nullptr; @@ -5248,6 +5254,58 @@ void AIPlayerSetSecondaryCOAlienTask(AvHAIPlayer* pBot, AvHAIPlayerTask* Task) AITASK_ClearBotTask(pBot, Task); } +void AIPlayerEndMatchThink(AvHAIPlayer* pBot) +{ + + pBot->CurrentEnemy = BotGetNextEnemyTarget(pBot); + + if (pBot->CurrentEnemy > -1) + { + if (IsPlayerMarine(pBot->Player)) + { + MarineCombatThink(pBot); + } + else + { + AlienCombatThink(pBot); + } + + return; + } + + AvHTeamNumber BotTeam = pBot->Player->GetTeam(); + AvHTeamNumber EnemyTeam = AIMGR_GetEnemyTeam(BotTeam); + + vector EnemyPlayers = AIMGR_GetAllPlayersOnTeam(EnemyTeam); + + AvHPlayer* EnemyToAttack = nullptr; + float MinDist = 0.0f; + + for (auto it = EnemyPlayers.begin(); it != EnemyPlayers.end(); it++) + { + edict_t* PlayerEdict = (*it)->edict(); + if (IsPlayerActiveInGame(PlayerEdict)) + { + float ThisDist = vDist2DSq(pBot->Player->pev->origin, PlayerEdict->v.origin); + + if (!EnemyToAttack || ThisDist < MinDist) + { + EnemyToAttack = (*it); + MinDist = ThisDist; + } + } + } + + if (EnemyToAttack) + { + MoveTo(pBot, EnemyToAttack->pev->origin, MOVESTYLE_NORMAL, UTIL_MetresToGoldSrcUnits(10.0f)); + } + else + { + AIPlayerDMThink(pBot); + } + +} void AIPlayerDMThink(AvHAIPlayer* pBot) { @@ -5267,8 +5325,6 @@ void AIPlayerDMThink(AvHAIPlayer* pBot) return; } - pBot->CurrentTask = &pBot->PrimaryBotTask; - AITASK_BotUpdateAndClearTasks(pBot); if (pBot->CurrentTask->TaskType == TASK_NONE) @@ -5355,8 +5411,17 @@ void AIPlayerThink(AvHAIPlayer* pBot) switch (GetGameRules()->GetMapMode()) { case MAP_MODE_NS: - AIPlayerNSThink(pBot); - break; + { + if (AIMGR_IsMatchPracticallyOver()) + { + AIPlayerEndMatchThink(pBot); + } + else + { + AIPlayerNSThink(pBot); + } + } + break; case MAP_MODE_CO: AIPlayerCOThink(pBot); break; diff --git a/main/source/mod/AvHAIPlayer.h b/main/source/mod/AvHAIPlayer.h index b407e769..4c2e514f 100644 --- a/main/source/mod/AvHAIPlayer.h +++ b/main/source/mod/AvHAIPlayer.h @@ -92,6 +92,9 @@ void AIPlayerCOAlienThink(AvHAIPlayer* pBot); // Think routine for the deathmatch game mode (e.g. when playing CS maps) void AIPlayerDMThink(AvHAIPlayer* pBot); +// What to do when the game hasn't OFFICIALLY ended, but basically is (i.e. one side has no hive/CC/infantry portal) +void AIPlayerEndMatchThink(AvHAIPlayer* pBot); + void TestNavThink(AvHAIPlayer* pBot); void DroneThink(AvHAIPlayer* pBot); void CustomThink(AvHAIPlayer* pBot); diff --git a/main/source/mod/AvHAIPlayerManager.cpp b/main/source/mod/AvHAIPlayerManager.cpp index c1653b97..042b7986 100644 --- a/main/source/mod/AvHAIPlayerManager.cpp +++ b/main/source/mod/AvHAIPlayerManager.cpp @@ -636,6 +636,7 @@ void AIMGR_UpdateAIPlayers() if (UpdateIndex > -1 && BotIndex >= UpdateIndex && NumBotsThinkThisFrame < BotsPerFrame) { AIPlayerThink(bot); + NumBotsThinkThisFrame++; } BotIndex++; @@ -1409,4 +1410,44 @@ bool AIMGR_HasMatchEnded() bool bMatchExceededMaxLength = (GetGameRules()->GetGameTime() > MaxSeconds); return (bMatchExceededMaxLength && AIMGR_GetNumActiveHumanPlayers() == 0); +} + +bool AIMGR_IsMatchPracticallyOver() +{ + if (!GetGameRules()->GetGameStarted() || GetGameRules()->GetMapMode() != MAP_MODE_NS) { return false; } + + AvHTeamNumber TeamANumber = AIMGR_GetTeamANumber(); + AvHTeamNumber TeamBNumber = AIMGR_GetTeamBNumber(); + + if (AIMGR_GetTeamType(TeamANumber) == AVH_CLASS_TYPE_ALIEN) + { + if (AITAC_GetNumTeamHives(TeamANumber, false) == 0) { return true; } + } + else + { + DeployableSearchFilter ChairFilter; + ChairFilter.DeployableTypes = STRUCTURE_MARINE_COMMCHAIR; + ChairFilter.DeployableTeam = TeamANumber; + ChairFilter.ReachabilityTeam = TeamANumber; + ChairFilter.ReachabilityFlags = AI_REACHABILITY_MARINE; + + if (!AITAC_DeployableExistsAtLocation(ZERO_VECTOR, &ChairFilter)) { return true; } + } + + if (AIMGR_GetTeamType(TeamBNumber) == AVH_CLASS_TYPE_ALIEN) + { + if (AITAC_GetNumTeamHives(TeamBNumber, false) == 0) { return true; } + } + else + { + DeployableSearchFilter ChairFilter; + ChairFilter.DeployableTypes = STRUCTURE_MARINE_COMMCHAIR; + ChairFilter.DeployableTeam = TeamBNumber; + ChairFilter.ReachabilityTeam = TeamBNumber; + ChairFilter.ReachabilityFlags = AI_REACHABILITY_MARINE; + + if (!AITAC_DeployableExistsAtLocation(ZERO_VECTOR, &ChairFilter)) { return true; } + } + + return false; } \ No newline at end of file diff --git a/main/source/mod/AvHAIPlayerManager.h b/main/source/mod/AvHAIPlayerManager.h index 1057bafe..0be70044 100644 --- a/main/source/mod/AvHAIPlayerManager.h +++ b/main/source/mod/AvHAIPlayerManager.h @@ -124,4 +124,6 @@ void AIMGR_UpdateAISystem(); bool AIMGR_HasMatchEnded(); +bool AIMGR_IsMatchPracticallyOver(); + #endif \ No newline at end of file diff --git a/main/source/mod/AvHConsoleCommands.cpp b/main/source/mod/AvHConsoleCommands.cpp index 46e00c32..ec1faf8f 100644 --- a/main/source/mod/AvHConsoleCommands.cpp +++ b/main/source/mod/AvHConsoleCommands.cpp @@ -1438,9 +1438,8 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) { AvHAIPlayer* thisBot = (*it); - { - AITASK_SetMoveTask(thisBot, &thisBot->PrimaryBotTask, theAvHPlayer->pev->origin, true); - } + + AITASK_SetMoveTask(thisBot, &thisBot->PrimaryBotTask, theAvHPlayer->pev->origin, true); } theSuccess = true; @@ -1455,6 +1454,101 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd ) { AIDEBUG_DrawOffMeshConnections(10.0f); + theSuccess = true; + } + else if (FStrEq(pcmd, "bot_evolveskulk")) + { + vector AIPlayers = AIMGR_GetAllAIPlayers(); + + for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) + { + AvHAIPlayer* thisBot = (*it); + + if (!IsPlayerAlien(thisBot->Edict) || !IsPlayerActiveInGame(thisBot->Edict)) { continue; } + + AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->CurrentFloorPosition, ALIEN_LIFEFORM_ONE, true); + } + + theSuccess = true; + } + else if (FStrEq(pcmd, "bot_evolvegorge")) + { + vector AIPlayers = AIMGR_GetAllAIPlayers(); + + for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) + { + AvHAIPlayer* thisBot = (*it); + + if (!IsPlayerAlien(thisBot->Edict) || !IsPlayerActiveInGame(thisBot->Edict)) { continue; } + + if (thisBot->Player->GetResources() < BALANCE_VAR(kGorgeCost)) + { + thisBot->Player->GiveResources(BALANCE_VAR(kGorgeCost)); + } + + AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->CurrentFloorPosition, ALIEN_LIFEFORM_TWO, true); + } + + theSuccess = true; + } + else if (FStrEq(pcmd, "bot_evolvelerk")) + { + vector AIPlayers = AIMGR_GetAllAIPlayers(); + + for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) + { + AvHAIPlayer* thisBot = (*it); + + if (!IsPlayerAlien(thisBot->Edict) || !IsPlayerActiveInGame(thisBot->Edict)) { continue; } + + if (thisBot->Player->GetResources() < BALANCE_VAR(kLerkCost)) + { + thisBot->Player->GiveResources(BALANCE_VAR(kLerkCost)); + } + + AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->CurrentFloorPosition, ALIEN_LIFEFORM_THREE, true); + } + + theSuccess = true; + } + else if (FStrEq(pcmd, "bot_evolvefade")) + { + vector AIPlayers = AIMGR_GetAllAIPlayers(); + + for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) + { + AvHAIPlayer* thisBot = (*it); + + if (!IsPlayerAlien(thisBot->Edict) || !IsPlayerActiveInGame(thisBot->Edict)) { continue; } + + if (thisBot->Player->GetResources() < BALANCE_VAR(kFadeCost)) + { + thisBot->Player->GiveResources(BALANCE_VAR(kFadeCost)); + } + + AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->CurrentFloorPosition, ALIEN_LIFEFORM_FOUR, true); + } + + theSuccess = true; + } + else if (FStrEq(pcmd, "bot_evolveonos")) + { + vector AIPlayers = AIMGR_GetAllAIPlayers(); + + for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++) + { + AvHAIPlayer* thisBot = (*it); + + if (!IsPlayerAlien(thisBot->Edict) || !IsPlayerActiveInGame(thisBot->Edict)) { continue; } + + if (thisBot->Player->GetResources() < BALANCE_VAR(kOnosCost)) + { + thisBot->Player->GiveResources(BALANCE_VAR(kOnosCost)); + } + + AITASK_SetEvolveTask(thisBot, &thisBot->PrimaryBotTask, thisBot->CurrentFloorPosition, ALIEN_LIFEFORM_FIVE, true); + } + theSuccess = true; } else if( FStrEq( pcmd, kcRemoveUpgrade) ) From b1f1c6a66011a399c1f01f3532d55f221cb15eda Mon Sep 17 00:00:00 2001 From: RGreenlees Date: Tue, 16 Apr 2024 19:57:26 +0100 Subject: [PATCH 4/4] Removed debug code --- main/source/mod/AvHAIPlayer.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/main/source/mod/AvHAIPlayer.cpp b/main/source/mod/AvHAIPlayer.cpp index 75ff2b60..7376e545 100644 --- a/main/source/mod/AvHAIPlayer.cpp +++ b/main/source/mod/AvHAIPlayer.cpp @@ -2204,8 +2204,6 @@ void UpdateAIMarinePlayerNSRole(AvHAIPlayer* pBot) void AIPlayerNSThink(AvHAIPlayer* pBot) { - return; - AvHTeam* BotTeam = GetGameRules()->GetTeam(pBot->Player->GetTeam()); if (!BotTeam) { return; }