diff options
author | krz <none@none> | 2009-05-31 01:43:36 +0200 |
---|---|---|
committer | krz <none@none> | 2009-05-31 01:43:36 +0200 |
commit | ae5f9ac22728f7f844becc6cc1b71cd4b901c79c (patch) | |
tree | 58c7ac9ea68b51a9d3ecc26b17001014e50c2c6b | |
parent | 78228818b7b3d04a2cc86146c7be8b19689ab59b (diff) |
Missing part from thenecromancer's weapon proc patch.
Some changes in ProcDamageAndSpellFor to allow triggered spells to trigger other for victim.
--HG--
branch : trunk
-rw-r--r-- | src/game/Player.cpp | 4 | ||||
-rw-r--r-- | src/game/Spell.cpp | 12 | ||||
-rw-r--r-- | src/game/Unit.cpp | 6 | ||||
-rw-r--r-- | src/game/Unit.h | 2 |
4 files changed, 12 insertions, 12 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8ee2c97e5fe..23b5434e1b0 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -7000,7 +7000,7 @@ void Player::CastItemCombatSpell(Item *item, CalcDamageInfo *damageInfo, ItemPro return; // Can do effect if any damage done to target - if (damageInfo->damage) + if (damageInfo->procVictim & PROC_FLAG_TAKEN_ANY_DAMAGE) { for (int i = 0; i < 5; i++) { @@ -7064,7 +7064,7 @@ void Player::CastItemCombatSpell(Item *item, CalcDamageInfo *damageInfo, ItemPro else { // Can do effect if any damage done to target - if (!(damageInfo->damage)) + if (!(damageInfo->procVictim & PROC_FLAG_TAKEN_ANY_DAMAGE)) continue; } diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 29892fcfde3..2cb78e093eb 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1017,8 +1017,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) caster->SendHealSpellLog(unitTarget, m_spellInfo->Id, addhealth, crit); // Do triggers for unit (reflect triggers passed on hit phase for correct drop charge) - if (m_canTrigger && missInfo != SPELL_MISS_REFLECT) - caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, addhealth, m_attackType, m_spellInfo); + if (missInfo != SPELL_MISS_REFLECT) + caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, addhealth, m_attackType, m_spellInfo, m_canTrigger); int32 gain = unitTarget->ModifyHealth( int32(addhealth) ); @@ -1043,8 +1043,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) procVictim |= PROC_FLAG_TAKEN_ANY_DAMAGE; // Do triggers for unit (reflect triggers passed on hit phase for correct drop charge) - if (m_canTrigger && missInfo != SPELL_MISS_REFLECT) - caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo); + if (missInfo != SPELL_MISS_REFLECT) + caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo, m_canTrigger); caster->DealSpellDamage(&damageInfo, true); @@ -1094,8 +1094,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask); procEx = createProcExtendMask(&damageInfo, missInfo); // Do triggers for unit (reflect triggers passed on hit phase for correct drop charge) - if (m_canTrigger && missInfo != SPELL_MISS_REFLECT) - caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo); + if (missInfo != SPELL_MISS_REFLECT) + caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo, m_canTrigger); } // Call scripted function for AI if this spell is casted upon a creature (except pets) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 9de45667a53..6f248b75161 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1659,7 +1659,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss) } // Do effect if any damage done to target - if (damageInfo->damage) + if (damageInfo->procVictim & PROC_FLAG_TAKEN_ANY_DAMAGE) { // victim's damage shield std::set<Aura*> alreadyDone; @@ -4725,10 +4725,10 @@ void Unit::SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, SendMessageToSet( &data, true ); } -void Unit::ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procExtra, uint32 amount, WeaponAttackType attType, SpellEntry const *procSpell) +void Unit::ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procExtra, uint32 amount, WeaponAttackType attType, SpellEntry const *procSpell, bool canTrigger) { // Not much to do if no flags are set. - if (procAttacker) + if (procAttacker && canTrigger) ProcDamageAndSpellFor(false,pVictim,procAttacker, procExtra,attType, procSpell, amount); // Now go on with a victim's events'n'auras // Not much to do if no flags are set or there is no victim diff --git a/src/game/Unit.h b/src/game/Unit.h index ef4b29fcc3a..5eb4530113c 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -946,7 +946,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject uint32 DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDamage = NULL, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellEntry const *spellProto = NULL, bool durabilityLoss = true); void Kill(Unit *pVictim, bool durabilityLoss = true); - void ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType = BASE_ATTACK, SpellEntry const *procSpell = NULL); + void ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType = BASE_ATTACK, SpellEntry const *procSpell = NULL, bool canTrigger = true); void ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage ); void HandleEmoteCommand(uint32 anim_id); |