From 71ef73e3a4e10acadbaae53491303a0e221f9052 Mon Sep 17 00:00:00 2001 From: kitsune Date: Mon, 17 Nov 2025 17:41:00 +0100 Subject: [PATCH 1/2] fix: OnHitConfirm --- src/game/shared/swarm/rd_inventory_shared.cpp | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/game/shared/swarm/rd_inventory_shared.cpp b/src/game/shared/swarm/rd_inventory_shared.cpp index 4e59b372f..7e021c3d5 100644 --- a/src/game/shared/swarm/rd_inventory_shared.cpp +++ b/src/game/shared/swarm/rd_inventory_shared.cpp @@ -3804,18 +3804,27 @@ namespace ReactiveDropInventory if ( !ASWDeathmatchMode() ) { - // Alien Kill Streak reset after marine death - if ( bKilled && pTarget && pTarget->IsInhabitableNPC() ) - s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( assert_cast( pTarget ), 5007, 0, 0, false ); + if ( !pTarget ) + return; + + // Reset the Alien Kill Streak of the player inhabiting this NPC when that NPC dies, regardless of the source of damage + if ( pTarget->IsInhabitableNPC() && bKilled ) + { + CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + if ( pInhabitableTarget->IsInhabited() ) + s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( pInhabitableTarget, 5007, 0, 0, false ); + } - if ( !pAttacker || !pTarget ) + if ( !pAttacker ) return; - + if ( bKilled && pWeapon - && pAttacker->IsInhabitableNPC() - && pTarget->IsAlien() ) + && pTarget->IsAlien() + && pAttacker->IsInhabitableNPC() + && pAttacker != pTarget + ) { - CASW_Inhabitable_NPC* pInhabitableAttacker = assert_cast( pAttacker ); + CASW_Inhabitable_NPC *pInhabitableAttacker = assert_cast( pAttacker ); if ( pInhabitableAttacker->IsInhabited() ) { s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5002, 1 ); // Aliens Killed @@ -3824,18 +3833,18 @@ namespace ReactiveDropInventory } } - if ( !V_stricmp( IGameSystem::MapName(), "rd-reduction2" ) - && !pAttacker->IsInhabitableNPC() - && !V_strcmp( STRING( pAttacker->GetEntityName() ), "trigger_pitworm_hitbox" ) - && pTarget->IsInhabitableNPC() ) + if ( !pAttacker->IsInhabitableNPC() + && pTarget->IsInhabitableNPC() + && !V_stricmp( IGameSystem::MapName(), "rd-reduction2" ) + && !V_strcmp( STRING( pAttacker->GetEntityName() ), "trigger_pitworm_hitbox" ) ) { - CASW_Inhabitable_NPC *pTargetNPC = assert_cast< CASW_Inhabitable_NPC * >( pTarget ); - if ( pTargetNPC->IsInhabited() ) + CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + if ( pInhabitableTarget->IsInhabited() ) { - s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( pTargetNPC, 42, 1 ); + s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( pInhabitableTarget, 42, 1 ); #ifdef CLIENT_DLL static bool s_bRequestedWormToucherMedal = false; - if ( !s_bRequestedWormToucherMedal && pTargetNPC->GetCommander() && pTargetNPC->GetCommander()->IsLocalPlayer() ) + if ( !s_bRequestedWormToucherMedal && pInhabitableTarget->GetCommander() && pInhabitableTarget->GetCommander()->IsLocalPlayer() ) { AddPromoItem( 42 ); s_bRequestedWormToucherMedal = true; @@ -3850,11 +3859,15 @@ namespace ReactiveDropInventory && pAttacker && pTarget && pAttacker != pTarget && pAttacker->IsInhabitableNPC() - && pTarget->Classify() == (Class_T)CLASS_ASW_MARINE ) + && pTarget->IsInhabitableNPC() ) { CASW_Inhabitable_NPC *pInhabitableAttacker = assert_cast( pAttacker ); - s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5009, 1 ); // Deathmatch Kills - s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5011, 1 ); // Deathmatch Kills (Twitch) + CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + if ( pInhabitableAttacker->IsInhabited() && pInhabitableTarget->IsInhabited() ) + { + s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5009, 1 ); // Deathmatch Kills + s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5011, 1 ); // Deathmatch Kills (Twitch) + } } } } From 38456db4630b58afe0f7a9109b19fe097df8daf8 Mon Sep 17 00:00:00 2001 From: kitsune Date: Mon, 17 Nov 2025 17:50:36 +0100 Subject: [PATCH 2/2] refactor --- src/game/shared/swarm/rd_inventory_shared.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/game/shared/swarm/rd_inventory_shared.cpp b/src/game/shared/swarm/rd_inventory_shared.cpp index 7e021c3d5..10d1f8c3f 100644 --- a/src/game/shared/swarm/rd_inventory_shared.cpp +++ b/src/game/shared/swarm/rd_inventory_shared.cpp @@ -3808,9 +3808,10 @@ namespace ReactiveDropInventory return; // Reset the Alien Kill Streak of the player inhabiting this NPC when that NPC dies, regardless of the source of damage - if ( pTarget->IsInhabitableNPC() && bKilled ) + if ( bKilled && pTarget->IsInhabitableNPC() ) { CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + // only for player-controlled characters if ( pInhabitableTarget->IsInhabited() ) s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( pInhabitableTarget, 5007, 0, 0, false ); } @@ -3825,6 +3826,7 @@ namespace ReactiveDropInventory ) { CASW_Inhabitable_NPC *pInhabitableAttacker = assert_cast( pAttacker ); + // only for player-controlled characters if ( pInhabitableAttacker->IsInhabited() ) { s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5002, 1 ); // Aliens Killed @@ -3839,6 +3841,7 @@ namespace ReactiveDropInventory && !V_strcmp( STRING( pAttacker->GetEntityName() ), "trigger_pitworm_hitbox" ) ) { CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + // only for player-controlled characters if ( pInhabitableTarget->IsInhabited() ) { s_RD_Inventory_Manager.IncrementStrangePropertyOnEquippedItems( pInhabitableTarget, 42, 1 ); @@ -3863,6 +3866,7 @@ namespace ReactiveDropInventory { CASW_Inhabitable_NPC *pInhabitableAttacker = assert_cast( pAttacker ); CASW_Inhabitable_NPC *pInhabitableTarget = assert_cast( pTarget ); + // only for player-controlled characters if ( pInhabitableAttacker->IsInhabited() && pInhabitableTarget->IsInhabited() ) { s_RD_Inventory_Manager.IncrementStrangePropertiesForWeapon( pInhabitableAttacker, pWeapon, 5009, 1 ); // Deathmatch Kills