diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-01-13 20:38:32 -0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-06-14 00:19:50 +0200 |
| commit | 5fbddef85f48f6b9140d025d7f2e14faae0af178 (patch) | |
| tree | 054c1aebe3563b62bfd25648cb170aa4470de0ec /src/server/game | |
| parent | 267aeddc05eddad47c9a621fc64bdddeceb3a7ec (diff) | |
Core/Spell: SpellValueOverrides encapsulation
- No sense to let scripts use SpellValueOverrides, we already have modifiers in CastSpellExtraArgs struct
(cherry picked from commit 3b01cccd7eafaff9f3b8236a544e4fa46818926c)
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellDefines.h | 15 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 18 |
7 files changed, 32 insertions, 27 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 5d93f452b68..a053e694bd1 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1692,7 +1692,7 @@ void Pet::CastPetAura(PetAura const* aura) args.TriggerFlags = TRIGGERED_FULL_MASK; if (auraId == 35696) // Demonic Knowledge - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, CalculatePct(aura->GetDamage(), GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT))); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(aura->GetDamage(), GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT))); CastSpell(this, auraId, args); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b780408e67a..4eea3a24ac6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8181,7 +8181,11 @@ void Player::ApplyAzeriteEssence(AzeriteItem* item, uint32 azeriteEssenceId, uin if (major && currentRank == 1) { if (apply) - CastSpell(this, SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(azeriteEssencePower->MajorPowerDescription)); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, azeriteEssencePower->MajorPowerDescription); + CastSpell(this, SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE, args); + } else RemoveAurasDueToSpell(SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE); } @@ -8403,7 +8407,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { if (spellInfo->GetEffect(i)->IsEffect()) - args.SpellValueOverrides.AddMod(static_cast<SpellValueMod>(SPELLVALUE_BASE_POINT0 + i), CalculatePct(spellInfo->GetEffect(i)->CalcValue(this), effectPct)); + args.AddSpellMod(static_cast<SpellValueMod>(SPELLVALUE_BASE_POINT0 + i), CalculatePct(spellInfo->GetEffect(i)->CalcValue(this), effectPct)); } } CastSpell(target, spellInfo->Id, args); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9bb993c6ed1..94dffe2efaf 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12798,7 +12798,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) { CastSpellExtraArgs args(flags); args.OriginalCaster = origCasterGUID; - args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0+i), seatId+1); + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0+i), seatId+1); caster->CastSpell(target, itr->second.spellId, args); } else // This can happen during Player::_LoadAuras @@ -12833,7 +12833,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) void Unit::EnterVehicle(Unit* base, int8 seatId) { CastSpellExtraArgs args(TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE); - args.SpellValueOverrides.AddBP0(seatId + 1); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, seatId + 1); CastSpell(base, VEHICLE_SPELL_RIDE_HARDCODED, args); } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 7a1b1028041..597b2365b16 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4914,7 +4914,7 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo CastSpellExtraArgs args(this); if (GetAmount()) // If amount avalible cast with basepoints (Crypt Fever for example) - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetAmount()); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, GetAmount()); caster->CastSpell(target, triggeredSpellId, args); } @@ -5150,7 +5150,7 @@ void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* { CastSpellExtraArgs args(this); for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), GetAmount()); + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), GetAmount()); triggerCaster->CastSpell(target, triggerSpellId, args); TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id); } @@ -5548,7 +5548,7 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con int32 feedAmount = CalculatePct(gainedAmount, manaFeedVal); CastSpellExtraArgs args(this); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, feedAmount); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, feedAmount); caster->CastSpell(caster, 32554, args); } } @@ -5703,7 +5703,7 @@ void AuraEffect::HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId, GetBase()->GetCastDifficulty())) { CastSpellExtraArgs args(this); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetAmount()); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, GetAmount()); triggerCaster->CastSpell(triggerTarget, triggerSpellId, args); TC_LOG_DEBUG("spells", "AuraEffect::HandleProcTriggerSpellWithValueAuraProc: Triggering spell %u with value %d from aura %u proc", triggeredSpellInfo->Id, GetAmount(), GetId()); } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 89c5b832600..bc964c8e55c 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1329,7 +1329,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b if (caster->HasAura(64760)) { CastSpellExtraArgs args(GetEffect(EFFECT_0)); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetEffect(EFFECT_0)->GetAmount()); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, GetEffect(EFFECT_0)->GetAmount()); caster->CastSpell(target, 64801, args); } } @@ -1382,7 +1382,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b { float multiplier = float(aurEff->GetAmount()); CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SpellValueOverrides.AddBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), multiplier)); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(caster->GetMaxPower(POWER_MANA), multiplier)); caster->CastSpell(caster, 47755, args); } } diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 40d0944fc26..83b48de53ec 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -268,7 +268,7 @@ struct TC_GAME_API CastSpellExtraArgs CastSpellExtraArgs& SetOriginalCaster(ObjectGuid const& guid) { OriginalCaster = guid; return *this; } CastSpellExtraArgs& SetCastDifficulty(Difficulty castDifficulty) { CastDifficulty = castDifficulty; return *this; } CastSpellExtraArgs& AddSpellMod(SpellValueMod mod, int32 val) { SpellValueOverrides.AddMod(mod, val); return *this; } - CastSpellExtraArgs& AddSpellBP0(int32 val) { SpellValueOverrides.AddBP0(val); return *this; } + CastSpellExtraArgs& AddSpellBP0(int32 val) { return AddSpellMod(SPELLVALUE_BASE_POINT0, val); } // because i don't want to type SPELLVALUE_BASE_POINT0 300 times TriggerCastFlags TriggerFlags = TRIGGERED_NONE; Item* CastItem = nullptr; @@ -277,17 +277,16 @@ struct TC_GAME_API CastSpellExtraArgs Difficulty CastDifficulty = Difficulty(0); struct { - public: - void AddMod(SpellValueMod mod, int32 val) { data.emplace_back(mod, val); } - void AddBP0(int32 bp0) { AddMod(SPELLVALUE_BASE_POINT0, bp0); } // because i don't want to type SPELLVALUE_BASE_POINT0 300 times + friend struct CastSpellExtraArgs; + friend class Unit; private: - auto begin() const { return data.cbegin(); } - auto end() const { return data.cend(); } + void AddMod(SpellValueMod mod, int32 val) { data.push_back({ mod, val }); } - std::vector<std::pair<SpellValueMod, int32>> data; + auto begin() const { return data.cbegin(); } + auto end() const { return data.cend(); } - friend class Unit; + std::vector<std::pair<SpellValueMod, int32>> data; } SpellValueOverrides; }; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index a5620b9293c..ff0d7043e8b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -713,7 +713,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex /*effIndex*/) // set basepoints for trigger with value effect if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); // original caster guid only for GO cast m_caster->CastSpell(targets, spellInfo->Id, args); @@ -757,7 +757,7 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex /*effIndex*/) // set basepoints for trigger with value effect if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); // original caster guid only for GO cast m_caster->CastSpell(targets, spellInfo->Id, args); @@ -794,7 +794,7 @@ void Spell::EffectForceCast(SpellEffIndex /*effIndex*/) case 52349: // Overtake { CastSpellExtraArgs args(m_originalCasterGUID); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage); unitTarget->CastSpell(unitTarget, spellInfo->Id, args); return; } @@ -811,7 +811,7 @@ void Spell::EffectForceCast(SpellEffIndex /*effIndex*/) CastSpellExtraArgs args(TRIGGERED_FULL_MASK); if (effectInfo->Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); unitTarget->CastSpell(m_caster, spellInfo->Id, args); } @@ -2033,7 +2033,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) // if we have small value, it indicates seat position if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS) - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, basePoints); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints); m_originalCaster->CastSpell(summon, spellId, args); @@ -3393,7 +3393,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) if (totem && totem->IsTotem()) { CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage); m_caster->CastSpell(totem, 55277, args); } } @@ -3793,7 +3793,9 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex) player->DestroyItemCount(foodItem, count, true); /// @todo fix crash when a spell has two effects, both pointed at the same item target - m_caster->CastSpell(pet, effectInfo->TriggerSpell, CastSpellExtraArgs(SPELLVALUE_BASE_POINT0, pct).SetTriggerFlags(TRIGGERED_FULL_MASK)); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, pct); + m_caster->CastSpell(pet, effectInfo->TriggerSpell, args); } void Spell::EffectDismissPet(SpellEffIndex effIndex) @@ -4474,7 +4476,7 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/) if (mana) { CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, mana); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana); m_caster->CastSpell(m_caster, 39104, args); } } |
