aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp13
-rw-r--r--src/server/game/Spells/Spell.cpp35
-rw-r--r--src/server/game/Spells/Spell.h3
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp2
5 files changed, 21 insertions, 36 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index b418a94f2fc..3e58e8e5b4d 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2999,24 +2999,19 @@ SpellCastResult WorldObject::CastSpell(CastSpellTargetArg const& targets, uint32
SpellInfo const* info = sSpellMgr->GetSpellInfo(spellId, args.CastDifficulty != DIFFICULTY_NONE ? args.CastDifficulty : GetMap()->GetDifficultyID());
if (!info)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString());
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID());
return SPELL_FAILED_SPELL_UNAVAILABLE;
}
if (!targets.Targets)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target passed to spell cast {} by {}", spellId, GetGUID().ToString());
+ TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target passed to spell cast {} by {}", spellId, GetGUID());
return SPELL_FAILED_BAD_TARGETS;
}
Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster, args.OriginalCastId);
- for (auto const& [Type, Value] : args.SpellValueOverrides)
- {
- if (Type < SPELLVALUE_INT_END)
- spell->SetSpellValue(SpellValueMod(Type), Value.I);
- else
- spell->SetSpellValue(SpellValueModFloat(Type), Value.F);
- }
+ for (CastSpellExtraArgsInit::SpellValueOverride const& value : args.SpellValueOverrides)
+ spell->SetSpellValue(value);
spell->m_CastItem = args.CastItem;
if (args.OriginalCastItemLevel)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index b2142825d9d..a41f2a7a268 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -8493,49 +8493,40 @@ SpellCastResult Spell::CanOpenLock(SpellEffectInfo const& effect, uint32 lockId,
return SPELL_CAST_OK;
}
-void Spell::SetSpellValue(SpellValueMod mod, int32 value)
+void Spell::SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value)
{
- if (mod < SPELLVALUE_BASE_POINT_END)
+ if (value.Type >= SPELLVALUE_BASE_POINT0 && value.Type < SPELLVALUE_BASE_POINT_END)
{
- m_spellValue->EffectBasePoints[mod] = value;
- m_spellValue->CustomBasePointsMask |= 1 << mod;
+ m_spellValue->EffectBasePoints[value.Type - SPELLVALUE_BASE_POINT0] = value.Value.I;
+ m_spellValue->CustomBasePointsMask |= 1 << (value.Type - SPELLVALUE_BASE_POINT0);
return;
}
- switch (mod)
+ switch (value.Type)
{
case SPELLVALUE_MAX_TARGETS:
- m_spellValue->MaxAffectedTargets = (uint32)value;
+ m_spellValue->MaxAffectedTargets = uint32(value.Value.I);
break;
case SPELLVALUE_AURA_STACK:
- m_spellValue->AuraStackAmount = uint8(value);
+ m_spellValue->AuraStackAmount = uint8(value.Value.I);
break;
case SPELLVALUE_DURATION:
- m_spellValue->Duration = value;
+ m_spellValue->Duration = value.Value.I;
break;
case SPELLVALUE_PARENT_SPELL_TARGET_COUNT:
- m_spellValue->ParentSpellTargetCount = value;
+ m_spellValue->ParentSpellTargetCount = value.Value.I;
break;
case SPELLVALUE_PARENT_SPELL_TARGET_INDEX:
- m_spellValue->ParentSpellTargetIndex = value;
+ m_spellValue->ParentSpellTargetIndex = value.Value.I;
break;
- default:
- break;
- }
-}
-
-void Spell::SetSpellValue(SpellValueModFloat mod, float value)
-{
- switch (mod)
- {
case SPELLVALUE_RADIUS_MOD:
- m_spellValue->RadiusMod = value;
+ m_spellValue->RadiusMod = value.Value.F;
break;
case SPELLVALUE_CRIT_CHANCE:
- m_spellValue->CriticalChance = value;
+ m_spellValue->CriticalChance = value.Value.F;
break;
case SPELLVALUE_DURATION_PCT:
- m_spellValue->DurationMul = value / 100.0f;
+ m_spellValue->DurationMul = value.Value.F / 100.0f;
break;
default:
break;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 4debc6c7656..c8506d0c405 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -659,8 +659,7 @@ class TC_GAME_API Spell
void CleanupTargetList();
- void SetSpellValue(SpellValueMod mod, int32 value);
- void SetSpellValue(SpellValueModFloat mod, float value);
+ void SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value);
Spell** m_selfContainer; // pointer to our spell container (if applicable)
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
index 6420e9ad6f4..28769da7628 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
@@ -555,7 +555,7 @@ public:
{
void SetRadiusMod()
{
- GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3);
+ GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3 });
}
void FilterTargets(std::list<WorldObject*>& unitList)
@@ -626,7 +626,7 @@ public:
{
void SetRadiusMod()
{
- GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3);
+ GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3 });
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index bf15b87bfa8..f2e09b6605a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -2808,7 +2808,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050
void ModSanityStacks()
{
- GetSpell()->SetSpellValue(SPELLVALUE_AURA_STACK, 100);
+ GetSpell()->SetSpellValue({ SPELLVALUE_AURA_STACK, 100 });
}
void Register() override