@@ -39,6 +39,23 @@ bool CClientExplosionManager::Hook_StaticExplosionCreation(CEntity* pGameExplodi
3939 return g_pExplosionManager->Hook_ExplosionCreation (pGameExplodingEntity, pGameCreator, vecPosition, explosionType);
4040}
4141
42+ eWeaponType CClientExplosionManager::GetWeaponTypeFromExplosionType (eExplosionType explosionType)
43+ {
44+ switch (explosionType) {
45+ case EXP_TYPE_GRENADE:
46+ return WEAPONTYPE_GRENADE;
47+ case EXP_TYPE_MOLOTOV:
48+ return WEAPONTYPE_MOLOTOV;
49+ case EXP_TYPE_ROCKET:
50+ case EXP_TYPE_ROCKET_WEAK:
51+ return WEAPONTYPE_ROCKET;
52+ case EXP_TYPE_TANK_GRENADE:
53+ return WEAPONTYPE_TANK_GRENADE;
54+ default :
55+ return WEAPONTYPE_EXPLOSION;
56+ }
57+ }
58+
4259bool CClientExplosionManager::Hook_ExplosionCreation (CEntity* pGameExplodingEntity, CEntity* pGameCreator, const CVector& vecPosition,
4360 eExplosionType explosionType)
4461{
@@ -52,42 +69,20 @@ bool CClientExplosionManager::Hook_ExplosionCreation(CEntity* pGameExplodingEnti
5269
5370 CClientEntity* const pResponsible = pPools->GetClientEntity (reinterpret_cast <DWORD*>(pResponsibleGameEntity->GetInterface ()));
5471
55- if (!pResponsible)
56- {
57- if (pGameCreator)
58- {
59- CClientPlayer* pLocalPlayer = m_pManager->GetPlayerManager ()->GetLocalPlayer ();
60- if (pLocalPlayer && pLocalPlayer->GetGameEntity () == pGameCreator)
61- {
62- eWeaponType explosionWeaponType = WEAPONTYPE_EXPLOSION;
63- switch (explosionType)
64- {
65- case EXP_TYPE_GRENADE:
66- explosionWeaponType = WEAPONTYPE_GRENADE;
67- break ;
68- case EXP_TYPE_MOLOTOV:
69- explosionWeaponType = WEAPONTYPE_MOLOTOV;
70- break ;
71- case EXP_TYPE_ROCKET:
72- case EXP_TYPE_ROCKET_WEAK:
73- explosionWeaponType = WEAPONTYPE_ROCKET;
74- break ;
75- case EXP_TYPE_TANK_GRENADE:
76- explosionWeaponType = WEAPONTYPE_TANK_GRENADE;
77- break ;
78- default :
79- break ;
80- }
81-
82- CLuaArguments arguments;
83- arguments.PushNumber (vecPosition.fX );
84- arguments.PushNumber (vecPosition.fY );
85- arguments.PushNumber (vecPosition.fZ );
86- arguments.PushNumber (explosionWeaponType);
87- return pLocalPlayer->CallEvent (" onClientExplosion" , arguments, true );
88- }
89- }
90- return false ;
72+ if (!pResponsible) {
73+ if (!pGameCreator) return false ;
74+
75+ CClientPlayer* pLocalPlayer = m_pManager->GetPlayerManager ()->GetLocalPlayer ();
76+ if (!pLocalPlayer || pLocalPlayer->GetGameEntity () != pGameCreator) return false ;
77+
78+ eWeaponType explosionWeaponType = GetWeaponTypeFromExplosionType (explosionType);
79+
80+ CLuaArguments arguments;
81+ arguments.PushNumber (vecPosition.fX );
82+ arguments.PushNumber (vecPosition.fY );
83+ arguments.PushNumber (vecPosition.fZ );
84+ arguments.PushNumber (explosionWeaponType);
85+ return pLocalPlayer->CallEvent (" onClientExplosion" , arguments, true );
9186 }
9287
9388 // Determine the used weapon
@@ -202,27 +197,7 @@ CExplosion* CClientExplosionManager::Create(eExplosionType explosionType, CVecto
202197 if (responsibleWeapon != WEAPONTYPE_UNARMED)
203198 m_LastWeaponType = responsibleWeapon;
204199 else
205- {
206- switch (explosionType)
207- {
208- case EXP_TYPE_GRENADE:
209- m_LastWeaponType = WEAPONTYPE_GRENADE;
210- break ;
211- case EXP_TYPE_MOLOTOV:
212- m_LastWeaponType = WEAPONTYPE_MOLOTOV;
213- break ;
214- case EXP_TYPE_ROCKET:
215- case EXP_TYPE_ROCKET_WEAK:
216- m_LastWeaponType = WEAPONTYPE_ROCKET;
217- break ;
218- case EXP_TYPE_TANK_GRENADE:
219- m_LastWeaponType = WEAPONTYPE_TANK_GRENADE;
220- break ;
221- default :
222- m_LastWeaponType = WEAPONTYPE_EXPLOSION;
223- break ;
224- }
225- }
200+ m_LastWeaponType = GetWeaponTypeFromExplosionType (explosionType);
226201
227202 if (pCreator && pCreator->IsLocalEntity ())
228203 {
0 commit comments