Browse Source

game/server: fix some Asan issues

dedicated-build-fix
nillerusr 2 years ago
parent
commit
9c2c7e3529
  1. 4
      game/server/ai_behavior_follow.cpp
  2. 24
      game/server/ai_network.cpp
  3. 6
      game/server/ai_network.h
  4. 3
      tier1/strtools.cpp

4
game/server/ai_behavior_follow.cpp

@ -111,7 +111,7 @@ public: @@ -111,7 +111,7 @@ public:
else
{
int result = 0;
for ( int i = pGroup->followers.Head(); i != pGroup->followers.InvalidIndex(); i = pGroup->followers.Next( i ) )
for ( intp i = pGroup->followers.Head(); i != pGroup->followers.InvalidIndex(); i = pGroup->followers.Next( i ) )
{
if ( pGroup->followers[i].hFollower && pGroup->followers[i].hFollower->ClassMatches( iszClassname ) )
{
@ -131,7 +131,7 @@ public: @@ -131,7 +131,7 @@ public:
return 0;
}
int h = pGroup->followers.Head();
intp h = pGroup->followers.Head();
while( h != pGroup->followers.InvalidIndex() )
{

24
game/server/ai_network.cpp

@ -120,6 +120,8 @@ CAI_Network::CAI_Network() @@ -120,6 +120,8 @@ CAI_Network::CAI_Network()
#ifdef AI_NODE_TREE
m_pNodeTree = NULL;
#endif
gEntList.AddListenerEntity( this );
}
//-----------------------------------------------------------------------------
@ -133,6 +135,9 @@ CAI_Network::~CAI_Network() @@ -133,6 +135,9 @@ CAI_Network::~CAI_Network()
m_pNodeTree = NULL;
}
#endif
gEntList.RemoveListenerEntity( this );
if ( m_pAInode )
{
for ( int node = 0; node < m_iNumNodes; node++ )
@ -642,3 +647,22 @@ IterationRetval_t CAI_Network::EnumElement( IHandleEntity *pHandleEntity ) @@ -642,3 +647,22 @@ IterationRetval_t CAI_Network::EnumElement( IHandleEntity *pHandleEntity )
}
//=============================================================================
void CAI_Network::OnEntityDeleted( CBaseEntity *pEntity )
{
if( pEntity->IsNPC() )
return;
const char *classname = pEntity->GetClassname();
if( !classname || strcmp(classname, "ai_hint") != 0 )
return;
for( int i = 0; i < m_iNumNodes; i++)
{
if( m_pAInode[i]->GetHint() == (CAI_Hint*)pEntity )
{
m_pAInode[i]->SetHint( NULL );
break;
}
}
}

6
game/server/ai_network.h

@ -84,12 +84,14 @@ public: @@ -84,12 +84,14 @@ public:
// Purpose: Stores a node graph through which an AI may pathfind
//-----------------------------------------------------------------------------
class CAI_Network : public IPartitionEnumerator
class CAI_Network : public IPartitionEnumerator, public IEntityListener
{
public:
CAI_Network();
~CAI_Network();
void OnEntityDeleted( CBaseEntity *pEntity );
CAI_Node * AddNode( const Vector &origin, float yaw ); // Returns a new node in the network
CAI_Link * CreateLink( int srcID, int destID, CAI_DynamicLink *pDynamicLink = NULL );
@ -128,6 +130,8 @@ public: @@ -128,6 +130,8 @@ public:
CAI_Node** AccessNodes() const { return m_pAInode; }
private:
friend class CAI_NetworkManager;

3
tier1/strtools.cpp

@ -2019,6 +2019,9 @@ bool V_StripLastDir( char *dirName, int maxlen ) @@ -2019,6 +2019,9 @@ bool V_StripLastDir( char *dirName, int maxlen )
//-----------------------------------------------------------------------------
const char * V_UnqualifiedFileName( const char * in )
{
if( !in || !in[0] )
return in;
// back up until the character after the first path separator we find,
// or the beginning of the string
const char * out = in + strlen( in ) - 1;

Loading…
Cancel
Save