mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[8748] Reflect by reflection shields only reflectable damage.
Not reflect self/environment damage cass, and not reflectable spells. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
1b6176396e
commit
aa4524852e
4 changed files with 10 additions and 10 deletions
|
|
@ -1114,7 +1114,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, S
|
|||
}
|
||||
|
||||
uint32 absorb_affected_damage = CalcNotIgnoreAbsorbDamage(damage,damageSchoolMask,spellInfo);
|
||||
CalcAbsorbResist(pVictim, damageSchoolMask, SPELL_DIRECT_DAMAGE, absorb_affected_damage, &damageInfo->absorb, &damageInfo->resist);
|
||||
CalcAbsorbResist(pVictim, damageSchoolMask, SPELL_DIRECT_DAMAGE, absorb_affected_damage, &damageInfo->absorb, &damageInfo->resist, !(spellInfo->AttributesEx2 & SPELL_ATTR_EX2_CANT_REFLECTED));
|
||||
damage-= damageInfo->absorb + damageInfo->resist;
|
||||
}
|
||||
else
|
||||
|
|
@ -1408,7 +1408,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da
|
|||
|
||||
// Calculate absorb & resists
|
||||
uint32 absorb_affected_damage = CalcNotIgnoreAbsorbDamage(damageInfo->damage,damageInfo->damageSchoolMask);
|
||||
CalcAbsorbResist(damageInfo->target, damageInfo->damageSchoolMask, DIRECT_DAMAGE, absorb_affected_damage, &damageInfo->absorb, &damageInfo->resist);
|
||||
CalcAbsorbResist(damageInfo->target, damageInfo->damageSchoolMask, DIRECT_DAMAGE, absorb_affected_damage, &damageInfo->absorb, &damageInfo->resist, true);
|
||||
damageInfo->damage-=damageInfo->absorb + damageInfo->resist;
|
||||
if (damageInfo->absorb)
|
||||
{
|
||||
|
|
@ -1628,7 +1628,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* pVictim, const uint32 damage)
|
|||
return (newdamage > 1) ? newdamage : 1;
|
||||
}
|
||||
|
||||
void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist)
|
||||
void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist, bool canReflect)
|
||||
{
|
||||
if(!pVictim || !pVictim->isAlive() || !damage)
|
||||
return;
|
||||
|
|
@ -1732,7 +1732,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe
|
|||
continue;
|
||||
}
|
||||
// Reflective Shield (Lady Malande boss)
|
||||
if (spellProto->Id == 41475)
|
||||
if (spellProto->Id == 41475 && canReflect)
|
||||
{
|
||||
if(RemainingDamage < currentAbsorb)
|
||||
reflectDamage = RemainingDamage / 2;
|
||||
|
|
@ -1790,7 +1790,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe
|
|||
}
|
||||
|
||||
// Reflective Shield
|
||||
if (spellProto->SpellFamilyFlags == 0x1)
|
||||
if (spellProto->SpellFamilyFlags == 0x1 && canReflect)
|
||||
{
|
||||
if (pVictim == this)
|
||||
break;
|
||||
|
|
@ -1912,7 +1912,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe
|
|||
}
|
||||
|
||||
// Cast back reflect damage spell
|
||||
if (reflectSpell)
|
||||
if (canReflect && reflectSpell)
|
||||
pVictim->CastCustomSpell(this, reflectSpell, &reflectDamage, NULL, NULL, true, NULL, reflectTriggeredBy);
|
||||
|
||||
// absorb by mana cost
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue