game/server: fix some Asan issues

This commit is contained in:
nillerusr 2022-07-29 04:34:23 +03:00
parent d1ac11a5c7
commit 9c2c7e3529
4 changed files with 34 additions and 3 deletions

View file

@ -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:
return 0;
}
int h = pGroup->followers.Head();
intp h = pGroup->followers.Head();
while( h != pGroup->followers.InvalidIndex() )
{

View file

@ -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()
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 )
}
//=============================================================================
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;
}
}
}

View file

@ -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:
CAI_Node** AccessNodes() const { return m_pAInode; }
private:
friend class CAI_NetworkManager;

View file

@ -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;