diff options
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r-- | src/game/Unit.cpp | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 9610657b233..53d0b06416f 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -496,6 +496,21 @@ void Unit::RemoveSpellsCausingAuraWithDispel(AuraType auraType, Spell * spell) return; } } + + std::deque <Aura *> dispel_list; + + AuraList const& dispelAuras = GetAurasByType(auraType); + for(AuraList::const_iterator itr = dispelAuras.begin(); itr != dispelAuras.end(); ++itr) + { + if (!(*iter)->GetDispelChance( spell)) + continue; + dispel_list.push_back(*iter); + } + for(;!dispel_list.empty();) + { + RemoveAurasDueToSpell(dispel_list.front()->GetId()); + dispel_list.pop_front(); + } } void Unit::RemoveAurasWithInterruptFlags(uint32 flag, uint32 except) @@ -728,7 +743,6 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa if (pVictim->GetTypeId() == TYPEID_UNIT && !((Creature*)pVictim)->isPet() && !((Creature*)pVictim)->hasLootRecipient()) ((Creature*)pVictim)->SetLootRecipient(this); - if (health <= damage) { DEBUG_LOG("DealDamage: victim just died"); @@ -5546,7 +5560,13 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if (triggerAmount == 0) return false; basepoints0 = triggerAmount * GetMaxHealth() / 100; + target = this; triggered_spell_id = 34299; + if (triggeredByAura->GetCaster() != this) + break; + int32 basepoints1 = triggerAmount * 2 *GetMaxPower(POWER_MANA)/100; + CastCustomSpell(this,60889,&basepoints1,0,0,true,0,triggeredByAura); + break; } // Healing Touch (Dreamwalker Raiment set) case 28719: @@ -5645,12 +5665,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu basepoints0 = triggerAmount * damage / 100; break; } - // Improved leader of the pack - else if (dummySpell->SpellIconID == 312 && !dummySpell->SpellFamilyFlags) - { - triggered_spell_id = 60889; - basepoints0 = triggerAmount * GetMaxPower(POWER_MANA) / 100; - } break; } case SPELLFAMILY_ROGUE: @@ -5769,6 +5783,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu basepoints0 = GetAttackTime(BASE_ATTACK) * int32(ap*0.022f + 0.044f * holy) / 1000; break; } + // Sanctified Wrath + if (dummySpell->SpellIconID == 3029) + { + triggered_spell_id = 57318; + target = this; + basepoints0 = triggerAmount; + CastCustomSpell(target,triggered_spell_id,&basepoints0,&basepoints0,NULL,true,castItem,triggeredByAura); + return true; + } // Sacred Shield if (dummySpell->SpellFamilyFlags[1]&0x00080000) { |