@@ -39,6 +39,23 @@ bool CClientExplosionManager::Hook_StaticExplosionCreation(CEntity* pGameExplodi
39
39
return g_pExplosionManager->Hook_ExplosionCreation (pGameExplodingEntity, pGameCreator, vecPosition, explosionType);
40
40
}
41
41
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
+
42
59
bool CClientExplosionManager::Hook_ExplosionCreation (CEntity* pGameExplodingEntity, CEntity* pGameCreator, const CVector& vecPosition,
43
60
eExplosionType explosionType)
44
61
{
@@ -52,42 +69,20 @@ bool CClientExplosionManager::Hook_ExplosionCreation(CEntity* pGameExplodingEnti
52
69
53
70
CClientEntity* const pResponsible = pPools->GetClientEntity (reinterpret_cast <DWORD*>(pResponsibleGameEntity->GetInterface ()));
54
71
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 );
91
86
}
92
87
93
88
// Determine the used weapon
@@ -202,27 +197,7 @@ CExplosion* CClientExplosionManager::Create(eExplosionType explosionType, CVecto
202
197
if (responsibleWeapon != WEAPONTYPE_UNARMED)
203
198
m_LastWeaponType = responsibleWeapon;
204
199
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);
226
201
227
202
if (pCreator && pCreator->IsLocalEntity ())
228
203
{
0 commit comments