diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 71 |
1 files changed, 55 insertions, 16 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 813d926793c..a5317922595 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -387,13 +387,13 @@ void Spell::EffectResurrectNew() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; - if (!corpseTarget && !unitTarget) + if (!m_corpseTarget && !unitTarget) return; Player* player = nullptr; - if (corpseTarget) - player = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()); + if (m_corpseTarget) + player = ObjectAccessor::FindPlayer(m_corpseTarget->GetOwnerGUID()); else if (unitTarget) player = unitTarget->ToPlayer(); @@ -431,7 +431,7 @@ void Spell::EffectInstaKill() data.SpellID = m_spellInfo->Id; m_caster->SendMessageToSet(data.Write(), true); - Unit::Kill(unitCaster, unitTarget, false); + Unit::Kill(GetUnitCasterForEffectHandlers(), unitTarget, false); } void Spell::EffectEnvironmentalDMG() @@ -447,6 +447,7 @@ void Spell::EffectEnvironmentalDMG() unitTarget->ToPlayer()->EnvironmentalDamage(DAMAGE_FIRE, damage); else { + Unit* unitCaster = GetUnitCasterForEffectHandlers(); DamageInfo damageInfo(unitCaster, unitTarget, damage, m_spellInfo, m_spellInfo->GetSchoolMask(), SPELL_DIRECT_DAMAGE, BASE_ATTACK); Unit::CalcAbsorbResist(damageInfo); @@ -478,6 +479,7 @@ void Spell::EffectSchoolDMG() damage /= count; } + Unit* unitCaster = GetUnitCasterForEffectHandlers(); switch (m_spellInfo->SpellFamilyName) { case SPELLFAMILY_GENERIC: @@ -522,7 +524,7 @@ void Spell::EffectDummy() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; - if (!unitTarget && !gameObjTarget && !itemTarget && !corpseTarget) + if (!unitTarget && !gameObjTarget && !itemTarget && !m_corpseTarget) return; // pet auras @@ -800,6 +802,7 @@ void Spell::EffectTriggerRitualOfSummoning() void Spell::CalculateJumpSpeeds(SpellEffectInfo const* effInfo, float dist, float& speedXY, float& speedZ) { + Unit* unitCaster = GetUnitCasterForEffectHandlers(); float runSpeed = unitCaster->IsControlledByPlayer() ? playerBaseMoveSpeed[MOVE_RUN] : baseMoveSpeed[MOVE_RUN]; if (Creature* creature = unitCaster->ToCreature()) runSpeed *= creature->GetCreatureTemplate()->speed_run; @@ -830,6 +833,7 @@ void Spell::EffectJump() if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -852,6 +856,7 @@ void Spell::EffectJumpDest() if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -1009,6 +1014,7 @@ void Spell::EffectPowerDrain() if (!unitTarget || !unitTarget->IsAlive() || unitTarget->GetPowerType() != powerType || damage < 0) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); // add spell damage bonus if (unitCaster) { @@ -1047,8 +1053,8 @@ void Spell::EffectSendEvent() target = unitTarget; else if (gameObjTarget) target = gameObjTarget; - else if (corpseTarget) - target = corpseTarget; + else if (m_corpseTarget) + target = m_corpseTarget; } else // if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT) { @@ -1089,7 +1095,7 @@ void Spell::EffectPowerBurn() int32 newDamage = -(unitTarget->ModifyPower(powerType, -damage)); // NO - Not a typo - EffectPowerBurn uses effect value multiplier - not effect damage multiplier - float dmgMultiplier = effectInfo->CalcValueMultiplier(unitCaster, this); + float dmgMultiplier = effectInfo->CalcValueMultiplier(GetUnitCasterForEffectHandlers(), this); // add log data before multiplication (need power amount, not damage) ExecuteLogEffectTakeTargetPower(SpellEffectName(effectInfo->Effect), unitTarget, powerType, newDamage, 0.0f); @@ -1107,6 +1113,8 @@ void Spell::EffectHeal() if (!unitTarget || !unitTarget->IsAlive() || damage < 0) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); + // Skip if m_originalCaster not available if (!unitCaster) return; @@ -1154,7 +1162,7 @@ void Spell::EffectHealPct() return; uint32 heal = unitTarget->CountPctFromMaxHealth(damage); - if (unitCaster) + if (Unit* unitCaster = GetUnitCasterForEffectHandlers()) { heal = unitCaster->SpellHealingBonusDone(unitTarget, m_spellInfo, heal, HEAL, *effectInfo); heal = unitTarget->SpellHealingBonusTaken(unitCaster, m_spellInfo, heal, HEAL); @@ -1171,6 +1179,7 @@ void Spell::EffectHealMechanical() if (!unitTarget || !unitTarget->IsAlive() || damage < 0) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); uint32 heal = damage; if (unitCaster) heal = unitCaster->SpellHealingBonusDone(unitTarget, m_spellInfo, heal, HEAL, *effectInfo); @@ -1190,6 +1199,7 @@ void Spell::EffectHealthLeech() if (!unitTarget || !unitTarget->IsAlive() || damage < 0) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); uint32 bonus = 0; if (unitCaster) bonus = unitCaster->SpellDamageBonusDone(unitTarget, m_spellInfo, uint32(damage), SPELL_DIRECT_DAMAGE, *effectInfo); @@ -1383,6 +1393,7 @@ void Spell::EffectPersistentAA() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -1429,6 +1440,7 @@ void Spell::EffectEnergize() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitTarget) return; @@ -1472,6 +1484,7 @@ void Spell::EffectEnergizePct() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitTarget) return; @@ -1848,6 +1861,8 @@ void Spell::EffectSummonType() int32 duration = m_spellInfo->CalcDuration(caster); + Unit* unitCaster = GetUnitCasterForEffectHandlers(); + TempSummon* summon = nullptr; // determine how many units should be summoned @@ -2526,6 +2541,7 @@ void Spell::EffectTameCreature() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitCaster->GetPetGUID().IsEmpty()) return; @@ -2581,7 +2597,7 @@ void Spell::EffectSummonPet() return; Player* owner = nullptr; - if (unitCaster) + if (Unit* unitCaster = GetUnitCasterForEffectHandlers()) { owner = unitCaster->ToPlayer(); if (!owner && unitCaster->IsTotem()) @@ -2696,6 +2712,7 @@ void Spell::EffectTaunt() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -2735,6 +2752,7 @@ void Spell::EffectWeaponDmg() if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -2856,6 +2874,7 @@ void Spell::EffectThreat() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitCaster->IsAlive()) return; @@ -2873,6 +2892,7 @@ void Spell::EffectHealMaxHealth() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -2911,7 +2931,7 @@ void Spell::EffectInterruptCast() || (spell->getState() == SPELL_STATE_PREPARING && spell->GetCastTime() > 0.0f)) && curSpellInfo->CanBeInterrupted(m_caster, unitTarget)) { - if (unitCaster) + if (Unit* unitCaster = GetUnitCasterForEffectHandlers()) { int32 duration = m_spellInfo->GetDuration(); duration = unitTarget->ModSpellDuration(m_spellInfo, unitTarget, duration, false, 1 << effectInfo->EffectIndex); @@ -2989,6 +3009,8 @@ void Spell::EffectScriptEffect() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); + /// @todo we must implement hunter pet summon at login there (spell 6962) /// @todo: move this to scripts switch (m_spellInfo->SpellFamilyName) @@ -3291,6 +3313,7 @@ void Spell::EffectSummonPlayer() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -3627,6 +3650,7 @@ void Spell::EffectSummonObject() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -3684,13 +3708,13 @@ void Spell::EffectResurrect() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; - if (!corpseTarget && !unitTarget) + if (!m_corpseTarget && !unitTarget) return; Player* player = nullptr; - if (corpseTarget) - player = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()); + if (m_corpseTarget) + player = ObjectAccessor::FindPlayer(m_corpseTarget->GetOwnerGUID()); else if (unitTarget) player = unitTarget->ToPlayer(); @@ -3810,6 +3834,7 @@ void Spell::EffectForceDeselect() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -3939,6 +3964,7 @@ void Spell::EffectCharge() if (!unitTarget) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -3997,6 +4023,7 @@ void Spell::EffectChargeDest() if (!destTarget) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -4325,6 +4352,7 @@ void Spell::EffectDestroyAllTotems() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -4425,6 +4453,7 @@ void Spell::EffectModifyThreatPercent() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitTarget) return; @@ -4436,6 +4465,7 @@ void Spell::EffectTransmitted() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -4657,8 +4687,8 @@ void Spell::EffectSkinPlayerCorpse() Player* target = nullptr; if (unitTarget) target = unitTarget->ToPlayer(); - else if (corpseTarget) - target = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()); + else if (m_corpseTarget) + target = ObjectAccessor::FindPlayer(m_corpseTarget->GetOwnerGUID()); if (!player || !target || target->IsAlive()) return; @@ -4894,6 +4924,7 @@ void Spell::EffectRedirectThreat() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -4940,6 +4971,7 @@ void Spell::EffectGameObjectSetDestructionState() void Spell::SummonGuardian(SpellEffectInfo const* effect, uint32 entry, SummonPropertiesEntry const* properties, uint32 numGuardians, ObjectGuid privateObjectOwner) { + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -5335,6 +5367,7 @@ void Spell::EffectCreateAreaTrigger() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !m_targets.HasDst()) return; @@ -5401,6 +5434,7 @@ void Spell::EffectCreateConversation() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !m_targets.HasDst()) return; @@ -5705,6 +5739,7 @@ void Spell::EffectCreateSceneObject() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !m_targets.HasDst()) return; @@ -5725,6 +5760,7 @@ void Spell::EffectCreatePrivateSceneObject() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !m_targets.HasDst()) return; @@ -5773,6 +5809,7 @@ void Spell::EffectJumpCharge() if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; @@ -5896,6 +5933,7 @@ void Spell::EffectCreatePrivateConversation() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster || !unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) return; @@ -5907,6 +5945,7 @@ void Spell::EffectSendChatMessage() if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; + Unit* unitCaster = GetUnitCasterForEffectHandlers(); if (!unitCaster) return; |