diff options
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 10 | ||||
| -rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 10 | ||||
| -rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.h | 3 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 2 |
6 files changed, 33 insertions, 16 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4ff9b7fc786..d210dcbad58 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -4981,7 +4981,7 @@ bool Unit::HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) + if ((!target && triggerEntry->NeedsExplicitUnitTarget()) || (target && target != this && !target->isAlive())) return false; if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) @@ -7770,7 +7770,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) + if ((!target && triggerEntry->NeedsExplicitUnitTarget()) || (target && target != this && !target->isAlive())) return false; if (cooldown_spell_id == 0) @@ -7832,7 +7832,7 @@ bool Unit::HandleObsModEnergyAuraProc(Unit* victim, uint32 /*damage*/, AuraEffec } // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) + if ((!target && triggerEntry->NeedsExplicitUnitTarget()) || (target && target != this && !target->isAlive())) return false; if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) @@ -7889,7 +7889,7 @@ bool Unit::HandleModDamagePctTakenAuraProc(Unit* victim, uint32 /*damage*/, Aura } // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) + if ((!target && triggerEntry->NeedsExplicitUnitTarget()) || (target && target != this && !target->isAlive())) return false; if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) @@ -9079,7 +9079,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry && triggerEntry->IsPositive() ? this : victim; // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) + if ((!target && triggerEntry->NeedsExplicitUnitTarget()) || (target && target != this && !target->isAlive())) return false; if (basepoints0) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index adfb0d67bfa..9c363dccfdf 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5456,7 +5456,7 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo { if (apply) { - Unit* caster = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCaster() : target; + Unit* caster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCaster() : target; if (!caster) return; @@ -5468,13 +5468,13 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo } else { - uint64 casterGUID = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCasterGUID() : target->GetGUID(); + uint64 casterGUID = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCasterGUID() : target->GetGUID(); target->RemoveAura(triggeredSpellId, casterGUID, 0, aurApp->GetRemoveMode()); } } else if (mode & AURA_EFFECT_HANDLE_REAPPLY && apply) { - uint64 casterGUID = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCasterGUID() : target->GetGUID(); + uint64 casterGUID = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCasterGUID() : target->GetGUID(); // change the stack amount to be equal to stack amount of our aura if (Aura* triggeredAura = target->GetAura(triggeredSpellId, casterGUID)) triggeredAura->ModStackAmount(GetBase()->GetStackAmount() - triggeredAura->GetStackAmount()); @@ -6118,7 +6118,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) if (triggeredSpellInfo) { - if (Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target) + if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target) { triggerCaster->CastSpell(target, triggeredSpellInfo, true, NULL, this); sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "AuraEffect::HandlePeriodicTriggerSpellAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id); @@ -6138,7 +6138,7 @@ void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* uint32 triggerSpellId = GetSpellInfo()->Effects[m_effIndex].TriggerSpell; if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId)) { - if (Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target) + if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target) { int32 basepoints0 = GetAmount(); triggerCaster->CastCustomSpell(target, triggerSpellId, &basepoints0, 0, 0, true, 0, this); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 2d53cdd40c3..3a15516dc63 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1545,7 +1545,7 @@ void Spell::EffectTriggerSpellWithValue(SpellEffIndex effIndex) int32 bp = damage; - Unit* caster = spellInfo->IsRequiringSelectedTarget() ? m_caster : unitTarget; + Unit* caster = spellInfo->NeedsToBeTriggeredByCaster() ? m_caster : unitTarget; caster->CastCustomSpell(unitTarget, triggered_spell_id, &bp, &bp, &bp, true); } @@ -1770,7 +1770,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) // Note: not exist spells with weapon req. and IsSpellHaveCasterSourceTargets == true // so this just for speedup places in else - Unit* caster = spellInfo->IsRequiringSelectedTarget() ? m_caster : unitTarget; + Unit* caster = spellInfo->NeedsToBeTriggeredByCaster() ? m_caster : unitTarget; caster->CastSpell(unitTarget, spellInfo, true, 0, 0, (originalCaster ? originalCaster->GetGUID() : 0)); } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index d09dce0566d..dbeb7407031 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1126,9 +1126,25 @@ bool SpellInfo::IsAOE() const return false; } -bool SpellInfo::IsRequiringSelectedTarget() const +bool SpellInfo::NeedsExplicitUnitTarget() const { - return (GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK) != 0; + return GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK; +} + +bool SpellInfo::NeedsToBeTriggeredByCaster() const +{ + if (NeedsExplicitUnitTarget()) + return true; + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + if (Effects[i].IsEffect()) + { + if (Effects[i].TargetA.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL + || Effects[i].TargetB.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL) + return true; + } + } + return false; } bool SpellInfo::IsPassive() const diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index aa003641846..69f160cbb0f 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -408,7 +408,8 @@ public: bool IsAbilityOfSkillType(uint32 skillType) const; bool IsAOE() const; - bool IsRequiringSelectedTarget() const; + bool NeedsExplicitUnitTarget() const; + bool NeedsToBeTriggeredByCaster() const; bool IsPassive() const; bool IsAutocastable() const; diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 0a81b13ed64..19dd7f6c2e3 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -376,7 +376,7 @@ public: if (!target->HasAura(spellId)) { SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(spellId); - Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target; + Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target; triggerCaster->CastSpell(target, triggeredSpellInfo, true, 0, aurEff); } } |
