Skip to content

Commit e1d1e4b

Browse files
committed
Update CTakeDamageInfo & CTakeDamageResult
1 parent 68ee417 commit e1d1e4b

5 files changed

Lines changed: 26 additions & 18 deletions

File tree

src/cs2_sdk/entity/ctakedamageinfo.h

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,52 +136,60 @@ class CTakeDamageInfo
136136
public:
137137
void* m_hScriptInstance; // 0xe0 | 224
138138
AttackerInfo_t m_AttackerInfo; // 0xe8 | 232
139-
CUtlVector<int> m_nDestructibleHitGroupsToForceDestroy; // 0x100 | 256
140-
bool m_bInTakeDamageFlow; // 0x118 | 280
139+
CUtlLeanVector<int> m_DestructibleHitGroupRequests; // 0x100 | 256 CUtlLeanVector<DestructiblePartDamageRequest_t>
140+
bool m_bInTakeDamageFlow; // 0x110 | 272
141141

142142
private:
143143
[[maybe_unused]] int32_t m_nUnknown4; // 0x11c | 284
144144
};
145-
static_assert(sizeof(CTakeDamageInfo) == 288);
145+
static_assert(sizeof(CTakeDamageInfo) == 280);
146146

147147
struct CTakeDamageResult
148148
{
149+
public:
149150
CTakeDamageInfo* m_pOriginatingInfo;
151+
CUtlLeanVector<int> m_DestructibleHitGroupRequests; // CUtlLeanVector<DestructiblePartDamageRequest_t>
150152
int32_t m_nHealthLost;
151153
int32_t m_nHealthBefore;
152-
int32_t m_nDamageDealt;
154+
float m_flDamageDealt;
153155
float m_flPreModifiedDamage;
154156
int32_t m_nTotalledHealthLost;
155-
int32_t m_nTotalledDamageDealt;
157+
float m_flTotalledDamageDealt;
156158
float m_flTotalledPreModifiedDamage;
159+
float m_flNewDamageAccumulatorValue;
160+
TakeDamageFlags_t m_nDamageFlags;
157161
bool m_bWasDamageSuppressed;
158162
bool m_bSuppressFlinch;
159163
HitGroup_t m_nOverrideFlinchHitGroup;
160164

165+
private:
166+
[[maybe_unused]] uint8_t m_nUnknown0[0x8];
167+
168+
public:
161169
void CopyFrom(CTakeDamageInfo* pInfo)
162170
{
163171
m_pOriginatingInfo = pInfo;
164172
m_nHealthLost = static_cast<int32_t>(pInfo->m_flDamage);
165173
m_nHealthBefore = 0;
166-
m_nDamageDealt = static_cast<int32_t>(pInfo->m_flDamage);
174+
m_flDamageDealt = pInfo->m_flDamage;
167175
m_flPreModifiedDamage = pInfo->m_flDamage;
168176
m_nTotalledHealthLost = static_cast<int32_t>(pInfo->m_flDamage);
169-
m_nTotalledDamageDealt = static_cast<int32_t>(pInfo->m_flDamage);
177+
m_flTotalledDamageDealt = pInfo->m_flDamage;
170178
m_bWasDamageSuppressed = false;
171179
}
172180

173181
CTakeDamageResult() = delete;
174182

175-
constexpr CTakeDamageResult(float damage) :
183+
CTakeDamageResult(float damage) :
176184
m_pOriginatingInfo(nullptr),
177185
m_nHealthLost(static_cast<int32_t>(damage)),
178186
m_nHealthBefore(0),
179-
m_nDamageDealt(static_cast<int32_t>(damage)),
187+
m_flDamageDealt(damage),
180188
m_flPreModifiedDamage(damage),
181189
m_nTotalledHealthLost(static_cast<int32_t>(damage)),
182-
m_nTotalledDamageDealt(static_cast<int32_t>(damage)),
190+
m_flTotalledDamageDealt(damage),
183191
m_bWasDamageSuppressed(false)
184192
{
185193
}
186194
};
187-
static_assert(sizeof(CTakeDamageResult) == 48);
195+
static_assert(sizeof(CTakeDamageResult) == 80);

src/cs2fixes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ bool CS2Fixes::Hook_OnTakeDamage_Alive(CTakeDamageResult* pDamageResult)
10471047
if (g_cvarEnableZR.Get() && ZR_Hook_OnTakeDamage_Alive(pDamageResult->m_pOriginatingInfo, pPawn))
10481048
{
10491049
pDamageResult->m_bWasDamageSuppressed = true;
1050-
pDamageResult->m_nDamageDealt = 0;
1050+
pDamageResult->m_flDamageDealt = 0.0f;
10511051
RETURN_META_VALUE(MRES_SUPERCEDE, false);
10521052
}
10531053

src/detours.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ int64 FASTCALL Detour_CBaseEntity_TakeDamageOld(CBaseEntity* pThis, CTakeDamageI
155155

156156
CBaseEntity_TakeDamageOld(pThis, pInfo, pResult);
157157

158-
if (pResult->m_nDamageDealt > 0 && !pResult->m_bWasDamageSuppressed && g_cvarEnableZR.Get() && pThis->IsPawn())
159-
ZR_OnPlayerTakeDamage(reinterpret_cast<CCSPlayerPawn*>(pThis), pInfo, pResult->m_nDamageDealt);
158+
if (pResult->m_flDamageDealt > 0.0f && !pResult->m_bWasDamageSuppressed && g_cvarEnableZR.Get() && pThis->IsPawn())
159+
ZR_OnPlayerTakeDamage(reinterpret_cast<CCSPlayerPawn*>(pThis), pInfo, pResult->m_flDamageDealt);
160160

161161
return 1;
162162
}

src/zombiereborn.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ void ZR_OnPlayerSpawn(CCSPlayerController* pController)
988988
});
989989
}
990990

991-
void ZR_ApplyKnockback(CCSPlayerPawn* pHuman, CCSPlayerPawn* pVictim, int iDamage, const char* szWeapon, int hitgroup, float classknockback)
991+
void ZR_ApplyKnockback(CCSPlayerPawn* pHuman, CCSPlayerPawn* pVictim, float flDamage, const char* szWeapon, int hitgroup, float classknockback)
992992
{
993993
std::shared_ptr<ZRWeapon> pWeapon = g_pZRWeaponConfig->FindWeapon(szWeapon);
994994
std::shared_ptr<ZRHitgroup> pHitgroup = g_pZRHitgroupConfig->FindHitgroupIndex(hitgroup);
@@ -1003,7 +1003,7 @@ void ZR_ApplyKnockback(CCSPlayerPawn* pHuman, CCSPlayerPawn* pVictim, int iDamag
10031003

10041004
Vector vecKnockback;
10051005
AngleVectors(pHuman->m_angEyeAngles(), &vecKnockback);
1006-
vecKnockback *= (iDamage * g_cvarKnockbackScale.Get() * flWeaponKnockbackScale * flHitgroupKnockbackScale * classknockback);
1006+
vecKnockback *= (flDamage * g_cvarKnockbackScale.Get() * flWeaponKnockbackScale * flHitgroupKnockbackScale * classknockback);
10071007
pVictim->m_vecAbsVelocity = pVictim->m_vecAbsVelocity() + vecKnockback;
10081008
}
10091009

@@ -1594,7 +1594,7 @@ void ZR_Hook_ClientCommand_JoinTeam(CPlayerSlot slot, const CCommand& args)
15941594
SpawnPlayer(pController);
15951595
}
15961596

1597-
void ZR_OnPlayerTakeDamage(CCSPlayerPawn* pVictimPawn, const CTakeDamageInfo* pInfo, const int32_t damage)
1597+
void ZR_OnPlayerTakeDamage(CCSPlayerPawn* pVictimPawn, const CTakeDamageInfo* pInfo, const float damage)
15981598
{
15991599
// bullet & knife only
16001600
if ((!(pInfo->m_bitsDamageType & DMG_BULLET) && !(pInfo->m_bitsDamageType & DMG_SLASH)) || !pInfo->m_pTrace || !pInfo->m_pTrace->m_pHitbox)

src/zombiereborn.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void ZR_OnLevelInit();
267267
void ZR_OnRoundPrestart(IGameEvent* pEvent);
268268
void ZR_OnRoundStart(IGameEvent* pEvent);
269269
void ZR_OnPlayerSpawn(CCSPlayerController* pController);
270-
void ZR_OnPlayerTakeDamage(CCSPlayerPawn* pVictimPawn, const CTakeDamageInfo* pInfo, const int32 damage);
270+
void ZR_OnPlayerTakeDamage(CCSPlayerPawn* pVictimPawn, const CTakeDamageInfo* pInfo, const float damage);
271271
void ZR_OnPlayerDeath(IGameEvent* pEvent);
272272
void ZR_OnRoundFreezeEnd(IGameEvent* pEvent);
273273
void ZR_OnRoundTimeWarning(IGameEvent* pEvent);

0 commit comments

Comments
 (0)