From 407cdf7d649580f948babba73fae21c830f9325a Mon Sep 17 00:00:00 2001 From: MyGamepedia <103366204+MyGamepedia@users.noreply.github.com> Date: Mon, 9 Nov 2026 16:25:14 +0200 Subject: [PATCH] ragdolls not cleaning their collision hash fix --- sp/src/game/server/physics_prop_ragdoll.cpp | 27 ++++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/sp/src/game/server/physics_prop_ragdoll.cpp b/sp/src/game/server/physics_prop_ragdoll.cpp index 772f9e31b87..2c7dcf1d3c8 100644 --- a/sp/src/game/server/physics_prop_ragdoll.cpp +++ b/sp/src/game/server/physics_prop_ragdoll.cpp @@ -23,6 +23,8 @@ #ifdef MAPBASE #include "decals.h" #include "death_pose.h" +#include "physics_shared.h" +#include "vphysics/object_hash.h" #endif // memdbgon must be the last include file in a .cpp file!!! @@ -304,12 +306,29 @@ void CRagdollProp::CalcRagdollSize( void ) } void CRagdollProp::UpdateOnRemove( void ) -{ +{ +#ifdef MAPBASE + //entity pointers are keys in the collision exclusion hash + if (g_EntityCollisionHash) + { + g_EntityCollisionHash->RemoveAllPairsForObject(this); + } +#endif + for ( int i = 0; i < m_ragdoll.listCount; i++ ) { - if ( m_ragdoll.list[i].pObject ) - { - g_pPhysSaveRestoreManager->ForgetModel( m_ragdoll.list[i].pObject ); + IPhysicsObject *pObject = m_ragdoll.list[i].pObject; + if (pObject) + { +#ifdef MAPBASE + //physics object pointers are separate keys + if (g_EntityCollisionHash) + { + g_EntityCollisionHash->RemoveAllPairsForObject( pObject ); + } +#endif + + g_pPhysSaveRestoreManager->ForgetModel(pObject); } }