aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp6
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp24
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h8
-rw-r--r--src/server/game/AI/PlayerAI/PlayerAI.cpp2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp2
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldTB.cpp4
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp16
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp12
-rw-r--r--src/server/game/Entities/Player/Player.cpp57
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp182
-rw-r--r--src/server/game/Entities/Unit/Unit.h168
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h48
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp4
-rw-r--r--src/server/game/Handlers/PetHandler.cpp4
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp10
-rw-r--r--src/server/game/Handlers/ToyHandler.cpp2
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h48
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp101
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp16
-rw-r--r--src/server/game/Spells/Spell.cpp10
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellDefines.h168
-rw-r--r--src/server/game/Spells/SpellEffects.cpp90
-rw-r--r--src/server/game/Spells/SpellMgr.cpp8
-rw-r--r--src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp6
-rw-r--r--src/server/scripts/Commands/cs_cast.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp6
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp5
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp7
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp6
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp5
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp6
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp7
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp21
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp6
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp20
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp6
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp13
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp5
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp6
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp6
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp12
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp10
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp33
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp23
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp45
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp10
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp7
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp13
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp20
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp33
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp4
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp4
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp4
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_moragg.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp11
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp4
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp7
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp3
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp2
-rw-r--r--src/server/scripts/Outland/boss_doomlord_kazzak.cpp4
-rw-r--r--src/server/scripts/Outland/boss_doomwalker.cpp2
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp2
-rw-r--r--src/server/scripts/Spells/spell_dh.cpp2
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp22
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp117
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp41
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp14
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp18
-rw-r--r--src/server/scripts/Spells/spell_item.cpp144
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp22
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp18
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp65
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp21
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp11
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp63
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp19
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp24
-rw-r--r--src/server/scripts/World/mob_generic_creature.cpp3
-rw-r--r--src/server/scripts/World/npcs_special.cpp6
138 files changed, 1232 insertions, 1020 deletions
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 2463f57f694..331267d1f19 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -98,7 +98,11 @@ int32 CritterAI::Permissible(Creature const* creature)
void TriggerAI::IsSummonedBy(Unit* summoner)
{
if (me->m_spells[0])
- me->CastSpell(me, me->m_spells[0], false, nullptr, nullptr, summoner->GetGUID());
+ {
+ CastSpellExtraArgs extra;
+ extra.OriginalCaster = summoner->GetGUID();
+ me->CastSpell(me, me->m_spells[0], extra);
+ }
}
int32 TriggerAI::Permissible(Creature const* creature)
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index 25c43525da2..2a2b8c62bd3 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -243,7 +243,7 @@ void PetAI::UpdateAI(uint32 diff)
SpellCastTargets targets;
targets.SetUnitTarget(target);
- spell->prepare(&targets);
+ spell->prepare(targets);
}
// deleted cached Spell objects
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index ccdb4097323..87277f7bfbf 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -96,7 +96,7 @@ bool UnitAI::DoSpellAttackIfReady(uint32 spellId)
{
if (me->IsWithinCombatRange(me->GetVictim(), spellInfo->GetMaxRange(false)))
{
- me->CastSpell(me->GetVictim(), spellInfo, TRIGGERED_NONE);
+ me->CastSpell(me->GetVictim(), spellId, me->GetMap()->GetDifficultyID());
me->resetAttackTimer();
return true;
}
@@ -167,28 +167,18 @@ void UnitAI::DoCast(uint32 spellId)
me->CastSpell(target, spellId, false);
}
-void UnitAI::DoCast(Unit* victim, uint32 spellId, bool triggered)
+void UnitAI::DoCast(Unit* victim, uint32 spellId, CastSpellExtraArgs const& args)
{
- if (!victim || (me->HasUnitState(UNIT_STATE_CASTING) && !triggered))
+ if (me->HasUnitState(UNIT_STATE_CASTING) && !(args.TriggerFlags & TRIGGERED_IGNORE_CAST_IN_PROGRESS))
return;
- me->CastSpell(victim, spellId, triggered);
+ me->CastSpell(victim, spellId, args);
}
-void UnitAI::DoCastVictim(uint32 spellId, bool triggered)
+void UnitAI::DoCastVictim(uint32 spellId, CastSpellExtraArgs const& args)
{
- if (!me->GetVictim() || (me->HasUnitState(UNIT_STATE_CASTING) && !triggered))
- return;
-
- me->CastSpell(me->GetVictim(), spellId, triggered);
-}
-
-void UnitAI::DoCastAOE(uint32 spellId, bool triggered)
-{
- if (!triggered && me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- me->CastSpell(nullptr, spellId, triggered);
+ if (Unit* victim = me->GetVictim())
+ DoCast(victim, spellId, args);
}
#define UPDATE_TARGET(a) {if (AIInfo->target<a) AIInfo->target=a;}
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 91f8a820189..a290c8ec402 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -298,10 +298,10 @@ class TC_GAME_API UnitAI
void AttackStartCaster(Unit* victim, float dist);
void DoCast(uint32 spellId);
- void DoCast(Unit* victim, uint32 spellId, bool triggered = false);
- void DoCastSelf(uint32 spellId, bool triggered = false) { DoCast(me, spellId, triggered); }
- void DoCastVictim(uint32 spellId, bool triggered = false);
- void DoCastAOE(uint32 spellId, bool triggered = false);
+ void DoCast(Unit* victim, uint32 spellId, CastSpellExtraArgs const& args = {});
+ void DoCastSelf(uint32 spellId, CastSpellExtraArgs const& args = {}) { DoCast(me, spellId, args); }
+ void DoCastVictim(uint32 spellId, CastSpellExtraArgs const& args = {});
+ void DoCastAOE(uint32 spellId, CastSpellExtraArgs const& args = {}) { DoCast(nullptr, spellId, args); }
virtual bool ShouldSparWith(Unit const* /*target*/) const { return false; }
diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp
index 695975fa177..be52282a482 100644
--- a/src/server/game/AI/PlayerAI/PlayerAI.cpp
+++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp
@@ -575,7 +575,7 @@ void PlayerAI::DoCastAtTarget(TargetedSpell spell)
{
SpellCastTargets targets;
targets.SetUnitTarget(spell.second);
- spell.first->prepare(&targets);
+ spell.first->prepare(targets);
}
void PlayerAI::DoRangedAttackIfReady()
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index ae30dcca730..965fd290a1d 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -176,7 +176,7 @@ void ScriptedAI::DoCastSpell(Unit* target, SpellInfo const* spellInfo, bool trig
return;
me->StopMoving();
- me->CastSpell(target, spellInfo, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE);
+ me->CastSpell(target, spellInfo->Id, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE);
}
void ScriptedAI::DoPlaySoundToSet(WorldObject* source, uint32 soundId)
diff --git a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp b/src/server/game/Battlefield/Zones/BattlefieldTB.cpp
index a5ddeb42526..81ac01277e9 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldTB.cpp
@@ -212,7 +212,7 @@ void BattlefieldTB::OnPlayerJoinWar(Player* player)
// Bonus damage buff for attackers
if (player->GetTeamId() == GetAttackerTeam() && GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED) > 0)
- player->CastCustomSpell(SPELL_TOWER_ATTACK_BONUS, SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED), player, TRIGGERED_FULL_MASK);
+ player->CastSpell(player, SPELL_TOWER_ATTACK_BONUS, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED)));
}
@@ -759,7 +759,7 @@ void BattlefieldTB::TowerDestroyed(TBTowerId tbTowerId)
// Attack bonus buff
for (ObjectGuid const& guid : m_PlayersInWar[GetAttackerTeam()])
if (Player* player = ObjectAccessor::FindPlayer(guid))
- player->CastCustomSpell(SPELL_TOWER_ATTACK_BONUS, SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED), player, TRIGGERED_FULL_MASK);
+ player->CastSpell(player, SPELL_TOWER_ATTACK_BONUS, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED)));
// Honor reward
TeamCastSpell(GetAttackerTeam(), SPELL_REWARD_TOWER_DESTROYED);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 13ecb688257..e6f90796b89 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2123,8 +2123,7 @@ void GameObject::Use(Unit* user)
if (!spellId)
return;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
+ if (!sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID()))
{
if (user->GetTypeId() != TYPEID_PLAYER || !sOutdoorPvPMgr->HandleCustomSpell(user->ToPlayer(), spellId, this))
TC_LOG_ERROR("misc", "WORLD: unknown spell id %u at use action for gameobject (Entry: %u GoType: %u)", spellId, GetEntry(), GetGoType());
@@ -2137,7 +2136,7 @@ void GameObject::Use(Unit* user)
sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
if (spellCaster)
- spellCaster->CastSpell(user, spellInfo, triggered);
+ spellCaster->CastSpell(user, spellId, triggered);
else
CastSpell(user, spellId);
}
@@ -2166,7 +2165,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
if (self)
{
if (target)
- target->CastSpell(target, spellInfo, triggered);
+ target->CastSpell(target, spellInfo->Id, triggered);
return;
}
@@ -2179,6 +2178,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
trigger->SetImmuneToAll(false);
PhasingHandler::InheritPhaseShift(trigger, this);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = triggered;
if (Unit* owner = GetOwner())
{
trigger->SetFaction(owner->GetFaction());
@@ -2188,14 +2189,17 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
trigger->SetPvpFlags(owner->GetPvpFlags());
// needed for GO casts for proper target validation checks
trigger->SetOwnerGUID(owner->GetGUID());
- trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID());
+
+ args.OriginalCaster = owner->GetGUID();
+ trigger->CastSpell(target ? target : trigger, spellInfo->Id, args);
}
else
{
trigger->SetFaction(spellInfo->IsPositive() ? FACTION_FRIENDLY : FACTION_MONSTER);
// Set owner guid for target if no owner available - needed by trigger auras
// - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
- trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, target ? target->GetGUID() : ObjectGuid::Empty);
+ args.OriginalCaster = target ? target->GetGUID() : ObjectGuid::Empty;
+ trigger->CastSpell(target ? target : trigger, spellInfo->Id, args);
}
}
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index d66e0b859e6..0e32be435b4 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1702,13 +1702,13 @@ void Pet::CastPetAura(PetAura const* aura)
if (!auraId)
return;
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+
if (auraId == 35696) // Demonic Knowledge
- {
- int32 basePoints = CalculatePct(aura->GetDamage(), GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT));
- CastCustomSpell(this, auraId, &basePoints, nullptr, nullptr, true);
- }
- else
- CastSpell(this, auraId, true);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, CalculatePct(aura->GetDamage(), GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT)));
+
+ CastSpell(this, auraId, args);
}
bool Pet::IsPetAura(Aura const* aura)
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 71005da4166..0cf360516ac 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7862,7 +7862,7 @@ void Player::ApplyItemObtainSpells(Item* item, bool apply)
if (apply)
{
if (!HasAura(spellId))
- CastSpell(this, spellId, true, item);
+ CastSpell(this, spellId, item);
}
else
RemoveAurasDueToSpell(spellId);
@@ -7994,7 +7994,7 @@ void Player::ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply,
TC_LOG_DEBUG("entities.player", "Player::ApplyEquipSpell: Player '%s' (%s) cast %s equip spell (ID: %i)",
GetName().c_str(), GetGUID().ToString().c_str(), (item ? "item" : "itemset"), spellInfo->Id);
- CastSpell(this, spellInfo, true, item);
+ CastSpell(this, spellInfo->Id, item);
}
else
{
@@ -8103,13 +8103,15 @@ void Player::ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const
}
else if (apply)
{
- CustomSpellValues csv;
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.CastItem = artifact;
if (artifactPowerRank->AuraPointsOverride)
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (spellInfo->GetEffect(i))
- csv.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), artifactPowerRank->AuraPointsOverride);
+ args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), artifactPowerRank->AuraPointsOverride);
- CastCustomSpell(artifactPowerRank->SpellID, csv, this, TRIGGERED_FULL_MASK, artifact);
+ CastSpell(this, artifactPowerRank->SpellID, args);
}
}
else
@@ -8166,7 +8168,7 @@ void Player::ApplyAzeriteItemMilestonePower(AzeriteItem* item, AzeriteItemMilest
if (AzeritePowerEntry const* azeritePower = sAzeritePowerStore.LookupEntry(azeriteItemMilestonePower->AzeritePowerID))
{
if (apply)
- CastSpell(this, azeritePower->SpellID, true, item);
+ CastSpell(this, azeritePower->SpellID, item);
else
RemoveAurasDueToItemSpell(azeritePower->SpellID, item->GetGUID());
}
@@ -8183,7 +8185,7 @@ void Player::ApplyAzeriteEssence(AzeriteItem* item, uint32 azeriteEssenceId, uin
if (major && currentRank == 1)
{
if (apply)
- CastCustomSpell(SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE, SPELLVALUE_BASE_POINT0, azeriteEssencePower->MajorPowerDescription, this, TRIGGERED_FULL_MASK);
+ CastSpell(this, SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(azeriteEssencePower->MajorPowerDescription));
else
RemoveAurasDueToSpell(SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE);
}
@@ -8196,7 +8198,7 @@ void Player::ApplyAzeriteEssencePower(AzeriteItem* item, AzeriteEssencePowerEntr
if (SpellInfo const* powerSpell = sSpellMgr->GetSpellInfo(azeriteEssencePower->MinorPowerDescription, DIFFICULTY_NONE))
{
if (apply)
- CastSpell(this, powerSpell, true, item);
+ CastSpell(this, powerSpell->Id, item);
else
RemoveAurasDueToItemSpell(powerSpell->Id, item->GetGUID());
}
@@ -8208,7 +8210,7 @@ void Player::ApplyAzeriteEssencePower(AzeriteItem* item, AzeriteEssencePowerEntr
if (powerSpell->IsPassive())
{
if (apply)
- CastSpell(this, powerSpell, true, item);
+ CastSpell(this, powerSpell->Id, item);
else
RemoveAurasDueToItemSpell(powerSpell->Id, item->GetGUID());
}
@@ -8228,7 +8230,7 @@ void Player::ApplyAzeritePower(AzeriteEmpoweredItem* item, AzeritePowerEntry con
if (apply)
{
if (!azeritePower->SpecSetID || sDB2Manager.IsSpecSetMember(azeritePower->SpecSetID, GetPrimarySpecialization()))
- CastSpell(this, azeritePower->SpellID, true, item);
+ CastSpell(this, azeritePower->SpellID, item);
}
else
RemoveAurasDueToItemSpell(azeritePower->SpellID, item->GetGUID());
@@ -8320,7 +8322,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT
chance = GetWeaponProcChance();
if (roll_chance_f(chance) && sScriptMgr->OnCastItemCombatSpell(this, damageInfo.GetVictim(), spellInfo, item))
- CastSpell(damageInfo.GetVictim(), spellInfo->Id, true, item);
+ CastSpell(damageInfo.GetVictim(), spellInfo->Id, item);
}
}
@@ -8384,17 +8386,17 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT
if (roll_chance_f(chance))
{
if (spellInfo->IsPositive())
- CastSpell(this, spellInfo, true, item);
+ CastSpell(this, spellInfo->Id, item);
else
- CastSpell(damageInfo.GetVictim(), spellInfo, true, item);
+ CastSpell(damageInfo.GetVictim(), spellInfo->Id, item);
}
if (roll_chance_f(chance))
{
Unit* target = spellInfo->IsPositive() ? this : damageInfo.GetVictim();
+ CastSpellExtraArgs args(item);
// reduce effect values if enchant is limited
- CustomSpellValues values;
if (entry && (entry->AttributesMask & ENCHANT_PROC_ATTR_LIMIT_60) && target->GetLevelForTarget(this) > 60)
{
int32 const lvlDifference = target->GetLevelForTarget(this) - 60;
@@ -8405,11 +8407,10 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
if (spellInfo->GetEffect(i)->IsEffect())
- values.AddSpellMod(static_cast<SpellValueMod>(SPELLVALUE_BASE_POINT0 + i), CalculatePct(spellInfo->GetEffect(i)->CalcValue(this), effectPct));
+ args.SpellValueOverrides.AddMod(static_cast<SpellValueMod>(SPELLVALUE_BASE_POINT0 + i), CalculatePct(spellInfo->GetEffect(i)->CalcValue(this), effectPct));
}
}
-
- CastCustomSpell(spellInfo->Id, values, target, TRIGGERED_FULL_MASK, item);
+ CastSpell(target, spellInfo->Id, args);
}
}
}
@@ -8443,7 +8444,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, Objec
spell->m_fromClient = true;
spell->m_CastItem = item;
spell->SetSpellValue(SPELLVALUE_BASE_POINT0, learning_spell_id);
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
}
@@ -8473,7 +8474,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, Objec
spell->m_CastItem = item;
spell->m_misc.Raw.Data[0] = misc[0];
spell->m_misc.Raw.Data[1] = misc[1];
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
@@ -8507,7 +8508,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, Objec
spell->m_CastItem = item;
spell->m_misc.Raw.Data[0] = misc[0];
spell->m_misc.Raw.Data[1] = misc[1];
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
}
@@ -14301,7 +14302,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
if (enchant_spell_id)
{
if (apply)
- CastSpell(this, enchant_spell_id, true, item);
+ CastSpell(this, enchant_spell_id, item);
else
RemoveAurasDueToItemSpell(enchant_spell_id, item->GetGUID());
}
@@ -14918,7 +14919,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 optionIndex, uint32 menu
break;
case GOSSIP_OPTION_SPIRITHEALER:
if (isDead())
- source->ToCreature()->CastSpell(source->ToCreature(), 17251, true, nullptr, nullptr, GetGUID());
+ source->ToCreature()->CastSpell(source->ToCreature(), 17251, GetGUID());
break;
case GOSSIP_OPTION_QUESTGIVER:
PrepareQuestMenu(guid);
@@ -15604,7 +15605,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
if (Unit* unit = questGiver->ToUnit())
caster = unit;
- caster->CastSpell(this, spellInfo, true);
+ caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty));
}
SetQuestSlot(log_slot, quest_id, qtime);
@@ -15941,7 +15942,7 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
if (Unit* unit = questGiver->ToUnit())
caster = unit;
- caster->CastSpell(this, spellInfo, true);
+ caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty));
}
else
{
@@ -15957,7 +15958,7 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
if (Unit* unit = questGiver->ToUnit())
caster = unit;
- caster->CastSpell(this, spellInfo, true);
+ caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty));
}
}
@@ -22449,7 +22450,7 @@ void Player::VehicleSpellInitialize()
}
if (spellInfo->IsPassive())
- vehicle->CastSpell(vehicle, spellInfo, true);
+ vehicle->CastSpell(vehicle, spellInfo->Id, true);
petSpells.ActionButtons[i] = MAKE_UNIT_ACTION_BUTTON(spellId, i + 8);
}
@@ -25794,7 +25795,7 @@ bool Player::IsAtRecruitAFriendDistance(WorldObject const* pOther) const
void Player::ResurrectUsingRequestData()
{
- /// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse
+ // Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse
TeleportTo(_resurrectionData->Location);
if (IsBeingTeleported())
@@ -25825,7 +25826,7 @@ void Player::ResurrectUsingRequestDataImpl()
SetPower(POWER_LUNAR_POWER, 0);
if (uint32 aura = resurrectAura)
- CastSpell(this, aura, true, nullptr, nullptr, resurrectGUID);
+ CastSpell(this, aura, resurrectGUID);
SpawnCorpseBones();
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index d69a54935e9..0121c59f71d 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1001,147 +1001,46 @@ void Unit::CastStop(uint32 except_spellid)
InterruptSpell(CurrentSpellTypes(i), false);
}
-void Unit::CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo, CustomSpellValues const* value, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
+void Unit::CastSpell(SpellCastTargets const& targets, uint32 spellId, CastSpellExtraArgs const& args)
{
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s", GetGUID().ToString().c_str());
- return;
- }
-
- Spell* spell = new Spell(this, spellInfo, triggerFlags, originalCaster);
-
- if (value)
- for (CustomSpellValues::const_iterator itr = value->begin(); itr != value->end(); ++itr)
- spell->SetSpellValue(itr->first, itr->second);
-
- spell->m_CastItem = castItem;
- spell->prepare(&targets, triggeredByAura);
-}
-
-void Unit::CastSpell(Unit* victim, uint32 spellId, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- CastSpell(victim, spellId, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(Unit* victim, uint32 spellId, TriggerCastFlags triggerFlags /*= TRIGGER_NONE*/, Item* castItem /*= nullptr*/, AuraEffect const* triggeredByAura /*= nullptr*/, ObjectGuid originalCaster /*= ObjectGuid::Empty*/)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
- return;
- }
-
- CastSpell(victim, spellInfo, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(Unit* victim, SpellInfo const* spellInfo, bool triggered, Item* castItem/*= nullptr*/, AuraEffect const* triggeredByAura /*= nullptr*/, ObjectGuid originalCaster /*= ObjectGuid::Empty*/)
-{
- CastSpell(victim, spellInfo, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(Unit* victim, SpellInfo const* spellInfo, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellCastTargets targets;
- targets.SetUnitTarget(victim);
- CastSpell(targets, spellInfo, nullptr, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastCustomSpell(Unit* target, uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- CustomSpellValues values;
- if (bp0)
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, *bp0);
- if (bp1)
- values.AddSpellMod(SPELLVALUE_BASE_POINT1, *bp1);
- if (bp2)
- values.AddSpellMod(SPELLVALUE_BASE_POINT2, *bp2);
- CastCustomSpell(spellId, values, target, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastCustomSpell(uint32 spellId, SpellValueMod mod, int32 value, Unit* target, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- CustomSpellValues values;
- values.AddSpellMod(mod, value);
- CastCustomSpell(spellId, values, target, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastCustomSpell(uint32 spellId, SpellValueMod mod, int32 value, Unit* target, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- CustomSpellValues values;
- values.AddSpellMod(mod, value);
- CastCustomSpell(spellId, values, target, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastCustomSpell(uint32 spellId, CustomSpellValues const& value, Unit* victim, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
+ SpellInfo const* info = sSpellMgr->GetSpellInfo(spellId, args.CastDifficulty != DIFFICULTY_NONE ? args.CastDifficulty : GetMap()->GetDifficultyID());
+ if (!info)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell %u by caster %s", spellId, GetGUID().ToString().c_str());
return;
}
- SpellCastTargets targets;
- targets.SetUnitTarget(victim);
- CastSpell(targets, spellInfo, &value, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
+ Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster);
+ for (auto const& pair : args.SpellValueOverrides)
+ spell->SetSpellValue(pair.first, pair.second);
-void Unit::CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
- return;
- }
- SpellCastTargets targets;
- targets.SetDst(x, y, z, GetOrientation());
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
+ spell->m_CastItem = args.CastItem;
+ spell->prepare(targets, args.TriggeringAura);
}
-void Unit::CastSpell(float x, float y, float z, uint32 spellId, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
+void Unit::CastSpell(WorldObject* target, uint32 spellId, CastSpellExtraArgs const& args)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
- return;
- }
SpellCastTargets targets;
- targets.SetDst(x, y, z, GetOrientation());
-
- CastSpell(targets, spellInfo, nullptr, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
+ if (target)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
- return;
+ if (Unit* unitTarget = target->ToUnit())
+ targets.SetUnitTarget(unitTarget);
+ else if (GameObject* goTarget = target->ToGameObject())
+ targets.SetGOTarget(goTarget);
+ else
+ {
+ TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target %s passed to spell cast by %s", target->GetGUID().ToString().c_str(), GetGUID().ToString().c_str());
+ return;
+ }
}
- SpellCastTargets targets;
- targets.SetGOTarget(go);
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
+ CastSpell(targets, spellId, args);
}
-void Unit::CastSpell(Item* target, uint32 spellId, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
+void Unit::CastSpell(Position const& dest, uint32 spellId, CastSpellExtraArgs const& args)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetMap()->GetDifficultyID());
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s", spellId, GetGUID().ToString().c_str());
- return;
- }
SpellCastTargets targets;
- targets.SetItemTarget(target);
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
+ targets.SetDst(dest);
+ CastSpell(targets, spellId, args);
}
void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 damage, SpellInfo const* spellInfo, WeaponAttackType attackType, bool crit)
@@ -2125,7 +2024,10 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
}
else
{
- CastSpell(victim, meleeAttackSpellId, true, nullptr, meleeAttackAuraEffect);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = meleeAttackAuraEffect;
+ CastSpell(victim, meleeAttackSpellId, args);
uint32 hitInfo = HITINFO_AFFECTS_VICTIM | HITINFO_NO_ANIMATION;
if (attType == OFF_ATTACK)
@@ -2996,7 +2898,7 @@ void Unit::_UpdateAutoRepeatSpell()
// we want to shoot
Spell* spell = new Spell(this, autoRepeatSpellInfo, TRIGGERED_FULL_MASK);
- spell->prepare(&(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_targets));
+ spell->prepare(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_targets);
// all went good, reset attack
resetAttackTimer(RANGED_ATTACK);
@@ -5991,7 +5893,7 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply)
if (!spellInfo || !spellInfo->IsPassive())
continue;
if (spellInfo->CasterAuraState == uint32(flag))
- CastSpell(this, itr->first, true, nullptr);
+ CastSpell(this, itr->first, true);
}
}
else if (Pet* pet = ToCreature()->ToPet())
@@ -6004,7 +5906,7 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply)
if (!spellInfo || !spellInfo->IsPassive())
continue;
if (spellInfo->CasterAuraState == uint32(flag))
- CastSpell(this, itr->first, true, nullptr);
+ CastSpell(this, itr->first, true);
}
}
}
@@ -10181,7 +10083,10 @@ void Unit::TriggerOnPowerChangeAuras(Powers power, int32 oldVal, int32 newVal)
break;
}
- CastSpell(this, triggerSpell, true, nullptr, effect);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = effect;
+ CastSpell(this, triggerSpell, args);
}
}
}
@@ -10452,7 +10357,7 @@ void CharmInfo::InitPossessCreateSpells()
if (spellInfo)
{
if (spellInfo->IsPassive())
- _unit->CastSpell(_unit, spellInfo, true);
+ _unit->CastSpell(_unit, spellInfo->Id, true);
else
AddSpellToActionBar(spellInfo, ACT_PASSIVE, i % MAX_UNIT_ACTION_BAR_INDEX);
}
@@ -10485,7 +10390,7 @@ void CharmInfo::InitCharmCreateSpells()
if (spellInfo->IsPassive())
{
- _unit->CastSpell(_unit, spellInfo, true);
+ _unit->CastSpell(_unit, spellInfo->Id, true);
_charmspells[x].SetActionAndType(spellId, ACT_PASSIVE);
}
else
@@ -13012,7 +12917,12 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
}
if (IsInMap(caster))
- caster->CastCustomSpell(itr->second.spellId, SpellValueMod(SPELLVALUE_BASE_POINT0 + i), seatId + 1, target, flags, nullptr, nullptr, origCasterGUID);
+ {
+ CastSpellExtraArgs args(flags);
+ args.OriginalCaster = origCasterGUID;
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0+i), seatId+1);
+ caster->CastSpell(target, itr->second.spellId, args);
+ }
else // This can happen during Player::_LoadAuras
{
int32 bp0[MAX_SPELL_EFFECTS];
@@ -13027,7 +12937,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
else
{
if (IsInMap(caster))
- caster->CastSpell(target, spellEntry, flags, nullptr, nullptr, origCasterGUID);
+ caster->CastSpell(target, spellEntry->Id, CastSpellExtraArgs().SetOriginalCaster(origCasterGUID));
else
Aura::TryRefreshStackOrCreate(spellEntry, ObjectGuid::Create<HighGuid::Cast>(SPELL_CAST_SOURCE_NORMAL, GetMapId(), spellEntry->Id, GetMap()->GenerateLowGuid<HighGuid::Cast>()), MAX_EFFECT_MASK, this, clicker, GetMap()->GetDifficultyID(), nullptr, nullptr, origCasterGUID);
}
@@ -13044,7 +12954,9 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
void Unit::EnterVehicle(Unit* base, int8 seatId)
{
- CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, seatId + 1, base, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
+ CastSpellExtraArgs args(TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
+ args.SpellValueOverrides.AddBP0(seatId + 1);
+ CastSpell(base, VEHICLE_SPELL_RIDE_HARDCODED, args);
}
void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* aurApp)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 0a1f3c72686..92da6ccbb20 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -39,125 +39,6 @@
#define SPELL_DH_DOUBLE_JUMP 196055
#define DISPLAYID_HIDDEN_MOUNT 73200
-enum class SpellModOp : uint8
-{
- HealingAndDamage = 0,
- Duration = 1,
- Hate = 2,
- PointsIndex0 = 3,
- ProcCharges = 4,
- Range = 5,
- Radius = 6,
- CritChance = 7,
- Points = 8,
- ResistPushback = 9,
- ChangeCastTime = 10,
- Cooldown = 11,
- PointsIndex1 = 12,
- TargetResistance = 13,
- PowerCost0 = 14, // Used when SpellPowerEntry::PowerIndex == 0
- CritDamageAndHealing = 15,
- HitChance = 16,
- ChainTargets = 17,
- ProcChance = 18,
- Period = 19,
- ChainAmplitude = 20,
- StartCooldown = 21,
- PeriodicHealingAndDamage = 22,
- PointsIndex2 = 23,
- BonusCoefficient = 24,
- TriggerDamage = 25, // NYI
- ProcFrequency = 26,
- Amplitude = 27,
- DispelResistance = 28,
- CrowdDamage = 29, // NYI
- PowerCostOnMiss = 30,
- Doses = 31,
- PointsIndex3 = 32,
- PointsIndex4 = 33,
- PowerCost1 = 34, // Used when SpellPowerEntry::PowerIndex == 1
- ChainJumpDistance = 35,
- AreaTriggerMaxSummons = 36, // NYI
- MaxAuraStacks = 37,
- ProcCooldown = 38,
- PowerCost2 = 39, // Used when SpellPowerEntry::PowerIndex == 2
-};
-
-#define MAX_SPELLMOD 40
-
-enum SpellValueMod : uint8
-{
- SPELLVALUE_BASE_POINT0,
- SPELLVALUE_BASE_POINT1,
- SPELLVALUE_BASE_POINT2,
- SPELLVALUE_BASE_POINT3,
- SPELLVALUE_BASE_POINT4,
- SPELLVALUE_BASE_POINT5,
- SPELLVALUE_BASE_POINT6,
- SPELLVALUE_BASE_POINT7,
- SPELLVALUE_BASE_POINT8,
- SPELLVALUE_BASE_POINT9,
- SPELLVALUE_BASE_POINT10,
- SPELLVALUE_BASE_POINT11,
- SPELLVALUE_BASE_POINT12,
- SPELLVALUE_BASE_POINT13,
- SPELLVALUE_BASE_POINT14,
- SPELLVALUE_BASE_POINT15,
- SPELLVALUE_BASE_POINT16,
- SPELLVALUE_BASE_POINT17,
- SPELLVALUE_BASE_POINT18,
- SPELLVALUE_BASE_POINT19,
- SPELLVALUE_BASE_POINT20,
- SPELLVALUE_BASE_POINT21,
- SPELLVALUE_BASE_POINT22,
- SPELLVALUE_BASE_POINT23,
- SPELLVALUE_BASE_POINT24,
- SPELLVALUE_BASE_POINT25,
- SPELLVALUE_BASE_POINT26,
- SPELLVALUE_BASE_POINT27,
- SPELLVALUE_BASE_POINT28,
- SPELLVALUE_BASE_POINT29,
- SPELLVALUE_BASE_POINT30,
- SPELLVALUE_BASE_POINT31,
- SPELLVALUE_BASE_POINT_END,
- SPELLVALUE_RADIUS_MOD,
- SPELLVALUE_MAX_TARGETS,
- SPELLVALUE_AURA_STACK
-};
-
-class CustomSpellValues
-{
- typedef std::pair<SpellValueMod, int32> CustomSpellValueMod;
- typedef std::vector<CustomSpellValueMod> StorageType;
-
-public:
- typedef StorageType::const_iterator const_iterator;
-
-public:
- void AddSpellMod(SpellValueMod mod, int32 value)
- {
- storage_.push_back(CustomSpellValueMod(mod, value));
- }
-
- const_iterator begin() const
- {
- return storage_.begin();
- }
-
- const_iterator end() const
- {
- return storage_.end();
- }
-
-private:
- StorageType storage_;
-};
-
-enum SpellFacingFlags
-{
- SPELL_FACING_FLAG_INFRONT = 0x0001
-};
-
#define MAX_SPELL_CHARM 4
#define MAX_SPELL_VEHICLE 6
#define MAX_SPELL_POSSESS 8
@@ -284,36 +165,6 @@ enum WeaponDamageRange
MAXDAMAGE
};
-enum TriggerCastFlags : uint32
-{
- TRIGGERED_NONE = 0x00000000, //! Not triggered
- TRIGGERED_IGNORE_GCD = 0x00000001, //! Will ignore GCD
- TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD = 0x00000002, //! Will ignore Spell and Category cooldowns
- TRIGGERED_IGNORE_POWER_AND_REAGENT_COST = 0x00000004, //! Will ignore power and reagent cost
- TRIGGERED_IGNORE_CAST_ITEM = 0x00000008, //! Will not take away cast item or update related achievement criteria
- TRIGGERED_IGNORE_AURA_SCALING = 0x00000010, //! Will ignore aura scaling
- TRIGGERED_IGNORE_CAST_IN_PROGRESS = 0x00000020, //! Will not check if a current cast is in progress
- TRIGGERED_IGNORE_COMBO_POINTS = 0x00000040, //! Will ignore combo point requirement
- TRIGGERED_CAST_DIRECTLY = 0x00000080, //! In Spell::prepare, will be cast directly without setting containers for executed spell
- TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS = 0x00000100, //! Will ignore interruptible aura's at cast
- TRIGGERED_IGNORE_SET_FACING = 0x00000200, //! Will not adjust facing to target (if any)
- TRIGGERED_IGNORE_SHAPESHIFT = 0x00000400, //! Will ignore shapeshift checks
- TRIGGERED_IGNORE_CASTER_AURASTATE = 0x00000800, //! Will ignore caster aura states including combat requirements and death state
- TRIGGERED_DISALLOW_PROC_EVENTS = 0x00001000, //! Disallows proc events from triggered spell (default)
- TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE = 0x00002000, //! Will ignore mounted/on vehicle restrictions
- // reuse = 0x00004000,
- // reuse = 0x00008000,
- TRIGGERED_IGNORE_CASTER_AURAS = 0x00010000, //! Will ignore caster aura restrictions or requirements
- TRIGGERED_DONT_RESET_PERIODIC_TIMER = 0x00020000, //! Will allow periodic aura timers to keep ticking (instead of resetting)
- TRIGGERED_DONT_REPORT_CAST_ERROR = 0x00040000, //! Will return SPELL_FAILED_DONT_REPORT in CheckCast functions
- TRIGGERED_FULL_MASK = 0x0007FFFF, //! Used when doing CastSpell with triggered == true
-
- // debug flags (used with .cast triggered commands)
- TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT = 0x00080000, //! Will ignore equipped item requirements
- TRIGGERED_IGNORE_TARGET_CHECK = 0x00100000, //! Will ignore most target checks (mostly DBC target checks)
- TRIGGERED_FULL_DEBUG_MASK = 0xFFFFFFFF
-};
-
enum UnitMods
{
UNIT_MOD_STAT_STRENGTH, // UNIT_MOD_STAT_STRENGTH..UNIT_MOD_STAT_INTELLECT must be in existed order, it's accessed by index values of Stats enum.
@@ -1326,21 +1177,10 @@ class TC_GAME_API Unit : public WorldObject
void EnergizeBySpell(Unit* victim, uint32 spellId, int32 damage, Powers powerType);
void EnergizeBySpell(Unit* victim, SpellInfo const* spellInfo, int32 damage, Powers powerType);
- void CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo, CustomSpellValues const* value, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(Unit* victim, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(std::nullptr_t, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty) { CastSpell((Unit*)nullptr, spellId, triggered, castItem, triggeredByAura, originalCaster); }
- void CastSpell(Unit* victim, uint32 spellId, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(std::nullptr_t, uint32 spellId, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty) { CastSpell((Unit*)nullptr, spellId, triggerFlags, castItem, triggeredByAura, originalCaster); }
- void CastSpell(Unit* victim, SpellInfo const* spellInfo, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(Unit* victim, SpellInfo const* spellInfo, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(float x, float y, float z, uint32 spellId, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(Item* target, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastCustomSpell(Unit* victim, uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastCustomSpell(uint32 spellId, SpellValueMod mod, int32 value, Unit* victim, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastCustomSpell(uint32 spellId, SpellValueMod mod, int32 value, Unit* victim = nullptr, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastCustomSpell(uint32 spellId, CustomSpellValues const& value, Unit* victim = nullptr, TriggerCastFlags triggerFlags = TRIGGERED_NONE, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
+ // CastSpell's third arg can be a variety of things - check out CastSpellExtraArgs' constructors!
+ void CastSpell(SpellCastTargets const& targets, uint32 spellId, CastSpellExtraArgs const& args = {});
+ void CastSpell(WorldObject* target, uint32 spellId, CastSpellExtraArgs const& args = {});
+ void CastSpell(Position const& dest, uint32 spellId, CastSpellExtraArgs const& args = {});
Aura* AddAura(uint32 spellId, Unit* target);
Aura* AddAura(SpellInfo const* spellInfo, uint32 effMask, Unit* target);
void SetAuraStack(uint32 spellId, Unit* target, uint32 stack);
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index f12b41498d8..b0191780ae8 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -98,54 +98,6 @@ enum UnitPetFlag : uint8
UNIT_PET_FLAG_CAN_BE_ABANDONED = 0x02
};
-// high byte (3 from 0..3) of UNIT_FIELD_BYTES_2
-enum ShapeshiftForm
-{
- FORM_NONE = 0,
- FORM_CAT_FORM = 1,
- FORM_TREE_OF_LIFE = 2,
- FORM_TRAVEL_FORM = 3,
- FORM_AQUATIC_FORM = 4,
- FORM_BEAR_FORM = 5,
- FORM_AMBIENT = 6,
- FORM_GHOUL = 7,
- FORM_DIRE_BEAR_FORM = 8,
- FORM_CRANE_STANCE = 9,
- FORM_THARONJA_SKELETON = 10,
- FORM_DARKMOON_TEST_OF_STRENGTH = 11,
- FORM_BLB_PLAYER = 12,
- FORM_SHADOW_DANCE = 13,
- FORM_CREATURE_BEAR = 14,
- FORM_CREATURE_CAT = 15,
- FORM_GHOST_WOLF = 16,
- FORM_BATTLE_STANCE = 17,
- FORM_DEFENSIVE_STANCE = 18,
- FORM_BERSERKER_STANCE = 19,
- FORM_SERPENT_STANCE = 20,
- FORM_ZOMBIE = 21,
- FORM_METAMORPHOSIS = 22,
- FORM_OX_STANCE = 23,
- FORM_TIGER_STANCE = 24,
- FORM_UNDEAD = 25,
- FORM_FRENZY = 26,
- FORM_FLIGHT_FORM_EPIC = 27,
- FORM_SHADOWFORM = 28,
- FORM_FLIGHT_FORM = 29,
- FORM_STEALTH = 30,
- FORM_MOONKIN_FORM = 31,
- FORM_SPIRIT_OF_REDEMPTION = 32,
- FORM_GLADIATOR_STANCE = 33,
- FORM_METAMORPHOSIS_2 = 34,
- FORM_MOONKIN_FORM_RESTORATION = 35,
- FORM_TREANT_FORM = 36,
- FORM_SPIRIT_OWL_FORM = 37,
- FORM_SPIRIT_OWL_FORM_2 = 38,
- FORM_WISP_FORM = 39,
- FORM_WISP_FORM_2 = 40,
- FORM_SOULSHAPE = 41,
- FORM_FORGEBORNE_REVERIES = 42
-};
-
enum UnitMoveType
{
MOVE_WALK = 0,
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 66275e774bd..caae1003ccd 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1217,10 +1217,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
{
// not blizz like, we must correctly save and load player instead...
if (pCurrChar->getRace() == RACE_NIGHTELF && !pCurrChar->HasAura(20584))
- pCurrChar->CastSpell(pCurrChar, 20584, true, nullptr);// auras SPELL_AURA_INCREASE_SPEED(+speed in wisp form), SPELL_AURA_INCREASE_SWIM_SPEED(+swim speed in wisp form), SPELL_AURA_TRANSFORM (to wisp form)
+ pCurrChar->CastSpell(pCurrChar, 20584, true);// auras SPELL_AURA_INCREASE_SPEED(+speed in wisp form), SPELL_AURA_INCREASE_SWIM_SPEED(+swim speed in wisp form), SPELL_AURA_TRANSFORM (to wisp form)
if (!pCurrChar->HasAura(8326))
- pCurrChar->CastSpell(pCurrChar, 8326, true, nullptr); // auras SPELL_AURA_GHOST, SPELL_AURA_INCREASE_SPEED(why?), SPELL_AURA_INCREASE_SWIM_SPEED(why?)
+ pCurrChar->CastSpell(pCurrChar, 8326, true); // auras SPELL_AURA_GHOST, SPELL_AURA_INCREASE_SPEED(why?), SPELL_AURA_INCREASE_SWIM_SPEED(why?)
pCurrChar->SetWaterWalking(true);
}
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index ee05f6918c2..9a2863ae12c 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -387,7 +387,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
}
}
- spell->prepare(&(spell->m_targets));
+ spell->prepare(spell->m_targets);
}
else
{
@@ -713,7 +713,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell&
spellPrepare.ServerCastID = spell->m_castId;
SendPacket(spellPrepare.Write());
- spell->prepare(&targets);
+ spell->prepare(targets);
}
else
{
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 11db09e1013..ad2a073a4a4 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -342,7 +342,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& cast)
spell->m_fromClient = true;
spell->m_misc.Raw.Data[0] = cast.Cast.Misc[0];
spell->m_misc.Raw.Data[1] = cast.Cast.Misc[1];
- spell->prepare(&targets);
+ spell->prepare(targets);
}
void WorldSession::HandleCancelCastOpcode(WorldPackets::Spells::CancelCast& packet)
@@ -489,14 +489,10 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
return; // silent return, client should display error by itself and not send this opcode
- auto const& selfResSpells = _player->m_activePlayerData->SelfResSpells;
- if (std::find(selfResSpells.begin(), selfResSpells.end(), selfRes.SpellID) == selfResSpells.end())
+ if (_player->m_activePlayerData->SelfResSpells.FindIndex(selfRes.SpellID) < 0)
return;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(selfRes.SpellID, _player->GetMap()->GetDifficultyID());
- if (spellInfo)
- _player->CastSpell(_player, spellInfo, false, nullptr);
-
+ _player->CastSpell(_player, selfRes.SpellID, _player->GetMap()->GetDifficultyID());
_player->RemoveSelfResSpell(selfRes.SpellID);
}
diff --git a/src/server/game/Handlers/ToyHandler.cpp b/src/server/game/Handlers/ToyHandler.cpp
index 42a0408b6e3..7f310325047 100644
--- a/src/server/game/Handlers/ToyHandler.cpp
+++ b/src/server/game/Handlers/ToyHandler.cpp
@@ -93,7 +93,7 @@ void WorldSession::HandleUseToy(WorldPackets::Toy::UseToy& packet)
spell->m_misc.Raw.Data[0] = packet.Cast.Misc[0];
spell->m_misc.Raw.Data[1] = packet.Cast.Misc[1];
spell->m_castFlagsEx |= CAST_FLAG_EX_USE_TOY_SPELL;
- spell->prepare(&targets);
+ spell->prepare(targets);
}
void WorldSession::HandleToyClearFanfare(WorldPackets::Toy::ToyClearFanfare& toyClearFanfare)
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index c53c68ce681..69791345e3f 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -509,10 +509,10 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
trader->ModifyMoney(my_trade->GetMoney());
if (my_spell)
- my_spell->prepare(&my_targets);
+ my_spell->prepare(my_targets);
if (his_spell)
- his_spell->prepare(&his_targets);
+ his_spell->prepare(his_targets);
// cleanup
clearAcceptTradeMode(my_trade, his_trade);
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index ec87dc3eb3e..7c9944a1929 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -591,4 +591,52 @@ enum AuraObjectType
DYNOBJ_AURA_TYPE
};
+// high byte (3 from 0..3) of UNIT_FIELD_BYTES_2
+enum ShapeshiftForm
+{
+ FORM_NONE = 0,
+ FORM_CAT_FORM = 1,
+ FORM_TREE_OF_LIFE = 2,
+ FORM_TRAVEL_FORM = 3,
+ FORM_AQUATIC_FORM = 4,
+ FORM_BEAR_FORM = 5,
+ FORM_AMBIENT = 6,
+ FORM_GHOUL = 7,
+ FORM_DIRE_BEAR_FORM = 8,
+ FORM_CRANE_STANCE = 9,
+ FORM_THARONJA_SKELETON = 10,
+ FORM_DARKMOON_TEST_OF_STRENGTH = 11,
+ FORM_BLB_PLAYER = 12,
+ FORM_SHADOW_DANCE = 13,
+ FORM_CREATURE_BEAR = 14,
+ FORM_CREATURE_CAT = 15,
+ FORM_GHOST_WOLF = 16,
+ FORM_BATTLE_STANCE = 17,
+ FORM_DEFENSIVE_STANCE = 18,
+ FORM_BERSERKER_STANCE = 19,
+ FORM_SERPENT_STANCE = 20,
+ FORM_ZOMBIE = 21,
+ FORM_METAMORPHOSIS = 22,
+ FORM_OX_STANCE = 23,
+ FORM_TIGER_STANCE = 24,
+ FORM_UNDEAD = 25,
+ FORM_FRENZY = 26,
+ FORM_FLIGHT_FORM_EPIC = 27,
+ FORM_SHADOWFORM = 28,
+ FORM_FLIGHT_FORM = 29,
+ FORM_STEALTH = 30,
+ FORM_MOONKIN_FORM = 31,
+ FORM_SPIRIT_OF_REDEMPTION = 32,
+ FORM_GLADIATOR_STANCE = 33,
+ FORM_METAMORPHOSIS_2 = 34,
+ FORM_MOONKIN_FORM_RESTORATION = 35,
+ FORM_TREANT_FORM = 36,
+ FORM_SPIRIT_OWL_FORM = 37,
+ FORM_SPIRIT_OWL_FORM_2 = 38,
+ FORM_WISP_FORM = 39,
+ FORM_WISP_FORM_2 = 40,
+ FORM_SOULSHAPE = 41,
+ FORM_FORGEBORNE_REVERIES = 42
+};
+
#endif
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 515badef5aa..cf5ed8a765d 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1234,16 +1234,16 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (apply)
{
if (spellId)
- target->CastSpell(target, spellId, true, nullptr, this);
+ target->CastSpell(target, spellId, this);
if (spellId2)
- target->CastSpell(target, spellId2, true, nullptr, this);
+ target->CastSpell(target, spellId2, this);
if (spellId3)
- target->CastSpell(target, spellId3, true, nullptr, this);
+ target->CastSpell(target, spellId3, this);
if (spellId4)
- target->CastSpell(target, spellId4, true, nullptr, this);
+ target->CastSpell(target, spellId4, this);
if (target->GetTypeId() == TYPEID_PLAYER)
{
@@ -1267,7 +1267,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
continue;
if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
- target->CastSpell(target, itr->first, true, nullptr, this);
+ target->CastSpell(target, itr->first, this);
}
}
}
@@ -1703,12 +1703,12 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
case FORM_BEAR_FORM:
case FORM_CAT_FORM:
if (AuraEffect* dummy = target->GetAuraEffect(37315, 0))
- target->CastSpell(target, 37316, true, nullptr, dummy);
+ target->CastSpell(target, 37316, dummy);
break;
// Nordrassil Regalia - bonus
case FORM_MOONKIN_FORM:
if (AuraEffect* dummy = target->GetAuraEffect(37324, 0))
- target->CastSpell(target, 37325, true, nullptr, dummy);
+ target->CastSpell(target, 37325, dummy);
break;
default:
break;
@@ -4382,7 +4382,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
case 13139: // net-o-matic
// root to self part of (root_target->charge->root_self sequence
if (caster)
- caster->CastSpell(caster, 13138, true, nullptr, this);
+ caster->CastSpell(caster, 13138, this);
break;
case 34026: // kill command
{
@@ -4390,7 +4390,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (!pet)
break;
- target->CastSpell(target, 34027, true, nullptr, this);
+ target->CastSpell(target, 34027, this);
// set 3 stacks and 3 charges (to make all auras not disappear at once)
Aura* owner_aura = target->GetAura(34027, GetCasterGUID());
@@ -4411,15 +4411,15 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (caster)
{
if (caster->getGender() == GENDER_FEMALE)
- caster->CastSpell(target, 37095, true, nullptr, this); // Blood Elf Disguise
+ caster->CastSpell(target, 37095, this); // Blood Elf Disguise
else
- caster->CastSpell(target, 37093, true, nullptr, this);
+ caster->CastSpell(target, 37093, this);
}
break;
}
case 39850: // Rocket Blast
if (roll_chance_i(20)) // backfire stun
- target->CastSpell(target, 51581, true, nullptr, this);
+ target->CastSpell(target, 51581, this);
break;
case 43873: // Headless Horseman Laugh
target->PlayDistanceSound(11965);
@@ -4428,9 +4428,9 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (caster)
{
if (caster->getGender() == GENDER_FEMALE)
- caster->CastSpell(target, 46356, true, nullptr, this);
+ caster->CastSpell(target, 46356, this);
else
- caster->CastSpell(target, 46355, true, nullptr, this);
+ caster->CastSpell(target, 46355, this);
}
break;
case 46361: // Reinforced Net
@@ -4468,7 +4468,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
}
if (finalSpelId)
- caster->CastSpell(target, finalSpelId, true, nullptr, this);
+ caster->CastSpell(target, finalSpelId, this);
}
switch (m_spellInfo->SpellFamilyName)
@@ -4488,7 +4488,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
break;
case 36730: // Flame Strike
{
- target->CastSpell(target, 36731, true, nullptr, this);
+ target->CastSpell(target, 36731, this);
break;
}
case 44191: // Flame Strike
@@ -4497,7 +4497,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
{
uint32 spellId = target->GetMap()->IsHeroic() ? 46163 : 44190;
- target->CastSpell(target, spellId, true, nullptr, this);
+ target->CastSpell(target, spellId, this);
}
break;
}
@@ -4511,14 +4511,14 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
break;
}
case 42783: // Wrath of the Astromancer
- target->CastSpell(target, GetAmount(), true, nullptr, this);
+ target->CastSpell(target, GetAmount(), this);
break;
case 46308: // Burning Winds cast only at creatures at spawn
- target->CastSpell(target, 47287, true, nullptr, this);
+ target->CastSpell(target, 47287, this);
break;
case 52172: // Coyote Spirit Despawn Aura
case 60244: // Blood Parrot Despawn Aura
- target->CastSpell(nullptr, GetAmount(), true, nullptr, this);
+ target->CastSpell(nullptr, GetAmount(), this);
break;
case 91604: // Restricted Flight Area
if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
@@ -4558,9 +4558,13 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (apply && caster)
{
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(spellId, GetBase()->GetCastDifficulty());
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.OriginalCaster = GetCasterGUID();
+ args.CastDifficulty = spell->Difficulty;
for (uint32 i = 0; i < spell->StackAmount; ++i)
- caster->CastSpell(target, spell, true, nullptr, nullptr, GetCasterGUID());
+ caster->CastSpell(target, spell->Id, args);
break;
}
target->RemoveAurasDueToSpell(spellId);
@@ -4573,8 +4577,13 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (apply && caster)
{
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(spellId, GetBase()->GetCastDifficulty());
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.OriginalCaster = GetCasterGUID();
+ args.CastDifficulty = spell->Difficulty;
+
for (uint32 i = 0; i < spell->StackAmount; ++i)
- caster->CastSpell(target, spell, true, nullptr, nullptr, GetCasterGUID());
+ caster->CastSpell(target, spell->Id, args);
break;
}
target->RemoveAurasDueToSpell(spellId);
@@ -4860,11 +4869,13 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo
{
if (apply)
{
- // If amount avalible cast with basepoints (Crypt Fever for example)
- if (GetAmount())
- caster->CastCustomSpell(target, triggeredSpellId, &m_amount, nullptr, nullptr, true, nullptr, this);
- else
- caster->CastSpell(target, triggeredSpellId, true, nullptr, this);
+
+ CastSpellExtraArgs args(this);
+
+ if (GetAmount()) // If amount avalible cast with basepoints (Crypt Fever for example)
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetAmount());
+
+ caster->CastSpell(target, triggeredSpellId, args);
}
else
{
@@ -5081,12 +5092,12 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
{
if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster(m_spellInfo) ? caster : target)
{
- triggerCaster->CastSpell(target, triggeredSpellInfo, true, nullptr, this);
+ triggerCaster->CastSpell(target, triggerSpellId, this);
TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id);
}
}
else
- TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellAuraTick: Spell %u has non-existent spell %u in EffectTriggered[%d] and is therefor not triggered.", GetId(), triggerSpellId, GetEffIndex());
+ TC_LOG_WARN("spells", "AuraEffect::HandlePeriodicTriggerSpellAuraTick: Spell %u has non-existent spell %u in EffectTriggered[%d] and is therefore not triggered.", GetId(), triggerSpellId, GetEffIndex());
}
void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* caster) const
@@ -5096,13 +5107,15 @@ void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit*
{
if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster(m_spellInfo) ? caster : target)
{
- int32 basepoints = GetAmount();
- triggerCaster->CastCustomSpell(target, triggerSpellId, &basepoints, &basepoints, &basepoints, true, nullptr, this);
+ CastSpellExtraArgs args(this);
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), GetAmount());
+ triggerCaster->CastSpell(target, triggerSpellId, args);
TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id);
}
}
else
- TC_LOG_DEBUG("spells","AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick: Spell %u has non-existent spell %u in EffectTriggered[%d] and is therefor not triggered.", GetId(), triggerSpellId, GetEffIndex());
+ TC_LOG_WARN("spells","AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick: Spell %u has non-existent spell %u in EffectTriggered[%d] and is therefore not triggered.", GetId(), triggerSpellId, GetEffIndex());
}
void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
@@ -5152,7 +5165,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_WARLOCK && (GetSpellInfo()->SpellFamilyFlags[0] & 0x00004000))
{
if (caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->isHonorOrXPTarget(target))
- caster->CastSpell(caster, 95810, true, nullptr, this);
+ caster->CastSpell(caster, 95810, this);
}
if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_GENERIC)
{
@@ -5515,7 +5528,10 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con
if (manaFeedVal > 0)
{
int32 feedAmount = CalculatePct(gainedAmount, manaFeedVal);
- caster->CastCustomSpell(caster, 32554, &feedAmount, nullptr, nullptr, true, nullptr, this);
+
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, feedAmount);
+ caster->CastSpell(caster, 32554, args);
}
}
@@ -5654,7 +5670,7 @@ void AuraEffect::HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEve
if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId, GetBase()->GetCastDifficulty()))
{
TC_LOG_DEBUG("spells", "AuraEffect::HandleProcTriggerSpellAuraProc: Triggering spell %u from aura %u proc", triggeredSpellInfo->Id, GetId());
- triggerCaster->CastSpell(triggerTarget, triggeredSpellInfo, true, nullptr, this);
+ triggerCaster->CastSpell(triggerTarget, triggeredSpellInfo->Id, this);
}
else if (triggerSpellId && GetAuraType() != SPELL_AURA_DUMMY)
TC_LOG_ERROR("spells","AuraEffect::HandleProcTriggerSpellAuraProc: Could not trigger spell %u from aura %u proc, because the spell does not have an entry in Spell.dbc.", triggerSpellId, GetId());
@@ -5668,9 +5684,10 @@ void AuraEffect::HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp
uint32 triggerSpellId = GetSpellEffectInfo()->TriggerSpell;
if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId, GetBase()->GetCastDifficulty()))
{
- int32 basepoints0 = GetAmount();
- TC_LOG_DEBUG("spells", "AuraEffect::HandleProcTriggerSpellWithValueAuraProc: Triggering spell %u with value %d from aura %u proc", triggeredSpellInfo->Id, basepoints0, GetId());
- triggerCaster->CastCustomSpell(triggerTarget, triggerSpellId, &basepoints0, nullptr, nullptr, true, nullptr, this);
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(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());
}
else
TC_LOG_ERROR("spells","AuraEffect::HandleProcTriggerSpellWithValueAuraProc: Could not trigger spell %u from aura %u proc, because the spell does not have an entry in Spell.dbc.", triggerSpellId, GetId());
@@ -5853,7 +5870,13 @@ void AuraEffect::HandleLinkedSummon(AuraApplication const* aurApp, uint8 mode, b
// on apply cast summon spell
if (apply)
- target->CastSpell(target, triggerSpellInfo, true, nullptr, this);
+ {
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = this;
+ args.CastDifficulty = triggerSpellInfo->Difficulty;
+ target->CastSpell(target, triggerSpellInfo->Id, args);
+ }
// on unapply we need to search for and remove the summoned creature
else
{
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index dfe0ef6276a..8f9d716a304 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1249,7 +1249,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (*itr < 0)
target->RemoveAurasDueToSpell(-(*itr));
else if (removeMode != AURA_REMOVE_BY_DEATH)
- target->CastSpell(target, *itr, true, nullptr, nullptr, GetCasterGUID());
+ target->CastSpell(target, *itr, GetCasterGUID());
}
}
if (std::vector<int32> const* spellTriggered = sSpellMgr->GetSpellLinked(GetId() + SPELL_LINK_AURA))
@@ -1311,8 +1311,9 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
// Druid T8 Restoration 4P Bonus
if (caster->HasAura(64760))
{
- int32 heal = GetEffect(EFFECT_0)->GetAmount();
- caster->CastCustomSpell(target, 64801, &heal, nullptr, nullptr, true, nullptr, GetEffect(EFFECT_0));
+ CastSpellExtraArgs args(GetEffect(EFFECT_0));
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetEffect(EFFECT_0)->GetAmount());
+ caster->CastSpell(target, 64801, args);
}
}
break;
@@ -1329,7 +1330,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
case 66: // Invisibility
if (removeMode != AURA_REMOVE_BY_EXPIRE)
break;
- target->CastSpell(target, 32612, true, nullptr, GetEffect(1));
+ target->CastSpell(target, 32612, GetEffect(1));
target->CombatStop();
break;
default:
@@ -1363,8 +1364,9 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (AuraEffect const* aurEff = aura->GetEffect(0))
{
float multiplier = float(aurEff->GetAmount());
- int32 basepoints0 = int32(CalculatePct(caster->GetMaxPower(POWER_MANA), multiplier));
- caster->CastCustomSpell(caster, 47755, &basepoints0, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), multiplier));
+ caster->CastSpell(caster, 47755, args);
}
}
}
@@ -1391,7 +1393,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (owner->HasAura(34692))
{
if (apply)
- owner->CastSpell(owner, 34471, true, nullptr, GetEffect(0));
+ owner->CastSpell(owner, 34471, GetEffect(0));
else
owner->RemoveAurasDueToSpell(34471);
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 0e897c3b109..25e0e56bdf5 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2767,7 +2767,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint32 effMask)
{
if (CanExecuteTriggersOnHit(effMask, i->triggeredByAura) && roll_chance_i(i->chance))
{
- m_caster->CastSpell(unit, i->triggeredSpell, TRIGGERED_FULL_MASK);
+ m_caster->CastSpell(unit, i->triggeredSpell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(i->triggeredSpell->Difficulty));
TC_LOG_DEBUG("spells", "Spell %d triggered spell %d by SPELL_AURA_ADD_TARGET_TRIGGER aura", m_spellInfo->Id, i->triggeredSpell->Id);
// SPELL_AURA_ADD_TARGET_TRIGGER auras shouldn't trigger auras without duration
@@ -2798,7 +2798,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint32 effMask)
if (*i < 0)
unit->RemoveAurasDueToSpell(-(*i));
else
- unit->CastSpell(unit, *i, true, nullptr, nullptr, m_caster->GetGUID());
+ unit->CastSpell(unit, *i, m_caster->GetGUID());
}
}
}
@@ -2916,7 +2916,7 @@ bool Spell::UpdateChanneledTargetList()
return channelTargetEffectMask == 0;
}
-void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura)
+void Spell::prepare(SpellCastTargets const& targets, AuraEffect const* triggeredByAura)
{
if (m_CastItem)
{
@@ -2935,7 +2935,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
}
}
- InitExplicitTargets(*targets);
+ InitExplicitTargets(targets);
m_spellState = SPELL_STATE_PREPARING;
@@ -5597,7 +5597,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
{
if (strict) //starting cast, trigger pet stun (cast by pet so it doesn't attack player)
if (Pet* pet = m_caster->ToPlayer()->GetPet())
- pet->CastSpell(pet, 32752, true, nullptr, nullptr, pet->GetGUID());
+ pet->CastSpell(pet, 32752, pet->GetGUID());
}
else if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET))
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 811a3c55159..8253062a290 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -522,7 +522,7 @@ class TC_GAME_API Spell
GameObject* SearchSpellFocus();
- void prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura = nullptr);
+ void prepare(SpellCastTargets const& targets, AuraEffect const* triggeredByAura = nullptr);
void cancel();
void update(uint32 difftime);
void cast(bool skipCheck = false);
diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h
index c330b2b1aa8..0b81f9ced5c 100644
--- a/src/server/game/Spells/SpellDefines.h
+++ b/src/server/game/Spells/SpellDefines.h
@@ -20,6 +20,12 @@
#include "Define.h"
#include "EnumFlag.h"
+#include "ObjectGuid.h"
+#include <vector>
+
+class Item;
+class AuraEffect;
+enum Difficulty : uint8;
namespace UF
{
@@ -122,6 +128,168 @@ enum class SpellAuraInterruptFlags2 : uint32
DEFINE_ENUM_FLAG(SpellAuraInterruptFlags2);
+enum class SpellModOp : uint8
+{
+ HealingAndDamage = 0,
+ Duration = 1,
+ Hate = 2,
+ PointsIndex0 = 3,
+ ProcCharges = 4,
+ Range = 5,
+ Radius = 6,
+ CritChance = 7,
+ Points = 8,
+ ResistPushback = 9,
+ ChangeCastTime = 10,
+ Cooldown = 11,
+ PointsIndex1 = 12,
+ TargetResistance = 13,
+ PowerCost0 = 14, // Used when SpellPowerEntry::PowerIndex == 0
+ CritDamageAndHealing = 15,
+ HitChance = 16,
+ ChainTargets = 17,
+ ProcChance = 18,
+ Period = 19,
+ ChainAmplitude = 20,
+ StartCooldown = 21,
+ PeriodicHealingAndDamage = 22,
+ PointsIndex2 = 23,
+ BonusCoefficient = 24,
+ TriggerDamage = 25, // NYI
+ ProcFrequency = 26,
+ Amplitude = 27,
+ DispelResistance = 28,
+ CrowdDamage = 29, // NYI
+ PowerCostOnMiss = 30,
+ Doses = 31,
+ PointsIndex3 = 32,
+ PointsIndex4 = 33,
+ PowerCost1 = 34, // Used when SpellPowerEntry::PowerIndex == 1
+ ChainJumpDistance = 35,
+ AreaTriggerMaxSummons = 36, // NYI
+ MaxAuraStacks = 37,
+ ProcCooldown = 38,
+ PowerCost2 = 39, // Used when SpellPowerEntry::PowerIndex == 2
+};
+
+#define MAX_SPELLMOD 40
+
+enum SpellValueMod : uint8
+{
+ SPELLVALUE_BASE_POINT0,
+ SPELLVALUE_BASE_POINT1,
+ SPELLVALUE_BASE_POINT2,
+ SPELLVALUE_BASE_POINT3,
+ SPELLVALUE_BASE_POINT4,
+ SPELLVALUE_BASE_POINT5,
+ SPELLVALUE_BASE_POINT6,
+ SPELLVALUE_BASE_POINT7,
+ SPELLVALUE_BASE_POINT8,
+ SPELLVALUE_BASE_POINT9,
+ SPELLVALUE_BASE_POINT10,
+ SPELLVALUE_BASE_POINT11,
+ SPELLVALUE_BASE_POINT12,
+ SPELLVALUE_BASE_POINT13,
+ SPELLVALUE_BASE_POINT14,
+ SPELLVALUE_BASE_POINT15,
+ SPELLVALUE_BASE_POINT16,
+ SPELLVALUE_BASE_POINT17,
+ SPELLVALUE_BASE_POINT18,
+ SPELLVALUE_BASE_POINT19,
+ SPELLVALUE_BASE_POINT20,
+ SPELLVALUE_BASE_POINT21,
+ SPELLVALUE_BASE_POINT22,
+ SPELLVALUE_BASE_POINT23,
+ SPELLVALUE_BASE_POINT24,
+ SPELLVALUE_BASE_POINT25,
+ SPELLVALUE_BASE_POINT26,
+ SPELLVALUE_BASE_POINT27,
+ SPELLVALUE_BASE_POINT28,
+ SPELLVALUE_BASE_POINT29,
+ SPELLVALUE_BASE_POINT30,
+ SPELLVALUE_BASE_POINT31,
+ SPELLVALUE_BASE_POINT_END,
+ SPELLVALUE_RADIUS_MOD,
+ SPELLVALUE_MAX_TARGETS,
+ SPELLVALUE_AURA_STACK
+};
+
+enum SpellFacingFlags
+{
+ SPELL_FACING_FLAG_INFRONT = 0x0001
+};
+
+enum TriggerCastFlags : uint32
+{
+ TRIGGERED_NONE = 0x00000000, //! Not triggered
+ TRIGGERED_IGNORE_GCD = 0x00000001, //! Will ignore GCD
+ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD = 0x00000002, //! Will ignore Spell and Category cooldowns
+ TRIGGERED_IGNORE_POWER_AND_REAGENT_COST = 0x00000004, //! Will ignore power and reagent cost
+ TRIGGERED_IGNORE_CAST_ITEM = 0x00000008, //! Will not take away cast item or update related achievement criteria
+ TRIGGERED_IGNORE_AURA_SCALING = 0x00000010, //! Will ignore aura scaling
+ TRIGGERED_IGNORE_CAST_IN_PROGRESS = 0x00000020, //! Will not check if a current cast is in progress
+ TRIGGERED_IGNORE_COMBO_POINTS = 0x00000040, //! Will ignore combo point requirement
+ TRIGGERED_CAST_DIRECTLY = 0x00000080, //! In Spell::prepare, will be cast directly without setting containers for executed spell
+ TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS = 0x00000100, //! Will ignore interruptible aura's at cast
+ TRIGGERED_IGNORE_SET_FACING = 0x00000200, //! Will not adjust facing to target (if any)
+ TRIGGERED_IGNORE_SHAPESHIFT = 0x00000400, //! Will ignore shapeshift checks
+ TRIGGERED_IGNORE_CASTER_AURASTATE = 0x00000800, //! Will ignore caster aura states including combat requirements and death state
+ TRIGGERED_DISALLOW_PROC_EVENTS = 0x00001000, //! Disallows proc events from triggered spell (default)
+ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE = 0x00002000, //! Will ignore mounted/on vehicle restrictions
+ // reuse = 0x00004000,
+ // reuse = 0x00008000,
+ TRIGGERED_IGNORE_CASTER_AURAS = 0x00010000, //! Will ignore caster aura restrictions or requirements
+ TRIGGERED_DONT_RESET_PERIODIC_TIMER = 0x00020000, //! Will allow periodic aura timers to keep ticking (instead of resetting)
+ TRIGGERED_DONT_REPORT_CAST_ERROR = 0x00040000, //! Will return SPELL_FAILED_DONT_REPORT in CheckCast functions
+ TRIGGERED_FULL_MASK = 0x0007FFFF, //! Used when doing CastSpell with triggered == true
+
+ // debug flags (used with .cast triggered commands)
+ TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT = 0x00080000, //! Will ignore equipped item requirements
+ TRIGGERED_IGNORE_TARGET_CHECK = 0x00100000, //! Will ignore most target checks (mostly DBC target checks)
+ TRIGGERED_FULL_DEBUG_MASK = 0xFFFFFFFF
+};
+
+struct TC_GAME_API CastSpellExtraArgs
+{
+ CastSpellExtraArgs() = default;
+ CastSpellExtraArgs(bool triggered) : TriggerFlags(triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE) {}
+ CastSpellExtraArgs(TriggerCastFlags trigger) : TriggerFlags(trigger) {}
+ CastSpellExtraArgs(Item* item) : TriggerFlags(TRIGGERED_FULL_MASK), CastItem(item) {}
+ CastSpellExtraArgs(AuraEffect const* eff) : TriggerFlags(TRIGGERED_FULL_MASK), TriggeringAura(eff) {}
+ CastSpellExtraArgs(ObjectGuid const& origCaster) : TriggerFlags(TRIGGERED_FULL_MASK), OriginalCaster(origCaster) {}
+ CastSpellExtraArgs(AuraEffect const* eff, ObjectGuid const& origCaster) : TriggerFlags(TRIGGERED_FULL_MASK), TriggeringAura(eff), OriginalCaster(origCaster) {}
+ CastSpellExtraArgs(Difficulty castDifficulty) : CastDifficulty(castDifficulty) {}
+ CastSpellExtraArgs(SpellValueMod mod, int32 val) { SpellValueOverrides.AddMod(mod, val); }
+
+ CastSpellExtraArgs& SetTriggerFlags(TriggerCastFlags flag) { TriggerFlags = flag; return *this; }
+ CastSpellExtraArgs& SetCastItem(Item* item) { CastItem = item; return *this; }
+ CastSpellExtraArgs& SetTriggeringAura(AuraEffect const* triggeringAura) { TriggeringAura = triggeringAura; return *this; }
+ 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; }
+
+ TriggerCastFlags TriggerFlags = TRIGGERED_NONE;
+ Item* CastItem = nullptr;
+ AuraEffect const* TriggeringAura = nullptr;
+ ObjectGuid OriginalCaster = ObjectGuid::Empty;
+ 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
+
+ private:
+ auto begin() const { return data.cbegin(); }
+ auto end() const { return data.cend(); }
+
+ std::vector<std::pair<SpellValueMod, int32>> data;
+
+ friend class Unit;
+ } SpellValueOverrides;
+};
+
struct SpellCastVisual
{
uint32 SpellXSpellVisualID = 0;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index d39479ccd5a..d7cfda76147 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -714,17 +714,14 @@ void Spell::EffectTriggerSpell(SpellEffIndex /*effIndex*/)
targets.SetUnitTarget(m_caster);
}
- CustomSpellValues values;
+ CastSpellExtraArgs args(m_originalCasterGUID);
// set basepoints for trigger with value effect
if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE)
- {
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
- }
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
// original caster guid only for GO cast
- m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, nullptr, nullptr, m_originalCasterGUID);
+ m_caster->CastSpell(targets, spellInfo->Id, args);
}
void Spell::EffectTriggerMissileSpell(SpellEffIndex /*effIndex*/)
@@ -761,18 +758,14 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex /*effIndex*/)
targets.SetUnitTarget(m_caster);
}
- CustomSpellValues values;
+ CastSpellExtraArgs args(m_originalCasterGUID);
// set basepoints for trigger with value effect
if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE)
- {
- // maybe need to set value only when basepoints == 0?
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
- }
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
// original caster guid only for GO cast
- m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, nullptr, nullptr, m_originalCasterGUID);
+ m_caster->CastSpell(targets, spellInfo->Id, args);
}
void Spell::EffectForceCast(SpellEffIndex /*effIndex*/)
@@ -804,32 +797,28 @@ void Spell::EffectForceCast(SpellEffIndex /*effIndex*/)
break;
case 52463: // Hide In Mine Car
case 52349: // Overtake
- unitTarget->CastCustomSpell(unitTarget, spellInfo->Id, &damage, nullptr, nullptr, true, nullptr, nullptr, m_originalCasterGUID);
+ {
+ CastSpellExtraArgs args(m_originalCasterGUID);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage);
+ unitTarget->CastSpell(unitTarget, spellInfo->Id, args);
return;
+ }
}
}
switch (spellInfo->Id)
{
case 72298: // Malleable Goo Summon
- unitTarget->CastSpell(unitTarget, spellInfo->Id, true, nullptr, nullptr, m_originalCasterGUID);
+ unitTarget->CastSpell(unitTarget, spellInfo->Id, m_originalCasterGUID);
return;
}
- CustomSpellValues values;
- // set basepoints for trigger with value effect
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
if (effectInfo->Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE)
- {
- // maybe need to set value only when basepoints == 0?
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
- values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
- }
-
- SpellCastTargets targets;
- targets.SetUnitTarget(m_caster);
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
- unitTarget->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK);
+ unitTarget->CastSpell(m_caster, spellInfo->Id, args);
}
void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex /*effIndex*/)
@@ -848,7 +837,7 @@ void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex /*effIndex*/)
finish();
- m_caster->CastSpell(nullptr, spellInfo, false);
+ m_caster->CastSpell(nullptr, spellInfo->Id, false);
}
void Spell::EffectJump(SpellEffIndex /*effIndex*/)
@@ -2048,11 +2037,13 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
spellId = spellInfo->Id;
}
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+
// if we have small value, it indicates seat position
if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS)
- m_originalCaster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, basePoints, summon, true);
- else
- m_originalCaster->CastSpell(summon, spellId, true);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, basePoints);
+
+ m_originalCaster->CastSpell(summon, spellId, args);
uint32 faction = properties->Faction;
if (!faction)
@@ -2809,7 +2800,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
// Skyshatter Harness item set bonus
// Stormstrike
if (AuraEffect* aurEff = m_caster->IsScriptOverriden(m_spellInfo, 5634))
- m_caster->CastSpell(m_caster, 38430, true, nullptr, aurEff);
+ m_caster->CastSpell(m_caster, 38430, aurEff);
break;
}
case SPELLFAMILY_DRUID:
@@ -3076,7 +3067,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
uint32 spell_id = roll_chance_i(20) ? 8854 : 8855;
- m_caster->CastSpell(m_caster, spell_id, true, nullptr);
+ m_caster->CastSpell(m_caster, spell_id, true);
return;
}
// Brittle Armor - need remove one 24575 Brittle Armor aura
@@ -3281,7 +3272,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
for (uint8 i = 0; i < 15; ++i)
{
m_caster->GetRandomPoint(*destTarget, radius, x, y, z);
- m_caster->CastSpell(x, y, z, 54522, true);
+ m_caster->CastSpell({x, y, z}, 54522, true);
}
break;
}
@@ -3386,7 +3377,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
// proc a spellcast
if (Aura* chargesAura = m_caster->GetAura(59907))
{
- m_caster->CastSpell(unitTarget, spell_heal, true, nullptr, nullptr, m_caster->ToTempSummon()->GetSummonerGUID());
+ m_caster->CastSpell(unitTarget, spell_heal, m_caster->ToTempSummon()->GetSummonerGUID());
if (chargesAura->ModCharges(-1))
m_caster->ToTempSummon()->UnSummon();
}
@@ -3405,7 +3396,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
case 58590: // Rank 9
case 58591: // Rank 10
{
- int32 basepoints0 = damage;
// Cast Absorb on totems
for (uint8 slot = SUMMON_SLOT_TOTEM; slot < MAX_TOTEM_SLOT; ++slot)
{
@@ -3415,7 +3405,9 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
Creature* totem = unitTarget->GetMap()->GetCreature(unitTarget->m_SummonSlot[slot]);
if (totem && totem->IsTotem())
{
- m_caster->CastCustomSpell(totem, 55277, &basepoints0, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage);
+ m_caster->CastSpell(totem, 55277, args);
}
}
break;
@@ -3808,7 +3800,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->CastCustomSpell(pet, effectInfo->TriggerSpell, &benefit, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, benefit);
+ m_caster->CastSpell(pet, effectInfo->TriggerSpell, args);
}
void Spell::EffectDismissPet(SpellEffIndex effIndex)
@@ -4172,7 +4166,7 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/)
m_caster->Attack(unitTarget, true);
if (effectInfo->TriggerSpell)
- m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, true, nullptr, nullptr, m_originalCasterGUID);
+ m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, m_originalCasterGUID);
}
}
@@ -4197,7 +4191,7 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/)
else if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT)
{
if (effectInfo->TriggerSpell)
- m_caster->CastSpell(destTarget->GetPositionX(), destTarget->GetPositionY(), destTarget->GetPositionZ(), effectInfo->TriggerSpell, true, nullptr, nullptr, m_originalCasterGUID);
+ m_caster->CastSpell(*destTarget, effectInfo->TriggerSpell, m_originalCasterGUID);
}
}
@@ -4485,7 +4479,11 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/)
ApplyPct(mana, damage);
if (mana)
- m_caster->CastCustomSpell(m_caster, 39104, &mana, nullptr, nullptr, true);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, mana);
+ m_caster->CastSpell(m_caster, 39104, args);
+ }
}
void Spell::EffectDurabilityDamage(SpellEffIndex effIndex)
@@ -5276,8 +5274,10 @@ void Spell::EffectCastButtons(SpellEffIndex /*effIndex*/)
if (!spellInfo->HasAttribute(SPELL_ATTR9_SUMMON_PLAYER_TOTEM))
continue;
- TriggerCastFlags triggerFlags = TriggerCastFlags(TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR);
- m_caster->CastSpell(m_caster, spellInfo, triggerFlags);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TriggerCastFlags(TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR);
+ args.CastDifficulty = GetCastDifficulty();
+ m_caster->CastSpell(m_caster, spellInfo->Id, args);
}
}
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 206e5a35cac..76b7aa34161 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3455,14 +3455,16 @@ void SpellMgr::LoadSpellInfoCorrections()
52438, // Summon Skittering Swarmer (Force Cast)
52449, // Summon Skittering Infector (Force Cast)
53609, // Summon Anub'ar Assassin (Force Cast)
- 53457 // Summon Impale Trigger (AoE)
+ 53457, // Summon Impale Trigger (AoE)
+ 45907 // Torch Target Picker
}, [](SpellInfo* spellInfo)
{
spellInfo->MaxAffectedTargets = 1;
});
- // Skartax Purple Beam
- ApplySpellFix({ 36384 }, [](SpellInfo* spellInfo)
+ ApplySpellFix({
+ 36384 // Skartax Purple Beam
+ }, [](SpellInfo* spellInfo)
{
spellInfo->MaxAffectedTargets = 2;
});
diff --git a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp
index 4e411bab59f..43047b45a87 100644
--- a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp
+++ b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp
@@ -526,7 +526,7 @@ class spell_garothi_apocalypse_drive : public AuraScript
void HandlePeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_APOCALYPSE_DRIVE_PERIODIC_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_APOCALYPSE_DRIVE_PERIODIC_DAMAGE, aurEff);
}
void Register() override
@@ -630,7 +630,7 @@ class spell_garothi_searing_barrage_dummy : public SpellScript
void HandleHit(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastCustomSpell(SPELL_SEARING_BARRAGE_SELECTOR, SPELLVALUE_BASE_POINT0, GetSpellInfo()->Id, GetHitUnit(), true);
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SEARING_BARRAGE_SELECTOR, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, GetSpellInfo()->Id));
}
void Register() override
@@ -870,7 +870,7 @@ class spell_garothi_cannon_chooser : public SpellScript
float x = AnnihilationCenterReferencePos.GetPositionX() + cos(frand(0.0f, float(M_PI * 2))) * frand(15.0f, 30.0f);
float y = AnnihilationCenterReferencePos.GetPositionY() + sin(frand(0.0f, float(M_PI * 2))) * frand(15.0f, 30.0f);
float z = caster->GetMap()->GetHeight(caster->GetPhaseShift(), x, y, AnnihilationCenterReferencePos.GetPositionZ());
- annihilator->CastSpell(x, y, z, SPELL_ANNIHILATION_SUMMON, true);
+ annihilator->CastSpell({ x, y, z }, SPELL_ANNIHILATION_SUMMON, true);
}
annihilator->CastSpell(annihilator, SPELL_ANNIHILATION_DUMMY);
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index 4bdf4ffdb0f..e0f4708e945 100644
--- a/src/server/scripts/Commands/cs_cast.cpp
+++ b/src/server/scripts/Commands/cs_cast.cpp
@@ -171,8 +171,7 @@ public:
TriggerCastFlags triggered = (triggeredStr != nullptr) ? TRIGGERED_FULL_DEBUG_MASK : TRIGGERED_NONE;
float x, y, z;
handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, dist);
-
- handler->GetSession()->GetPlayer()->CastSpell(x, y, z, spellId, triggered);
+ handler->GetSession()->GetPlayer()->CastSpell({ x, y, z }, spellId, triggered);
return true;
}
@@ -274,7 +273,7 @@ public:
}
TriggerCastFlags triggered = (triggeredStr != nullptr) ? TRIGGERED_FULL_DEBUG_MASK : TRIGGERED_NONE;
- caster->CastSpell(x, y, z, spellId, triggered);
+ caster->CastSpell({ x, y, z }, spellId, triggered);
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
index c3c61a3490c..eecfbb08573 100644
--- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
+++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
@@ -364,7 +364,7 @@ class spell_occuthar_occuthars_destruction : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
if (IsExpired())
- caster->CastSpell(nullptr, SPELL_OCCUTHARS_DESTUCTION, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, SPELL_OCCUTHARS_DESTUCTION, aurEff);
caster->ToCreature()->DespawnOrUnsummon(500);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
index fffc3981f5a..d01fb7f55d5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
@@ -259,9 +259,14 @@ struct boss_coren_direbrew : public BossAI
SummonSister(NPC_URSULA_DIREBREW);
break;
case EVENT_SUMMON_MOLE_MACHINE:
- me->CastCustomSpell(SPELL_MOLE_MACHINE_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
+ {
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, 1);
+ me->CastSpell(nullptr, SPELL_MOLE_MACHINE_TARGET_PICKER, args);
events.Repeat(Seconds(15));
break;
+ }
case EVENT_DIREBREW_DISARM:
DoCastSelf(SPELL_DIREBREW_DISARM_PRE_CAST, true);
events.Repeat(Seconds(20));
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
index 52fe779f4c1..108fdeb605b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
@@ -135,8 +135,12 @@ class spell_baron_geddon_inferno : public SpellScriptLoader
void OnPeriodic(AuraEffect const* aurEff)
{
PreventDefaultAction();
- int32 damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 };
- GetTarget()->CastCustomSpell(SPELL_INFERNO_DMG, SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1], nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ int32 const damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 };
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = aurEff;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1]);
+ GetTarget()->CastSpell(nullptr, SPELL_INFERNO_DMG, args);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index c1feefc773c..5419d8c4c16 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -339,7 +339,10 @@ public:
enfeeble_targets[i] = target->GetGUID();
enfeeble_health[i] = target->GetHealth();
- target->CastSpell(target, SPELL_ENFEEBLE, true, nullptr, nullptr, me->GetGUID());
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.OriginalCaster = me->GetGUID();
+ target->CastSpell(target, SPELL_ENFEEBLE, args);
target->SetHealth(1);
}
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
index a9eaa863f46..ce4bfdce6dd 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -479,7 +479,7 @@ public:
Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]);
if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3))
{
- unit->CastSpell(unit, 20476, true, nullptr, nullptr, me->GetGUID());
+ unit->CastSpell(unit, 20476, me->GetGUID());
unit->CastSpell(unit, 11027, true);
FlameWreathTarget[i].Clear();
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index 7c1f428e6e5..4f7e025c984 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -235,8 +235,13 @@ public:
{
Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
+ {
// Knockback into the air
- unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, true, nullptr, nullptr, me->GetGUID());
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.OriginalCaster = me->GetGUID();
+ unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, args);
+ }
}
}
@@ -250,7 +255,10 @@ public:
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
// Also needs an exception in spell system.
- unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_FLY, true, nullptr, nullptr, me->GetGUID());
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.OriginalCaster = me->GetGUID();
+ unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_FLY, args);
unit->SetCanFly(true);
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index c1038bd7d08..117043615bb 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -121,7 +121,7 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader
void HandleDispel(DispelInfo* dispelInfo)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, true, nullptr, GetEffect(EFFECT_0));
+ caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, GetEffect(EFFECT_0));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index bf70c9d7da7..67b1d379158 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -500,10 +500,12 @@ class spell_mandokir_bloodletting : public SpellScriptLoader
if (!caster)
return;
- int32 damage = std::max<int32>(7500, target->CountPctFromCurHealth(aurEff->GetAmount()));
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, std::max<int32>(7500, target->CountPctFromCurHealth(aurEff->GetAmount())));
- caster->CastCustomSpell(target, SPELL_BLOODLETTING_DAMAGE, &damage, nullptr, nullptr, true);
- target->CastCustomSpell(caster, SPELL_BLOODLETTING_HEAL, &damage, nullptr, nullptr, true);
+ caster->CastSpell(target, SPELL_BLOODLETTING_DAMAGE, args);
+ target->CastSpell(caster, SPELL_BLOODLETTING_HEAL, args);
}
void Register() override
@@ -606,7 +608,7 @@ class spell_mandokir_devastating_slam : public SpellScriptLoader
angle = float(rand_norm()) * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f);
caster->GetClosePoint(x, y, z, 4.0f, frand(-2.5f, 50.0f), angle);
- caster->CastSpell(x, y, z, SPELL_DEVASTATING_SLAM_DAMAGE, true);
+ caster->CastSpell({ x, y, z }, SPELL_DEVASTATING_SLAM_DAMAGE, true);
}
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index 92866ee6db0..3843e0f8bfd 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -284,8 +284,10 @@ class spell_anetheron_vampiric_aura : public SpellScriptLoader
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 bp = damageInfo->GetDamage() * 3;
- eventInfo.GetActor()->CastCustomSpell(SPELL_VAMPIRIC_AURA_HEAL, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetActor(), true, nullptr, aurEff);
+ Unit* actor = eventInfo.GetActor();
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damageInfo->GetDamage() * 3);
+ actor->CastSpell(actor, SPELL_VAMPIRIC_AURA_HEAL, args);
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index 92e648bcadf..76ceb2ff034 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -472,8 +472,10 @@ public:
DoomfireSpiritGUID = summoned->GetGUID();
break;
case NPC_DOOMFIRE:
+ {
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN, false);
- summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, nullptr, nullptr, me->GetGUID());
+
+ summoned->CastSpell(summoned, SPELL_DOOMFIRE, me->GetGUID());
if (Unit* DoomfireSpirit = ObjectAccessor::GetUnit(*me, DoomfireSpiritGUID))
{
@@ -481,6 +483,7 @@ public:
DoomfireSpiritGUID.Clear();
}
break;
+ }
default:
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index ea4adb80dee..1e85927b478 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -216,7 +216,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader
if (target->GetPower(POWER_MANA) == 0)
{
- target->CastSpell(target, SPELL_MARK_DAMAGE, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_MARK_DAMAGE, aurEff);
// Remove aura
SetDuration(0);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index cbcb5e81713..4139b6d64ac 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -1339,7 +1339,7 @@ public:
{
if (StrikeTimer <= diff)
{
- me->CastSpell(DummyTarget[0], DummyTarget[1], DummyTarget[2], SPELL_GARGOYLE_STRIKE, false);
+ me->CastSpell({ DummyTarget[0], DummyTarget[1], DummyTarget[2] }, SPELL_GARGOYLE_STRIKE, false);
StrikeTimer = 2000 + rand32() % 1000;
} else StrikeTimer -= diff;
}
@@ -1452,8 +1452,9 @@ public:
EnterEvadeMode();
return;
}
- int dmg = 500 + rand32() % 700;
- me->CastCustomSpell(me->GetVictim(), SPELL_EXPLODING_SHOT, &dmg, nullptr, nullptr, false);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, 500 + rand32() % 700);
+ me->CastSpell(me->GetVictim(), SPELL_EXPLODING_SHOT, args);
ExplodeTimer = 5000 + rand32() % 5000;
} else ExplodeTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
index fcede66412e..4afebefd140 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
@@ -385,9 +385,9 @@ public:
{
if (Unit* caster = GetCaster())
{
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
- caster->CastCustomSpell(aurEff->GetSpellEffectInfo()->TriggerSpell, values, GetTarget());
+ CastSpellExtraArgs args;
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
+ caster->CastSpell(GetTarget(), aurEff->GetSpellEffectInfo()->TriggerSpell, args);
}
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index 387fa0b1323..882c6c3eb6e 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -261,8 +261,9 @@ class spell_egg_explosion : public SpellScriptLoader
{
if (Unit* target = GetHitUnit())
{
- int32 damage = std::max<int32>(0, -16 * GetCaster()->GetDistance(target) + 500);
- GetCaster()->CastCustomSpell(SPELL_EXPLOSION_DAMAGE, SPELLVALUE_BASE_POINT0, damage, target, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellBP0(std::max<int32>(0, -16 * GetCaster()->GetDistance(target) + 500));
+ GetCaster()->CastSpell(target, SPELL_EXPLOSION_DAMAGE, args);
}
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 667e36d2d79..0062c33465c 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -757,7 +757,7 @@ public:
//Set target in stomach
Stomach_Map[target->GetGUID()] = true;
target->InterruptNonMeleeSpells(false);
- target->CastSpell(target, SPELL_MOUTH_TENTACLE, true, nullptr, nullptr, me->GetGUID());
+ target->CastSpell(target, SPELL_MOUTH_TENTACLE, me->GetGUID());
StomachEnterTarget = target->GetGUID();
StomachEnterVisTimer = 3800;
}
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index 45c1f0dda2d..dce9b789281 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -503,7 +503,7 @@ public:
DoCast(player, SPELL_ARCANE_CHANNELING, true);//Arcane Channeling
break;
case 35:
- me->CastSpell(-8088, 1520.43f, 2.67f, SPELL_TIME_STOP, true);
+ me->CastSpell({ -8088, 1520.43f, 2.67f }, SPELL_TIME_STOP, true);
break;
case 36:
DoCast(player, SPELL_CALL_PRISMATIC_BARRIER, true);
@@ -553,7 +553,7 @@ public:
break;
case 50:
Fandral->AI()->Talk(FANDRAL_EMOTE_2);
- Fandral->CastSpell(-8127, 1525, 17.5f, SPELL_THROW_HAMMER, true);
+ Fandral->CastSpell({ -8127, 1525, 17.5f }, SPELL_THROW_HAMMER, true);
break;
case 51:
{
@@ -1419,7 +1419,7 @@ class spell_silithus_summon_cultist_periodic : public AuraScript
// All these spells trigger a spell that requires reagents; if the
// triggered spell is cast as "triggered", reagents are not consumed
if (Unit* caster = GetCaster())
- caster->CastSpell(nullptr, GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST), nullptr, aurEff);
+ caster->CastSpell(nullptr, GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, CastSpellExtraArgs(TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST)).SetTriggeringAura(aurEff));
}
void Register() override
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 7b4cc3a1f63..d162024e595 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
@@ -697,8 +697,8 @@ public:
return;
target->ExitVehicle();
- DynamicObject* dynamicObject = GetCaster()->GetDynObject(SPELL_SEISMIC_SHARD_TARGETING);
- target->CastSpell(dynamicObject->GetPositionX(), dynamicObject->GetPositionY(), dynamicObject->GetPositionZ(), SPELL_SEISMIC_SHARD_MISSLE, true);
+ if (DynamicObject* dynamicObject = GetCaster()->GetDynObject(SPELL_SEISMIC_SHARD_TARGETING))
+ target->CastSpell(dynamicObject->GetPosition(), SPELL_SEISMIC_SHARD_MISSLE, true);
}
void Register() override
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
index b69f630aa3f..e7847bfe9a0 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -258,7 +258,12 @@ class spell_ahn_kahet_swarm : public SpellScriptLoader
aura->RefreshDuration();
}
else
- GetCaster()->CastCustomSpell(SPELL_SWARM_BUFF, SPELLVALUE_AURA_STACK, _targetCount, GetCaster(), TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, _targetCount);
+ GetCaster()->CastSpell(GetCaster(), SPELL_SWARM_BUFF, args);
+ }
}
else
GetCaster()->RemoveAurasDueToSpell(SPELL_SWARM_BUFF);
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 68b0f93a226..b691a6e0080 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -349,7 +349,7 @@ class boss_halion : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_TWILIGHT_REALM))
{
_meteorStrikePos = target->GetPosition();
- me->CastSpell(_meteorStrikePos.GetPositionX(), _meteorStrikePos.GetPositionY(), _meteorStrikePos.GetPositionZ(), SPELL_METEOR_STRIKE, true, nullptr, nullptr, me->GetGUID());
+ me->CastSpell(_meteorStrikePos, SPELL_METEOR_STRIKE, me->GetGUID());
Talk(SAY_METEOR_STRIKE);
}
events.ScheduleEvent(EVENT_METEOR_STRIKE, Seconds(38));
@@ -1246,11 +1246,15 @@ class npc_combustion_consumption : public CreatureScript
if (type != DATA_STACKS_DISPELLED || !_damageSpell || !_explosionSpell || !summoner)
return;
- me->CastCustomSpell(SPELL_SCALE_AURA, SPELLVALUE_AURA_STACK, stackAmount + 1, me);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, stackAmount + 1);
+ me->CastSpell(me, SPELL_SCALE_AURA, args);
DoCastSelf(_damageSpell);
int32 damage = 1200 + (stackAmount * 1290); // Needs more research.
- summoner->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, summoner);
+ CastSpellExtraArgs args2;
+ args2.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage);
+ summoner->CastSpell(summoner, _explosionSpell, args2);
}
void UpdateAI(uint32 /*diff*/) override { }
@@ -1515,7 +1519,10 @@ class spell_halion_combustion_consumption_periodic : public SpellScriptLoader
uint32 triggerSpell = aurEff->GetSpellEffectInfo()->TriggerSpell;
int32 radius = caster->GetObjectScale() * M_PI * 10000 / 3;
- caster->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff, caster->GetGUID());
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = caster->GetGUID();
+ args.SpellValueOverrides.AddMod(SPELLVALUE_RADIUS_MOD, radius);
+ caster->CastSpell(nullptr, triggerSpell, args);
}
void Register() override
@@ -1567,7 +1574,9 @@ class spell_halion_marks : public SpellScriptLoader
return;
// Stacks marker
- GetTarget()->CastCustomSpell(_summonSpellId, SPELLVALUE_BASE_POINT1, aurEff->GetBase()->GetStackAmount(), GetTarget(), TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID());
+ CastSpellExtraArgs args(GetCasterGUID());
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, aurEff->GetBase()->GetStackAmount());
+ GetTarget()->CastSpell(GetTarget(), _summonSpellId, args);
}
void Register() override
@@ -1792,7 +1801,7 @@ class spell_halion_twilight_phasing : public SpellScriptLoader
void Phase()
{
Unit* caster = GetCaster();
- caster->CastSpell(caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ(), SPELL_SUMMON_TWILIGHT_PORTAL, true);
+ caster->CastSpell(caster->GetPosition(), SPELL_SUMMON_TWILIGHT_PORTAL, true);
caster->GetMap()->SummonCreature(NPC_TWILIGHT_HALION, HalionSpawnPos);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index 0a33d804083..abf508a0cc8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -196,7 +196,11 @@ class spell_ruby_sanctum_rallying_shout : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (_targetCount && !GetCaster()->HasAura(SPELL_RALLY))
- GetCaster()->CastCustomSpell(SPELL_RALLY, SPELLVALUE_AURA_STACK, _targetCount, GetCaster(), TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, _targetCount);
+ GetCaster()->CastSpell(GetCaster(), SPELL_RALLY, args);
+ }
}
void Register() override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
index 668eddcb249..6eedb9eba0a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -668,7 +668,7 @@ class spell_paletress_summon_memory : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastSpell(GetHitUnit(), memorySpellId[urand(0, 24)], true, nullptr, nullptr, GetCaster()->GetGUID());
+ GetHitUnit()->CastSpell(GetHitUnit(), memorySpellId[urand(0, 24)], GetCaster()->GetGUID());
}
void Register() override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 1ed17eda42e..9827475a67a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -308,12 +308,20 @@ class boss_anubarak_trial : public CreatureScript
events.ScheduleEvent(EVENT_FREEZE_SLASH, 15*IN_MILLISECONDS, 0, PHASE_MELEE);
return;
case EVENT_PENETRATING_COLD:
- me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5));
- events.ScheduleEvent(EVENT_PENETRATING_COLD, 20*IN_MILLISECONDS, 0, PHASE_MELEE);
+ {
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5));
+ me->CastSpell(nullptr, SPELL_PENETRATING_COLD, args);
+ events.ScheduleEvent(EVENT_PENETRATING_COLD, 20 * IN_MILLISECONDS, 0, PHASE_MELEE);
return;
+ }
case EVENT_SUMMON_NERUBIAN:
if (IsHeroic() || !_reachedPhase3)
- me->CastCustomSpell(SPELL_SUMMON_BURROWER, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4));
+ {
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4));
+ me->CastSpell(nullptr, SPELL_SUMMON_BURROWER, args);
+ }
events.ScheduleEvent(EVENT_SUMMON_NERUBIAN, 45*IN_MILLISECONDS, 0, PHASE_MELEE);
return;
case EVENT_NERUBIAN_SHADOW_STRIKE:
@@ -925,10 +933,12 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader
int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount());
if (lifeLeeched < 250)
lifeLeeched = 250;
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, lifeLeeched);
// Damage
- caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, nullptr, nullptr, true);
+ caster->CastSpell(target, SPELL_LEECHING_SWARM_DMG, args);
// Heal
- caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, nullptr, nullptr, true);
+ caster->CastSpell(caster, SPELL_LEECHING_SWARM_HEAL, args);
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index a3da5f57881..d79186c91a5 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -2264,7 +2264,7 @@ class spell_faction_champion_warl_unstable_affliction : public SpellScriptLoader
void HandleDispel(DispelInfo* dispelInfo)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(dispelInfo->GetDispeller(), SPELL_UNSTABLE_AFFLICTION_DISPEL, true, nullptr, GetEffect(EFFECT_0));
+ caster->CastSpell(dispelInfo->GetDispeller(), SPELL_UNSTABLE_AFFLICTION_DISPEL, GetEffect(EFFECT_0));
}
void Register() override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index dcb939e57f8..bd4cd93f6ce 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -219,9 +219,13 @@ class boss_jaraxxus : public CreatureScript
events.ScheduleEvent(EVENT_INCINERATE_FLESH, urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS));
break;
case EVENT_NETHER_POWER:
- me->CastCustomSpell(SPELL_NETHER_POWER, SPELLVALUE_AURA_STACK, RAID_MODE<uint32>(5, 10, 5, 10), me, true);
- events.ScheduleEvent(EVENT_NETHER_POWER, 40*IN_MILLISECONDS);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, RAID_MODE(5, 10, 5, 10));
+ me->CastSpell(me, SPELL_NETHER_POWER, args);
+ events.ScheduleEvent(EVENT_NETHER_POWER, 40 * IN_MILLISECONDS);
break;
+ }
case EVENT_LEGION_FLAME:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_LORD_HITTIN))
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index 77ea3de389b..c8d2b29987f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -1152,7 +1152,7 @@ class spell_jormungars_paralytic_toxin : public AuraScript
slowEff->ChangeAmount(newAmount);
if (newAmount == -100 && !GetTarget()->HasAura(SPELL_PARALYSIS))
- GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, true, nullptr, slowEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, CastSpellExtraArgs(slowEff).SetOriginalCaster(GetCasterGUID()));
}
}
@@ -1197,7 +1197,9 @@ class spell_jormungars_slime_pool : public AuraScript
PreventDefaultAction();
int32 const radius = static_cast<int32>(((aurEff->GetTickNumber() / 60.f) * 0.9f + 0.1f) * 10000.f * 2.f / 3.f);
- GetTarget()->CastCustomSpell(GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_RADIUS_MOD, radius);
+ GetTarget()->CastSpell(nullptr, GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 232c2bf8139..eddf870bb84 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -312,7 +312,11 @@ struct boss_twin_baseAI : public BossAI
break;
case EVENT_TOUCH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true, true, OtherEssenceSpellId))
- me->CastCustomSpell(TouchSpellId, SPELLVALUE_MAX_TARGETS, 1, target, false);
+ {
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, 1); // @todo spellmgr correction instead?
+ me->CastSpell(target, TouchSpellId, args);
+ }
events.ScheduleEvent(EVENT_TOUCH, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
break;
case EVENT_BERSERK:
@@ -716,8 +720,11 @@ class spell_bullet_controller : public AuraScript
if (!caster)
return;
- caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_LIGHT, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true);
- caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_DARK, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true);
+ CastSpellExtraArgs args1(TRIGGERED_FULL_MASK), args2(TRIGGERED_FULL_MASK);
+ args1.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, urand(1, 6));
+ args2.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, urand(1, 6));
+ caster->CastSpell(GetTarget(), SPELL_SUMMON_PERIODIC_LIGHT, args1);
+ caster->CastSpell(GetTarget(), SPELL_SUMMON_PERIODIC_DARK, args2);
}
void Register() override
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index 0aa09881f0a..8a6dc12233b 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -139,7 +139,7 @@ class boss_trollgore : public CreatureScript
case EVENT_SPAWN:
for (uint8 i = 0; i < 3; ++i)
if (Creature* trigger = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TROLLGORE_INVADER_SUMMONER_1 + i)))
- trigger->CastSpell(trigger, RAND(SPELL_SUMMON_INVADER_A, SPELL_SUMMON_INVADER_B, SPELL_SUMMON_INVADER_C), true, nullptr, nullptr, me->GetGUID());
+ trigger->CastSpell(trigger, RAND(SPELL_SUMMON_INVADER_A, SPELL_SUMMON_INVADER_B, SPELL_SUMMON_INVADER_C), me->GetGUID());
events.ScheduleEvent(EVENT_SPAWN, urand(30000, 40000));
break;
@@ -277,7 +277,7 @@ class spell_trollgore_corpse_explode : public SpellScriptLoader
{
if (aurEff->GetTickNumber() == 2)
if (Unit* caster = GetCaster())
- caster->CastSpell(GetTarget(), SPELL_CORPSE_EXPLODE_DAMAGE, true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_CORPSE_EXPLODE_DAMAGE, aurEff);
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index bc6edfdc3a9..533a01b95bf 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -197,7 +197,7 @@ class boss_bronjahm : public CreatureScript
me->CastSpell(me, SPELL_SOULSTORM, false);
break;
case EVENT_FEAR:
- me->CastCustomSpell(SPELL_FEAR, SPELLVALUE_MAX_TARGETS, 1, nullptr, false);
+ me->CastSpell(nullptr, SPELL_FEAR, { SPELLVALUE_MAX_TARGETS, 1 });
events.ScheduleEvent(EVENT_FEAR, urand(8000, 12000), 0, PHASE_2);
break;
default:
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
index 6479b1aa9e1..55cd310239b 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
@@ -409,8 +409,9 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 damage = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), 45);
- GetTarget()->CastCustomSpell(SPELL_MIRRORED_SOUL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetCaster(), true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), 45));
+ GetTarget()->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_DAMAGE, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
index 511c0e17893..676ab1727c7 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -151,7 +151,11 @@ class spell_marwyn_shared_suffering : public SpellScriptLoader
{
int32 remainingDamage = aurEff->GetAmount() * aurEff->GetRemainingTicks();
if (remainingDamage > 0)
- caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, remainingDamage);
+ caster->CastSpell(GetTarget(), SPELL_SHARED_SUFFERING_DISPEL, args);
+ }
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 6239f430494..b038e9ceb00 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -266,7 +266,7 @@ class boss_ick : public CreatureScript
krick->AI()->Talk(SAY_KRICK_BARRAGE_1);
krick->AI()->Talk(SAY_KRICK_BARRAGE_2);
krick->CastSpell(krick, SPELL_EXPLOSIVE_BARRAGE_KRICK, true);
- DoCast(me, SPELL_EXPLOSIVE_BARRAGE_ICK);
+ DoCastAOE(SPELL_EXPLOSIVE_BARRAGE_ICK);
}
events.DelayEvents(20000);
break;
@@ -275,12 +275,12 @@ class boss_ick : public CreatureScript
krick->AI()->Talk(SAY_KRICK_POISON_NOVA);
Talk(SAY_ICK_POISON_NOVA);
- DoCast(me, SPELL_POISON_NOVA);
+ DoCastAOE(SPELL_POISON_NOVA);
break;
case EVENT_PURSUIT:
if (Creature* krick = GetKrick())
krick->AI()->Talk(SAY_KRICK_CHASE);
- me->CastCustomSpell(SPELL_PURSUIT, SPELLVALUE_MAX_TARGETS, 1, me);
+ DoCastSelf(SPELL_PURSUIT, { SPELLVALUE_MAX_TARGETS, 1 });
break;
default:
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index 4c8f7f3168f..5ccf9edf553 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -404,13 +404,21 @@ class player_overlord_brandAI : public PlayerAI
{
if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID))
if (Unit* victim = tyrannus->GetVictim())
- me->CastCustomSpell(SPELL_OVERLORD_BRAND_DAMAGE, SPELLVALUE_BASE_POINT0, damage, victim, true, nullptr, nullptr, tyrannus->GetGUID());
+ {
+ CastSpellExtraArgs args(tyrannus->GetGUID());
+ args.SpellValueOverrides.AddBP0(damage);
+ me->CastSpell(victim, SPELL_OVERLORD_BRAND_DAMAGE, args);
+ }
}
void HealDone(Unit* /*target*/, uint32& addHealth) override
{
if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID))
- me->CastCustomSpell(SPELL_OVERLORD_BRAND_HEAL, SPELLVALUE_BASE_POINT0, int32(addHealth * 5.5f), tyrannus, true, nullptr, nullptr, tyrannus->GetGUID());
+ {
+ CastSpellExtraArgs args(tyrannus->GetGUID());
+ args.SpellValueOverrides.AddBP0(addHealth * 5.5f);
+ me->CastSpell(tyrannus, SPELL_OVERLORD_BRAND_HEAL, args);
+ }
}
void UpdateAI(uint32 /*diff*/) override { }
diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index 1bf89449dfd..c5225d3e5eb 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -235,7 +235,9 @@ class spell_moorabi_mojo_frenzy : public SpellScriptLoader
Unit* owner = GetUnitOwner();
int32 castSpeedBonus = (100.0f - owner->GetHealthPct()) * 4; // between 0% and 400% cast speed bonus
- owner->CastCustomSpell(SPELL_MOJO_FRENZY_CAST_SPEED, SPELLVALUE_BASE_POINT0, castSpeedBonus, owner, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(castSpeedBonus);
+ owner->CastSpell(owner, SPELL_MOJO_FRENZY_CAST_SPEED, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index b5ac810ea7f..fff0e33838e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -805,7 +805,7 @@ class boss_prince_valanar_icc : public CreatureScript
{
case NPC_KINETIC_BOMB_TARGET:
summon->SetReactState(REACT_PASSIVE);
- summon->CastSpell(summon, SPELL_KINETIC_BOMB, true, nullptr, nullptr, me->GetGUID());
+ summon->CastSpell(summon, SPELL_KINETIC_BOMB, me->GetGUID());
break;
case NPC_KINETIC_BOMB:
{
@@ -1472,7 +1472,7 @@ class spell_blood_council_shadow_prison : public SpellScriptLoader
void HandleDummyTick(AuraEffect const* aurEff)
{
if (GetTarget()->isMoving())
- GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_PRISON_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_PRISON_DAMAGE, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index fe524c7015d..8c02a308440 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -726,8 +726,9 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 heal = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), TRIGGERED_FULL_MASK, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
+ GetTarget()->CastSpell(GetTarget(), SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, args);
}
void Register() override
@@ -811,7 +812,10 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader
int32 damage = damageSpell->GetEffect(EFFECT_0)->CalcValue();
float multiplier = 0.3375f + 0.1f * uint32(aurEff->GetTickNumber() / 10); // do not convert to 0.01f - we need tick number/10 as INT (damage increases every 10 ticks)
damage = int32(damage * multiplier);
- GetTarget()->CastCustomSpell(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true);
+
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(damage);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 332f0ba7ae4..3e1a16b14e9 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -433,7 +433,11 @@ class boss_deathbringer_saurfang : public CreatureScript
case 72445:
case 72446:
if (me->GetPower(POWER_ENERGY) != me->GetMaxPower(POWER_ENERGY))
- target->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 1, nullptr, true);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(1);
+ target->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, args);
+ }
break;
default:
break;
@@ -1015,7 +1019,9 @@ class spell_deathbringer_blood_link : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_POWER, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(GetEffectValue());
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BLOOD_LINK_POWER, args);
PreventHitDefaultEffect(EFFECT_0);
}
@@ -1131,7 +1137,7 @@ class spell_deathbringer_rune_of_blood : public SpellScriptLoader
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex); // make this the default handler
- GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 1, nullptr, true);
+ GetHitUnit()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(1));
}
void Register() override
@@ -1164,7 +1170,7 @@ class spell_deathbringer_blood_beast_blood_link : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetProcTarget()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 3, nullptr, true, nullptr, aurEff);
+ eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(aurEff).AddSpellBP0(3));
}
void Register() override
@@ -1196,7 +1202,7 @@ class spell_deathbringer_blood_nova : public SpellScriptLoader
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex); // make this the default handler
- GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 2, nullptr, true);
+ GetHitUnit()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(2));
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 167b4532408..7f1c8dd8892 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -199,7 +199,7 @@ class boss_festergut : public CreatureScript
// just cast and dont bother with target, conditions will handle it
++_inhaleCounter;
if (_inhaleCounter < 3)
- me->CastSpell(me, gaseousBlight[_inhaleCounter], true, nullptr, nullptr, me->GetGUID());
+ me->CastSpell(me, gaseousBlight[_inhaleCounter], me->GetGUID());
}
events.ScheduleEvent(EVENT_INHALE_BLIGHT, urand(33500, 35000));
@@ -234,7 +234,7 @@ class boss_festergut : public CreatureScript
case EVENT_GAS_SPORE:
Talk(EMOTE_WARN_GAS_SPORE);
Talk(EMOTE_GAS_SPORE);
- me->CastCustomSpell(SPELL_GAS_SPORE, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 3, 2, 3), me);
+ me->CastSpell(me, SPELL_GAS_SPORE, CastSpellExtraArgs().AddSpellMod(SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 3, 2, 3)));
events.ScheduleEvent(EVENT_GAS_SPORE, urand(40000, 45000));
events.RescheduleEvent(EVENT_VILE_GAS, urand(28000, 35000));
break;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index c59798a5300..62129734089 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -1841,7 +1841,10 @@ class spell_igb_rocket_pack : public SpellScriptLoader
void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
SpellInfo const* damageInfo = sSpellMgr->AssertSpellInfo(SPELL_ROCKET_PACK_DAMAGE, GetCastDifficulty());
- GetTarget()->CastCustomSpell(SPELL_ROCKET_PACK_DAMAGE, SPELLVALUE_BASE_POINT0, 2 * (damageInfo->GetEffect(EFFECT_0)->CalcValue() + aurEff->GetTickNumber() * aurEff->GetPeriod()), nullptr, TRIGGERED_FULL_MASK);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.CastDifficulty = GetCastDifficulty();
+ args.SpellValueOverrides.AddBP0(2 * (damageInfo->GetEffect(EFFECT_0)->CalcValue() + aurEff->GetTickNumber() * aurEff->GetPeriod()));
+ GetTarget()->CastSpell(nullptr, SPELL_ROCKET_PACK_DAMAGE, args);
GetTarget()->CastSpell(nullptr, SPELL_ROCKET_BURST, TRIGGERED_FULL_MASK);
}
@@ -2250,7 +2253,9 @@ class spell_igb_burning_pitch : public SpellScriptLoader
void HandleDummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
- GetCaster()->CastCustomSpell(uint32(GetEffectValue()), SPELLVALUE_BASE_POINT0, 8000, nullptr, TRIGGERED_FULL_MASK);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(8000);
+ GetCaster()->CastSpell(nullptr, GetEffectValue(), args);
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BURNING_PITCH, TRIGGERED_FULL_MASK);
}
@@ -2316,7 +2321,11 @@ class spell_igb_rocket_artillery_explosion : public SpellScriptLoader
void DamageGunship(SpellEffIndex /*effIndex*/)
{
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- GetCaster()->CastCustomSpell(instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_DAMAGE_A : SPELL_BURNING_PITCH_DAMAGE_H, SPELLVALUE_BASE_POINT0, 5000, nullptr, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(5000);
+ GetCaster()->CastSpell(nullptr, instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_DAMAGE_A : SPELL_BURNING_PITCH_DAMAGE_H, args);
+ }
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 02d7197672e..6e47c2ff790 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -435,7 +435,9 @@ class boss_lady_deathwhisper : public CreatureScript
})
.Schedule(Seconds(12), GROUP_TWO, [this](TaskContext summonShade)
{
- me->CastCustomSpell(SPELL_SUMMON_SPIRITS, SPELLVALUE_MAX_TARGETS, Is25ManRaid() ? 2 : 1);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, Is25ManRaid() ? 2 : 1);
+ me->CastSpell(nullptr, SPELL_SUMMON_SPIRITS, args);
summonShade.Repeat();
});
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index 92817d37c31..62cda3d2b8d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -380,7 +380,7 @@ class boss_professor_putricide : public CreatureScript
me->SetSpeedRate(MOVE_RUN, _baseSpeed);
DoAction(ACTION_FESTERGUT_GAS);
if (Creature* festergut = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FESTERGUT)))
- festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, false, nullptr, nullptr, festergut->GetGUID());
+ festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, CastSpellExtraArgs().SetOriginalCaster(festergut->GetGUID()));
break;
case POINT_ROTFACE:
instance->SetBossState(DATA_ROTFACE, IN_PROGRESS); // needed here for delayed gate close
@@ -477,7 +477,7 @@ class boss_professor_putricide : public CreatureScript
case ACTION_ROTFACE_OOZE:
Talk(SAY_ROTFACE_OOZE_FLOOD);
if (Creature* dummy = ObjectAccessor::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage]))
- dummy->CastSpell(dummy, oozeFloodSpells[_oozeFloodStage], true, nullptr, nullptr, me->GetGUID()); // cast from self for LoS (with prof's GUID for logs)
+ dummy->CastSpell(dummy, oozeFloodSpells[_oozeFloodStage], me->GetGUID()); // cast from self for LoS (with prof's GUID for logs)
if (++_oozeFloodStage == 4)
_oozeFloodStage = 0;
break;
@@ -586,7 +586,7 @@ class boss_professor_putricide : public CreatureScript
EnterEvadeMode();
break;
case EVENT_FESTERGUT_GOO:
- me->CastCustomSpell(SPELL_MALLEABLE_GOO_SUMMON, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
+ DoCastAOE(SPELL_MALLEABLE_GOO_SUMMON, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
events.ScheduleEvent(EVENT_FESTERGUT_GOO, (Is25ManRaid() ? 10000 : 30000) + urand(0, 5000), 0, PHASE_FESTERGUT);
break;
case EVENT_ROTFACE_DIES:
@@ -819,7 +819,9 @@ class npc_gas_cloud : public CreatureScript
void CastMainSpell() override
{
- me->CastCustomSpell(SPELL_GASEOUS_BLOAT, SPELLVALUE_AURA_STACK, 10, me, false);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 10);
+ me->CastSpell(me, SPELL_GASEOUS_BLOAT, args);
}
private:
@@ -848,7 +850,11 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader
{
target->RemoveAuraFromStack(GetSpellInfo()->Id, GetCasterGUID());
if (!target->HasAura(GetId()))
- caster->CastCustomSpell(SPELL_GASEOUS_BLOAT, SPELLVALUE_AURA_STACK, 10, caster, false);
+ {
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 10);
+ caster->CastSpell(caster, SPELL_GASEOUS_BLOAT, args);
+ }
}
}
@@ -862,7 +868,9 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader
for (uint8 i = 1; i <= stack; ++i)
dmg += mod * i;
- caster->CastCustomSpell(SPELL_EXPUNGED_GAS, SPELLVALUE_BASE_POINT0, dmg);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddBP0(dmg);
+ caster->CastSpell(nullptr, SPELL_EXPUNGED_GAS, args);
}
void Register() override
@@ -1116,7 +1124,7 @@ class spell_putricide_ooze_tank_protection : public SpellScriptLoader
PreventDefaultAction();
Unit* actionTarget = eventInfo.GetActionTarget();
- actionTarget->CastSpell(nullptr, aurEff->GetSpellEffectInfo()->TriggerSpell, true, nullptr, aurEff);
+ actionTarget->CastSpell(nullptr, aurEff->GetSpellEffectInfo()->TriggerSpell, aurEff);
}
void Register() override
@@ -1150,7 +1158,7 @@ class spell_putricide_choking_gas_bomb : public SpellScriptLoader
continue;
uint32 spellId = uint32(effect->CalcValue());
- GetCaster()->CastSpell(GetCaster(), spellId, true, nullptr, nullptr, GetCaster()->GetGUID());
+ GetCaster()->CastSpell(GetCaster(), spellId, GetCaster()->GetGUID());
}
}
@@ -1317,7 +1325,10 @@ class spell_putricide_mutated_plague : public SpellScriptLoader
damage *= int32(pow(multiplier, GetStackAmount()));
damage = int32(damage * 1.5f);
- GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true, nullptr, aurEff, GetCasterGUID());
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = GetCasterGUID();
+ args.SpellValueOverrides.AddBP0(damage);
+ GetTarget()->CastSpell(GetTarget(), triggerSpell, args);
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1329,7 +1340,9 @@ class spell_putricide_mutated_plague : public SpellScriptLoader
return;
int32 heal = healSpellInfo->GetEffect(EFFECT_0)->CalcValue() * GetStackAmount();
- GetTarget()->CastCustomSpell(healSpell, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, nullptr, nullptr, GetCasterGUID());
+ CastSpellExtraArgs args(GetCasterGUID());
+ args.SpellValueOverrides.AddBP0(heal);
+ GetTarget()->CastSpell(GetTarget(), healSpell, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 524bdd671e9..1895f82db86 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -472,7 +472,7 @@ class spell_rotface_ooze_flood : public SpellScriptLoader
return;
triggers.sort(Trinity::ObjectDistanceOrderPred(GetHitUnit()));
- GetHitUnit()->CastSpell(triggers.back(), uint32(GetEffectValue()), false, nullptr, nullptr, GetOriginalCaster() ? GetOriginalCaster()->GetGUID() : ObjectGuid::Empty);
+ GetHitUnit()->CastSpell(triggers.back(), uint32(GetEffectValue()), GetOriginalCaster() ? GetOriginalCaster()->GetGUID() : ObjectGuid::Empty);
}
void FilterTargets(std::list<WorldObject*>& targets)
@@ -550,7 +550,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->CastSpell(target, uint32(GetSpellInfo()->GetEffect(EFFECT_2)->CalcValue()), true, nullptr, aurEff, GetCasterGUID());
+ target->CastSpell(target, uint32(GetSpellInfo()->GetEffect(EFFECT_2)->CalcValue()), { aurEff, GetCasterGUID() });
}
void Register() override
@@ -678,7 +678,7 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader
if (Creature* cre = GetCaster()->ToCreature())
cre->AI()->DoAction(EVENT_STICKY_OOZE);
- GetCaster()->CastSpell(GetCaster(), SPELL_UNSTABLE_OOZE_EXPLOSION, false, nullptr, nullptr, GetCaster()->GetGUID());
+ GetCaster()->CastSpell(GetCaster(), SPELL_UNSTABLE_OOZE_EXPLOSION, CastSpellExtraArgs().SetOriginalCaster(GetCaster()->GetGUID()));
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(false));
}
@@ -759,7 +759,7 @@ class spell_rotface_unstable_ooze_explosion : public SpellScriptLoader
// let Rotface handle the cast - caster dies before this executes
if (InstanceScript* script = GetCaster()->GetInstanceScript())
if (Creature* rotface = script->instance->GetCreature(script->GetGuidData(DATA_ROTFACE)))
- rotface->CastSpell(x, y, z, triggered_spell_id, true, nullptr, nullptr, GetCaster()->GetGUID());
+ rotface->CastSpell({x, y, z}, triggered_spell_id, GetCaster()->GetGUID());
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index b0f575f3b6d..9bbb5767ca2 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -195,7 +195,7 @@ class FrostBombExplosion : public BasicEvent
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
{
- _owner->CastSpell(nullptr, SPELL_FROST_BOMB, false, nullptr, nullptr, _sindragosaGUID);
+ _owner->CastSpell(nullptr, SPELL_FROST_BOMB, CastSpellExtraArgs().SetOriginalCaster(_sindragosaGUID));
_owner->RemoveAurasDueToSpell(SPELL_FROST_BOMB_VISUAL);
return true;
}
@@ -369,11 +369,15 @@ class boss_sindragosa : public CreatureScript
events.ScheduleEvent(EVENT_AIR_MOVEMENT, 1);
break;
case POINT_AIR_PHASE:
- me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 5, 2, 6), nullptr, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 5, 2, 6));
+ me->CastSpell(nullptr, SPELL_ICE_TOMB_TARGET, args);
me->SetFacingTo(float(M_PI), true);
events.ScheduleEvent(EVENT_AIR_MOVEMENT_FAR, 1);
events.ScheduleEvent(EVENT_FROST_BOMB, 9000);
break;
+ }
case POINT_AIR_PHASE_FAR:
me->SetFacingTo(float(M_PI), true);
events.ScheduleEvent(EVENT_LAND, 30000);
@@ -507,9 +511,13 @@ class boss_sindragosa : public CreatureScript
me->GetMotionMaster()->MovePoint(POINT_AIR_PHASE_FAR, SindragosaAirPosFar);
break;
case EVENT_ICE_TOMB:
- me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, 1, nullptr, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, 1);
+ me->CastSpell(nullptr, SPELL_ICE_TOMB_TARGET, args);
events.ScheduleEvent(EVENT_ICE_TOMB, urand(16000, 23000));
break;
+ }
case EVENT_FROST_BOMB:
{
float destX, destY, destZ;
@@ -517,7 +525,7 @@ class boss_sindragosa : public CreatureScript
destY = float(rand_norm()) * 75.0f + 2450.0f;
destZ = 205.0f; // random number close to ground, get exact in next call
me->UpdateGroundPositionZ(destX, destY, destZ);
- me->CastSpell(destX, destY, destZ, SPELL_FROST_BOMB_TRIGGER, false);
+ me->CastSpell({ destX, destY, destZ }, SPELL_FROST_BOMB_TRIGGER, false);
events.ScheduleEvent(EVENT_FROST_BOMB, urand(6000, 8000));
break;
}
@@ -1242,7 +1250,12 @@ class spell_sindragosa_instability : public SpellScriptLoader
void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
- GetTarget()->CastCustomSpell(SPELL_BACKLASH, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff, GetCasterGUID());
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = GetCasterGUID();
+ args.SpellValueOverrides.AddBP0(aurEff->GetAmount());
+ GetTarget()->CastSpell(GetTarget(), SPELL_BACKLASH, args);
+ }
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 1cf92ceef37..1644848cf0e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -470,7 +470,7 @@ class TriggerWickedSpirit : public BasicEvent
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
{
- _owner->CastCustomSpell(SPELL_TRIGGER_VILE_SPIRIT_HEROIC, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
+ _owner->CastSpell(nullptr, SPELL_TRIGGER_VILE_SPIRIT_HEROIC, { SPELLVALUE_MAX_TARGETS, 1 });
if (--_counter)
{
@@ -2117,10 +2117,9 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader
return;
}
- CustomSpellValues values;
- //values.AddSpellMod(SPELLVALUE_AURA_STACK, 2);
- values.AddSpellMod(SPELLVALUE_MAX_TARGETS, 1);
- GetTarget()->CastCustomSpell(SPELL_NECROTIC_PLAGUE_JUMP, values, nullptr, TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID());
+ CastSpellExtraArgs args(GetCasterGUID());
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, 1);
+ GetTarget()->CastSpell(nullptr, SPELL_NECROTIC_PLAGUE_JUMP, args);
if (Unit* caster = GetCaster())
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
}
@@ -2217,9 +2216,9 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
return;
}
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount());
- GetTarget()->CastCustomSpell(SPELL_NECROTIC_PLAGUE_JUMP, values, nullptr, TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID());
+ CastSpellExtraArgs args(GetCasterGUID());
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, GetStackAmount());
+ GetTarget()->CastSpell(nullptr, SPELL_NECROTIC_PLAGUE_JUMP, args);
if (Unit* caster = GetCaster())
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
}
@@ -2235,10 +2234,10 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
if (aurEff->GetAmount() > _lastAmount)
return;
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount());
- values.AddSpellMod(SPELLVALUE_BASE_POINT1, AURA_REMOVE_BY_ENEMY_SPELL); // add as marker (spell has no effect 1)
- GetTarget()->CastCustomSpell(SPELL_NECROTIC_PLAGUE_JUMP, values, nullptr, TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID());
+ CastSpellExtraArgs args(GetCasterGUID());
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, GetStackAmount());
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, AURA_REMOVE_BY_ENEMY_SPELL); // add as marker (spell has no effect 1)
+ GetTarget()->CastSpell(nullptr, SPELL_NECROTIC_PLAGUE_JUMP, args);
if (Unit* caster = GetCaster())
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
@@ -2651,7 +2650,9 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader
void TriggerHeal()
{
- GetHitUnit()->CastCustomSpell(SPELL_LIFE_SIPHON_HEAL, SPELLVALUE_BASE_POINT0, GetHitDamage() * 10, GetCaster(), true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(GetHitDamage() * 10);
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_LIFE_SIPHON_HEAL, args);
}
void Register() override
@@ -2691,7 +2692,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader
void OnPeriodic(AuraEffect const* aurEff)
{
if (_is25Man || ((aurEff->GetTickNumber() - 1) % 5))
- GetTarget()->CastSpell(nullptr, aurEff->GetSpellEffectInfo()->TriggerSpell, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(nullptr, aurEff->GetSpellEffectInfo()->TriggerSpell, { aurEff, GetCasterGUID() });
}
void Register() override
@@ -2849,7 +2850,7 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader
{
// m_originalCaster to allow stacking from different casters, meh
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEATH)
- GetTarget()->CastSpell(nullptr, SPELL_HARVESTED_SOUL, true, nullptr, nullptr, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
+ GetTarget()->CastSpell(nullptr, SPELL_HARVESTED_SOUL, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
}
void Register() override
@@ -2915,7 +2916,12 @@ class spell_the_lich_king_soul_rip : public SpellScriptLoader
PreventDefaultAction();
// shouldn't be needed, this is channeled
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(SPELL_SOUL_RIP_DAMAGE, SPELLVALUE_BASE_POINT0, 5000 * aurEff->GetTickNumber(), GetTarget(), true, nullptr, aurEff, GetCasterGUID());
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = GetCasterGUID();
+ args.SpellValueOverrides.AddBP0(5000 * aurEff->GetTickNumber());
+ caster->CastSpell(GetTarget(), SPELL_SOUL_RIP_DAMAGE, args);
+ }
}
void Register() override
@@ -3014,8 +3020,9 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 heal = static_cast<int32>(damageInfo->GetDamage()) / 2;
- GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(damageInfo->GetDamage() / 2);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DARK_HUNGER_HEAL, args);
}
void Register() override
@@ -3048,7 +3055,7 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader
{
// m_originalCaster to allow stacking from different casters, meh
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEATH)
- GetTarget()->CastSpell(nullptr, SPELL_HARVESTED_SOUL, true, nullptr, nullptr, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
+ GetTarget()->CastSpell(nullptr, SPELL_HARVESTED_SOUL, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 826314e1b41..c3a26f54b25 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -183,7 +183,7 @@ class DelayedCastEvent : public BasicEvent
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
{
- _trigger->CastSpell(_trigger, _spellId, false, nullptr, nullptr, _originalCaster);
+ _trigger->CastSpell(_trigger, _spellId, _originalCaster);
if (_despawnTime)
_trigger->DespawnOrUnsummon(_despawnTime);
return true;
@@ -1111,7 +1111,7 @@ class npc_dream_cloud : public CreatureScript
case EVENT_EXPLODE:
me->GetMotionMaster()->MoveIdle();
// must use originalCaster the same for all clouds to allow stacking
- me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
+ me->CastSpell(me, EMERALD_VIGOR, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
me->DespawnOrUnsummon(100);
break;
default:
@@ -1239,7 +1239,7 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
if (!GetHitUnit())
return;
- GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, true, nullptr, nullptr, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
+ GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
}
void Register() override
@@ -1330,7 +1330,7 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader
if (!GetHitUnit())
return;
- GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, true, nullptr, nullptr, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
+ GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
}
void Register() override
@@ -1466,7 +1466,7 @@ class spell_dreamwalker_twisted_nightmares : public SpellScriptLoader
// return;
if (InstanceScript* instance = GetHitUnit()->GetInstanceScript())
- GetHitUnit()->CastSpell(nullptr, GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, true, nullptr, nullptr, instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
+ GetHitUnit()->CastSpell(nullptr, GetSpellInfo()->GetEffect(effIndex)->TriggerSpell, instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 67e7b2d1f2c..1fad25c79eb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -832,7 +832,7 @@ class boss_sister_svalna : public CreatureScript
switch (action)
{
case ACTION_KILL_CAPTAIN:
- me->CastCustomSpell(SPELL_CARESS_OF_DEATH, SPELLVALUE_MAX_TARGETS, 1, me, true);
+ DoCastSelf(SPELL_CARESS_OF_DEATH, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
break;
case ACTION_START_GAUNTLET:
me->setActive(true);
@@ -887,7 +887,9 @@ class boss_sister_svalna : public CreatureScript
if (TempSummon* summon = target->SummonCreature(NPC_IMPALING_SPEAR, *target))
{
Talk(EMOTE_SVALNA_IMPALE, target);
- summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddBP0(1);
+ summon->CastSpell(target, VEHICLE_SPELL_RIDE_HARDCODED, args);
summon->AddUnitFlag2(UnitFlags2(UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT));
}
break;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
index a8b928996a1..3f73afebd60 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -68,7 +68,7 @@ class icecrown_citadel_teleport : public GameObjectScript
return true;
}
- player->CastSpell(player, spell, true);
+ player->CastSpell(player, spell->Id, true);
return true;
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index 12786c9e7f6..d2f992da8ed 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -143,7 +143,7 @@ public:
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
- victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, nullptr, nullptr, me->GetGUID());
+ victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, me->GetGUID());
Talk(SAY_SLAY);
}
@@ -198,7 +198,7 @@ public:
{
if (Creature* creatureTarget = ObjectAccessor::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(guardCorpses)))
{
- creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, nullptr, nullptr, me->GetGUID());
+ creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, me->GetGUID());
creatureTarget->AI()->Talk(EMOTE_SCARAB);
creatureTarget->DespawnOrUnsummon();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 2d1d1263978..b07fb10ff39 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -735,7 +735,11 @@ class spell_four_horsemen_mark : public SpellScriptLoader
break;
}
if (damage)
- caster->CastCustomSpell(SPELL_MARK_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetTarget());
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(damage);
+ caster->CastSpell(GetTarget(), SPELL_MARK_DAMAGE, args);
+ }
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index 9ccf2bc33b6..42ff96345db 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -316,7 +316,11 @@ public:
{
int32 damage = int32(unit->GetHealth()) - int32(unit->CountPctFromMaxHealth(5));
if (damage > 0)
- GetCaster()->CastCustomSpell(SPELL_DECIMATE_DMG, SPELLVALUE_BASE_POINT0, damage, unit);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(damage);
+ GetCaster()->CastSpell(unit, SPELL_DECIMATE_DMG, args);
+ }
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 73dcd478546..df225915ae0 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -165,7 +165,7 @@ class spell_grobbulus_mutating_injection : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
caster->CastSpell(GetTarget(), SPELL_MUTATING_EXPLOSION, true);
- GetTarget()->CastSpell(GetTarget(), SPELL_POISON_CLOUD, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_POISON_CLOUD, { aurEff, GetCasterGUID() });
}
}
@@ -205,7 +205,10 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader
uint32 triggerSpell = aurEff->GetSpellEffectInfo()->TriggerSpell;
int32 mod = int32(((float(aurEff->GetTickNumber()) / aurEff->GetTotalTicks()) * 0.9f + 0.1f) * 10000 * 2 / 3);
- GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff);
+
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_RADIUS_MOD, mod);
+ GetTarget()->CastSpell(nullptr, triggerSpell, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index d6cfcf0a165..33bff540e2d 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -928,7 +928,9 @@ public:
if (int32 mana = int32(target->GetMaxPower(POWER_MANA) / 10))
{
mana = target->ModifyPower(POWER_MANA, -mana);
- target->CastCustomSpell(SPELL_MANA_DETONATION_DAMAGE, SPELLVALUE_BASE_POINT0, -mana * 10, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(-mana * 10);
+ target->CastSpell(target, SPELL_MANA_DETONATION_DAMAGE, args);
}
}
@@ -960,7 +962,11 @@ class spell_kelthuzad_frost_blast : public AuraScript
// Stuns the target, dealing 26% of the target's maximum health in Frost damage every second for 4 sec.
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(SPELL_FROST_BLAST_DMG, SPELLVALUE_BASE_POINT0, int32(GetTarget()->CountPctFromMaxHealth(26)), GetTarget(), true, nullptr, aurEff);
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(GetTarget()->CountPctFromMaxHealth(26));
+ caster->CastSpell(GetTarget(), SPELL_FROST_BLAST_DMG, args);
+ }
}
void Register() override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index e098294d78f..4b07cf6165c 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -181,7 +181,7 @@ class spell_loatheb_deathbloom : public SpellScriptLoader
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
return;
- GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, true, nullptr, eff, GetCasterGUID());
+ GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, CastSpellExtraArgs(eff).SetOriginalCaster(GetCasterGUID()));
}
void Register() override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index ab626aeccd3..a41c523d923 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -221,7 +221,7 @@ public:
if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
{
visibleTimer = (me->GetDistance2d(victim)/WEB_WRAP_MOVE_SPEED + 0.5f) * IN_MILLISECONDS;
- victim->CastSpell(victim, SPELL_WEB_WRAP, true, nullptr, nullptr, me->GetGUID());
+ victim->CastSpell(victim, SPELL_WEB_WRAP, me->GetGUID());
}
}
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 04a64982fde..414a651e6ec 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -776,14 +776,12 @@ public:
switch (eventId)
{
case EVENT_START_FIRST_RANDOM_PORTAL:
- me->CastCustomSpell(SPELL_RANDOM_PORTAL, SPELLVALUE_MAX_TARGETS, 1);
+ case EVENT_RANDOM_PORTAL:
+ DoCastAOE(SPELL_RANDOM_PORTAL, { SPELLVALUE_MAX_TARGETS,1 });
break;
case EVENT_STOP_PORTAL_BEAM:
me->InterruptNonMeleeSpells(true);
break;
- case EVENT_RANDOM_PORTAL:
- me->CastCustomSpell(SPELL_RANDOM_PORTAL, SPELLVALUE_MAX_TARGETS, 1);
- break;
case EVENT_LAND_START_ENCOUNTER:
if (GameObject* iris = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_FOCUSING_IRIS_GUID)))
{
@@ -2029,7 +2027,7 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
void TriggerDamageSpellFromPlayer()
{
if (Player* hitTarget = GetHitPlayer())
- hitTarget->CastSpell(hitTarget, SPELL_ARCANE_BARRAGE_DAMAGE, true, nullptr, nullptr, GetCaster()->GetGUID());
+ hitTarget->CastSpell(hitTarget, SPELL_ARCANE_BARRAGE_DAMAGE, GetCaster()->GetGUID());
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 2ebe574753e..88a9bce7b78 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -200,7 +200,7 @@ public:
summoned->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f);
// Why healing when just summoned?
- summoned->CastSpell(summoned, SPELL_HEAT, false, nullptr, nullptr, me->GetGUID());
+ summoned->CastSpell(summoned, SPELL_HEAT, CastSpellExtraArgs().SetOriginalCaster(me->GetGUID()));
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index 0a1f013f647..0df787fea3d 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -735,7 +735,7 @@ class spell_assembly_rune_of_summoning : public SpellScriptLoader
void HandlePeriodic(AuraEffect const* aurEff)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_RUNE_OF_SUMMONING_SUMMON, true, nullptr, aurEff, GetTarget()->IsSummon() ? GetTarget()->ToTempSummon()->GetSummonerGUID() : ObjectGuid::Empty);
+ GetTarget()->CastSpell(GetTarget(), SPELL_RUNE_OF_SUMMONING_SUMMON, { aurEff, GetTarget()->IsSummon() ? GetTarget()->ToTempSummon()->GetSummonerGUID() : ObjectGuid::Empty });
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index c3a141dee88..87be13e900c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -1010,7 +1010,7 @@ public:
{
if (Creature* trigger = DoSummonFlyer(NPC_MIMIRON_TARGET_BEACON, me, 20, 0, 1000, TEMPSUMMON_TIMED_DESPAWN))
{
- trigger->CastSpell(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), SPELL_MIMIRON_S_INFERNO, true);
+ trigger->CastSpell(me->GetPosition(), SPELL_MIMIRON_S_INFERNO, true);
infernoTimer = 2000;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index cac88a9edb9..5282b4598ac 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -379,7 +379,9 @@ class boss_freya : public CreatureScript
else
Talk(SAY_AGGRO_WITH_ELDER);
- me->CastCustomSpell(SPELL_ATTUNED_TO_NATURE, SPELLVALUE_AURA_STACK, 150, me, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 150);
+ me->CastSpell(me, SPELL_ATTUNED_TO_NATURE, args);
events.ScheduleEvent(EVENT_WAVE, 10000);
events.ScheduleEvent(EVENT_EONAR_GIFT, 25000);
@@ -754,7 +756,9 @@ class boss_elder_brightleaf : public CreatureScript
uint8 stackAmount = 0;
if (Aura* aura = me->GetAura(SPELL_FLUX_AURA))
stackAmount = aura->GetStackAmount();
- me->CastCustomSpell(SPELL_SOLAR_FLARE, SPELLVALUE_MAX_TARGETS, stackAmount, me, false);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, stackAmount);
+ me->CastSpell(me, SPELL_SOLAR_FLARE, args);
events.ScheduleEvent(EVENT_SOLAR_FLARE, urand(5000, 10000));
break;
}
@@ -839,8 +843,9 @@ class boss_elder_stonebark : public CreatureScript
if (me->HasAura(SPELL_PETRIFIED_BARK))
{
- int32 reflect = damage;
- who->CastCustomSpell(who, SPELL_PETRIFIED_BARK_DMG, &reflect, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(damage);
+ who->CastSpell(who, SPELL_PETRIFIED_BARK_DMG, args);
damage = 0;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 09a4081c4f2..8e352cff3d3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -465,7 +465,11 @@ class spell_general_vezax_mark_of_the_faceless : public SpellScriptLoader
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(SPELL_MARK_OF_THE_FACELESS_DAMAGE, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), GetTarget(), true);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, aurEff->GetAmount());
+ caster->CastSpell(GetTarget(), SPELL_MARK_OF_THE_FACELESS_DAMAGE, args);
+ }
}
void Register() override
@@ -528,9 +532,11 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
int32 mana = int32(aurEff->GetAmount() * std::pow(2.0f, GetStackAmount())); // mana restore - bp * 2^stackamount
- int32 damage = mana * 2;
- caster->CastCustomSpell(GetTarget(), SPELL_SARONITE_VAPORS_ENERGIZE, &mana, nullptr, nullptr, true);
- caster->CastCustomSpell(GetTarget(), SPELL_SARONITE_VAPORS_DAMAGE, &damage, nullptr, nullptr, true);
+ CastSpellExtraArgs args1(TRIGGERED_FULL_MASK), args2(TRIGGERED_FULL_MASK);
+ args1.SpellValueOverrides.AddBP0(mana);
+ args2.SpellValueOverrides.AddBP0(mana * 2);
+ caster->CastSpell(GetTarget(), SPELL_SARONITE_VAPORS_ENERGIZE, args1);
+ caster->CastSpell(GetTarget(), SPELL_SARONITE_VAPORS_DAMAGE, args2);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 0069920827a..8262a82012a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -1051,7 +1051,9 @@ public:
return;
int32 damage = int32(200 * std::pow(2.0f, GetStackAmount()));
- caster->CastCustomSpell(caster, SPELL_BITING_COLD_DAMAGE, &damage, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(damage);
+ caster->CastSpell(caster, SPELL_BITING_COLD_DAMAGE, args);
if (caster->isMoving())
caster->RemoveAuraFromStack(SPELL_BITING_COLD_TRIGGERED);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 4e499f414b0..c1e521a4899 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -343,7 +343,7 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader
ObjectGuid originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetGuidData(BOSS_KOLOGARN) : ObjectGuid::Empty;
uint32 spellId = GetEffectValue();
for (uint8 i = 0; i < 5; ++i)
- caster->CastSpell(caster, spellId, true, nullptr, nullptr, originalCaster);
+ caster->CastSpell(caster, spellId, originalCaster);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 91e028c4873..331bd13be06 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -495,7 +495,7 @@ class boss_mimiron : public CreatureScript
{
case EVENT_SUMMON_FLAMES:
if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER))
- worldtrigger->CastCustomSpell(SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, SPELLVALUE_MAX_TARGETS, 3, nullptr, true, nullptr, nullptr, me->GetGUID());
+ worldtrigger->CastSpell(nullptr, SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, CastSpellExtraArgs(me->GetGUID()).AddSpellMod(SPELLVALUE_MAX_TARGETS, 3));
events.RescheduleEvent(EVENT_SUMMON_FLAMES, 28000);
break;
case EVENT_INTRO_1:
@@ -1234,15 +1234,15 @@ class boss_aerial_command_unit : public CreatureScript
switch (eventId)
{
case EVENT_SUMMON_FIRE_BOTS:
- me->CastCustomSpell(SPELL_SUMMON_FIRE_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 3, nullptr, true);
+ DoCastAOE(SPELL_SUMMON_FIRE_BOT_TRIGGER, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_MAX_TARGETS, 3));
events.RescheduleEvent(EVENT_SUMMON_FIRE_BOTS, 45000, 0, PHASE_AERIAL_COMMAND_UNIT);
break;
case EVENT_SUMMON_JUNK_BOT:
- me->CastCustomSpell(SPELL_SUMMON_JUNK_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
+ DoCastAOE(SPELL_SUMMON_JUNK_BOT_TRIGGER, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
events.RescheduleEvent(EVENT_SUMMON_JUNK_BOT, urand(11000, 12000), 0, PHASE_AERIAL_COMMAND_UNIT);
break;
case EVENT_SUMMON_ASSAULT_BOT:
- me->CastCustomSpell(SPELL_SUMMON_ASSAULT_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
+ DoCastAOE(SPELL_SUMMON_ASSAULT_BOT_TRIGGER, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
events.RescheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 30000, 0, PHASE_AERIAL_COMMAND_UNIT);
break;
case EVENT_SUMMON_BOMB_BOT:
@@ -2143,7 +2143,7 @@ class spell_mimiron_rapid_burst : public SpellScriptLoader
void HandleDummyTick(AuraEffect const* aurEff)
{
if (GetCaster())
- GetCaster()->CastSpell(GetTarget(), aurEff->GetTickNumber() % 2 == 0 ? SPELL_RAPID_BURST_RIGHT : SPELL_RAPID_BURST_LEFT, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetTarget(), aurEff->GetTickNumber() % 2 == 0 ? SPELL_RAPID_BURST_RIGHT : SPELL_RAPID_BURST_LEFT, aurEff);
}
void Register() override
@@ -2191,7 +2191,7 @@ class spell_mimiron_rocket_strike : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastSpell(nullptr, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, true, nullptr, nullptr, GetCaster()->GetGUID());
+ GetHitUnit()->CastSpell(nullptr, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, GetCaster()->GetGUID());
}
void Register() override
@@ -2289,7 +2289,7 @@ class spell_mimiron_rocket_strike_target_select : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_ROCKET_STRIKE, true, nullptr, nullptr, instance->GetGuidData(DATA_VX_001));
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_ROCKET_STRIKE, instance->GetGuidData(DATA_VX_001));
GetCaster()->SetDisplayId(11686);
}
@@ -2354,7 +2354,7 @@ class spell_mimiron_summon_assault_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
+ caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
}
void Register() override
@@ -2421,7 +2421,7 @@ class spell_mimiron_summon_fire_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
+ caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
}
void Register() override
@@ -2609,7 +2609,7 @@ class spell_mimiron_summon_junk_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
+ caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 758b9cf2b6f..b973e63159b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -961,7 +961,7 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader
{
uint8 a = urand(0, 4);
uint32 spellId = spells[a];
- toyPile->CastSpell(toyPile, spellId, true, nullptr, nullptr, instance->GetGuidData(BOSS_XT002));
+ toyPile->CastSpell(toyPile, spellId, instance->GetGuidData(BOSS_XT002));
}
}
}
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 244683d8994..7d7ededb054 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -518,7 +518,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- me->CastCustomSpell(SPELL_SUMMON_GUARDIAN_2, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_SUMMON_GUARDIAN_2, { SPELLVALUE_MAX_TARGETS, 1 });
DoCast(me, SPELL_SANITY_PERIODIC);
events.ScheduleEvent(EVENT_LOCK_DOOR, 15000);
@@ -562,7 +562,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
events.ScheduleEvent(EVENT_EXTINGUISH_ALL_LIFE, 10000); // cast it again after a short while, players can survive
break;
case EVENT_SUMMON_GUARDIAN_OF_YOGG_SARON:
- me->CastCustomSpell(SPELL_SUMMON_GUARDIAN_2, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_SUMMON_GUARDIAN_2, { SPELLVALUE_MAX_TARGETS, 1 });
++_guardiansCount;
if (_guardiansCount <= 6 && _guardiansCount % 3 == 0)
_guardianTimer -= 5000;
@@ -573,7 +573,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_CORRUPTOR_TENTACLE, 30000, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
break;
case EVENT_SUMMON_CONSTRICTOR_TENTACLE:
- me->CastCustomSpell(SPELL_CONSTRICTOR_TENTACLE, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_CONSTRICTOR_TENTACLE, { SPELLVALUE_MAX_TARGETS, 1 });
events.ScheduleEvent(EVENT_SUMMON_CONSTRICTOR_TENTACLE, 25000, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
break;
case EVENT_SUMMON_CRUSHER_TENTACLE:
@@ -795,15 +795,15 @@ class boss_sara : public CreatureScript
switch (eventId)
{
case EVENT_SARAS_FERVOR:
- me->CastCustomSpell(SPELL_SARAS_FERVOR_TARGET_SELECTOR, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_SARAS_FERVOR_TARGET_SELECTOR, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_SARAS_FERVOR, 6000, 0, PHASE_ONE);
break;
case EVENT_SARAS_ANGER:
- me->CastCustomSpell(SPELL_SARAS_ANGER_TARGET_SELECTOR, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_SARAS_ANGER_TARGET_SELECTOR, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_SARAS_ANGER, urand(6000, 8000), 0, PHASE_ONE);
break;
case EVENT_SARAS_BLESSING:
- me->CastCustomSpell(SPELL_SARAS_BLESSING_TARGET_SELECTOR, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_SARAS_BLESSING_TARGET_SELECTOR, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_SARAS_BLESSING, urand(6000, 30000), 0, PHASE_ONE);
break;
case EVENT_TRANSFORM_1:
@@ -837,15 +837,15 @@ class boss_sara : public CreatureScript
_events.ScheduleEvent(EVENT_DEATH_RAY, 21000, 0, PHASE_TWO);
break;
case EVENT_MALADY_OF_THE_MIND:
- me->CastCustomSpell(SPELL_MALADY_OF_THE_MIND, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_MALADY_OF_THE_MIND, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_MALADY_OF_THE_MIND, urand(18000, 25000), 0, PHASE_TWO);
break;
case EVENT_PSYCHOSIS:
- me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_PSYCHOSIS, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_PSYCHOSIS, 4000, 0, PHASE_TWO);
break;
case EVENT_BRAIN_LINK:
- me->CastCustomSpell(SPELL_BRAIN_LINK, SPELLVALUE_MAX_TARGETS, 2);
+ DoCastAOE(SPELL_BRAIN_LINK, { SPELLVALUE_MAX_TARGETS, 2 });
_events.ScheduleEvent(EVENT_BRAIN_LINK, urand(23000, 26000), 0, PHASE_TWO);
break;
default:
@@ -1641,7 +1641,7 @@ class npc_yogg_saron_keeper : public CreatureScript
switch (eventId)
{
case EVENT_DESTABILIZATION_MATRIX:
- me->CastCustomSpell(SPELL_DESTABILIZATION_MATRIX, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_DESTABILIZATION_MATRIX, { SPELLVALUE_MAX_TARGETS, 1 });
_events.ScheduleEvent(EVENT_DESTABILIZATION_MATRIX, urand(15000, 25000), 0, PHASE_TWO);
break;
case EVENT_HODIRS_PROTECTIVE_GAZE:
@@ -2495,7 +2495,9 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->CastCustomSpell(SPELL_EMPOWERED_BUFF, SPELLVALUE_AURA_STACK, 9, GetTarget(), TRIGGERED_FULL_MASK);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 9);
+ GetTarget()->CastSpell(GetTarget(), SPELL_EMPOWERED_BUFF, args);
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
@@ -2507,7 +2509,9 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161
if (stack)
{
target->RemoveAurasDueToSpell(SPELL_WEAKENED);
- target->CastCustomSpell(SPELL_EMPOWERED_BUFF, SPELLVALUE_AURA_STACK, stack, target, TRIGGERED_FULL_MASK);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, stack);
+ target->CastSpell(target, SPELL_EMPOWERED_BUFF, args);
}
else if (!target->HealthAbovePct(1) && !target->HasAura(SPELL_WEAKENED))
target->CastSpell(target, SPELL_WEAKENED, true);
@@ -2735,8 +2739,9 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 damage = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), 60);
- GetTarget()->CastCustomSpell(SPELL_GRIM_REPRISAL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, damageInfo->GetAttacker(), true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), 60));
+ GetTarget()->CastSpell(damageInfo->GetAttacker(), SPELL_GRIM_REPRISAL_DAMAGE, args);
}
void Register() override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 3252ca42baf..329a793e76a 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -470,7 +470,7 @@ class spell_ingvar_woe_strike : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_WOE_STRIKE_EFFECT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_WOE_STRIKE_EFFECT, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index cbd69caf365..4dcba5d18ba 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -223,7 +223,7 @@ class spell_uk_second_wind : public SpellScriptLoader
{
PreventDefaultAction();
Unit* caster = eventInfo.GetActionTarget();
- caster->CastSpell(caster, SPELL_SECOND_WIND_TRIGGER, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_SECOND_WIND_TRIGGER, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index f23e8fe27dc..1600591844d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -132,7 +132,7 @@ public:
bool Execute(uint64 /*eventTime*/, uint32 /*diff*/) override
{
- _owner->CastCustomSpell(SPELL_AWAKEN_SUBBOSS, SPELLVALUE_MAX_TARGETS, 1, _owner);
+ _owner->CastSpell(_owner, SPELL_AWAKEN_SUBBOSS, { SPELLVALUE_MAX_TARGETS, 1 });
return true;
}
@@ -287,7 +287,7 @@ public:
if (_encountersCount == _dungeonMode)
orb->CastSpell(orb, SPELL_AWAKEN_GORTOK, true);
else
- orb->CastCustomSpell(SPELL_AWAKEN_SUBBOSS, SPELLVALUE_MAX_TARGETS, 1, orb, true);
+ orb->CastSpell(orb, SPELL_AWAKEN_SUBBOSS, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
break;
}
case ACTION_START_FIGHT:
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
index ec904c0cf11..625ae8dffdf 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
@@ -201,7 +201,7 @@ class spell_koralon_meteor_fists : public SpellScriptLoader
void TriggerFists(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, aurEff);
}
void Register() override
@@ -276,7 +276,7 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader
void TriggerFists(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
index acd2e3bd604..2004e9b0574 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -78,9 +78,11 @@ struct boss_toravon : public BossAI
switch (eventId)
{
case EVENT_FROZEN_ORB:
- me->CastCustomSpell(SPELL_FROZEN_ORB, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me);
+ {
+ me->CastSpell(me, SPELL_FROZEN_ORB, CastSpellExtraArgs().AddSpellMod(SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3)));
events.Repeat(Seconds(32));
break;
+ }
case EVENT_WHITEOUT:
DoCastSelf(SPELL_WHITEOUT);
events.Repeat(Seconds(38));
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index 5046342118e..db2946ce825 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -109,7 +109,7 @@ class spell_moragg_ray : public SpellScriptLoader
if (Unit* target = GetTarget()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
{
uint32 triggerSpell = aurEff->GetSpellEffectInfo()->TriggerSpell;
- GetTarget()->CastSpell(target, triggerSpell, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ GetTarget()->CastSpell(target, triggerSpell, aurEff);
}
}
@@ -149,12 +149,12 @@ public:
if (Unit* caster = GetCaster())
{
if (aurEff->GetTickNumber() >= 8)
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_3, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_3, aurEff);
if (aurEff->GetTickNumber() >= 4)
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_2, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_2, aurEff);
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_1, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_1, aurEff);
}
}
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index efe6943e3c3..1e8a13dbc33 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -97,7 +97,7 @@ public:
break;
case 1:
Talk(SAY_WP_3);
- me->CastSpell(5918.33f, 5372.91f, -98.770f, SPELL_EXPLODE_CRYSTAL, true);
+ me->CastSpell({ 5918.33f, 5372.91f, -98.770f }, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5918.33f, 5372.91f, -98.770f, 0, QuaternionData(), TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
@@ -108,7 +108,7 @@ public:
Talk(SAY_WP_5);
break;
case 8:
- me->CastSpell(5887.37f, 5379.39f, -91.289f, SPELL_EXPLODE_CRYSTAL, true);
+ me->CastSpell({ 5887.37f, 5379.39f, -91.289f }, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5887.37f, 5379.39f, -91.289f, 0, QuaternionData(), TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index e84d65c9349..3232b66fb76 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -829,7 +829,7 @@ public:
if (seatId != SEAT_INITIAL)
return;
- me->CastCustomSpell(SPELL_GRIP, SPELLVALUE_AURA_STACK, 50);
+ me->CastSpell(nullptr, SPELL_GRIP, CastSpellExtraArgs().AddSpellMod(SPELLVALUE_AURA_STACK, 50));
DoCastAOE(SPELL_CLAW_SWIPE_PERIODIC);
_scheduler.Async([this]
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index c5340b4e5e7..7c95c8d17b2 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -746,7 +746,7 @@ class spell_random_ingredient : public SpellScriptLoader
if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f))
{
- finklestein->CastSpell(player, FetchIngredients[ingredient][0], true, nullptr);
+ finklestein->CastSpell(player, FetchIngredients[ingredient][0], true);
finklestein->AI()->Talk(FetchIngredients[ingredient][3], player);
}
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.cpp
index 127d97bd007..a6fab624db4 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.cpp
@@ -45,7 +45,7 @@ class spell_mark_of_malice : public SpellScriptLoader
if (GetCharges() > 1)
return;
- GetTarget()->CastSpell(GetTarget(), SPELL_MARK_OF_MALICE_TRIGGERED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MARK_OF_MALICE_TRIGGERED, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
index 14e83d45ffe..e75a8448f2a 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -264,7 +264,7 @@ class spell_illidari_nightlord_shadow_inferno : public AuraScript
{
PreventDefaultAction();
int32 bp = aurEffect->GetTickNumber() * aurEffect->GetAmount();
- GetUnitOwner()->CastCustomSpell(SPELL_SHADOW_INFERNO_DAMAGE, SPELLVALUE_BASE_POINT0, bp, GetUnitOwner(), true);
+ GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SHADOW_INFERNO_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp));
}
void Register() override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
index 4e9d325d9b0..cf1068c8464 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
@@ -460,8 +460,7 @@ struct boss_lady_malande : public IllidariCouncilBossAI
void HealReceived(Unit* /*who*/, uint32& addhealth) override
{
// Need be negative to heal trigger
- int32 bp = addhealth * (-1);
- me->CastCustomSpell(SPELL_SHARED_RULE, SPELLVALUE_BASE_POINT0, bp, nullptr, true);
+ me->CastSpell(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(-int32(addhealth)));
}
void ExecuteEvent(uint32 eventId) override
@@ -607,8 +606,7 @@ class spell_illidari_council_balance_of_power : public AuraScript
void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
{
PreventDefaultAction();
- int32 bp = dmgInfo.GetDamage();
- GetTarget()->CastCustomSpell(SPELL_SHARED_RULE, SPELLVALUE_BASE_POINT0, bp, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(aurEff).AddSpellBP0(dmgInfo.GetDamage()));
}
void Register() override
@@ -632,7 +630,7 @@ class spell_illidari_council_deadly_strike : public AuraScript
PreventDefaultAction();
if (Unit* victim = GetTarget()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0))
- GetTarget()->CastSpell(victim, SPELL_DEADLY_POISON, true, nullptr, aurEff);
+ GetTarget()->CastSpell(victim, SPELL_DEADLY_POISON, aurEff);
}
void Register() override
@@ -679,8 +677,7 @@ class spell_illidari_council_reflective_shield : public AuraScript
if (dmgInfo.GetAttacker() == target)
return;
- int32 bp = absorbAmount / 2;
- target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_DAMAGE, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ target->CastSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(absorbAmount/2));
}
void Register() override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index 9425a218cbd..655506ad2bf 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -42,7 +42,7 @@ enum Spells
SPELL_FATAL_ATTRACTION_DAMAGE = 40871,
SPELL_SILENCING_SHRIEK = 40823,
SPELL_SABER_LASH_IMMUNITY = 43690,
- SPELL_FATAL_ATTACTION_TELEPORT = 40869,
+ SPELL_FATAL_ATTRACTION_TELEPORT = 40869,
SPELL_BERSERK = 45078,
SPELL_FATAL_ATTRACTION = 41001,
SPELL_SINISTER_PERIODIC = 40863,
@@ -173,7 +173,7 @@ struct boss_mother_shahraz : public BossAI
break;
case EVENT_FATAL_ATTRACTION:
Talk(SAY_SPELL);
- me->CastCustomSpell(SPELL_FATAL_ATTACTION_TELEPORT, SPELLVALUE_MAX_TARGETS, 3, me);
+ DoCastSelf(SPELL_FATAL_ATTRACTION_TELEPORT, { SPELLVALUE_MAX_TARGETS, 3 });
events.Repeat(Seconds(30));
break;
case EVENT_SILENCING_SHRIEK:
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 21d240728d9..98f8e278990 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -379,7 +379,7 @@ struct boss_essence_of_suffering : public BossAI
switch (eventId)
{
case EVENT_SOUL_DRAIN:
- me->CastCustomSpell(SPELL_SOUL_DRAIN, SPELLVALUE_MAX_TARGETS, 5, me);
+ DoCastSelf(SPELL_SOUL_DRAIN, { SPELLVALUE_MAX_TARGETS, 5 });
events.Repeat(Seconds(30), Seconds(35));
break;
case EVENT_FRENZY:
@@ -583,7 +583,7 @@ struct boss_essence_of_anger : public BossAI
break;
case EVENT_SPITE:
Talk(ANGER_SAY_SPITE);
- me->CastCustomSpell(SPELL_SPITE, SPELLVALUE_MAX_TARGETS, 3, me);
+ DoCastSelf(SPELL_SPITE, { SPELLVALUE_MAX_TARGETS, 3 });
events.Repeat(Seconds(20));
break;
case EVENT_START_CHECK_TANKER:
@@ -682,8 +682,7 @@ class spell_reliquary_of_souls_aura_of_desire : public AuraScript
return;
Unit* caster = eventInfo.GetActor();
- int32 bp = damageInfo->GetDamage() / 2;
- caster->CastCustomSpell(SPELL_AURA_OF_DESIRE_DAMAGE, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_AURA_OF_DESIRE_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(damageInfo->GetDamage() / 2));
}
void UpdateAmount(AuraEffect* /*aurEff*/)
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index aeb35728456..3f48e84c54a 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -199,7 +199,7 @@ struct boss_teron_gorefiend : public BossAI
events.Repeat(Seconds(30), Seconds(35));
break;
case EVENT_CRUSHING_SHADOWS:
- me->CastCustomSpell(SPELL_CRUSHING_SHADOWS, SPELLVALUE_MAX_TARGETS, 5, me);
+ DoCastSelf(SPELL_CRUSHING_SHADOWS, { SPELLVALUE_MAX_TARGETS, 5 });
Talk(SAY_CRUSHING);
events.Repeat(Seconds(18), Seconds(30));
break;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 8888ed12707..2351119626d 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -514,8 +514,7 @@ public:
if (me->IsWithinDist(me->GetVictim(), 30))
{
//DoCastVictim(SPELL_CHAOS_BLAST, true);
- int damage = 100;
- me->CastCustomSpell(me->GetVictim(), SPELL_CHAOS_BLAST, &damage, nullptr, nullptr, false, nullptr, nullptr, me->GetGUID());
+ me->CastSpell(me->GetVictim(), SPELL_CHAOS_BLAST, CastSpellExtraArgs().SetOriginalCaster(me->GetGUID()).AddSpellBP0(100));
}
ChaosBlast_Timer = 3000;
} else ChaosBlast_Timer -= diff;
@@ -671,8 +670,7 @@ public:
if (me->IsWithinDist(me->GetVictim(), 30))
{
//DoCastVictim(SPELL_CHAOS_BLAST, true);
- int damage = 100;
- me->CastCustomSpell(me->GetVictim(), SPELL_CHAOS_BLAST, &damage, nullptr, nullptr, false, nullptr, nullptr, me->GetGUID());
+ me->CastSpell(me->GetVictim(), SPELL_CHAOS_BLAST, CastSpellExtraArgs().SetOriginalCaster(me->GetGUID()).AddSpellBP0(100));
ChaosBlast_Timer = 3000;
}
} else ChaosBlast_Timer -= diff;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 44fbabf16e1..20d1b186949 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -436,9 +436,8 @@ public:
if (ShootBowTimer <= diff)
{
- int bp0 = 1100;
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- me->CastCustomSpell(target, SPELL_SHOOT, &bp0, nullptr, nullptr, true);
+ me->CastSpell(target, SPELL_SHOOT, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(1100));
ShootBowTimer = 4000 + rand32() % 5000;
MultiShotTimer += 1500; // add global cooldown
} else ShootBowTimer -= diff;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
index 46bf1018822..10087f0b1bf 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
@@ -1015,7 +1015,7 @@ public:
void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
- GetCaster()->CastSpell(GetHitDest()->GetPositionX(), GetHitDest()->GetPositionY(), GetHitDest()->GetPositionZ(), SPELL_ICE_BOMBARDMENT, true);
+ GetCaster()->CastSpell(GetHitDest()->GetPosition(), SPELL_ICE_BOMBARDMENT, true);
}
void Register() override
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index 038dc187265..2ac442674ce 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -133,11 +133,11 @@ class boss_gruul : public CreatureScript
switch (urand(0, 1))
{
case 0:
- target->CastSpell(target, SPELL_MAGNETIC_PULL, true, nullptr, nullptr, me->GetGUID());
+ target->CastSpell(target, SPELL_MAGNETIC_PULL, me->GetGUID());
break;
case 1:
- target->CastSpell(target, SPELL_KNOCK_BACK, true, nullptr, nullptr, me->GetGUID());
+ target->CastSpell(target, SPELL_KNOCK_BACK, me->GetGUID());
break;
}
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index f8ae540f12e..a82ba283d18 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -183,7 +183,7 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
uint32 triggerSpell = aurEff->GetSpellEffectInfo()->TriggerSpell;
int32 mod = int32(((float(aurEff->GetTickNumber()) / aurEff->GetTotalTicks()) * 0.9f + 0.1f) * 10000 * 2 / 3);
- GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_RADIUS_MOD, mod));
}
void Register() override
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 2e7cf22c93c..9daac72a439 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -237,11 +237,11 @@ class boss_magtheridon : public CreatureScript
events.Repeat(Seconds(10));
break;
case EVENT_BLAZE:
- me->CastCustomSpell(SPELL_BLAZE_TARGET, SPELLVALUE_MAX_TARGETS, 1);
+ DoCastAOE(SPELL_BLAZE_TARGET, { SPELLVALUE_MAX_TARGETS, 1 });
events.Repeat(Seconds(20));
break;
case EVENT_QUAKE:
- me->CastCustomSpell(SPELL_QUAKE, SPELLVALUE_MAX_TARGETS, 5);
+ DoCastAOE(SPELL_QUAKE, { SPELLVALUE_MAX_TARGETS, 5 });
events.Repeat(Seconds(60));
break;
case EVENT_START_FIGHT:
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index d01ebea8b89..e44dfd8c9c1 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -213,7 +213,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
//triggered spell of consumption does not properly show it's SpellVisual, wrong spellid?
summoned->CastSpell(summoned, SPELL_TEMPORARY_VISUAL, true);
- summoned->CastSpell(summoned, SPELL_CONSUMPTION, false, nullptr, nullptr, me->GetGUID());
+ summoned->CastSpell(summoned, SPELL_CONSUMPTION, CastSpellExtraArgs().SetOriginalCaster(me->GetGUID()));
}
void KilledUnit(Unit* /*victim*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index e77c250ecff..185247c7225 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -608,7 +608,7 @@ class spell_alar_flame_quills : public AuraScript
// cast 24 spells 34269-34289, 34314-34316
for (uint32 spellId : flameQuillsSpells)
- GetTarget()->CastSpell(nullptr, spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, spellId, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
index 480080dbca5..2a1592b6a6c 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -126,7 +126,7 @@ class boss_void_reaver : public CreatureScript
target = me->GetVictim();
if (target)
- me->CastSpell(target, SPELL_ARCANE_ORB, false, nullptr, nullptr);
+ me->CastSpell(target, SPELL_ARCANE_ORB);
events.ScheduleEvent(EVENT_ARCANE_ORB, 3000);
break;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
index 64ab74754ec..9820ba7d654 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
@@ -244,7 +244,7 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
Unit* target = GetHitUnit();
Unit* caster = GetCaster();
- target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, nullptr, nullptr, caster->GetGUID());
+ target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, caster->GetGUID());
}
void Register() override
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index 0665d3f3fb7..f09f2007262 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -107,7 +107,7 @@ class npc_warp_splinter_treant : public CreatureScript
if (me->IsWithinMeleeRange(Warp))
{
int32 CurrentHP_Treant = (int32)me->GetHealth();
- Warp->CastCustomSpell(Warp, SPELL_HEAL_FATHER, &CurrentHP_Treant, nullptr, nullptr, true, nullptr, nullptr, me->GetGUID());
+ Warp->CastSpell(Warp, SPELL_HEAL_FATHER, CastSpellExtraArgs(me->GetGUID()).AddSpellBP0(CurrentHP_Treant));
me->DealDamage(me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false);
return;
}
diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
index 188b7544753..ee0d90b12f0 100644
--- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
+++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
@@ -200,7 +200,7 @@ class spell_mark_of_kazzak : public SpellScriptLoader
if (target->GetPower(POWER_MANA) == 0)
{
- target->CastSpell(target, SPELL_MARK_OF_KAZZAK_DAMAGE, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_MARK_OF_KAZZAK_DAMAGE, aurEff);
// Remove aura
SetDuration(0);
}
@@ -240,7 +240,7 @@ class spell_twisted_reflection : public SpellScriptLoader
if (!damageInfo || !damageInfo->GetDamage())
return;
- eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActor(), SPELL_TWISTED_REFLECTION_HEAL, true, nullptr, aurEff);
+ eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActor(), SPELL_TWISTED_REFLECTION_HEAL, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp
index e3014776f5c..a73159c4a78 100644
--- a/src/server/scripts/Outland/boss_doomwalker.cpp
+++ b/src/server/scripts/Outland/boss_doomwalker.cpp
@@ -77,7 +77,7 @@ class boss_doomwalker : public CreatureScript
void KilledUnit(Unit* victim) override
{
- victim->CastSpell(victim, SPELL_MARK_DEATH, 0);
+ victim->CastSpell(victim, SPELL_MARK_DEATH, true);
if (urand(0, 4))
return;
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index 78791aa4faf..a3fc4d1bfc9 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -849,7 +849,7 @@ class npc_simon_bunny : public CreatureScript
if (spell->Id == SPELL_BAD_PRESS_TRIGGER)
{
int32 bp = (int32)((float)(fails)*0.33f*target->GetMaxHealth());
- target->CastCustomSpell(target, SPELL_BAD_PRESS_DAMAGE, &bp, nullptr, nullptr, true);
+ target->CastSpell(target, SPELL_BAD_PRESS_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(bp));
}
}
diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp
index b143cc23e97..ea4a389834a 100644
--- a/src/server/scripts/Spells/spell_dh.cpp
+++ b/src/server/scripts/Spells/spell_dh.cpp
@@ -44,7 +44,7 @@ class spell_dh_chaos_strike : public AuraScript
void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_CHAOS_STRIKE_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_CHAOS_STRIKE_ENERGIZE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(aurEff->GetAmount()).SetTriggeringAura(aurEff));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index 8519a42b06a..0f59df198c1 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -144,8 +144,9 @@ public:
if (!GetTarget()->HasAura(SPELL_DK_VOLATILE_SHIELDING))
{
- int32 bp = 2 * absorbAmount * 100 / maxHealth;
- GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(absorbAmount, 2 * absorbAmount * 100 / maxHealth));
+ GetTarget()->CastSpell(GetTarget(), SPELL_DK_RUNIC_POWER_ENERGIZE, args);
}
}
@@ -153,8 +154,9 @@ public:
{
if (AuraEffect const* volatileShielding = GetTarget()->GetAuraEffect(SPELL_DK_VOLATILE_SHIELDING, EFFECT_1))
{
- int32 damage = CalculatePct(absorbedAmount, volatileShielding->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_DK_VOLATILE_SHIELDING_DAMAGE, SPELLVALUE_BASE_POINT0, damage, nullptr, TRIGGERED_FULL_MASK, nullptr, volatileShielding);
+ CastSpellExtraArgs args(volatileShielding);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(absorbedAmount, volatileShielding->GetAmount()));
+ GetTarget()->CastSpell(nullptr, SPELL_DK_VOLATILE_SHIELDING_DAMAGE, args);
}
}
@@ -308,7 +310,7 @@ class spell_dk_death_and_decay : public SpellScript
{
if (GetCaster()->HasAura(SPELL_DK_TIGHTENING_GRASP))
if (WorldLocation const* pos = GetExplTargetDest())
- GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), SPELL_DK_TIGHTENING_GRASP_SLOW, true);
+ GetCaster()->CastSpell(*pos, SPELL_DK_TIGHTENING_GRASP_SLOW, true);
}
void Register() override
@@ -325,7 +327,7 @@ class spell_dk_death_and_decay_AuraScript : public AuraScript
void HandleDummyTick(AuraEffect const* aurEff)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, aurEff);
}
void Register() override
@@ -349,7 +351,7 @@ class spell_dk_death_coil : public SpellScript
Unit* caster = GetCaster();
caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_COIL_DAMAGE, true);
if (AuraEffect const* unholyAura = caster->GetAuraEffect(SPELL_DK_UNHOLY, EFFECT_6)) // can be any effect, just here to send SPELL_FAILED_DONT_REPORT on failure
- caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, true, nullptr, unholyAura);
+ caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, unholyAura);
}
void Register() override
@@ -481,10 +483,10 @@ class spell_dk_death_strike : public SpellScript
int32 pctOfMaxHealth = CalculatePct(spellInfo->GetEffect(EFFECT_2)->CalcValue(GetCaster()), caster->GetMaxHealth());
heal = std::max(heal, pctOfMaxHealth);
- caster->CastCustomSpell(SPELL_DK_DEATH_STRIKE_HEAL, SPELLVALUE_BASE_POINT0, heal, caster, true);
+ caster->CastSpell(caster, SPELL_DK_DEATH_STRIKE_HEAL, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, heal));
if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_DK_BLOOD_SHIELD_MASTERY, EFFECT_0))
- caster->CastCustomSpell(SPELL_DK_BLOOD_SHIELD_ABSORB, SPELLVALUE_BASE_POINT0, CalculatePct(heal, aurEff->GetAmount()), caster);
+ caster->CastSpell(caster, SPELL_DK_BLOOD_SHIELD_ABSORB, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(heal, aurEff->GetAmount())));
if (caster->HasAura(SPELL_DK_FROST))
caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_STRIKE_OFFHAND, true);
@@ -558,7 +560,7 @@ class spell_dk_festering_strike : public SpellScript
void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
- GetCaster()->CastCustomSpell(SPELL_DK_FESTERING_WOUND, SPELLVALUE_AURA_STACK, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_FESTERING_WOUND, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetEffectValue()));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index f2e581b99b7..bede40f705b 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -193,7 +193,7 @@ class spell_dru_brambles : public AuraScript
// reflect back damage to the attacker
Unit* target = GetTarget();
if (Unit* attacker = dmgInfo.GetAttacker())
- target->CastCustomSpell(SPELL_DRUID_BRAMBLES_REFLECT, SPELLVALUE_BASE_POINT0, absorbAmount, attacker, TRIGGERED_FULL_MASK);
+ target->CastSpell(attacker, SPELL_DRUID_BRAMBLES_REFLECT, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, absorbAmount));
}
void Register() override
@@ -221,7 +221,7 @@ class spell_dru_bristling_fur : public AuraScript
Unit* target = GetTarget();
uint32 rage = target->GetMaxPower(POWER_RAGE) * (float)damageInfo->GetDamage() / (float)target->GetMaxHealth();
if (rage > 0)
- target->CastCustomSpell(SPELL_DRUID_BRISTLING_FUR_GAIN_RAGE, SPELLVALUE_BASE_POINT0, rage, target, TRIGGERED_FULL_MASK);
+ target->CastSpell(target, SPELL_DRUID_BRISTLING_FUR_GAIN_RAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, rage));
}
}
@@ -288,7 +288,7 @@ public:
{
Aura* aura = unitOwner->GetAura(spellId);
if (!aura)
- unitOwner->CastCustomSpell(spellId, SPELLVALUE_AURA_STACK, amount, nullptr, TRIGGERED_FULL_MASK);
+ unitOwner->CastSpell(unitOwner, spellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, amount));
else
aura->SetStackAmount(amount);
}
@@ -615,7 +615,7 @@ public:
return;
}
- target->CastSpell(target, triggerspell, true, nullptr, aurEff);
+ target->CastSpell(target, triggerspell, aurEff);
}
void Register() override
@@ -820,7 +820,7 @@ public:
return;
if (roll_chance_i(chance))
- eventInfo.GetActor()->CastSpell(nullptr, spellId, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, spellId, aurEff);
}
void Register() override
@@ -850,64 +850,47 @@ public:
return ValidateSpellInfo({ SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, SPELL_DRUID_LIFEBLOOM_ENERGIZE });
}
- void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ void OnRemoveEffect(Unit* target, AuraEffect const* aurEff, uint32 stack)
{
- // Final heal only on duration end
- if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
- return;
-
- // final heal
- int32 stack = GetStackAmount();
int32 healAmount = aurEff->GetAmount();
if (Unit* caster = GetCaster())
{
healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack);
healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack);
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
-
// restore mana
std::vector<SpellPowerCost> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask());
auto m = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_MANA; });
if (m != costs.end())
{
- int32 returnMana = m->Amount * stack / 2;
- caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = GetCasterGUID();
+ args.AddSpellBP0(m->Amount * stack / 2);
+ caster->CastSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, args);
}
- return;
}
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ CastSpellExtraArgs args(aurEff);
+ args.OriginalCaster = GetCasterGUID();
+ args.AddSpellBP0(healAmount);
+ target->CastSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, args);
+ }
+
+ void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ // Final heal only on duration end
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ return;
+
+ // final heal
+ OnRemoveEffect(GetTarget(), aurEff, GetStackAmount());
}
void HandleDispel(DispelInfo* dispelInfo)
{
if (Unit* target = GetUnitOwner())
- {
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
- {
- // final heal
- int32 healAmount = aurEff->GetAmount();
- if (Unit* caster = GetCaster())
- {
- healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges());
- healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges());
- target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
-
- // restore mana
- std::vector<SpellPowerCost> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask());
- auto m = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_MANA; });
- if (m != costs.end())
- {
- int32 returnMana = m->Amount * dispelInfo->GetRemovedCharges() / 2;
- caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
- }
- return;
- }
-
- target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
- }
- }
+ OnRemoveEffect(target, aurEff, dispelInfo->GetRemovedCharges()); // final heal
}
void Register() override
@@ -941,8 +924,14 @@ public:
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+
+ HealInfo* healInfo = eventInfo.GetHealInfo();
+ if (!healInfo || !healInfo->GetHeal())
+ return;
+
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()));
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_LIVING_SEED_PROC, args);
}
void Register() override
@@ -975,7 +964,9 @@ public:
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(aurEff->GetAmount());
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_LIVING_SEED_HEAL, args);
}
void Register() override
@@ -1041,7 +1032,7 @@ public:
{
Unit* target = GetTarget();
if (target->HasAura(SPELL_DRUID_BALANCE_T10_BONUS))
- target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, true, nullptr);
+ target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, true);
}
void Register() override
@@ -1177,7 +1168,7 @@ public:
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, nullptr, aurEff, GetCasterGUID());
+ target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, { aurEff, GetCasterGUID() });
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1253,8 +1244,8 @@ public:
if (GetTarget()->GetShapeshiftForm() != FORM_CAT_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT)
return;
- GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff);
- GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, aurEff);
}
void HandleEffectBearProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
@@ -1263,7 +1254,7 @@ public:
if (GetTarget()->GetShapeshiftForm() != FORM_BEAR_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR)
return;
- GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), aurEff);
}
void Register() override
@@ -1378,8 +1369,9 @@ public:
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount());
- target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, nullptr, nullptr, true);
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, target->CountPctFromMaxHealth(aurEff->GetAmount()));
+ target->CastSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, args);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1452,7 +1444,7 @@ class spell_dru_t3_6p_bonus : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLESSING_OF_THE_CLAW, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLESSING_OF_THE_CLAW, aurEff);
}
void Register() override
@@ -1496,7 +1488,9 @@ class spell_dru_t3_8p_bonus : public SpellScriptLoader
return;
int32 amount = CalculatePct(m->Amount, aurEff->GetAmount());
- caster->CastCustomSpell(SPELL_DRUID_EXHILARATE, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(nullptr, SPELL_DRUID_EXHILARATE, args);
}
void Register() override
@@ -1530,7 +1524,7 @@ class spell_dru_t4_2p_bonus : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_INFUSION, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_INFUSION, aurEff);
}
void Register() override
@@ -1579,7 +1573,9 @@ public:
// Add remaining ticks to damage done
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_DRUID_LANGUISH, SPELL_AURA_PERIODIC_DAMAGE);
- caster->CastCustomSpell(SPELL_DRUID_LANGUISH, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_DRUID_LANGUISH, args);
}
void Register() override
@@ -1685,8 +1681,9 @@ public:
{
PreventDefaultAction();
- int32 amount = static_cast<int32>(eventInfo.GetHealInfo()->GetHeal());
- eventInfo.GetActor()->CastCustomSpell(SPELL_DRUID_REJUVENATION_T10_PROC, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(eventInfo.GetHealInfo()->GetHeal());
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_REJUVENATION_T10_PROC, args);
}
void Register() override
@@ -1799,7 +1796,7 @@ public:
Player* player = GetTarget()->ToPlayer();
if (triggeredSpellId) // Apply new form
- player->CastSpell(player, triggeredSpellId, true, nullptr, aurEff);
+ player->CastSpell(player, triggeredSpellId, aurEff);
else // If not set, simply remove Travel Form dummy
player->RemoveAura(SPELL_DRUID_TRAVEL_FORM);
}
@@ -1900,7 +1897,7 @@ public:
// Outdoor check already passed - Travel Form (dummy) has SPELL_ATTR0_OUTDOORS_ONLY attribute.
uint32 triggeredSpellId = spell_dru_travel_form::GetFormSpellId(player, GetCastDifficulty(), false);
- player->CastSpell(player, triggeredSpellId, true, nullptr, aurEff);
+ player->CastSpell(player, triggeredSpellId, aurEff);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 6c9e8cd80ac..eeed540a725 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -138,7 +138,7 @@ class spell_gen_adaptive_warding : public AuraScript
default:
return;
}
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
void Register() override
@@ -492,7 +492,9 @@ class spell_gen_blood_reserve : public AuraScript
PreventDefaultAction();
Unit* caster = eventInfo.GetActionTarget();
- caster->CastCustomSpell(SPELL_GEN_BLOOD_RESERVE_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), caster, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(aurEff->GetAmount());
+ caster->CastSpell(caster, SPELL_GEN_BLOOD_RESERVE_HEAL, args);
caster->RemoveAura(SPELL_GEN_BLOOD_RESERVE_AURA);
}
@@ -778,7 +780,11 @@ class spell_gen_chaos_blast : public SpellScript
int32 basepoints0 = 100;
Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
- caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, nullptr, nullptr, true);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(basepoints0);
+ caster->CastSpell(target, SPELL_CHAOS_BLAST, args);
+ }
}
void Register() override
@@ -1164,7 +1170,7 @@ class spell_gen_defend : public AuraScript
for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
- target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, aurEff);
}
else
GetTarget()->RemoveAurasDueToSpell(GetId());
@@ -1373,7 +1379,7 @@ class spell_gen_elune_candle : public SpellScript
else
spellId = SPELL_ELUNE_CANDLE_NORMAL;
- GetCaster()->CastSpell(GetHitUnit(), spellId, true, nullptr);
+ GetCaster()->CastSpell(GetHitUnit(), spellId, true);
}
void Register() override
@@ -1542,7 +1548,7 @@ class spell_gen_interrupt : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_GEN_THROW_INTERRUPT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_GEN_THROW_INTERRUPT, aurEff);
}
void Register() override
@@ -1614,7 +1620,7 @@ class spell_gen_lifebloom : public SpellScriptLoader
return;
// final heal
- GetTarget()->CastSpell(GetTarget(), _spellId, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), _spellId, { aurEff, GetCasterGUID() });
}
void Register() override
@@ -1809,7 +1815,7 @@ class spell_gen_moss_covered_feet : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_FALL_DOWN, true, nullptr, aurEff);
+ eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_FALL_DOWN, aurEff);
}
void Register() override
@@ -1832,7 +1838,9 @@ class spell_gen_negative_energy_periodic : public AuraScript
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, SPELLVALUE_MAX_TARGETS, aurEff->GetTickNumber() / 10 + 1, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, aurEff->GetTickNumber() / 10 + 1);
+ GetTarget()->CastSpell(nullptr, GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, args);
}
void Register() override
@@ -2010,7 +2018,7 @@ class spell_gen_obsidian_armor : public AuraScript
default:
return;
}
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
void Register() override
@@ -2113,7 +2121,7 @@ class spell_gen_paralytic_poison : public AuraScript
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
return;
- GetTarget()->CastSpell(nullptr, SPELL_PARALYSIS, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_PARALYSIS, aurEff);
}
void Register() override
@@ -2626,7 +2634,7 @@ class spell_gen_two_forms : public SpellScript
if (target->HasAuraType(SPELL_AURA_WORGEN_ALTERED_FORM))
target->RemoveAurasByType(SPELL_AURA_WORGEN_ALTERED_FORM);
else // Basepoints 1 for this aura control whether to trigger transform transition animation or not.
- target->CastCustomSpell(SPELL_ALTERED_FORM, SPELLVALUE_BASE_POINT0, 1, target, TRIGGERED_FULL_MASK);
+ target->CastSpell(target, SPELL_ALTERED_FORM, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, 1));
}
void Register() override
@@ -3028,7 +3036,7 @@ class spell_gen_turkey_marker : public AuraScript
// on stack 15 cast the achievement crediting spell
if (GetStackAmount() >= 15)
- target->CastSpell(target, SPELL_TURKEY_VENGEANCE, true, nullptr, aurEff, GetCasterGUID());
+ target->CastSpell(target, SPELL_TURKEY_VENGEANCE, { aurEff, GetCasterGUID() });
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
@@ -3109,8 +3117,9 @@ class spell_gen_vampiric_touch : public AuraScript
return;
Unit* caster = eventInfo.GetActor();
- int32 bp = damageInfo->GetDamage() / 2;
- caster->CastCustomSpell(SPELL_VAMPIRIC_TOUCH_HEAL, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(damageInfo->GetDamage() / 2);
+ caster->CastSpell(caster, SPELL_VAMPIRIC_TOUCH_HEAL, args);
}
void Register() override
@@ -3811,7 +3820,7 @@ class spell_gen_mark_of_kazrogal_hellfire_aura : public AuraScript
if (target->GetPower(POWER_MANA) == 0)
{
- target->CastSpell(target, SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE, aurEff);
// Remove aura
SetDuration(0);
}
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index dd90fb3d616..8bbae3ec773 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -570,7 +570,7 @@ class spell_pilgrims_bounty_feast_on : public SpellScriptLoader
if (Player* player = target->ToPlayer())
{
player->CastSpell(player, SPELL_ON_PLATE_EAT_VISUAL, true);
- caster->CastSpell(player, _spellId, true, nullptr, nullptr, player->GetGUID());
+ caster->CastSpell(player, _spellId, player->GetGUID());
}
if (Aura* aura = caster->GetAura(GetEffectValue()))
@@ -1185,15 +1185,23 @@ class spell_brewfest_ram : public SpellScriptLoader
target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_GREEN, true);
break;
case SPELL_RAM_CANTER:
- target->CastCustomSpell(SPELL_RAM_FATIGUE, SPELLVALUE_AURA_STACK, 1, target, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 1);
+ target->CastSpell(target, SPELL_RAM_FATIGUE, args);
if (aurEff->GetTickNumber() == 8)
target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_YELLOW, true);
break;
+ }
case SPELL_RAM_GALLOP:
- target->CastCustomSpell(SPELL_RAM_FATIGUE, SPELLVALUE_AURA_STACK, target->HasAura(SPELL_RAM_FATIGUE) ? 4 : 5 /*Hack*/, target, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, target->HasAura(SPELL_RAM_FATIGUE) ? 4 : 5 /*Hack*/);
+ target->CastSpell(target, SPELL_RAM_FATIGUE, args);
if (aurEff->GetTickNumber() == 8)
target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_RED, true);
break;
+ }
default:
break;
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 4dae0593f83..45a8e390b9c 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -181,8 +181,9 @@ class spell_hun_last_stand_pet : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
Unit* caster = GetCaster();
- int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30));
- caster->CastCustomSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(30));
+ caster->CastSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, args);
}
void Register() override
@@ -307,7 +308,7 @@ class spell_hun_misdirection : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, aurEff);
}
void Register() override
@@ -419,7 +420,9 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
{
if (!caster->HasAura(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
{
- owner->CastCustomSpell(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELLVALUE_BASE_POINT0, 100, caster, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(100);
+ owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, args);
caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true);
}
}
@@ -468,8 +471,9 @@ class spell_hun_roar_of_sacrifice : public SpellScriptLoader
{
PreventDefaultAction();
- uint32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount());
- eventInfo.GetActor()->CastCustomSpell(SPELL_ROAR_OF_SACRIFICE_TRIGGERED, SPELLVALUE_BASE_POINT0, damage, GetCaster(), TRIGGERED_FULL_MASK, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
+ eventInfo.GetActor()->CastSpell(GetCaster(), SPELL_ROAR_OF_SACRIFICE_TRIGGERED, args);
}
void Register() override
@@ -637,7 +641,7 @@ public:
PreventDefaultAction();
Unit* caster = eventInfo.GetActor();
- caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, true, nullptr, aurEff);
+ caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 58897220708..654667762af 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -68,7 +68,7 @@ class spell_item_trigger_spell : public SpellScriptLoader
{
Unit* caster = GetCaster();
if (Item* item = GetCastItem())
- caster->CastSpell(caster, _triggeredSpellId, true, item);
+ caster->CastSpell(caster, _triggeredSpellId, item);
}
void Register() override
@@ -101,7 +101,7 @@ class spell_item_aegis_of_preservation : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, aurEff);
}
void Register() override
@@ -132,7 +132,7 @@ class spell_item_absorb_eye_of_grillok : public AuraScript
if (!GetCaster() || GetTarget()->GetTypeId() != TYPEID_UNIT)
return;
- GetCaster()->CastSpell(GetCaster(), SPELL_EYE_OF_GRILLOK, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetCaster(), SPELL_EYE_OF_GRILLOK, aurEff);
GetTarget()->ToCreature()->DespawnOrUnsummon();
}
@@ -191,7 +191,10 @@ class spell_item_alchemist_stone : public AuraScript
if (!spellId)
return;
- GetTarget()->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff);
+ Unit* caster = eventInfo.GetActionTarget();
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(nullptr, spellId, args);
}
void Register() override
@@ -251,7 +254,7 @@ class spell_item_anger_capacitor : public SpellScriptLoader
if (player->GetWeaponForAttack(OFF_ATTACK, true) && roll_chance_i(50))
spellId = SPELL_MANIFEST_ANGER_OFF_HAND;
- caster->CastSpell(target, spellId, true, nullptr, aurEff);
+ caster->CastSpell(target, spellId, aurEff);
}
void Register() override
@@ -357,7 +360,7 @@ class spell_item_aura_of_madness : public AuraScript
PreventDefaultAction();
Unit* caster = eventInfo.GetActor();
uint32 spellId = Trinity::Containers::SelectRandomContainerElement(triggeredSpells[caster->getClass()]);
- caster->CastSpell(caster, spellId, true, nullptr, aurEff);
+ caster->CastSpell(caster, spellId, aurEff);
if (roll_chance_i(10))
caster->Unit::Say(SAY_MADNESS);
@@ -386,7 +389,7 @@ class spell_item_dementia : public AuraScript
void HandlePeriodicDummy(AuraEffect const* aurEff)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), RAND(SPELL_DEMENTIA_POS, SPELL_DEMENTIA_NEG), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), RAND(SPELL_DEMENTIA_POS, SPELL_DEMENTIA_NEG), aurEff);
}
void Register() override
@@ -433,7 +436,11 @@ class spell_item_blessing_of_ancient_kings : public AuraScript
protEff->GetBase()->RefreshDuration();
}
else
- GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(absorb);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PROTECTION_OF_ANCIENT_KINGS, args);
+ }
}
void Register() override
@@ -494,7 +501,9 @@ class spell_item_deadly_precision_dummy : public SpellScript
void HandleDummy(SpellEffIndex /*effIndex*/)
{
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_DEADLY_PRECISION, GetCastDifficulty());
- GetCaster()->CastCustomSpell(spellInfo->Id, SPELLVALUE_AURA_STACK, spellInfo->StackAmount, GetCaster(), true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, spellInfo->StackAmount);
+ GetCaster()->CastSpell(GetCaster(), spellInfo->Id, args);
}
void Register() override
@@ -583,7 +592,7 @@ class spell_item_deathbringers_will : public SpellScriptLoader
return;
uint32 spellId = Trinity::Containers::SelectRandomContainerElement(randomSpells);
- caster->CastSpell(caster, spellId, true, nullptr, aurEff);
+ caster->CastSpell(caster, spellId, aurEff);
}
void Register() override
@@ -669,7 +678,7 @@ class spell_item_defibrillate : public SpellScriptLoader
{
PreventHitDefaultEffect(effIndex);
if (_failSpell)
- GetCaster()->CastSpell(GetCaster(), _failSpell, true, GetCastItem());
+ GetCaster()->CastSpell(GetCaster(), _failSpell, GetCastItem());
}
}
@@ -710,7 +719,7 @@ class spell_item_desperate_defense : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, aurEff);
}
void Register() override
@@ -748,7 +757,7 @@ class spell_item_deviate_fish : public SpellScript
{
Unit* caster = GetCaster();
uint32 spellId = urand(SPELL_SLEEPY, SPELL_HEALTHY_SPIRIT);
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -775,7 +784,7 @@ class spell_item_discerning_eye_beast_dummy : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell(nullptr, SPELL_DISCERNING_EYE_BEAST, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_DISCERNING_EYE_BEAST, aurEff);
}
void Register() override
@@ -951,9 +960,10 @@ class spell_item_frozen_shadoweave : public AuraScript
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 amount = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount());
Unit* caster = eventInfo.GetActor();
- caster->CastCustomSpell(SPELL_SHADOWMEND, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
+ caster->CastSpell(nullptr, SPELL_SHADOWMEND, args);
}
void Register() override
@@ -1089,7 +1099,7 @@ class spell_item_heartpierce : public SpellScriptLoader
return;
}
- caster->CastSpell(nullptr, spellId, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, spellId, aurEff);
}
void Register() override
@@ -1174,7 +1184,7 @@ class spell_item_make_a_wish : public SpellScript
case 3: spellId = SPELL_SUMMON_FURIOUS_MR_PINCHY; break;
case 4: spellId = SPELL_TINY_MAGICAL_CRAWDAD; break;
}
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -1207,7 +1217,7 @@ class spell_item_mark_of_conquest : public AuraScript
// in that case, do not cast heal spell
PreventDefaultAction();
// but mana instead
- eventInfo.GetActor()->CastSpell(nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, aurEff);
}
}
@@ -1289,8 +1299,9 @@ class spell_item_necrotic_touch : public AuraScript
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 bp = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
+ GetTarget()->CastSpell(nullptr, SPELL_ITEM_NECROTIC_TOUCH_PROC, args);
}
void Register() override
@@ -1334,7 +1345,7 @@ class spell_item_net_o_matic : public SpellScript
else if (roll < 4) // 2% for 20 sec root, charge to target (off-like chance unknown)
spellId = SPELL_NET_O_MATIC_TRIGGERED2;
- GetCaster()->CastSpell(target, spellId, true, nullptr);
+ GetCaster()->CastSpell(target, spellId, true);
}
}
@@ -1382,7 +1393,7 @@ class spell_item_noggenfogger_elixir : public SpellScript
case 2: spellId = SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED2; break;
}
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -1446,7 +1457,9 @@ class spell_item_persistent_shield : public AuraScript
if (shield->GetAmount() > bp0)
return;
- caster->CastCustomSpell(SPELL_PERSISTENT_SHIELD_TRIGGERED, SPELLVALUE_BASE_POINT0, bp0, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(bp0);
+ caster->CastSpell(target, SPELL_PERSISTENT_SHIELD_TRIGGERED, args);
}
void Register() override
@@ -1480,9 +1493,9 @@ class spell_item_pet_healing : public AuraScript
if (!damageInfo || !damageInfo->GetDamage())
return;
- int32 bp = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount());
- Unit* caster = eventInfo.GetActor();
- caster->CastCustomSpell(SPELL_HEALTH_LINK, SPELLVALUE_BASE_POINT0, bp, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_HEALTH_LINK, args);
}
void Register() override
@@ -1550,7 +1563,7 @@ class spell_item_savory_deviate_delight : public SpellScript
// Yaaarrrr - pirate
case 2: spellId = (caster->getGender() == GENDER_MALE ? SPELL_YAAARRRR_MALE : SPELL_YAAARRRR_FEMALE); break;
}
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -1707,14 +1720,14 @@ class spell_item_shadowmourne : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, aurEff);
// this can't be handled in AuraScript of SoulFragments because we need to know victim
if (Aura* soulFragments = GetTarget()->GetAura(SPELL_SHADOWMOURNE_SOUL_FRAGMENT))
{
if (soulFragments->GetStackAmount() >= 10)
{
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, aurEff);
soulFragments->Remove();
}
}
@@ -1833,7 +1846,7 @@ class spell_item_six_demon_bag : public SpellScript
target = caster;
}
- caster->CastSpell(target, spellId, true, GetCastItem());
+ caster->CastSpell(target, spellId, GetCastItem());
}
}
@@ -1863,8 +1876,9 @@ class spell_item_swift_hand_justice_dummy : public AuraScript
PreventDefaultAction();
Unit* caster = eventInfo.GetActor();
- int32 amount = caster->CountPctFromMaxHealth(aurEff->GetAmount());
- caster->CastCustomSpell(SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(aurEff->GetAmount()));
+ caster->CastSpell(nullptr, SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, args);
}
void Register() override
@@ -1927,7 +1941,7 @@ class spell_item_underbelly_elixir : public SpellScript
case 1: spellId = SPELL_UNDERBELLY_ELIXIR_TRIGGERED1; break;
case 2: spellId = SPELL_UNDERBELLY_ELIXIR_TRIGGERED2; break;
}
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -2372,7 +2386,7 @@ class spell_item_purify_helboar_meat : public SpellScript
void HandleDummy(SpellEffIndex /* effIndex */)
{
Unit* caster = GetCaster();
- caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true, nullptr);
+ caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true);
}
void Register() override
@@ -2495,9 +2509,9 @@ class spell_item_nigh_invulnerability : public SpellScript
if (Item* castItem = GetCastItem())
{
if (roll_chance_i(86)) // Nigh-Invulnerability - success
- caster->CastSpell(caster, SPELL_NIGH_INVULNERABILITY, true, castItem);
+ caster->CastSpell(caster, SPELL_NIGH_INVULNERABILITY, castItem);
else // Complete Vulnerability - backfire in 14% casts
- caster->CastSpell(caster, SPELL_COMPLETE_VULNERABILITY, true, castItem);
+ caster->CastSpell(caster, SPELL_COMPLETE_VULNERABILITY, castItem);
}
}
@@ -2525,7 +2539,7 @@ class spell_item_poultryizer : public SpellScript
void HandleDummy(SpellEffIndex /* effIndex */)
{
if (GetCastItem() && GetHitUnit())
- GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, true, GetCastItem());
+ GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, GetCastItem());
}
void Register() override
@@ -2645,7 +2659,7 @@ class spell_item_complete_raptor_capture : public SpellScript
GetHitCreature()->DespawnOrUnsummon();
//cast spell Raptor Capture Credit
- caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true, nullptr);
+ caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true);
}
}
@@ -2778,7 +2792,7 @@ class spell_item_nitro_boosts : public SpellScript
bool success = true;
if (areaEntry && areaEntry->IsFlyable() && !caster->GetMap()->IsDungeon())
success = roll_chance_i(95); // nitro boosts can only fail in flying-enabled locations on 3.3.5
- caster->CastSpell(caster, success ? SPELL_NITRO_BOOSTS_SUCCESS : SPELL_NITRO_BOOSTS_BACKFIRE, true, GetCastItem());
+ caster->CastSpell(caster, success ? SPELL_NITRO_BOOSTS_SUCCESS : SPELL_NITRO_BOOSTS_BACKFIRE, GetCastItem());
}
void Register() override
@@ -2808,7 +2822,7 @@ class spell_item_nitro_boosts_backfire : public AuraScript
if (curZ < lastZ)
{
if (roll_chance_i(80)) // we don't have enough sniffs to verify this, guesstimate
- GetTarget()->CastSpell(GetTarget(), SPELL_NITRO_BOOSTS_PARACHUTE, true, nullptr, effect);
+ GetTarget()->CastSpell(GetTarget(), SPELL_NITRO_BOOSTS_PARACHUTE, effect);
GetAura()->Remove();
}
else
@@ -2884,7 +2898,7 @@ class spell_item_rocket_boots : public SpellScript
bg->EventPlayerDroppedFlag(caster);
caster->GetSpellHistory()->ResetCooldown(SPELL_ROCKET_BOOTS_PROC);
- caster->CastSpell(caster, SPELL_ROCKET_BOOTS_PROC, true, nullptr);
+ caster->CastSpell(caster, SPELL_ROCKET_BOOTS_PROC, true);
}
SpellCastResult CheckCast()
@@ -3077,10 +3091,10 @@ class spell_item_shard_of_the_scale : public SpellScriptLoader
Unit* target = eventInfo.GetProcTarget();
if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS)
- caster->CastSpell(target, HealProc, true, nullptr, aurEff);
+ caster->CastSpell(target, HealProc, aurEff);
if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG)
- caster->CastSpell(target, DamageProc, true, nullptr, aurEff);
+ caster->CastSpell(target, DamageProc, aurEff);
}
void Register() override
@@ -3127,16 +3141,16 @@ class spell_item_soul_preserver : public AuraScript
switch (caster->getClass())
{
case CLASS_DRUID:
- caster->CastSpell(caster, SPELL_SOUL_PRESERVER_DRUID, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_SOUL_PRESERVER_DRUID, aurEff);
break;
case CLASS_PALADIN:
- caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PALADIN, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PALADIN, aurEff);
break;
case CLASS_PRIEST:
- caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PRIEST, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PRIEST, aurEff);
break;
case CLASS_SHAMAN:
- caster->CastSpell(caster, SPELL_SOUL_PRESERVER_SHAMAN, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_SOUL_PRESERVER_SHAMAN, aurEff);
break;
default:
break;
@@ -3211,10 +3225,10 @@ class spell_item_sunwell_neck : public SpellScriptLoader
// Aggression checks are in the spell system... just cast and forget
if (player->GetReputationRank(FACTION_ALDOR) == REP_EXALTED)
- player->CastSpell(target, Aldors, true, nullptr, aurEff);
+ player->CastSpell(target, Aldors, aurEff);
if (player->GetReputationRank(FACTION_SCRYERS) == REP_EXALTED)
- player->CastSpell(target, Scryers, true, nullptr, aurEff);
+ player->CastSpell(target, Scryers, aurEff);
}
void Register() override
@@ -3294,17 +3308,17 @@ class spell_item_death_choice : public AuraScript
case SPELL_DEATH_CHOICE_NORMAL_AURA:
{
if (str > agi)
- caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_STRENGTH, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_STRENGTH, aurEff);
else
- caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_AGILITY, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_AGILITY, aurEff);
break;
}
case SPELL_DEATH_CHOICE_HEROIC_AURA:
{
if (str > agi)
- caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_STRENGTH, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_STRENGTH, aurEff);
else
- caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_AGILITY, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_AGILITY, aurEff);
break;
}
default:
@@ -3363,7 +3377,7 @@ public:
Unit* caster = eventInfo.GetActor();
- caster->CastSpell(caster, _stackSpell, true, nullptr, aurEff); // cast the stack
+ caster->CastSpell(caster, _stackSpell, aurEff); // cast the stack
Aura* dummy = caster->GetAura(_stackSpell); // retrieve aura
@@ -3374,7 +3388,7 @@ public:
// if right amount, remove the aura and cast real trigger
caster->RemoveAurasDueToSpell(_stackSpell);
if (Unit* target = eventInfo.GetActionTarget())
- caster->CastSpell(target, _triggerSpell, true, nullptr, aurEff);
+ caster->CastSpell(target, _triggerSpell, aurEff);
}
void Register() override
@@ -3457,7 +3471,7 @@ class spell_item_darkmoon_card_greatness : public AuraScript
stat = vers;
}
- caster->CastSpell(caster, spellTrigger, true, nullptr, aurEff);
+ caster->CastSpell(caster, spellTrigger, aurEff);
}
void Register() override
@@ -3494,10 +3508,10 @@ class spell_item_mana_drain : public AuraScript
Unit* target = eventInfo.GetActionTarget();
if (caster->IsAlive())
- caster->CastSpell(caster, SPELL_MANA_DRAIN_ENERGIZE, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_MANA_DRAIN_ENERGIZE, aurEff);
if (target && target->IsAlive())
- caster->CastSpell(target, SPELL_MANA_DRAIN_LEECH, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_MANA_DRAIN_LEECH, aurEff);
}
void Register() override
@@ -3587,7 +3601,7 @@ class spell_item_mind_control_cap : public SpellScript
if (Unit* target = GetHitUnit())
{
if (roll_chance_i(ROLL_CHANCE_NO_BACKFIRE))
- caster->CastSpell(target, roll_chance_i(ROLL_CHANCE_DULLARD) ? SPELL_DULLARD : SPELL_GNOMISH_MIND_CONTROL_CAP, true, GetCastItem());
+ caster->CastSpell(target, roll_chance_i(ROLL_CHANCE_DULLARD) ? SPELL_DULLARD : SPELL_GNOMISH_MIND_CONTROL_CAP, GetCastItem());
else
target->CastSpell(caster, SPELL_GNOMISH_MIND_CONTROL_CAP, true); // backfire - 5% chance
}
@@ -3629,11 +3643,11 @@ class spell_item_universal_remote : public SpellScript
{
uint8 chance = urand(0, 99);
if (chance < 15)
- GetCaster()->CastSpell(target, SPELL_TARGET_LOCK, true, GetCastItem());
+ GetCaster()->CastSpell(target, SPELL_TARGET_LOCK, GetCastItem());
else if (chance < 25)
- GetCaster()->CastSpell(target, SPELL_MOBILITY_MALFUNCTION, true, GetCastItem());
+ GetCaster()->CastSpell(target, SPELL_MOBILITY_MALFUNCTION, GetCastItem());
else
- GetCaster()->CastSpell(target, SPELL_CONTROL_MACHINE, true, GetCastItem());
+ GetCaster()->CastSpell(target, SPELL_CONTROL_MACHINE, GetCastItem());
}
}
@@ -3971,7 +3985,7 @@ class spell_item_mad_alchemists_potion : public SpellScript
}
if (useElixir)
- target->CastSpell(target, chosenElixir, true, GetCastItem());
+ target->CastSpell(target, chosenElixir, GetCastItem());
}
void Register() override
@@ -4011,7 +4025,7 @@ class spell_item_crazy_alchemists_potion : public SpellScript
uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs);
- target->CastSpell(target, chosenElixir, true, GetCastItem());
+ target->CastSpell(target, chosenElixir, GetCastItem());
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index c30f9b22643..5a2f88df076 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -302,7 +302,7 @@ class spell_mage_fingers_of_frost : public AuraScript
void Trigger(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
- eventInfo.GetActor()->CastSpell(GetTarget(), SPELL_MAGE_FINGERS_OF_FROST, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(GetTarget(), SPELL_MAGE_FINGERS_OF_FROST, aurEff);
}
void Register() override
@@ -395,7 +395,10 @@ class spell_mage_ice_lance : public SpellScript
}
// put target index for chain value multiplier into EFFECT_1 base points, otherwise triggered spell doesn't know which damage multiplier to apply
- caster->CastCustomSpell(SPELL_MAGE_ICE_LANCE_TRIGGER, SPELLVALUE_BASE_POINT1, index, target, true);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.AddSpellMod(SPELLVALUE_BASE_POINT1, index);
+ caster->CastSpell(target, SPELL_MAGE_ICE_LANCE_TRIGGER, args);
}
void Register() override
@@ -455,7 +458,10 @@ class spell_mage_ignite : public AuraScript
ASSERT(igniteDot->GetMaxTicks() > 0);
int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks());
amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE);
- GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_IGNITE, args);
}
void Register() override
@@ -501,7 +507,7 @@ class spell_mage_living_bomb : public SpellScript
void HandleDummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
- GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 1, GetHitUnit(), TRIGGERED_FULL_MASK);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_LIVING_BOMB_PERIODIC, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT2, 1));
}
void Register() override
@@ -528,7 +534,7 @@ class spell_mage_living_bomb_explosion : public SpellScript
void HandleSpread(SpellEffIndex /*effIndex*/)
{
if (GetSpellValue()->EffectBasePoints[EFFECT_0] > 0)
- GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 0, GetHitUnit(), TRIGGERED_FULL_MASK);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_LIVING_BOMB_PERIODIC, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT2, 0));
}
void Register() override
@@ -554,7 +560,7 @@ class spell_mage_living_bomb_periodic : public AuraScript
return;
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_EXPLOSION, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), TRIGGERED_FULL_MASK);
+ caster->CastSpell(GetTarget(), SPELL_MAGE_LIVING_BOMB_EXPLOSION, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount()));
}
void Register() override
@@ -636,7 +642,7 @@ class spell_mage_ring_of_frost : public AuraScript
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
if (TempSummon* ringOfFrost = GetRingOfFrostMinion())
- GetTarget()->CastSpell(ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ(), SPELL_MAGE_RING_OF_FROST_FREEZE, true);
+ GetTarget()->CastSpell(ringOfFrost->GetPosition(), SPELL_MAGE_RING_OF_FROST_FREEZE, true);
}
void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -801,7 +807,7 @@ class spell_mage_touch_of_the_magi_aura : public AuraScript
return;
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE, SPELLVALUE_BASE_POINT0, amount, GetTarget(), TRIGGERED_FULL_MASK);
+ caster->CastSpell(GetTarget(), SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, amount));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index c69226f2587..3aba1eff8ae 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -676,7 +676,7 @@ class spell_pal_item_healing_discount : public AuraScript
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, aurEff);
}
void Register() override
@@ -725,7 +725,7 @@ class spell_pal_item_t6_trinket : public AuraScript
return;
if (roll_chance_i(chance))
- eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff);
}
void Register() override
@@ -816,7 +816,11 @@ class spell_pal_light_s_beacon : public SpellScriptLoader
std::list<AuraApplication*> applications;
(*itr)->GetApplicationList(applications);
if (!applications.empty())
- eventInfo.GetActor()->CastCustomSpell(SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, heal, applications.front()->GetTarget(), true);
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(heal);
+ eventInfo.GetActor()->CastSpell(applications.front()->GetTarget(), SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, args);
+ }
return;
}
}
@@ -985,7 +989,7 @@ class spell_pal_t3_6p_bonus : public SpellScriptLoader
return;
}
- caster->CastSpell(target, spellId, true, nullptr, aurEff);
+ caster->CastSpell(target, spellId, aurEff);
}
void Register() override
@@ -1034,7 +1038,9 @@ class spell_pal_t8_2p_bonus : public SpellScriptLoader
// Add remaining ticks to damage done
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PALADIN_HOLY_MENDING, SPELL_AURA_PERIODIC_HEAL);
- caster->CastCustomSpell(SPELL_PALADIN_HOLY_MENDING, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_PALADIN_HOLY_MENDING, args);
}
void Register() override
@@ -1062,7 +1068,7 @@ class spell_pal_zeal : public AuraScript
void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
{
Unit* target = GetTarget();
- target->CastCustomSpell(SPELL_PALADIN_ZEAL_AURA, SPELLVALUE_AURA_STACK, aurEff->GetAmount(), target, true);
+ target->CastSpell(target, SPELL_PALADIN_ZEAL_AURA, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, aurEff->GetAmount()));
PreventDefaultAction();
}
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 6e452167e00..7e377f496a8 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -133,8 +133,9 @@ class spell_pri_aq_3p_bonus : public SpellScriptLoader
if (!healInfo || !healInfo->GetHeal())
return;
- int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), 10);
- caster->CastCustomSpell(SPELL_PRIEST_ORACULAR_HEAL, SPELLVALUE_BASE_POINT0, amount, caster, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(CalculatePct(static_cast<int32>(healInfo->GetHeal()), 10));
+ caster->CastSpell(caster, SPELL_PRIEST_ORACULAR_HEAL, args);
}
void Register() override
@@ -174,13 +175,14 @@ public:
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
DamageInfo* damageInfo = eventInfo.GetDamageInfo();
- int32 heal = CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount());
- _appliedAtonements.erase(std::remove_if(_appliedAtonements.begin(), _appliedAtonements.end(), [this, heal](ObjectGuid const& targetGuid)
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
+ _appliedAtonements.erase(std::remove_if(_appliedAtonements.begin(), _appliedAtonements.end(), [this, &args](ObjectGuid const& targetGuid)
{
if (Unit* target = ObjectAccessor::GetUnit(*GetTarget(), targetGuid))
{
if (target->GetExactDist(GetTarget()) < GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue())
- GetTarget()->CastCustomSpell(SPELL_PRIEST_ATONEMENT_HEAL, SPELLVALUE_BASE_POINT0, heal, target, true);
+ GetTarget()->CastSpell(target, SPELL_PRIEST_ATONEMENT_HEAL, args);
return false;
}
@@ -337,7 +339,9 @@ class spell_pri_guardian_spirit : public SpellScriptLoader
int32 healAmount = int32(target->CountPctFromMaxHealth(healPct));
// remove the aura now, we don't want 40% healing bonus
Remove(AURA_REMOVE_BY_ENEMY_SPELL);
- target->CastCustomSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, &healAmount, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(healAmount);
+ target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, args);
absorbAmount = dmgInfo.GetDamage();
}
@@ -414,7 +418,7 @@ class spell_pri_leap_of_faith_effect_trigger : public SpellScriptLoader
SpellCastTargets targets;
targets.SetDst(destPos);
targets.SetUnitTarget(GetCaster());
- GetHitUnit()->CastSpell(targets, sSpellMgr->GetSpellInfo(GetEffectValue(), GetCastDifficulty()), nullptr);
+ GetHitUnit()->CastSpell(targets, GetEffectValue(), GetCastDifficulty());
}
void Register() override
@@ -629,10 +633,11 @@ public:
void CastPrayerOfMendingAura(Unit* caster, Unit* target, uint8 stack)
{
uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, _healEffectDummy);
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_AURA_STACK, stack);
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints);
- caster->CastCustomSpell(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, values, target, TRIGGERED_FULL_MASK);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.AddSpellMod(SPELLVALUE_AURA_STACK, stack);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints);
+ caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_AURA, args);
}
protected:
@@ -674,12 +679,19 @@ class spell_pri_prayer_of_mending_aura : public AuraScript
if (Unit* caster = GetCaster())
{
// Cast the spell to heal the owner
- caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, aurEff);
// Only cast jump if stack is higher than 0
int32 stackAmount = GetStackAmount();
if (stackAmount > 1)
- target->CastCustomSpell(SPELL_PRIEST_PRAYER_OF_MENDING_JUMP, SPELLVALUE_BASE_POINT0, stackAmount - 1, target, true, nullptr, aurEff, caster->GetGUID());
+ {
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = aurEff;
+ args.OriginalCaster = caster->GetGUID();
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, stackAmount - 1);
+ target->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_JUMP, args);
+ }
Remove();
}
@@ -752,7 +764,7 @@ class spell_priest_spirit_of_redemption : public AuraScript
Unit* target = GetTarget();
if (dmgInfo.GetDamage() >= target->GetHealth())
{
- target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION, aurEff);
target->SetFullHealth();
return;
}
@@ -784,7 +796,7 @@ class spell_pri_t3_4p_bonus : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, aurEff);
}
void Register() override
@@ -828,7 +840,7 @@ class spell_pri_t5_heal_2p_bonus : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, aurEff);
}
void Register() override
@@ -878,7 +890,9 @@ class spell_pri_t10_heal_2p_bonus : public SpellScriptLoader
Unit* target = eventInfo.GetProcTarget();
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PRIEST_BLESSED_HEALING, SPELL_AURA_PERIODIC_HEAL);
- caster->CastCustomSpell(SPELL_PRIEST_BLESSED_HEALING, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_PRIEST_BLESSED_HEALING, args);
}
void Register() override
@@ -924,7 +938,10 @@ class spell_pri_vampiric_embrace : public SpellScriptLoader
int32 selfHeal = int32(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()));
int32 teamHeal = selfHeal / 2;
- GetTarget()->CastCustomSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, &teamHeal, &selfHeal, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, teamHeal);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, selfHeal);
+ GetTarget()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args);
}
void Register() override
@@ -990,9 +1007,10 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
{
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
{
- int32 damage = aurEff->GetAmount() * 8;
// backfire damage
- caster->CastCustomSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(aurEff->GetAmount() * 8);
+ caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args);
}
}
}
@@ -1006,7 +1024,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, true, nullptr, aurEff);
+ eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, aurEff);
}
void Register() override
@@ -1052,7 +1070,10 @@ class spell_pri_angelic_feather_trigger : public SpellScriptLoader
{
SpellCastTargets targets;
targets.SetDst(destPos);
- GetCaster()->CastSpell(targets, sSpellMgr->GetSpellInfo(SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER, GetCastDifficulty()), nullptr);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.CastDifficulty = GetCastDifficulty();
+ GetCaster()->CastSpell(targets, SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER, args);
}
}
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 47293321ad5..6c3e8d9cd6a 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -157,7 +157,7 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader
{
Unit* caster = GetCaster();
uint32 spellId = roll_chance_i(50) ? SPELL_CREATE_RESONATING_SKULL : SPELL_CREATE_BONE_DUST;
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -321,7 +321,7 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader
if (target->GetTypeId() == TYPEID_UNIT && target->HasAura(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3))
// Make sure nobody else is channeling the same target
if (!target->HasAura(SPELL_SCOURGING_CRYSTAL_CONTROLLER))
- GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, true, GetCastItem());
+ GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, GetCastItem());
}
void Register() override
@@ -498,7 +498,7 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader
default:
return;
}
- caster->CastSpell(caster, spellId, true, castItem);
+ caster->CastSpell(caster, spellId, castItem);
caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true);
target->DespawnOrUnsummon();
}
@@ -608,7 +608,7 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader
// sometimes, if you're lucky, you get a dwarf
if (roll_chance_i(5))
spellId = SPELL_SUMMON_ADVENTUROUS_DWARF;
- GetCaster()->CastSpell(GetCaster(), spellId, true, nullptr);
+ GetCaster()->CastSpell(GetCaster(), spellId, true);
}
void Register() override
@@ -642,7 +642,7 @@ class spell_q12683_take_sputum_sample : public SpellScriptLoader
if (caster->HasAuraEffect(reqAuraId, 0))
{
uint32 spellId = GetSpellInfo()->GetEffect(EFFECT_0)->CalcValue();
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
}
@@ -752,7 +752,7 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader
Player* caster = GetCaster()->ToPlayer();
if (Creature* target = GetHitCreature())
{
- caster->CastSpell(caster, SPELL_TRIGGER_AID_OF_THE_EARTHEN, true, nullptr);
+ caster->CastSpell(caster, SPELL_TRIGGER_AID_OF_THE_EARTHEN, true);
caster->KilledMonsterCredit(NPC_FALLEN_EARTHEN_DEFENDER);
target->DespawnOrUnsummon();
}
@@ -1922,7 +1922,7 @@ class spell_q13086_cannons_target : public SpellScriptLoader
void HandleEffectDummy(SpellEffIndex /*effIndex*/)
{
if (WorldLocation const* pos = GetExplTargetDest())
- GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true);
+ GetCaster()->CastSpell(pos->GetPosition(), GetEffectValue(), true);
}
void Register() override
@@ -2215,7 +2215,7 @@ class spell_q12619_emblazon_runeblade : public SpellScriptLoader
{
PreventDefaultAction();
if (Unit* caster = GetCaster())
- caster->CastSpell(caster, aurEff->GetSpellEffectInfo()->TriggerSpell, true, nullptr, aurEff);
+ caster->CastSpell(caster, aurEff->GetSpellEffectInfo()->TriggerSpell, aurEff);
}
void Register() override
@@ -2279,10 +2279,11 @@ class spell_q12919_gymers_grab : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- int8 seatId = 2;
if (!GetHitCreature())
return;
- GetHitCreature()->CastCustomSpell(SPELL_RIDE_GYMER, SPELLVALUE_BASE_POINT0, seatId, GetCaster(), true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(2);
+ GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_GYMER, args);
GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true);
}
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp
index 577c08c96b4..003b55c260e 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -83,8 +83,9 @@ class spell_rog_blade_flurry : public SpellScriptLoader
if (DamageInfo* damageInfo = eventInfo.GetDamageInfo())
{
- int32 damage = damageInfo->GetDamage();
- GetTarget()->CastCustomSpell(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(damageInfo->GetDamage());
+ GetTarget()->CastSpell(_procTarget, SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, args);
}
}
@@ -179,9 +180,9 @@ class spell_rog_deadly_poison : public SpellScriptLoader
continue;
if (spellInfo->IsPositive())
- player->CastSpell(player, enchant->EffectArg[s], true, item);
+ player->CastSpell(player, enchant->EffectArg[s], item);
else
- player->CastSpell(target, enchant->EffectArg[s], true, item);
+ player->CastSpell(target, enchant->EffectArg[s], item);
}
}
}
@@ -605,7 +606,7 @@ public:
PreventDefaultAction();
Unit* target = GetTarget();
- target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index 09b3e0b40ad..618cb45e30f 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -117,7 +117,11 @@ public:
PreventDefaultAction();
int32 bp0 = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount());
if (bp0)
- eventInfo.GetActor()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_GUIDANCE_HEAL, SPELLVALUE_BASE_POINT0, bp0, eventInfo.GetActor(), true, nullptr, aurEff);
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, bp0);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_SHAMAN_ANCESTRAL_GUIDANCE_HEAL, args);
+ }
}
void Register() override
@@ -237,8 +241,13 @@ public:
{
if (_targetsHit >= 2)
GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_CRASH_LIGHTNING_CLEAVE, true);
+
if (AuraEffect const* gatheringStorms = GetCaster()->GetAuraEffect(SPELL_SHAMAN_GATHERING_STORMS, EFFECT_0))
- GetCaster()->CastCustomSpell(SPELL_SHAMAN_GATHERING_STORMS_BUFF, SPELLVALUE_BASE_POINT0, int32(gatheringStorms->GetAmount() * _targetsHit), GetCaster(), true);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, int32(gatheringStorms->GetAmount() * _targetsHit));
+ GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_GATHERING_STORMS_BUFF, args);
+ }
}
void Register() override
@@ -282,7 +291,7 @@ class spell_sha_earth_shield : public SpellScriptLoader
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_EARTH_SHIELD_HEAL, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_EARTH_SHIELD_HEAL, { aurEff, GetCasterGUID() });
}
void Register() override
@@ -452,7 +461,9 @@ class spell_sha_flametongue_weapon : public SpellScript
if (!targetItem || !targetItem->GetTemplate()->IsWeapon())
return;
- player->CastSpell(targetItem, SPELL_SHAMAN_FLAMETONGUE_WEAPON_ENCHANT, true);
+ SpellCastTargets targets;
+ targets.SetItemTarget(targetItem);
+ player->CastSpell(targets, SPELL_SHAMAN_FLAMETONGUE_WEAPON_ENCHANT, true);
}
void Register() override
@@ -476,8 +487,9 @@ class spell_sha_flametongue_weapon_aura : public AuraScript
PreventDefaultAction();
Unit* attacker = eventInfo.GetActor();
- int32 damage = std::max(1, int32(attacker->GetTotalAttackPowerValue(BASE_ATTACK) * 0.0264f));
- attacker->CastCustomSpell(SPELL_SHAMAN_FLAMETONGUE_ATTACK, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetActionTarget(), TRIGGERED_FULL_MASK, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, std::max(1, int32(attacker->GetTotalAttackPowerValue(BASE_ATTACK) * 0.0264f)));
+ attacker->CastSpell(eventInfo.GetActionTarget(), SPELL_SHAMAN_FLAMETONGUE_ATTACK, args);
}
void Register() override
@@ -495,7 +507,7 @@ public:
void SetVisualDummy(TempSummon* summon)
{
_visualDummy = summon->GetGUID();
- summon->GetPosition(_x, _y, _z);
+ _dest = summon->GetPosition();
}
private:
@@ -503,7 +515,7 @@ private:
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(_x, _y, _z, SPELL_SHAMAN_HEALING_RAIN_HEAL, true, nullptr, aurEff);
+ GetTarget()->CastSpell(_dest, SPELL_SHAMAN_HEALING_RAIN_HEAL, aurEff);
}
void HandleEffecRemoved(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -519,7 +531,7 @@ private:
}
ObjectGuid _visualDummy;
- float _x = 0.0f, _y = 0.0f, _z = 0.0f;
+ Position _dest;
};
constexpr char const spell_sha_healing_rain_aura::ScriptName[];
@@ -654,7 +666,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, aurEff);
}
void Register() override
@@ -687,7 +699,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, aurEff);
}
void Register() override
@@ -732,7 +744,11 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
{
int32 mana = CalculatePct(m->Amount, 35);
if (mana > 0)
- GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff);
+ {
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_MANA_SURGE, args);
+ }
}
}
@@ -1087,10 +1103,11 @@ class spell_sha_tidal_waves : public SpellScriptLoader
void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- int32 basePoints0 = -aurEff->GetAmount();
- int32 basePoints1 = aurEff->GetAmount();
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, -aurEff->GetAmount());
+ args.AddSpellMod(SPELLVALUE_BASE_POINT1, aurEff->GetAmount());
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, &basePoints0, &basePoints1, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, args);
}
void Register() override
@@ -1157,7 +1174,7 @@ class spell_sha_t3_6p_bonus : public SpellScriptLoader
return;
}
- caster->CastSpell(target, spellId, true, nullptr, aurEff);
+ caster->CastSpell(target, spellId, aurEff);
}
void Register() override
@@ -1226,7 +1243,9 @@ class spell_sha_t8_elemental_4p_bonus : public SpellScriptLoader
Unit* target = eventInfo.GetProcTarget();
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_ELECTRIFIED, SPELL_AURA_PERIODIC_DAMAGE);
- caster->CastCustomSpell(SPELL_SHAMAN_ELECTRIFIED, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_SHAMAN_ELECTRIFIED, args);
}
void Register() override
@@ -1275,7 +1294,9 @@ class spell_sha_t9_elemental_4p_bonus : public SpellScriptLoader
Unit* target = eventInfo.GetProcTarget();
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE);
- caster->CastCustomSpell(SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, args);
}
void Register() override
@@ -1369,7 +1390,9 @@ class spell_sha_t10_restoration_4p_bonus : public SpellScriptLoader
Unit* target = eventInfo.GetProcTarget();
amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_CHAINED_HEAL, SPELL_AURA_PERIODIC_HEAL);
- caster->CastCustomSpell(SPELL_SHAMAN_CHAINED_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.SpellValueOverrides.AddBP0(amount);
+ caster->CastSpell(target, SPELL_SHAMAN_CHAINED_HEAL, args);
}
void Register() override
@@ -1404,7 +1427,7 @@ public:
PreventDefaultAction();
for (uint32 i = 0; i < 2; ++i)
- eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_WINDFURY_ATTACK, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_WINDFURY_ATTACK, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 5ff9aa3145b..163c867d71d 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -280,14 +280,16 @@ class spell_warl_devour_magic : public SpellScriptLoader
if (SpellEffectInfo const* effect = GetSpellInfo()->GetEffect(EFFECT_1))
{
Unit* caster = GetCaster();
- int32 heal_amount = effect->CalcValue(caster);
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.AddSpellBP0(effect->CalcValue(caster));
- caster->CastCustomSpell(caster, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, &heal_amount, nullptr, nullptr, true);
+ caster->CastSpell(caster, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, args);
// Glyph of Felhunter
if (Unit* owner = caster->GetOwner())
if (owner->GetAura(SPELL_WARLOCK_GLYPH_OF_DEMON_TRAINING))
- owner->CastCustomSpell(owner, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, &heal_amount, nullptr, nullptr, true);
+ owner->CastSpell(owner, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, args);
}
}
@@ -530,7 +532,7 @@ class spell_warl_seed_of_corruption_dummy : public SpellScriptLoader
if (!caster)
return;
- caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE, true);
+ caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE, aurEff);
}
void Register() override
@@ -586,7 +588,7 @@ class spell_warl_seed_of_corruption_generic : public SpellScriptLoader
if (!caster)
return;
- caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC, true, nullptr, aurEff);
+ caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC, aurEff);
}
void Register() override
@@ -858,7 +860,7 @@ class spell_warl_t4_2p_bonus : public SpellScriptLoader
{
PreventDefaultAction();
Unit* caster = eventInfo.GetActor();
- caster->CastSpell(caster, Trigger, true, nullptr, aurEff);
+ caster->CastSpell(caster, Trigger, aurEff);
}
void Register() override
@@ -894,9 +896,10 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
{
- int32 damage = aurEff->GetAmount() * 9;
// backfire damage and silence
- caster->CastCustomSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellBP0(aurEff->GetAmount() * 9);
+ caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, args);
}
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 18ebf6a1263..3e9d168ed12 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -204,7 +204,7 @@ class spell_warr_charge_effect : public SpellScriptLoader
{
Unit* caster = GetCaster();
Unit* target = GetHitUnit();
- caster->CastCustomSpell(SPELL_WARRIOR_CHARGE_PAUSE_RAGE_DECAY, SPELLVALUE_BASE_POINT0, 0, caster, true);
+ caster->CastSpell(caster, SPELL_WARRIOR_CHARGE_PAUSE_RAGE_DECAY, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, 0));
caster->CastSpell(target, SPELL_WARRIOR_CHARGE_ROOT_EFFECT, true);
caster->CastSpell(target, SPELL_WARRIOR_CHARGE_SLOW_EFFECT, true);
}
@@ -307,7 +307,7 @@ public:
void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (WorldLocation* dest = GetHitDest())
- GetCaster()->CastSpell(dest->GetPositionX(), dest->GetPositionY(), dest->GetPositionZ(), SPELL_WARRIOR_HEROIC_LEAP_JUMP, true);
+ GetCaster()->CastSpell(*dest, SPELL_WARRIOR_HEROIC_LEAP_JUMP, true);
}
void Register() override
@@ -448,7 +448,9 @@ class spell_warr_item_t10_prot_4p_bonus : public SpellScriptLoader
Unit* target = eventInfo.GetActionTarget();
int32 bp0 = CalculatePct(target->GetMaxHealth(), GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue());
- target->CastCustomSpell(SPELL_WARRIOR_STOICISM, SPELLVALUE_BASE_POINT0, bp0, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddBP0(bp0);
+ target->CastSpell(nullptr, SPELL_WARRIOR_STOICISM, args);
}
void Register() override
@@ -518,9 +520,10 @@ class spell_warr_rallying_cry : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- int32 basePoints0 = int32(GetHitUnit()->CountPctFromMaxHealth(GetEffectValue()));
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, int32(GetHitUnit()->CountPctFromMaxHealth(GetEffectValue())));
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, &basePoints0, nullptr, nullptr, true);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, args);
}
void Register() override
@@ -685,12 +688,13 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader
if (spellInfo && (spellInfo->Id == SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND || (spellInfo->Id == SPELL_WARRIOR_EXECUTE && !_procTarget->HasAuraState(AURA_STATE_WOUNDED_20_PERCENT))))
{
// If triggered by Execute (while target is not under 20% hp) or Bladestorm deals normalized weapon damage
- GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2, true, nullptr, aurEff);
+ GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2, aurEff);
}
else
{
- int32 damage = damageInfo->GetDamage();
- GetTarget()->CastCustomSpell(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, nullptr, aurEff);
+ CastSpellExtraArgs args(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, damageInfo->GetDamage());
+ GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, args);
}
}
}
@@ -732,7 +736,9 @@ public:
int32 remainingDamage = target->GetRemainingPeriodicAmount(target->GetGUID(), SPELL_WARRIOR_TRAUMA_EFFECT, SPELL_AURA_PERIODIC_DAMAGE);
//Get 25% of damage from the spell casted (Slam & Whirlwind) plus Remaining Damage from Aura
int32 damage = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()) / sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_TRAUMA_EFFECT, GetCastDifficulty())->GetMaxTicks()) + remainingDamage;
- GetCaster()->CastCustomSpell(SPELL_WARRIOR_TRAUMA_EFFECT, SPELLVALUE_BASE_POINT0, damage, target, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
+ GetCaster()->CastSpell(target, SPELL_WARRIOR_TRAUMA_EFFECT, args);
}
void Register() override
diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp
index ca3b27140e4..e7a0aeb1770 100644
--- a/src/server/scripts/World/mob_generic_creature.cpp
+++ b/src/server/scripts/World/mob_generic_creature.cpp
@@ -19,6 +19,7 @@
#include "Map.h"
#include "PassiveAI.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
#include "SpellMgr.h"
class trigger_periodic : public CreatureScript
@@ -43,7 +44,7 @@ public:
if (timer <= diff)
{
if (spell)
- me->CastSpell(me, spell, true);
+ me->CastSpell(me, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spell->Difficulty));
timer = interval;
}
else
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index cf4be0e3e3e..601f0d23421 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -468,10 +468,10 @@ public:
{
_scheduler.Schedule(Seconds(2), [this](TaskContext context)
{
- me->CastCustomSpell(SPELL_TORCH_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1);
+ me->CastSpell(nullptr, SPELL_TORCH_TARGET_PICKER);
_scheduler.Schedule(Seconds(3), [this](TaskContext /*context*/)
{
- me->CastCustomSpell(SPELL_TORCH_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1);
+ me->CastSpell(nullptr, SPELL_TORCH_TARGET_PICKER);
});
context.Repeat(Seconds(5));
});
@@ -2284,7 +2284,7 @@ public:
}
else
//me->CastSpell(me, GetFireworkSpell(me->GetEntry()), true);
- me->CastSpell(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), GetFireworkSpell(me->GetEntry()), true);
+ me->CastSpell(me->GetPosition(), GetFireworkSpell(me->GetEntry()), true);
}
};