From ab95a24ce64abc658d865c5a6be74ee45c0b3521 Mon Sep 17 00:00:00 2001 From: Jhobean Date: Sun, 15 Oct 2023 14:07:30 -0400 Subject: [PATCH] Reflect only physical damage --- src/game/chars/CCharAct.cpp | 40 ++++++++++++++++++++++++----------- src/game/chars/CCharFight.cpp | 21 +++++++++--------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/game/chars/CCharAct.cpp b/src/game/chars/CCharAct.cpp index 61be7fb47..a9570dfc0 100644 --- a/src/game/chars/CCharAct.cpp +++ b/src/game/chars/CCharAct.cpp @@ -537,6 +537,22 @@ void CChar::OnRemoveObj( CSObjContRec* pObRec ) // Override this = called when r ModPropNum(pCCPChar, PROPCH_DAMPOISON, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMPOISON, pItemBaseCCPItemEquippable)); ModPropNum(pCCPChar, PROPCH_DAMENERGY, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLEECHMANA, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLEECHSTAM, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + + ModPropNum(pCCPChar, PROPCH_HITAREAPHYSICAL, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAFIRE, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREACOLD, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAPOISON, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAENERGY, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + + ModPropNum(pCCPChar, PROPCH_HITFIREBALL, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITHARM, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLIGHTNING, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITMAGICARROW, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + + ModPropNum(pCCPChar, PROPCH_REFLECTPHYSICALDAM, - pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + if (pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_NIGHTSIGHT, pItemBaseCCPItemEquippable)) { StatFlag_Mod(STATF_NIGHTSIGHT, 0); @@ -2197,21 +2213,21 @@ bool CChar::ItemEquip( CItem * pItem, CChar * pCharMsg, bool fFromDClick ) ModPropNum(pCCPChar, PROPCH_DAMPOISON, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMPOISON, pItemBaseCCPItemEquippable)); ModPropNum(pCCPChar, PROPCH_DAMENERGY, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITLEECHMANA, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITLEECHSTAM, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLEECHMANA, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLEECHSTAM, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITAREAPHYSICAL, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITAREAFIRE, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITAREACOLD, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITAREAPOISON, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITAREAENERGY, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAPHYSICAL, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAFIRE, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREACOLD, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAPOISON, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITAREAENERGY, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITFIREBALL, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITHARM, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITLIGHTNING, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_HITMAGICARROW, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITFIREBALL, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITHARM, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITLIGHTNING, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_HITMAGICARROW, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); - ModPropNum(pCCPChar, PROPCH_REFLECTPHYSICALDAM, +pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); + ModPropNum(pCCPChar, PROPCH_REFLECTPHYSICALDAM, + pItem->GetPropNum(pItemCCPItemEquippable, PROPIEQUIP_DAMENERGY, pItemBaseCCPItemEquippable)); diff --git a/src/game/chars/CCharFight.cpp b/src/game/chars/CCharFight.cpp index 20e062875..752eb94a2 100644 --- a/src/game/chars/CCharFight.cpp +++ b/src/game/chars/CCharFight.cpp @@ -2202,17 +2202,16 @@ WAR_SWING_TYPE CChar::Fight_Hit( CChar * pCharTarg ) int iTargReflectPhysicalDam =pCharTarg->GetPropNum(pCCPCharTarg, PROPCH_REFLECTPHYSICALDAM, pBaseCCPCharTarg); if (iTargReflectPhysicalDam) { - // REFLECTPHYSICALDAM suppose to reflect only physical? How we block other damage here? - OnTakeDamage( - iDmg * iTargReflectPhysicalDam / 100, - this, - iDmgType, - (int)GetPropNum(pCCPChar, PROPCH_DAMPHYSICAL, pBaseCCPChar), - (int)GetPropNum(pCCPChar, PROPCH_DAMFIRE, pBaseCCPChar), - (int)GetPropNum(pCCPChar, PROPCH_DAMCOLD, pBaseCCPChar), - (int)GetPropNum(pCCPChar, PROPCH_DAMPOISON, pBaseCCPChar), - (int)GetPropNum(pCCPChar, PROPCH_DAMENERGY, pBaseCCPChar) - ); + // REFLECTPHYSICALDAM suppose to reflect only physical (A physical blow of some sort.) + if (iDmgType & (DAMAGE_HIT_BLUNT | DAMAGE_HIT_PIERCE | DAMAGE_HIT_SLASH)) + { + OnTakeDamage( + iDmg * iTargReflectPhysicalDam / 100, + this, + iDmgType, + 100,0,0,0,0 + ); + } } if (pWeapon)