aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-02-10 21:11:07 +0100
committerShauren <shauren.trinity@gmail.com>2022-02-10 21:11:07 +0100
commit02979daf761a5122efa7b8fa3e70509ecd69789e (patch)
tree19df8dfa3ad4ad9aa69ab08a3b58e42e12fc6994 /src
parent7295bfb6a09b25d824889cfb3698a0774fc01b34 (diff)
Core/Auras: Proc flag updates
* Rename to official names * Corrected logic selecting flags for each spell cast - determine them by attributes instead of DmgClass * Implemented new proc flags (PROC_FLAG_CAST_ENDED, PROC_FLAG_LOOTED)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Handlers/LootHandler.cpp3
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp26
-rw-r--r--src/server/game/Spells/Spell.cpp140
-rw-r--r--src/server/game/Spells/SpellEffects.cpp16
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
-rw-r--r--src/server/game/Spells/SpellMgr.h133
-rw-r--r--src/server/scripts/Spells/spell_item.cpp6
9 files changed, 190 insertions, 152 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index bc725a0a529..407cfc9cb46 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -26509,6 +26509,8 @@ void Player::AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore cons
Item* pItem = StoreNewItem(dest, lootItem->itemid, true, lootItem->randomBonusListId, GuidSet(), lootItem->context, lootItem->BonusListIDs);
SendNewItem(pItem, lootItem->count, false, createdByPlayer, broadcast);
}
+
+ Unit::ProcSkillsAndAuras(this, nullptr, PROC_FLAG_LOOTED, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
}
void Player::StoreLootItem(uint8 lootSlot, Loot* loot, AELootResult* aeResult/* = nullptr*/)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index bc133cc31ec..cce8a554c4e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1224,12 +1224,12 @@ void Unit::CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, Weapon
switch (attackType)
{
case BASE_ATTACK:
- damageInfo->ProcAttacker = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_DONE_MAINHAND_ATTACK;
- damageInfo->ProcVictim = PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK;
+ damageInfo->ProcAttacker = PROC_FLAG_DEAL_MELEE_SWING | PROC_FLAG_MAIN_HAND_WEAPON_SWING;
+ damageInfo->ProcVictim = PROC_FLAG_TAKE_MELEE_SWING;
break;
case OFF_ATTACK:
- damageInfo->ProcAttacker = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_DONE_OFFHAND_ATTACK;
- damageInfo->ProcVictim = PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK;
+ damageInfo->ProcAttacker = PROC_FLAG_DEAL_MELEE_SWING | PROC_FLAG_OFF_HAND_WEAPON_SWING;
+ damageInfo->ProcVictim = PROC_FLAG_TAKE_MELEE_SWING;
damageInfo->HitInfo = HITINFO_OFFHAND;
break;
default:
@@ -1372,7 +1372,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, Weapon
// Calculate absorb resist
if (int32(damageInfo->Damage) > 0)
{
- damageInfo->ProcVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ damageInfo->ProcVictim |= PROC_FLAG_TAKE_ANY_DAMAGE;
// Calculate absorb & resists
DamageInfo dmgInfo(*damageInfo);
Unit::CalcAbsorbResist(dmgInfo);
@@ -1933,7 +1933,7 @@ void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinit
caster->SendSpellNonMeleeDamageLog(&log);
// break 'Fear' and similar auras
- Unit::ProcSkillsAndAuras(damageInfo.GetAttacker(), caster, PROC_FLAG_NONE, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_PHASE_HIT, PROC_HIT_NONE, nullptr, &damageInfo, nullptr);
+ Unit::ProcSkillsAndAuras(damageInfo.GetAttacker(), caster, PROC_FLAG_NONE, PROC_FLAG_TAKE_HARMFUL_SPELL, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_PHASE_HIT, PROC_HIT_NONE, nullptr, &damageInfo, nullptr);
}
}
}
@@ -10571,7 +10571,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (!victim->IsCritter())
{
- Unit::ProcSkillsAndAuras(attacker, victim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
+ Unit::ProcSkillsAndAuras(attacker, victim, PROC_FLAG_KILL, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
if (player && player->GetGroup())
for (GroupReference* itr = player->GetGroup()->GetFirstMember(); itr != nullptr; itr = itr->next())
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index 42db7477f10..771b40d1b7f 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -34,6 +34,7 @@
#include "Object.h"
#include "ObjectAccessor.h"
#include "Player.h"
+#include "SpellMgr.h"
#include "WorldPacket.h"
class AELootCreatureCheck
@@ -140,6 +141,8 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& p
player->UpdateCriteria(CriteriaType::LootAnyItem, resultValue.item->GetEntry(), resultValue.count);
}
}
+
+ Unit::ProcSkillsAndAuras(player, nullptr, PROC_FLAG_LOOTED, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
}
void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet*/)
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 814b99ebb6b..99f8414d47a 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5324,13 +5324,13 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
Unit::DealDamageMods(caster, target, damage, &absorb);
// Set trigger flag
- ProcFlagsInit procAttacker = PROC_FLAG_DONE_PERIODIC;
- ProcFlagsInit procVictim = PROC_FLAG_TAKEN_PERIODIC;
+ ProcFlagsInit procAttacker = PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ ProcFlagsInit procVictim = PROC_FLAG_TAKE_HARMFUL_PERIODIC;
ProcFlagsHit hitMask = damageInfo.GetHitMask();
if (damage)
{
hitMask |= crit ? PROC_HIT_CRITICAL : PROC_HIT_NORMAL;
- procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ procVictim |= PROC_FLAG_TAKE_ANY_DAMAGE;
}
int32 overkill = damage - target->GetHealth();
@@ -5420,13 +5420,13 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
log.HitInfo |= SPELL_HIT_TYPE_CRIT;
// Set trigger flag
- ProcFlagsInit procAttacker = PROC_FLAG_DONE_PERIODIC;
- ProcFlagsInit procVictim = PROC_FLAG_TAKEN_PERIODIC;
+ ProcFlagsInit procAttacker = PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ ProcFlagsInit procVictim = PROC_FLAG_TAKE_HARMFUL_PERIODIC;
ProcFlagsHit hitMask = damageInfo.GetHitMask();
if (damage)
{
hitMask |= crit ? PROC_HIT_CRITICAL : PROC_HIT_NORMAL;
- procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ procVictim |= PROC_FLAG_TAKE_ANY_DAMAGE;
}
int32 new_damage = Unit::DealDamage(caster, target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), false);
@@ -5445,7 +5445,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
caster->HealBySpell(healInfo);
caster->GetThreatManager().ForwardThreatForAssistingMe(caster, healInfo.GetEffectiveHeal() * 0.5f, GetSpellInfo());
- Unit::ProcSkillsAndAuras(caster, caster, PROC_FLAG_DONE_PERIODIC, PROC_FLAG_TAKEN_PERIODIC, PROC_SPELL_TYPE_HEAL, PROC_SPELL_PHASE_HIT, hitMask, nullptr, nullptr, &healInfo);
+ Unit::ProcSkillsAndAuras(caster, caster, PROC_FLAG_DEAL_HARMFUL_PERIODIC, PROC_FLAG_TAKE_HARMFUL_PERIODIC, PROC_SPELL_TYPE_HEAL, PROC_SPELL_PHASE_HIT, hitMask, nullptr, nullptr, &healInfo);
caster->SendSpellNonMeleeDamageLog(&log);
}
@@ -5477,7 +5477,7 @@ void AuraEffect::HandlePeriodicHealthFunnelAuraTick(Unit* target, Unit* caster)
HealInfo healInfo(caster, target, damage, GetSpellInfo(), GetSpellInfo()->GetSchoolMask());
caster->HealBySpell(healInfo);
- Unit::ProcSkillsAndAuras(caster, target, PROC_FLAG_DONE_PERIODIC, PROC_FLAG_TAKEN_PERIODIC, PROC_SPELL_TYPE_HEAL, PROC_SPELL_PHASE_HIT, PROC_HIT_NORMAL, nullptr, nullptr, &healInfo);
+ Unit::ProcSkillsAndAuras(caster, target, PROC_FLAG_DEAL_HARMFUL_PERIODIC, PROC_FLAG_TAKE_HARMFUL_PERIODIC, PROC_SPELL_TYPE_HEAL, PROC_SPELL_PHASE_HIT, PROC_HIT_NORMAL, nullptr, nullptr, &healInfo);
}
void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
@@ -5534,8 +5534,8 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
if (GetAuraType() == SPELL_AURA_OBS_MOD_HEALTH)
return;
- ProcFlagsInit procAttacker = PROC_FLAG_DONE_PERIODIC;
- ProcFlagsInit procVictim = PROC_FLAG_TAKEN_PERIODIC;
+ ProcFlagsInit procAttacker = PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ ProcFlagsInit procVictim = PROC_FLAG_TAKE_HARMFUL_PERIODIC;
ProcFlagsHit hitMask = crit ? PROC_HIT_CRITICAL : PROC_HIT_NORMAL;
// ignore item heals
if (GetBase()->GetCastItemGUID().IsEmpty())
@@ -5696,13 +5696,13 @@ void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) con
Unit::DealDamageMods(damageInfo.attacker, damageInfo.target, damageInfo.damage, &damageInfo.absorb);
// Set trigger flag
- ProcFlagsInit procAttacker = PROC_FLAG_DONE_PERIODIC;
- ProcFlagsInit procVictim = PROC_FLAG_TAKEN_PERIODIC;
+ ProcFlagsInit procAttacker = PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ ProcFlagsInit procVictim = PROC_FLAG_TAKE_HARMFUL_PERIODIC;
ProcFlagsHit hitMask = createProcHitMask(&damageInfo, SPELL_MISS_NONE);
ProcFlagsSpellType spellTypeMask = PROC_SPELL_TYPE_NO_DMG_HEAL;
if (damageInfo.damage)
{
- procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ procVictim |= PROC_FLAG_TAKE_ANY_DAMAGE;
spellTypeMask |= PROC_SPELL_TYPE_DAMAGE;
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 60e4e568402..69db8b9c1fa 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2151,24 +2151,24 @@ void Spell::prepareDataForTriggerSystem()
switch (m_spellInfo->DmgClass)
{
case SPELL_DAMAGE_CLASS_MELEE:
- m_procAttacker = PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS;
+ m_procAttacker = PROC_FLAG_DEAL_MELEE_ABILITY;
if (m_attackType == OFF_ATTACK)
- m_procAttacker |= PROC_FLAG_DONE_OFFHAND_ATTACK;
+ m_procAttacker |= PROC_FLAG_OFF_HAND_WEAPON_SWING;
else
- m_procAttacker |= PROC_FLAG_DONE_MAINHAND_ATTACK;
- m_procVictim = PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS;
+ m_procAttacker |= PROC_FLAG_MAIN_HAND_WEAPON_SWING;
+ m_procVictim = PROC_FLAG_TAKE_MELEE_ABILITY;
break;
case SPELL_DAMAGE_CLASS_RANGED:
// Auto attack
if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
{
- m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
- m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK;
+ m_procAttacker = PROC_FLAG_DEAL_RANGED_ATTACK;
+ m_procVictim = PROC_FLAG_TAKE_RANGED_ATTACK;
}
else // Ranged spell attack
{
- m_procAttacker = PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS;
- m_procVictim = PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS;
+ m_procAttacker = PROC_FLAG_DEAL_RANGED_ABILITY;
+ m_procVictim = PROC_FLAG_TAKE_RANGED_ABILITY;
}
break;
default:
@@ -2176,32 +2176,12 @@ void Spell::prepareDataForTriggerSystem()
m_spellInfo->EquippedItemSubClassMask & (1 << ITEM_SUBCLASS_WEAPON_WAND)
&& m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) // Wands auto attack
{
- m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
- m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK;
+ m_procAttacker = PROC_FLAG_DEAL_RANGED_ATTACK;
+ m_procVictim = PROC_FLAG_TAKE_RANGED_ATTACK;
}
// For other spells trigger procflags are set in Spell::TargetInfo::DoDamageAndTriggers
// Because spell positivity is dependant on target
}
-
- // Hunter trap spells - activation proc for Lock and Load, Entrapment and Misdirection
- if (m_spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER &&
- (m_spellInfo->SpellFamilyFlags[0] & 0x18 || // Freezing and Frost Trap, Freezing Arrow
- m_spellInfo->Id == 57879 || // Snake Trap - done this way to avoid double proc
- m_spellInfo->SpellFamilyFlags[2] & 0x00024000)) // Explosive and Immolation Trap
- {
- m_procAttacker |= PROC_FLAG_DONE_TRAP_ACTIVATION;
-
- // also fill up other flags (TargetInfo::DoDamageAndTriggers only fills up flag if both are not set)
- m_procAttacker |= PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG;
- m_procVictim |= PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG;
- }
-
- // Hellfire Effect - trigger as DOT
- if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->SpellFamilyFlags[0] & 0x00000040)
- {
- m_procAttacker = PROC_FLAG_DONE_PERIODIC;
- m_procVictim = PROC_FLAG_TAKEN_PERIODIC;
- }
}
void Spell::CleanupTargetList()
@@ -2224,7 +2204,7 @@ class ProcReflectDelayed : public BasicEvent
return true;
ProcFlags const typeMaskActor = PROC_FLAG_NONE;
- ProcFlags const typeMaskActionTarget = PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG;
+ ProcFlags const typeMaskActionTarget = PROC_FLAG_TAKE_HARMFUL_SPELL | PROC_FLAG_TAKE_HARMFUL_ABILITY;
ProcFlagsSpellType const spellTypeMask = PROC_SPELL_TYPE_DAMAGE | PROC_SPELL_TYPE_NO_DMG_HEAL;
ProcFlagsSpellPhase const spellPhaseMask = PROC_SPELL_PHASE_NONE;
ProcFlagsHit const hitMask = PROC_HIT_REFLECT;
@@ -2628,28 +2608,46 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell)
switch (spell->m_spellInfo->DmgClass)
{
+ case SPELL_DAMAGE_CLASS_NONE:
case SPELL_DAMAGE_CLASS_MAGIC:
- if (positive)
- {
- procAttacker |= PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS;
- procVictim |= PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS;
- }
- else
+ if (spell->m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
{
- procAttacker |= PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG;
- procVictim |= PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG;
+ if (positive)
+ {
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_PERIODIC;
+ procVictim |= PROC_FLAG_TAKE_HELPFUL_PERIODIC;
+ }
+ else
+ {
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ procVictim |= PROC_FLAG_TAKE_HARMFUL_PERIODIC;
+ }
}
- break;
- case SPELL_DAMAGE_CLASS_NONE:
- if (positive)
+ else if (spell->m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
{
- procAttacker |= PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS;
- procVictim |= PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS;
+ if (positive)
+ {
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
+ procVictim |= PROC_FLAG_TAKE_HELPFUL_ABILITY;
+ }
+ else
+ {
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_ABILITY;
+ procVictim |= PROC_FLAG_TAKE_HARMFUL_ABILITY;
+ }
}
else
{
- procAttacker |= PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG;
- procVictim |= PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG;
+ if (positive)
+ {
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_SPELL;
+ procVictim |= PROC_FLAG_TAKE_HELPFUL_SPELL;
+ }
+ else
+ {
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_SPELL;
+ procVictim |= PROC_FLAG_TAKE_HARMFUL_SPELL;
+ }
}
break;
}
@@ -2702,7 +2700,7 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell)
Unit::DealDamageMods(damageInfo.attacker, damageInfo.target, damageInfo.damage, &damageInfo.absorb);
hitMask |= createProcHitMask(&damageInfo, MissCondition);
- procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ procVictim |= PROC_FLAG_TAKE_ANY_DAMAGE;
spell->m_damage = damageInfo.damage;
@@ -3691,10 +3689,27 @@ void Spell::_cast(bool skipCheck)
ProcFlagsInit procAttacker = m_procAttacker;
if (!procAttacker)
{
- if (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC)
- procAttacker = IsPositive() ? PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS : PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG;
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_PERIODIC;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ }
+ else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_ABILITY;
+ }
else
- procAttacker = IsPositive() ? PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS : PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG;
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_SPELL;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_SPELL;
+ }
}
procAttacker |= PROC_FLAG_2_CAST_SUCCESSFUL;
@@ -3952,10 +3967,27 @@ void Spell::_handle_finish_phase()
ProcFlagsInit procAttacker = m_procAttacker;
if (!procAttacker)
{
- if (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC)
- procAttacker = IsPositive() ? PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS : PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG;
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_PERIODIC;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_PERIODIC;
+ }
+ else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_ABILITY;
+ }
else
- procAttacker = IsPositive() ? PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS : PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG;
+ {
+ if (IsPositive())
+ procAttacker |= PROC_FLAG_DEAL_HELPFUL_SPELL;
+ else
+ procAttacker |= PROC_FLAG_DEAL_HARMFUL_SPELL;
+ }
}
Unit::ProcSkillsAndAuras(m_originalCaster, nullptr, procAttacker, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_FINISH, m_hitMask, this, nullptr, nullptr);
@@ -4093,6 +4125,8 @@ void Spell::finish(bool ok)
if (Creature* creatureCaster = unitCaster->ToCreature())
creatureCaster->ReleaseSpellFocus(this);
+ Unit::ProcSkillsAndAuras(unitCaster, nullptr, PROC_FLAG_CAST_ENDED, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, this, nullptr, nullptr);
+
if (!ok)
return;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 67c667b268e..99c54857502 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2928,18 +2928,10 @@ void Spell::EffectInterruptCast()
|| (spell->getState() == SPELL_STATE_PREPARING && spell->GetCastTime() > 0.0f))
&& curSpellInfo->CanBeInterrupted(m_caster, unitTarget))
{
- if (Unit* unitCaster = GetUnitCasterForEffectHandlers())
- {
- int32 duration = m_spellInfo->GetDuration();
- duration = unitTarget->ModSpellDuration(m_spellInfo, unitTarget, duration, false, 1 << effectInfo->EffectIndex);
- unitTarget->GetSpellHistory()->LockSpellSchool(curSpellInfo->GetSchoolMask(), Milliseconds(duration));
- if (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC)
- Unit::ProcSkillsAndAuras(unitCaster, unitTarget, PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG,
- PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_HIT, PROC_HIT_INTERRUPT, nullptr, nullptr, nullptr);
- else if (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE)
- Unit::ProcSkillsAndAuras(unitCaster, unitTarget, PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS, PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS,
- PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_HIT, PROC_HIT_INTERRUPT, nullptr, nullptr, nullptr);
- }
+ int32 duration = m_spellInfo->GetDuration();
+ duration = unitTarget->ModSpellDuration(m_spellInfo, unitTarget, duration, false, 1 << effectInfo->EffectIndex);
+ unitTarget->GetSpellHistory()->LockSpellSchool(curSpellInfo->GetSchoolMask(), Milliseconds(duration));
+ m_hitMask |= PROC_HIT_INTERRUPT;
SendSpellInterruptLog(unitTarget, curSpellInfo->Id);
unitTarget->InterruptSpell(CurrentSpellTypes(i), false);
}
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 864985a6444..fa7fd7c0357 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -532,7 +532,7 @@ bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcE
}
// always trigger for these types
- if (eventInfo.GetTypeMask() & (PROC_FLAG_KILLED | PROC_FLAG_KILL | PROC_FLAG_DEATH))
+ if (eventInfo.GetTypeMask() & (PROC_FLAG_HEARTBEAT | PROC_FLAG_KILL | PROC_FLAG_DEATH))
return true;
// check school mask (if set) for other trigger types
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index 8ee2aed0b81..6e1fe9ea80e 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -136,86 +136,93 @@ enum ProcFlags : uint32
{
PROC_FLAG_NONE = 0x00000000,
- PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag
+ PROC_FLAG_HEARTBEAT = 0x00000001, // 00 Killed by agressor - not sure about this flag
PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward)
- PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004, // 02 Done melee auto attack
- PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008, // 03 Taken melee auto attack
+ PROC_FLAG_DEAL_MELEE_SWING = 0x00000004, // 02 Done melee auto attack
+ PROC_FLAG_TAKE_MELEE_SWING = 0x00000008, // 03 Taken melee auto attack
- PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010, // 04 Done attack by Spell that has dmg class melee
- PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020, // 05 Taken attack by Spell that has dmg class melee
+ PROC_FLAG_DEAL_MELEE_ABILITY = 0x00000010, // 04 Done attack by Spell that has dmg class melee
+ PROC_FLAG_TAKE_MELEE_ABILITY = 0x00000020, // 05 Taken attack by Spell that has dmg class melee
- PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040, // 06 Done ranged auto attack
- PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080, // 07 Taken ranged auto attack
+ PROC_FLAG_DEAL_RANGED_ATTACK = 0x00000040, // 06 Done ranged auto attack
+ PROC_FLAG_TAKE_RANGED_ATTACK = 0x00000080, // 07 Taken ranged auto attack
- PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100, // 08 Done attack by Spell that has dmg class ranged
- PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged
+ PROC_FLAG_DEAL_RANGED_ABILITY = 0x00000100, // 08 Done attack by Spell that has dmg class ranged
+ PROC_FLAG_TAKE_RANGED_ABILITY = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged
- PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400, // 10 Done positive spell that has dmg class none
- PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800, // 11 Taken positive spell that has dmg class none
+ PROC_FLAG_DEAL_HELPFUL_ABILITY = 0x00000400, // 10 Done positive spell that has dmg class none
+ PROC_FLAG_TAKE_HELPFUL_ABILITY = 0x00000800, // 11 Taken positive spell that has dmg class none
- PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000, // 12 Done negative spell that has dmg class none
- PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000, // 13 Taken negative spell that has dmg class none
+ PROC_FLAG_DEAL_HARMFUL_ABILITY = 0x00001000, // 12 Done negative spell that has dmg class none
+ PROC_FLAG_TAKE_HARMFUL_ABILITY = 0x00002000, // 13 Taken negative spell that has dmg class none
- PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000, // 14 Done positive spell that has dmg class magic
- PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000, // 15 Taken positive spell that has dmg class magic
+ PROC_FLAG_DEAL_HELPFUL_SPELL = 0x00004000, // 14 Done positive spell that has dmg class magic
+ PROC_FLAG_TAKE_HELPFUL_SPELL = 0x00008000, // 15 Taken positive spell that has dmg class magic
- PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000, // 16 Done negative spell that has dmg class magic
- PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000, // 17 Taken negative spell that has dmg class magic
+ PROC_FLAG_DEAL_HARMFUL_SPELL = 0x00010000, // 16 Done negative spell that has dmg class magic
+ PROC_FLAG_TAKE_HARMFUL_SPELL = 0x00020000, // 17 Taken negative spell that has dmg class magic
- PROC_FLAG_DONE_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing)
- PROC_FLAG_TAKEN_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing)
+ PROC_FLAG_DEAL_HARMFUL_PERIODIC = 0x00040000, // 18 Successful do periodic (damage)
+ PROC_FLAG_TAKE_HARMFUL_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage)
- PROC_FLAG_TAKEN_DAMAGE = 0x00100000, // 20 Taken any damage
- PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE)
+ PROC_FLAG_TAKE_ANY_DAMAGE = 0x00100000, // 20 Taken any damage
- PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack)
- PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack)
+ PROC_FLAG_DEAL_HELPFUL_PERIODIC = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE)
+
+ PROC_FLAG_MAIN_HAND_WEAPON_SWING = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack)
+ PROC_FLAG_OFF_HAND_WEAPON_SWING = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack)
PROC_FLAG_DEATH = 0x01000000, // 24 Died in any way
+
PROC_FLAG_JUMP = 0x02000000, // 25 Jumped
+ PROC_FLAG_PROC_CLONE_SPELL = 0x04000000, // 26 Proc Clone Spell
+
PROC_FLAG_ENTER_COMBAT = 0x08000000, // 27 Entered combat
+
PROC_FLAG_ENCOUNTER_START = 0x10000000, // 28 Encounter started
PROC_FLAG_CAST_ENDED = 0x20000000, // 29 Cast Ended
+
PROC_FLAG_LOOTED = 0x40000000, // 30 Looted (took from loot, not opened loot window)
PROC_FLAG_TAKE_HELPFUL_PERIODIC = 0x80000000, // 31 Take Helpful Periodic
// flag masks
- AUTO_ATTACK_PROC_FLAG_MASK = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
- | PROC_FLAG_DONE_RANGED_AUTO_ATTACK | PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK,
-
- MELEE_PROC_FLAG_MASK = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
- | PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
- | PROC_FLAG_DONE_MAINHAND_ATTACK | PROC_FLAG_DONE_OFFHAND_ATTACK,
-
- RANGED_PROC_FLAG_MASK = PROC_FLAG_DONE_RANGED_AUTO_ATTACK | PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
- | PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS,
-
- SPELL_PROC_FLAG_MASK = PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
- | PROC_FLAG_DONE_RANGED_AUTO_ATTACK | PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
- | PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
- | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS
- | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
- | PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS
- | PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
- | PROC_FLAG_DONE_PERIODIC | PROC_FLAG_TAKEN_PERIODIC
- | PROC_FLAG_DONE_TRAP_ACTIVATION,
-
- DONE_HIT_PROC_FLAG_MASK = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_DONE_RANGED_AUTO_ATTACK
- | PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
- | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
- | PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
- | PROC_FLAG_DONE_PERIODIC | PROC_FLAG_DONE_TRAP_ACTIVATION
- | PROC_FLAG_DONE_MAINHAND_ATTACK | PROC_FLAG_DONE_OFFHAND_ATTACK,
-
- TAKEN_HIT_PROC_FLAG_MASK = PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK | PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
- | PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS | PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
- | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
- | PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
- | PROC_FLAG_TAKEN_PERIODIC | PROC_FLAG_TAKEN_DAMAGE,
+ AUTO_ATTACK_PROC_FLAG_MASK = PROC_FLAG_DEAL_MELEE_SWING | PROC_FLAG_TAKE_MELEE_SWING
+ | PROC_FLAG_DEAL_RANGED_ATTACK | PROC_FLAG_TAKE_RANGED_ATTACK,
+
+ MELEE_PROC_FLAG_MASK = PROC_FLAG_DEAL_MELEE_SWING | PROC_FLAG_TAKE_MELEE_SWING
+ | PROC_FLAG_DEAL_MELEE_ABILITY | PROC_FLAG_TAKE_MELEE_ABILITY
+ | PROC_FLAG_MAIN_HAND_WEAPON_SWING | PROC_FLAG_OFF_HAND_WEAPON_SWING,
+
+ RANGED_PROC_FLAG_MASK = PROC_FLAG_DEAL_RANGED_ATTACK | PROC_FLAG_TAKE_RANGED_ATTACK
+ | PROC_FLAG_DEAL_RANGED_ABILITY | PROC_FLAG_TAKE_RANGED_ABILITY,
+
+ SPELL_PROC_FLAG_MASK = PROC_FLAG_DEAL_MELEE_ABILITY | PROC_FLAG_TAKE_MELEE_ABILITY
+ | PROC_FLAG_DEAL_RANGED_ATTACK | PROC_FLAG_TAKE_RANGED_ATTACK
+ | PROC_FLAG_DEAL_RANGED_ABILITY | PROC_FLAG_TAKE_RANGED_ABILITY
+ | PROC_FLAG_DEAL_HELPFUL_ABILITY | PROC_FLAG_TAKE_HELPFUL_ABILITY
+ | PROC_FLAG_DEAL_HARMFUL_ABILITY | PROC_FLAG_TAKE_HARMFUL_ABILITY
+ | PROC_FLAG_DEAL_HELPFUL_SPELL | PROC_FLAG_TAKE_HELPFUL_SPELL
+ | PROC_FLAG_DEAL_HARMFUL_SPELL | PROC_FLAG_TAKE_HARMFUL_SPELL
+ | PROC_FLAG_DEAL_HARMFUL_PERIODIC | PROC_FLAG_TAKE_HARMFUL_PERIODIC
+ | PROC_FLAG_DEAL_HELPFUL_PERIODIC | PROC_FLAG_TAKE_HELPFUL_PERIODIC,
+
+ DONE_HIT_PROC_FLAG_MASK = PROC_FLAG_DEAL_MELEE_SWING | PROC_FLAG_DEAL_RANGED_ATTACK
+ | PROC_FLAG_DEAL_MELEE_ABILITY | PROC_FLAG_DEAL_RANGED_ABILITY
+ | PROC_FLAG_DEAL_HELPFUL_ABILITY | PROC_FLAG_DEAL_HARMFUL_ABILITY
+ | PROC_FLAG_DEAL_HELPFUL_SPELL | PROC_FLAG_DEAL_HARMFUL_SPELL
+ | PROC_FLAG_DEAL_HARMFUL_PERIODIC | PROC_FLAG_DEAL_HELPFUL_PERIODIC
+ | PROC_FLAG_MAIN_HAND_WEAPON_SWING | PROC_FLAG_OFF_HAND_WEAPON_SWING,
+
+ TAKEN_HIT_PROC_FLAG_MASK = PROC_FLAG_TAKE_MELEE_SWING | PROC_FLAG_TAKE_RANGED_ATTACK
+ | PROC_FLAG_TAKE_MELEE_ABILITY | PROC_FLAG_TAKE_RANGED_ABILITY
+ | PROC_FLAG_TAKE_HELPFUL_ABILITY | PROC_FLAG_TAKE_HARMFUL_ABILITY
+ | PROC_FLAG_TAKE_HELPFUL_SPELL | PROC_FLAG_TAKE_HARMFUL_SPELL
+ | PROC_FLAG_TAKE_HARMFUL_PERIODIC | PROC_FLAG_TAKE_HELPFUL_PERIODIC
+ | PROC_FLAG_TAKE_ANY_DAMAGE,
REQ_SPELL_PHASE_PROC_FLAG_MASK = SPELL_PROC_FLAG_MASK & DONE_HIT_PROC_FLAG_MASK
};
@@ -232,14 +239,14 @@ enum ProcFlags2 : int32
DEFINE_ENUM_FLAG(ProcFlags2);
-#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_DONE_MELEE_AUTO_ATTACK | \
- PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK | \
- PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | \
- PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS | \
- PROC_FLAG_DONE_RANGED_AUTO_ATTACK | \
- PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK | \
- PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | \
- PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS)
+#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_DEAL_MELEE_SWING | \
+ PROC_FLAG_TAKE_MELEE_SWING | \
+ PROC_FLAG_DEAL_MELEE_ABILITY | \
+ PROC_FLAG_TAKE_MELEE_ABILITY | \
+ PROC_FLAG_DEAL_RANGED_ATTACK | \
+ PROC_FLAG_TAKE_RANGED_ATTACK | \
+ PROC_FLAG_DEAL_RANGED_ABILITY | \
+ PROC_FLAG_TAKE_RANGED_ABILITY)
enum ProcFlagsSpellType : uint32
{
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index a034330a837..355155d67ed 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1331,7 +1331,7 @@ class spell_item_mark_of_conquest : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
- if (eventInfo.GetTypeMask() & (PROC_FLAG_DONE_RANGED_AUTO_ATTACK | PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS))
+ if (eventInfo.GetTypeMask() & (PROC_FLAG_DEAL_RANGED_ATTACK | PROC_FLAG_DEAL_RANGED_ABILITY))
{
// in that case, do not cast heal spell
PreventDefaultAction();
@@ -3485,10 +3485,10 @@ class spell_item_shard_of_the_scale : public SpellScriptLoader
Unit* caster = eventInfo.GetActor();
Unit* target = eventInfo.GetProcTarget();
- if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS)
+ if (eventInfo.GetTypeMask() & PROC_FLAG_DEAL_HELPFUL_SPELL)
caster->CastSpell(target, HealProc, aurEff);
- if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG)
+ if (eventInfo.GetTypeMask() & PROC_FLAG_DEAL_HARMFUL_SPELL)
caster->CastSpell(target, DamageProc, aurEff);
}