Skip to content

Commit 1566e91

Browse files
committed
Add GetWeaponTypeFromExplosionType and refactor explosion logic
1 parent 0f011ef commit 1566e91

File tree

2 files changed

+34
-58
lines changed

2 files changed

+34
-58
lines changed

Client/mods/deathmatch/logic/CClientExplosionManager.cpp

Lines changed: 32 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4259
bool 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
{

Client/mods/deathmatch/logic/CClientExplosionManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ class CClientExplosionManager
3434
CClientEntityPtr m_pLastCreator;
3535

3636
private:
37-
CClientManager* m_pManager;
37+
CClientManager* m_pManager;
38+
eWeaponType GetWeaponTypeFromExplosionType(eExplosionType explosionType);
3839
};

0 commit comments

Comments
 (0)