aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-01-13 20:38:32 -0300
committerShauren <shauren.trinity@gmail.com>2021-06-14 00:19:50 +0200
commit5fbddef85f48f6b9140d025d7f2e14faae0af178 (patch)
tree054c1aebe3563b62bfd25648cb170aa4470de0ec /src/server/game
parent267aeddc05eddad47c9a621fc64bdddeceb3a7ec (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.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp8
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp4
-rw-r--r--src/server/game/Spells/SpellDefines.h15
-rw-r--r--src/server/game/Spells/SpellEffects.cpp18
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);
}
}