1- /* *
1+ /* *
22 * ============================================================================= 
33 * CS2Fixes 
44 * Copyright (C) 2023-2025 Source2ZE 
@@ -276,13 +276,13 @@ void ZRClass::Override(ordered_json jsonKeys, std::string szClassname)
276276}
277277
278278ZRHumanClass::ZRHumanClass (ordered_json jsonKeys, std::string szClassname) :
279- 	ZRClass(jsonKeys, szClassname, CS_TEAM_CT){};
279+ 	ZRClass(jsonKeys, szClassname, CS_TEAM_CT)  {};
280280
281281ZRZombieClass::ZRZombieClass (ordered_json jsonKeys, std::string szClassname) :
282282	ZRClass(jsonKeys, szClassname, CS_TEAM_T),
283283	iHealthRegenCount(jsonKeys.value(" health_regen_count" 0 )),
284284	flHealthRegenInterval(jsonKeys.value(" health_regen_interval" 0 )),
285- 	flKnockback(jsonKeys.value(" knockback" 1.0 )){};
285+ 	flKnockback(jsonKeys.value(" knockback" 1.0 ))  {};
286286
287287void  ZRZombieClass::Override (ordered_json jsonKeys, std::string szClassname)
288288{
@@ -1066,7 +1066,10 @@ void ZR_OnPlayerSpawn(CCSPlayerController* pController)
10661066
10671067void  ZR_ApplyKnockback (CCSPlayerPawn* pHuman, CCSPlayerPawn* pVictim, int  iDamage, const  char * szWeapon, int  hitgroup, float  classknockback)
10681068{
1069- 	std::shared_ptr<ZRWeapon> pWeapon = g_pZRWeaponConfig->FindWeapon (szWeapon);
1069+ 	if  (V_strlen (szWeapon) <= 7 )
1070+ 		return ;
1071+ 
1072+ 	std::shared_ptr<ZRWeapon> pWeapon = g_pZRWeaponConfig->FindWeapon (szWeapon + 7 );
10701073	std::shared_ptr<ZRHitgroup> pHitgroup = g_pZRHitgroupConfig->FindHitgroupIndex (hitgroup);
10711074	//  player shouldn't be able to pick up that weapon in the first place, but just in case
10721075	if  (!pWeapon)
@@ -1602,21 +1605,35 @@ void ZR_Hook_ClientCommand_JoinTeam(CPlayerSlot slot, const CCommand& args)
16021605		SpawnPlayer (pController);
16031606}
16041607
1605- void  ZR_OnPlayerHurt (IGameEvent* pEvent )
1608+ void  ZR_OnPlayerTakeDamage (CCSPlayerPawn* pVictimPawn,  const  CTakeDamageInfo* pInfo,  const  int32 damage )
16061609{
1607- 	CCSPlayerController* pAttackerController = (CCSPlayerController*)pEvent->GetPlayerController (" attacker" 
1608- 	CCSPlayerController* pVictimController = (CCSPlayerController*)pEvent->GetPlayerController (" userid" 
1609- 	const  char * szWeapon = pEvent->GetString (" weapon" 
1610- 	int  iDmgHealth = pEvent->GetInt (" dmg_health" 
1611- 	int  iHitGroup = pEvent->GetInt (" hitgroup" 
1610+ 	//  bullet only
1611+ 	if  ((pInfo->m_bitsDamageType  & DMG_BULLET) == 0  || !pInfo->m_pTrace  || !pInfo->m_pTrace ->m_pHitbox )
1612+ 		return ;
1613+ 
1614+ 	const  auto  pVictimController = reinterpret_cast <CCSPlayerController*>(pVictimPawn->GetController ());
1615+ 	if  (!pVictimController || !pVictimController->IsConnected ())
1616+ 		return ;
16121617
1613- 	//  grenade and molotov knockbacks are handled by TakeDamage detours
1614- 	if  (!pAttackerController || !pVictimController || !V_strncmp (szWeapon, " inferno" 7 ) || !V_strncmp (szWeapon, " hegrenade" 9 ))
1618+ 	if  (!pInfo->m_AttackerInfo .m_bIsPawn )
16151619		return ;
16161620
1617- 	if  (pAttackerController->m_iTeamNum () == CS_TEAM_CT && pVictimController->m_iTeamNum () == CS_TEAM_T)
1621+ 	const  auto  pKillerPawn = pInfo->m_AttackerInfo .m_hAttackerPawn .Get ();
1622+ 	if  (!pKillerPawn || !pKillerPawn->IsPawn ()) //  I don't know why this maybe non-pawn entity??
1623+ 		return ;
1624+ 
1625+ 	const  auto  pAbility = pInfo->m_hAbility .Get ();
1626+ 	if  (!pAbility)
1627+ 		return ;
1628+ 
1629+ 	const  char * pszWeapon = pAbility->GetClassname ();
1630+ 
1631+ 	if  (!V_strncasecmp (pszWeapon, " weapon_" 7 ))
1632+ 		pszWeapon = reinterpret_cast <CBasePlayerWeapon*>(pAbility)->GetWeaponClassname ();
1633+ 
1634+ 	if  (pKillerPawn->m_iTeamNum () == CS_TEAM_CT && pVictimPawn->m_iTeamNum () == CS_TEAM_T)
16181635	{
1619- 		float  flClassKnockback = 1 .0f ;
1636+ 		auto  flClassKnockback = 1 .0f ;
16201637
16211638		if  (pVictimController->GetZEPlayer ())
16221639		{
@@ -1626,7 +1643,7 @@ void ZR_OnPlayerHurt(IGameEvent* pEvent)
16261643				flClassKnockback = static_pointer_cast<ZRZombieClass>(activeClass)->flKnockback ;
16271644		}
16281645
1629- 		ZR_ApplyKnockback ((CCSPlayerPawn*)pAttackerController-> GetPawn (), (CCSPlayerPawn*)pVictimController-> GetPawn (), iDmgHealth, szWeapon, iHitGroup , flClassKnockback);
1646+ 		ZR_ApplyKnockback (pKillerPawn, pVictimPawn, damage, pszWeapon, pInfo-> m_pTrace -> m_pHitbox -> m_nGroupId , flClassKnockback);
16301647	}
16311648}
16321649
0 commit comments