diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 923d552ac7..51ae60968a 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -105,7 +105,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 8123773114..616f534316 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -244,7 +244,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 b989d9d76c..a60c39f95d 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -168,28 +168,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((Unit*)nullptr, spellId, triggered);
+ if (Unit* victim = me->GetVictim())
+ DoCast(victim, spellId, args);
}
#define UPDATE_TARGET(a) {if (AIInfo->targettarget=a;}
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index d97dc624fe..d9666b19f8 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -22,6 +22,7 @@
#include "Errors.h"
#include "EventMap.h"
#include "ObjectGuid.h"
+#include "SpellDefines.h"
#include "ThreatManager.h"
#define CAST_AI(a, b) (dynamic_cast(b))
@@ -305,10 +306,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); }
float DoGetSpellMaxRange(uint32 spellId, bool positive = false);
diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp
index 5171fe108b..d06225acf2 100644
--- a/src/server/game/AI/PlayerAI/PlayerAI.cpp
+++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp
@@ -620,7 +620,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 0dbcc70ab3..69cb56e0aa 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -182,7 +182,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 12ba1b0089..7c9661d0b4 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldTB.cpp
@@ -436,7 +436,11 @@ void BattlefieldTB::OnPlayerJoinWar(Player* player)
// Bonus damage buff for attackers
if (player->GetTeam() == 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);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED));
+ player->CastSpell(player, SPELL_TOWER_ATTACK_BONUS, args);
+ }
}
@@ -982,8 +986,14 @@ void BattlefieldTB::TowerDestroyed(TBTowerId tbTowerId)
// Attack bonus buff
for (auto itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr)
+ {
if (Player* player = ObjectAccessor::FindPlayer(*itr))
- player->CastCustomSpell(SPELL_TOWER_ATTACK_BONUS, SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED), player, TRIGGERED_FULL_MASK);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED));
+ player->CastSpell(player, SPELL_TOWER_ATTACK_BONUS, args);
+ }
+ }
// 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 115724b095..e2d9e8c9a9 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2017,8 +2017,7 @@ void GameObject::Use(Unit* user)
if (!spellId)
return;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
+ if (!sSpellMgr->GetSpellInfo(spellId))
{
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());
@@ -2031,7 +2030,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);
}
@@ -2060,7 +2059,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;
}
@@ -2073,6 +2072,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());
@@ -2082,14 +2083,18 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
trigger->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, owner->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
// 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 bc28828567..1b2a4c325c 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1912,13 +1912,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 b3bc887775..0006292a3c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1692,7 +1692,11 @@ void Player::ProcessDelayedOperations()
SetPower(POWER_ECLIPSE, 0);
if (uint32 aura = _resurrectionData->Aura)
- CastSpell(this, aura, true, nullptr, nullptr, _resurrectionData->GUID);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCaster(_resurrectionData->GUID);
+ CastSpell(this, aura, args);
+ }
SpawnCorpseBones();
}
@@ -7676,7 +7680,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);
@@ -7752,7 +7756,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
{
@@ -7890,7 +7894,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT
chance = GetWeaponProcChance();
if (roll_chance_f(chance))
- CastSpell(damageInfo.GetVictim(), spellInfo->Id, true, item);
+ CastSpell(damageInfo.GetVictim(), spellInfo->Id, item);
}
}
@@ -7952,9 +7956,9 @@ 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);
}
}
}
@@ -7981,7 +7985,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
spell->m_CastItem = item;
spell->m_cast_count = cast_count; //set count of casts
spell->SetSpellValue(SPELLVALUE_BASE_POINT0, learning_spell_id);
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
@@ -8006,7 +8010,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
spell->m_CastItem = item;
spell->m_cast_count = cast_count; // set count of casts
spell->m_glyphIndex = glyphIndex; // glyph index
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
@@ -8036,7 +8040,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
spell->m_CastItem = item;
spell->m_cast_count = cast_count; // set count of casts
spell->m_glyphIndex = glyphIndex; // glyph index
- spell->prepare(&targets);
+ spell->prepare(targets);
return;
}
}
@@ -13429,11 +13433,14 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
}
}
}
+
+ CastSpellExtraArgs args(item);
// Cast custom spell vs all equal basepoints got from enchant_amount
if (basepoints)
- CastCustomSpell(this, enchant_spell_id, &basepoints, &basepoints, &basepoints, true, item);
- else
- CastSpell(this, enchant_spell_id, true, item);
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), basepoints);
+
+ CastSpell(this, enchant_spell_id, args);
}
else
RemoveAurasDueToItemSpell(enchant_spell_id, item->GetGUID());
@@ -14057,7 +14064,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
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);
@@ -14078,8 +14085,8 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
{
// Cast spells that teach dual spec
// Both are also ImplicitTarget self and must be cast by player
- CastSpell(this, 63680, true, nullptr, nullptr, GetGUID());
- CastSpell(this, 63624, true, nullptr, nullptr, GetGUID());
+ CastSpell(this, 63680, GetGUID());
+ CastSpell(this, 63624, GetGUID());
PrepareGossipMenu(source, menuItemData->GossipActionMenuId);
SendPreparedGossip(source);
@@ -24716,7 +24723,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
float x, y, z, o;
_resurrectionData->Location.GetPosition(x, y, z, o);
TeleportTo(_resurrectionData->Location.GetMapId(), x, y, z, o);
@@ -24741,7 +24748,11 @@ void Player::ResurrectUsingRequestData()
SetPower(POWER_ECLIPSE, 0);
if (uint32 aura = _resurrectionData->Aura)
- CastSpell(this, aura, true, nullptr, nullptr, _resurrectionData->GUID);
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCaster(_resurrectionData->GUID);
+ CastSpell(this, aura, args);
+ }
SpawnCorpseBones();
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c6b5af1a24..863eefb8d1 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1056,162 +1056,48 @@ 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)
+ SpellInfo const* info = sSpellMgr->GetSpellInfo(spellId);
+ if (!info)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s %u)", (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell %u by caster %s", spellId, GetGUID().ToString().c_str());
return;
}
- Spell* spell = new Spell(this, spellInfo, triggerFlags, originalCaster);
+ Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster);
+ for (auto const& pair : args.SpellValueOverrides)
+ spell->SetSpellValue(pair.first, pair.second);
- 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);
+ spell->m_CastItem = args.CastItem;
+ spell->prepare(targets, args.TriggeringAura);
}
-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);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- 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)
+void Unit::CastSpell(WorldObject* target, uint32 spellId, CastSpellExtraArgs const& args)
{
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);
- if (!spellInfo)
+ if (target)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- 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.SetUnitTarget(victim);
-
- CastSpell(targets, spellInfo, &value, triggerFlags, castItem, triggeredByAura, originalCaster);
+ CastSpell(targets, spellId, args);
}
-void Unit::CastSpell(float x, float y, float z, 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);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- return;
- }
SpellCastTargets targets;
- targets.SetDst(x, y, z, GetOrientation());
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
+ targets.SetDst(dest);
+ CastSpell(targets, spellId, args);
}
-void Unit::CastSpell(float x, float y, float z, uint32 spellId, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- return;
- }
- SpellCastTargets targets;
- targets.SetDst(x, y, z, GetOrientation());
-
- CastSpell(targets, spellInfo, nullptr, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(float x, float y, float z, float o, uint32 spellId, bool triggered, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- return;
- }
- SpellCastTargets targets;
- targets.SetDst(x, y, z, o);
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(float x, float y, float z, float o, uint32 spellId, TriggerCastFlags triggerFlags, Item* castItem, AuraEffect const* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- return;
- }
- SpellCastTargets targets;
- targets.SetDst(x, y, z, o);
-
- CastSpell(targets, spellInfo, nullptr, triggerFlags, castItem, triggeredByAura, originalCaster);
-}
-
-void Unit::CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castItem, AuraEffect* triggeredByAura, ObjectGuid originalCaster)
-{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
- return;
- }
- SpellCastTargets targets;
- targets.SetGOTarget(go);
-
- CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
-}
void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 damage, SpellInfo const* spellInfo, WeaponAttackType attackType, bool crit)
{
@@ -2171,7 +2057,7 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
}
else
{
- CastSpell(victim, meleeAttackSpellId, true, nullptr, meleeAttackAuraEffect);
+ CastSpell(victim, meleeAttackSpellId, meleeAttackAuraEffect);
uint32 hitInfo = HITINFO_AFFECTS_VICTIM | HITINFO_NO_ANIMATION;
if (attType == OFF_ATTACK)
@@ -3031,7 +2917,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);
@@ -5849,7 +5735,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())
@@ -5862,7 +5748,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);
}
}
}
@@ -10340,7 +10226,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);
}
@@ -10373,7 +10259,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
@@ -13147,7 +13033,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];
@@ -13161,7 +13052,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, MAX_EFFECT_MASK, this, clicker, nullptr, nullptr, origCasterGUID);
}
@@ -13178,7 +13069,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 0bddd5c67e..9d297ec469 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -23,6 +23,7 @@
#include "CombatManager.h"
#include "OptionalFwd.h"
#include "SpellAuraDefines.h"
+#include "SpellDefines.h"
#include "ThreatManager.h"
#include "Timer.h"
#include "UnitDefines.h"
@@ -32,173 +33,6 @@
#define WORLD_TRIGGER 12999
-enum SpellInterruptFlags
-{
- SPELL_INTERRUPT_FLAG_MOVEMENT = 0x01, // why need this for instant?
- SPELL_INTERRUPT_FLAG_PUSH_BACK = 0x02, // push back
- SPELL_INTERRUPT_FLAG_UNK3 = 0x04, // any info?
- SPELL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
- SPELL_INTERRUPT_FLAG_ABORT_ON_DMG = 0x10 // _complete_ interrupt on direct damage
- //SPELL_INTERRUPT_UNK = 0x20 // unk, 564 of 727 spells having this spell start with "Glyph"
-};
-
-// See SpellAuraInterruptFlags for other values definitions
-enum SpellChannelInterruptFlags
-{
- CHANNEL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
- CHANNEL_FLAG_DELAY = 0x4000
-};
-
-enum SpellAuraInterruptFlags
-{
- AURA_INTERRUPT_FLAG_HITBYSPELL = 0x00000001, // 0 removed when getting hit by a negative spell?
- AURA_INTERRUPT_FLAG_TAKE_DAMAGE = 0x00000002, // 1 removed by any damage
- AURA_INTERRUPT_FLAG_CAST = 0x00000004, // 2 cast any spells
- AURA_INTERRUPT_FLAG_MOVE = 0x00000008, // 3 removed by any movement
- AURA_INTERRUPT_FLAG_TURNING = 0x00000010, // 4 removed by any turning
- AURA_INTERRUPT_FLAG_JUMP = 0x00000020, // 5 removed by entering combat
- AURA_INTERRUPT_FLAG_NOT_MOUNTED = 0x00000040, // 6 removed by dismounting
- AURA_INTERRUPT_FLAG_NOT_ABOVEWATER = 0x00000080, // 7 removed by entering water
- AURA_INTERRUPT_FLAG_NOT_UNDERWATER = 0x00000100, // 8 removed by leaving water
- AURA_INTERRUPT_FLAG_NOT_SHEATHED = 0x00000200, // 9 removed by unsheathing
- AURA_INTERRUPT_FLAG_TALK = 0x00000400, // 10 talk to npc / loot? action on creature
- AURA_INTERRUPT_FLAG_USE = 0x00000800, // 11 mine/use/open action on gameobject
- AURA_INTERRUPT_FLAG_MELEE_ATTACK = 0x00001000, // 12 removed by attacking
- AURA_INTERRUPT_FLAG_SPELL_ATTACK = 0x00002000, // 13 ???
- AURA_INTERRUPT_FLAG_UNK14 = 0x00004000, // 14
- AURA_INTERRUPT_FLAG_TRANSFORM = 0x00008000, // 15 removed by transform?
- AURA_INTERRUPT_FLAG_UNK16 = 0x00010000, // 16
- AURA_INTERRUPT_FLAG_MOUNT = 0x00020000, // 17 misdirect, aspect, swim speed
- AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000, // 18 removed by standing up (used by food and drink mostly and sleep/Fake Death like)
- AURA_INTERRUPT_FLAG_CHANGE_MAP = 0x00080000, // 19 leaving map/getting teleported
- AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION = 0x00100000, // 20 removed by auras that make you invulnerable, or make other to lose selection on you
- AURA_INTERRUPT_FLAG_UNK21 = 0x00200000, // 21
- AURA_INTERRUPT_FLAG_TELEPORTED = 0x00400000, // 22
- AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT = 0x00800000, // 23 removed by entering pvp combat
- AURA_INTERRUPT_FLAG_DIRECT_DAMAGE = 0x01000000, // 24 removed by any direct damage
- AURA_INTERRUPT_FLAG_LANDING = 0x02000000, // 25 removed by hitting the ground
- AURA_INTERRUPT_FLAG_LEAVE_COMBAT = 0x80000000, // 31 removed by leaving combat
-
- AURA_INTERRUPT_FLAG_NOT_VICTIM = (AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE | AURA_INTERRUPT_FLAG_DIRECT_DAMAGE)
-};
-
-enum SpellModOp : uint8
-{
- SPELLMOD_DAMAGE = 0,
- SPELLMOD_DURATION = 1,
- SPELLMOD_THREAT = 2,
- SPELLMOD_EFFECT1 = 3,
- SPELLMOD_CHARGES = 4,
- SPELLMOD_RANGE = 5,
- SPELLMOD_RADIUS = 6,
- SPELLMOD_CRITICAL_CHANCE = 7,
- SPELLMOD_ALL_EFFECTS = 8,
- SPELLMOD_NOT_LOSE_CASTING_TIME = 9,
- SPELLMOD_CASTING_TIME = 10,
- SPELLMOD_COOLDOWN = 11,
- SPELLMOD_EFFECT2 = 12,
- SPELLMOD_IGNORE_ARMOR = 13,
- SPELLMOD_COST = 14,
- SPELLMOD_CRIT_DAMAGE_BONUS = 15,
- SPELLMOD_RESIST_MISS_CHANCE = 16,
- SPELLMOD_JUMP_TARGETS = 17,
- SPELLMOD_CHANCE_OF_SUCCESS = 18,
- SPELLMOD_ACTIVATION_TIME = 19,
- SPELLMOD_DAMAGE_MULTIPLIER = 20,
- SPELLMOD_GLOBAL_COOLDOWN = 21,
- SPELLMOD_DOT = 22,
- SPELLMOD_EFFECT3 = 23,
- SPELLMOD_BONUS_MULTIPLIER = 24,
- // spellmod 25
- SPELLMOD_PROC_PER_MINUTE = 26,
- SPELLMOD_VALUE_MULTIPLIER = 27,
- SPELLMOD_RESIST_DISPEL_CHANCE = 28,
- SPELLMOD_CRIT_DAMAGE_BONUS_2 = 29, //one not used spell
- SPELLMOD_SPELL_COST_REFUND_ON_FAIL = 30,
-
- MAX_SPELLMOD
-};
-
-enum SpellValueMod : uint8
-{
- SPELLVALUE_BASE_POINT0,
- SPELLVALUE_BASE_POINT1,
- SPELLVALUE_BASE_POINT2,
- SPELLVALUE_RADIUS_MOD,
- SPELLVALUE_MAX_TARGETS,
- SPELLVALUE_AURA_STACK,
- SPELLVALUE_AURA_DURATION
-};
-
-class CustomSpellValues
-{
- typedef std::pair CustomSpellValueMod;
- typedef std::vector 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
-};
-
-// high byte (3 from 0..3) of UNIT_FIELD_BYTES_2
-enum ShapeshiftForm
-{
- FORM_NONE = 0x00,
- FORM_CAT = 0x01,
- FORM_TREE = 0x02,
- FORM_TRAVEL = 0x03,
- FORM_AQUA = 0x04,
- FORM_BEAR = 0x05,
- FORM_AMBIENT = 0x06,
- FORM_GHOUL = 0x07,
- FORM_DIREBEAR = 0x08, // Removed in 4.0.1
- FORM_STEVES_GHOUL = 0x09,
- FORM_THARONJA_SKELETON = 0x0A,
- FORM_TEST_OF_STRENGTH = 0x0B,
- FORM_BLB_PLAYER = 0x0C,
- FORM_SHADOW_DANCE = 0x0D,
- FORM_CREATUREBEAR = 0x0E,
- FORM_CREATURECAT = 0x0F,
- FORM_GHOSTWOLF = 0x10,
- FORM_BATTLESTANCE = 0x11,
- FORM_DEFENSIVESTANCE = 0x12,
- FORM_BERSERKERSTANCE = 0x13,
- FORM_TEST = 0x14,
- FORM_ZOMBIE = 0x15,
- FORM_METAMORPHOSIS = 0x16,
- FORM_UNDEAD = 0x19,
- FORM_MASTER_ANGLER = 0x1A,
- FORM_FLIGHT_EPIC = 0x1B,
- FORM_SHADOW = 0x1C,
- FORM_FLIGHT = 0x1D,
- FORM_STEALTH = 0x1E,
- FORM_MOONKIN = 0x1F,
- FORM_SPIRITOFREDEMPTION = 0x20
-};
-
#define MAX_SPELL_CHARM 4
#define MAX_SPELL_VEHICLE 6
#define MAX_SPELL_POSSESS 8
@@ -311,36 +145,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
- TRIGGERED_IGNORE_BLOCKED_SPELL_FAMILY = 0x00004000, //! Will ignore blocked casts of SPELL_AURA_BLOCK_SPELL_FAMILY
- // reuse = 0x00008000,
- TRIGGERED_IGNORE_CASTER_AURAS = 0x00010000, //! Will ignore caster aura restrictions or requirements
- // reuse = 0x00020000,
- 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_SPIRIT must be in existed order, it's accessed by index values of Stats enum.
@@ -1301,22 +1105,11 @@ 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(float x, float y, float z, float o, uint32 spellId, bool triggered, Item* castItem = nullptr, AuraEffect const* triggeredByAura = nullptr, ObjectGuid originalCaster = ObjectGuid::Empty);
- void CastSpell(float x, float y, float z, float o, 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* 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, uint8 effMask, Unit* target);
void SetAuraStack(uint32 spellId, Unit* target, uint32 stack);
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index f76ee9ee61..6ca5ee13ce 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -393,7 +393,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
}
}
- spell->prepare(&(spell->m_targets));
+ spell->prepare(spell->m_targets);
}
else
{
@@ -820,7 +820,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
}
}
- spell->prepare(&(spell->m_targets));
+ spell->prepare(spell->m_targets);
}
else
{
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index bdd5bec68c..cef639dbad 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -468,7 +468,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
Spell* spell = new Spell(caster, spellInfo, triggerFlag, ObjectGuid::Empty, false);
spell->m_cast_count = castCount; // set count of casts
spell->m_glyphIndex = glyphIndex;
- spell->prepare(&targets);
+ spell->prepare(targets);
}
void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket)
@@ -630,12 +630,9 @@ void WorldSession::HandleSelfResOpcode(WorldPacket& /*recvData*/)
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
return; // silent return, client should display error by itself and not send this opcode
- if (_player->GetUInt32Value(PLAYER_SELF_RES_SPELL))
+ if (uint32 spellId = _player->GetUInt32Value(PLAYER_SELF_RES_SPELL))
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(_player->GetUInt32Value(PLAYER_SELF_RES_SPELL));
- if (spellInfo)
- _player->CastSpell(_player, spellInfo, false, nullptr);
-
+ _player->CastSpell(_player, spellId);
_player->SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
}
}
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index c18b01dbbb..a72fa374e5 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -603,10 +603,10 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
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 f0423d19c5..bf753c7781 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -455,4 +455,40 @@ enum AuraObjectType
DYNOBJ_AURA_TYPE
};
+// high byte (3 from 0..3) of UNIT_FIELD_BYTES_2
+enum ShapeshiftForm
+{
+ FORM_NONE = 0x00,
+ FORM_CAT = 0x01,
+ FORM_TREE = 0x02,
+ FORM_TRAVEL = 0x03,
+ FORM_AQUA = 0x04,
+ FORM_BEAR = 0x05,
+ FORM_AMBIENT = 0x06,
+ FORM_GHOUL = 0x07,
+ FORM_DIREBEAR = 0x08, // Removed in 4.0.1
+ FORM_STEVES_GHOUL = 0x09,
+ FORM_THARONJA_SKELETON = 0x0A,
+ FORM_TEST_OF_STRENGTH = 0x0B,
+ FORM_BLB_PLAYER = 0x0C,
+ FORM_SHADOW_DANCE = 0x0D,
+ FORM_CREATUREBEAR = 0x0E,
+ FORM_CREATURECAT = 0x0F,
+ FORM_GHOSTWOLF = 0x10,
+ FORM_BATTLESTANCE = 0x11,
+ FORM_DEFENSIVESTANCE = 0x12,
+ FORM_BERSERKERSTANCE = 0x13,
+ FORM_TEST = 0x14,
+ FORM_ZOMBIE = 0x15,
+ FORM_METAMORPHOSIS = 0x16,
+ FORM_UNDEAD = 0x19,
+ FORM_MASTER_ANGLER = 0x1A,
+ FORM_FLIGHT_EPIC = 0x1B,
+ FORM_SHADOW = 0x1C,
+ FORM_FLIGHT = 0x1D,
+ FORM_STEALTH = 0x1E,
+ FORM_MOONKIN = 0x1F,
+ FORM_SPIRITOFREDEMPTION = 0x20
+};
+
#endif
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 0f98e55a19..dc10d12079 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1289,10 +1289,10 @@ 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 (target->GetTypeId() == TYPEID_PLAYER)
{
@@ -1315,7 +1315,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);
}
// Also do it for Glyphs
@@ -1330,7 +1330,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
continue;
if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
- target->CastSpell(target, glyph->SpellID, true, nullptr, this);
+ target->CastSpell(target, glyph->SpellID, this);
}
}
}
@@ -1340,7 +1340,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(24932);
if (spellInfo && spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
- target->CastSpell(target, 24932, true, nullptr, this);
+ target->CastSpell(target, 24932, this);
}
// Heart of the Wild
@@ -1364,7 +1364,11 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
}
if (heartOfTheWildSpellId)
- target->CastCustomSpell(target, heartOfTheWildSpellId, &heartOfTheWildAmount, nullptr, nullptr, true, nullptr, this);
+ {
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, heartOfTheWildAmount);
+ target->CastSpell(target, heartOfTheWildSpellId, args);
+ }
}
switch (GetMiscValue())
@@ -1386,35 +1390,39 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
spellId3 = 47180;
break;
}
- target->CastSpell(target, spellId3, true, nullptr, this);
+ target->CastSpell(target, spellId3, this);
}
// Master Shapeshifter - Cat
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, 2851, EFFECT_0))
{
- int32 bp = aurEff->GetAmount();
- target->CastCustomSpell(48420, SPELLVALUE_BASE_POINT0, bp, target, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
+ target->CastSpell(target, 48420, args);
}
break;
case FORM_BEAR:
// Master Shapeshifter - Bear
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, 2851, EFFECT_0))
{
- int32 bp = aurEff->GetAmount();
- target->CastCustomSpell(48418, SPELLVALUE_BASE_POINT0, bp, target, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
+ target->CastSpell(target, 48418, args);
}
// Survival of the Fittest
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DRUID, 961, EFFECT_0))
{
- int32 bp = aurEff->GetSpellInfo()->Effects[EFFECT_2].CalcValue(GetCaster());
- target->CastCustomSpell(62069, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, this);
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, aurEff->GetSpellInfo()->Effects[EFFECT_2].CalcValue());
+ target->CastSpell(target, 62069, args);
}
break;
case FORM_MOONKIN:
// Master Shapeshifter - Moonkin
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, 2851, EFFECT_0))
{
- int32 bp = aurEff->GetAmount();
- target->CastCustomSpell(48421, SPELLVALUE_BASE_POINT0, bp, target, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
+ target->CastSpell(target, 48421, args);
}
break;
default:
@@ -1857,8 +1865,9 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
if (furorEffect)
{
// Allow to retain up to x% of the caster's energy when shape shifting into cat form
- int32 basePoints = std::min(oldPower, furorEffect->GetAmount());
- target->CastCustomSpell(target, 17099, &basePoints, nullptr, nullptr, true, nullptr, this);
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, std::min(oldPower, furorEffect->GetAmount()));
+ target->CastSpell(target, 17099, args);
}
}
else if (furorEffect && roll_chance_i(furorEffect->GetAmount())) // x% chance to gain 10 rage when shape shifting into bear form
@@ -1905,12 +1914,12 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
case FORM_BEAR:
case FORM_CAT:
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:
if (AuraEffect* dummy = target->GetAuraEffect(37324, 0))
- target->CastSpell(target, 37325, true, nullptr, dummy);
+ target->CastSpell(target, 37325, dummy);
break;
case FORM_BATTLESTANCE:
case FORM_DEFENSIVESTANCE:
@@ -4454,7 +4463,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
{
@@ -4462,7 +4471,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());
@@ -4483,15 +4492,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);
@@ -4500,9 +4509,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
@@ -4540,7 +4549,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)
@@ -4559,7 +4568,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 43681: // Inactive
{
@@ -4571,14 +4580,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((Unit*)nullptr, GetAmount(), true, nullptr, this);
+ target->CastSpell(nullptr, GetAmount(), this);
break;
case 91604: // Restricted Flight Area
if (aurApp->GetRemoveMode().HasFlag(AuraRemoveFlags::Expired))
@@ -4620,7 +4629,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(spellId);
for (uint32 i = 0; i < spell->StackAmount; ++i)
- caster->CastSpell(target, spell->Id, true, nullptr, nullptr, GetCasterGUID());
+ caster->CastSpell(target, spell->Id, GetCasterGUID());
break;
}
target->RemoveAurasDueToSpell(spellId);
@@ -4634,7 +4643,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
{
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(spellId);
for (uint32 i = 0; i < spell->StackAmount; ++i)
- caster->CastSpell(target, spell->Id, true, nullptr, nullptr, GetCasterGUID());
+ caster->CastSpell(target, spell->Id, GetCasterGUID());
break;
}
target->RemoveAurasDueToSpell(spellId);
@@ -4998,11 +5007,14 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo
if (!caster)
return;
+
// 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
{
@@ -5183,8 +5195,11 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
if (!caster)
break;
- caster->CastCustomSpell(66152, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true);
- caster->CastCustomSpell(66153, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true);
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, urand(1, 6));
+
+ caster->CastSpell(target, 66152, args);
+ caster->CastSpell(target, 66153, args);
break;
}
case 62292: // Blaze (Pool of Tar)
@@ -5202,7 +5217,7 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
case 64821: // Fuse Armor (Razorscale)
if (GetBase()->GetStackAmount() == GetSpellInfo()->StackAmount)
{
- target->CastSpell(target, 64774, true, nullptr, nullptr, GetCasterGUID());
+ target->CastSpell(target, 64774, GetCasterGUID());
target->RemoveAura(64821);
}
break;
@@ -5214,7 +5229,12 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
if (GetSpellInfo()->SpellFamilyFlags[1] & 0x80000000)
{
if (caster)
- caster->CastCustomSpell(53352, SPELLVALUE_BASE_POINT0, m_amount, target, true, nullptr, this);
+ {
+ CastSpellExtraArgs args;
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0), m_amount);
+ args.SetTriggeringAura(this);
+ caster->CastSpell(target, 53352, args);
+ }
break;
}
switch (GetSpellInfo()->Id)
@@ -5222,12 +5242,12 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
// Feeding Frenzy Rank 1
case 53511:
if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35))
- target->CastSpell(target, 60096, true, nullptr, this);
+ target->CastSpell(target, 60096, this);
return;
// Feeding Frenzy Rank 2
case 53512:
if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35))
- target->CastSpell(target, 60097, true, nullptr, this);
+ target->CastSpell(target, 60097, this);
return;
default:
break;
@@ -5326,7 +5346,11 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
// Frost Blast
case 27808:
if (caster)
- caster->CastCustomSpell(29879, SPELLVALUE_BASE_POINT0, int32(target->CountPctFromMaxHealth(21)), target, true, nullptr, this);
+ {
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0), int32(target->CountPctFromMaxHealth(21)));
+ caster->CastSpell(target, triggerSpellId, args);
+ }
return;
// Inoculate Nestlewood Owlkin
case 29528:
@@ -5366,7 +5390,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
// so instakill will be naturally done before trigger spell
case 31347:
{
- target->CastSpell(target, 31350, true, nullptr, this);
+ target->CastSpell(target, 31350, this);
target->KillSelf();
return;
}
@@ -5382,9 +5406,9 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
{
// cast 24 spells 34269-34289, 34314-34316
for (uint32 spell_id = 34269; spell_id != 34290; ++spell_id)
- target->CastSpell(target, spell_id, true, nullptr, this);
+ target->CastSpell(target, spell_id, this);
for (uint32 spell_id = 34314; spell_id != 34317; ++spell_id)
- target->CastSpell(target, spell_id, true, nullptr, this);
+ target->CastSpell(target, spell_id, this);
return;
}
// Remote Toy
@@ -5401,10 +5425,9 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
if (!caster || target->GetTypeId() != TYPEID_UNIT)
return;
- caster->CastSpell(caster, 38495, true, nullptr, this);
+ caster->CastSpell(caster, 38495, this);
Creature* creatureTarget = target->ToCreature();
-
creatureTarget->DespawnOrUnsummon();
return;
}
@@ -5474,22 +5497,37 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
}
// Mana Tide
case 16191:
- target->CastCustomSpell(target, triggerSpellId, &m_amount, nullptr, nullptr, true, nullptr, this);
+ {
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, m_amount);
+ args.SetTriggeringAura(this);
+ target->CastSpell(target, triggerSpellId, args);
return;
+ }
// Negative Energy Periodic
case 46284:
- target->CastCustomSpell(triggerSpellId, SPELLVALUE_MAX_TARGETS, m_tickNumber / 10 + 1, nullptr, true, nullptr, this);
+ {
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, int32(m_tickNumber / 10 + 1));
+ args.SetTriggeringAura(this);
+ target->CastSpell(nullptr, triggerSpellId, args);
return;
+ }
// Slime Pool (Dreadscale & Acidmaw)
case 66882:
- target->CastCustomSpell(triggerSpellId, SPELLVALUE_RADIUS_MOD, (int32)((((float)m_tickNumber / 60) * 0.9f + 0.1f) * 10000 * 2 / 3), nullptr, true, nullptr, this);
+ {
+ CastSpellExtraArgs args(this);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_RADIUS_MOD, int32((((float)m_tickNumber / 60) * 0.9f + 0.1f) * 10000 * 2 / 3));
+ args.SetTriggeringAura(this);
+ target->CastSpell(nullptr, triggerSpellId, args);
return;
+ }
// Slime Spray - temporary here until preventing default effect works again
// added on 9.10.2010
case 69508:
{
if (caster)
- caster->CastSpell(target, triggerSpellId, true, nullptr, nullptr, caster->GetGUID());
+ caster->CastSpell(target, triggerSpellId, caster->GetGUID());
return;
}
case 24745: // Summon Templar, Trigger
@@ -5524,12 +5562,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, triggeredSpellInfo->Id, 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 therefor not triggered.", GetId(), triggerSpellId, GetEffIndex());
}
void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* caster) const
@@ -5539,13 +5577,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 therefor not triggered.", GetId(), triggerSpellId, GetEffIndex());
}
void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
@@ -6012,8 +6052,11 @@ 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, int32(CalculatePct(gainedAmount, manaFeedVal)));
+ args.SetTriggeringAura(this);
+ caster->CastSpell(caster, 32554, args);
}
}
}
@@ -6154,7 +6197,7 @@ void AuraEffect::HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEve
if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId))
{
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
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());
@@ -6169,7 +6212,7 @@ void AuraEffect::HandleProcTriggerSpellCopyAuraProc(AuraApplication* aurApp, Pro
return;
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);
}
void AuraEffect::HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo)
@@ -6180,9 +6223,10 @@ void AuraEffect::HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp
uint32 triggerSpellId = GetSpellInfo()->Effects[m_effIndex].TriggerSpell;
if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId))
{
- 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());
@@ -6248,7 +6292,7 @@ void AuraEffect::HandleRaidProcFromChargeAuraProc(AuraApplication* aurApp, ProcE
if (Unit* triggerTarget = target->GetNextRandomRaidMemberOrPet(radius))
{
- target->CastSpell(triggerTarget, GetSpellInfo(), true, nullptr, this, GetCasterGUID());
+ target->CastSpell(triggerTarget, GetId(), { this, GetCasterGUID() });
if (Aura* aura = triggerTarget->GetAura(GetId(), GetCasterGUID()))
aura->SetCharges(jumps);
}
@@ -6256,10 +6300,9 @@ void AuraEffect::HandleRaidProcFromChargeAuraProc(AuraApplication* aurApp, ProcE
}
TC_LOG_DEBUG("spells", "AuraEffect::HandleRaidProcFromChargeAuraProc: Triggering spell %u from aura %u proc", triggerSpellId, GetId());
- target->CastSpell(target, triggerSpellId, true, nullptr, this, GetCasterGUID());
+ target->CastSpell(target, triggerSpellId, { this, GetCasterGUID() });
}
-
void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurApp, ProcEventInfo& /*eventInfo*/)
{
Unit* target = aurApp->GetTarget();
@@ -6272,14 +6315,16 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
}
uint32 triggerSpellId = 33110;
- int32 value = GetAmount();
-
int32 jumps = GetBase()->GetCharges();
// current aura expire on proc finish
GetBase()->SetCharges(0);
GetBase()->SetUsingCharges(true);
+ CastSpellExtraArgs args(this);
+ args.OriginalCaster = GetCasterGUID();
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, GetAmount());
+
// next target selection
if (jumps > 0)
{
@@ -6289,7 +6334,7 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
if (Unit* triggerTarget = target->GetNextRandomRaidMemberOrPet(radius))
{
- target->CastCustomSpell(triggerTarget, GetId(), &value, nullptr, nullptr, true, nullptr, this, GetCasterGUID());
+ target->CastSpell(triggerTarget, GetId(), args);
if (Aura* aura = triggerTarget->GetAura(GetId(), GetCasterGUID()))
aura->SetCharges(jumps);
}
@@ -6297,7 +6342,7 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
}
TC_LOG_DEBUG("spells", "AuraEffect::HandleRaidProcFromChargeWithValueAuraProc: Triggering spell %u from aura %u proc", triggerSpellId, GetId());
- target->CastCustomSpell(target, triggerSpellId, &value, nullptr, nullptr, true, nullptr, this, GetCasterGUID());
+ target->CastSpell(target, triggerSpellId, args);
}
void AuraEffect::HandleProcOnPowerAmountAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo)
@@ -6321,7 +6366,7 @@ void AuraEffect::HandleProcOnPowerAmountAuraProc(AuraApplication* aurApp, ProcEv
if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId))
{
TC_LOG_DEBUG("spells", "AuraEffect::HandleProcOnPowerAmountAuraProc: Triggering spell %u from aura %u proc", triggeredSpellInfo->Id, GetId());
- triggerCaster->CastSpell(triggerTarget, triggeredSpellInfo, true, nullptr, this);
+ triggerCaster->CastSpell(triggerTarget, triggeredSpellInfo->Id, true);
}
else
TC_LOG_ERROR("spells", "AuraEffect::HandleProcOnPowerAmountAuraProc: Could not trigger spell %u from aura %u proc, because the spell does not have an entry in Spell.dbc.", triggerSpellId, GetId());
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 02b43baa11..838edd8a00 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1218,7 +1218,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (*itr < 0)
target->RemoveAurasDueToSpell(-(*itr));
else if (!removeMode.HasFlag(AuraRemoveFlags::ByDeath))
- target->CastSpell(target, *itr, true, nullptr, nullptr, GetCasterGUID());
+ target->CastSpell(target, *itr, GetCasterGUID());
}
}
if (std::vector const* spellTriggered = sSpellMgr->GetSpellLinked(GetId() + SPELL_LINK_AURA))
@@ -1280,8 +1280,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;
@@ -1323,10 +1324,12 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT);
+ CastSpellExtraArgs args(devouringPlague), args2(devouringPlague);
int32 basepoints0 = CalculatePct(devouringPlague->GetTotalTicks() * static_cast(damage), aurEff->GetAmount());
- int32 heal = CalculatePct(basepoints0, 15);
- caster->CastCustomSpell(63675, SPELLVALUE_BASE_POINT0, basepoints0, target, true, nullptr, devouringPlague);
- caster->CastCustomSpell(75999, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, devouringPlague);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, basepoints0);
+ args2.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, CalculatePct(basepoints0, 15));
+ caster->CastSpell(target, 63675, args);
+ caster->CastSpell(nullptr, 75999, args2);
}
}
// Power Word: Shield
@@ -1337,7 +1340,9 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
{
// instantly heal m_amount% of the absorb-value
int32 heal = glyph->GetAmount() * GetEffect(0)->GetAmount()/100;
- caster->CastCustomSpell(GetUnitOwner(), 56160, &heal, nullptr, nullptr, true, nullptr, GetEffect(0));
+ CastSpellExtraArgs args(GetEffect(0));
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, heal);
+ caster->CastSpell(GetUnitOwner(), 56160, args);
}
}
break;
@@ -1371,11 +1376,14 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
switch (GetId())
{
case 66: // Invisibility
+ {
if (!removeMode.HasFlag(AuraRemoveFlags::Expired))
break;
- target->CastSpell(target, 32612, true, nullptr, GetEffect(1));
+
+ target->CastSpell(target, 32612, GetEffect(EFFECT_1));
target->CombatStop();
break;
+ }
default:
break;
}
@@ -1428,8 +1436,10 @@ 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);
}
}
}
@@ -1484,7 +1494,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (owner->HasAura(34692))
{
if (apply)
- owner->CastSpell(owner, 34471, true, 0, GetEffect(0));
+ owner->CastSpell(owner, 34471, GetEffect(EFFECT_0));
else
owner->RemoveAurasDueToSpell(34471);
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index dc33dda715..ab2c330677 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2965,7 +2965,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
{
if (CanExecuteTriggersOnHit(effMask, i->triggeredByAura) && roll_chance_i(i->chance))
{
- m_caster->CastSpell(unit, i->triggeredSpell, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_TARGET_CHECK));
+ m_caster->CastSpell(unit, i->triggeredSpell->Id, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_TARGET_CHECK));
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
@@ -2996,7 +2996,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 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());
}
}
}
@@ -3132,7 +3132,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)
{
@@ -3145,7 +3145,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
m_castItemEntry = 0;
}
- InitExplicitTargets(*targets);
+ InitExplicitTargets(targets);
// Fill aura scaling information
if (m_caster->IsControlledByPlayer() && !m_spellInfo->IsPassive() && m_spellInfo->SpellLevel && !m_spellInfo->IsChanneled() && !(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_SCALING))
@@ -6009,7 +6009,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 ae082845af..32d357a763 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -434,7 +434,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(Spell* interruptingSpell = nullptr);
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
new file mode 100644
index 0000000000..1e66a88ad6
--- /dev/null
+++ b/src/server/game/Spells/SpellDefines.h
@@ -0,0 +1,199 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+#ifndef TRINITY_SPELLDEFINES_H
+#define TRINITY_SPELLDEFINES_H
+
+#include "Define.h"
+#include "ObjectGuid.h"
+#include
+
+class Item;
+class AuraEffect;
+
+enum SpellInterruptFlags
+{
+ SPELL_INTERRUPT_FLAG_MOVEMENT = 0x01, // why need this for instant?
+ SPELL_INTERRUPT_FLAG_PUSH_BACK = 0x02, // push back
+ SPELL_INTERRUPT_FLAG_UNK3 = 0x04, // any info?
+ SPELL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
+ SPELL_INTERRUPT_FLAG_ABORT_ON_DMG = 0x10 // _complete_ interrupt on direct damage
+ //SPELL_INTERRUPT_UNK = 0x20 // unk, 564 of 727 spells having this spell start with "Glyph"
+};
+
+// See SpellAuraInterruptFlags for other values definitions
+enum SpellChannelInterruptFlags
+{
+ CHANNEL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
+ CHANNEL_FLAG_DELAY = 0x4000
+};
+
+enum SpellAuraInterruptFlags
+{
+ AURA_INTERRUPT_FLAG_HITBYSPELL = 0x00000001, // 0 removed when getting hit by a negative spell?
+ AURA_INTERRUPT_FLAG_TAKE_DAMAGE = 0x00000002, // 1 removed by any damage
+ AURA_INTERRUPT_FLAG_CAST = 0x00000004, // 2 cast any spells
+ AURA_INTERRUPT_FLAG_MOVE = 0x00000008, // 3 removed by any movement
+ AURA_INTERRUPT_FLAG_TURNING = 0x00000010, // 4 removed by any turning
+ AURA_INTERRUPT_FLAG_JUMP = 0x00000020, // 5 removed by entering combat
+ AURA_INTERRUPT_FLAG_NOT_MOUNTED = 0x00000040, // 6 removed by dismounting
+ AURA_INTERRUPT_FLAG_NOT_ABOVEWATER = 0x00000080, // 7 removed by entering water
+ AURA_INTERRUPT_FLAG_NOT_UNDERWATER = 0x00000100, // 8 removed by leaving water
+ AURA_INTERRUPT_FLAG_NOT_SHEATHED = 0x00000200, // 9 removed by unsheathing
+ AURA_INTERRUPT_FLAG_TALK = 0x00000400, // 10 talk to npc / loot? action on creature
+ AURA_INTERRUPT_FLAG_USE = 0x00000800, // 11 mine/use/open action on gameobject
+ AURA_INTERRUPT_FLAG_MELEE_ATTACK = 0x00001000, // 12 removed by attacking
+ AURA_INTERRUPT_FLAG_SPELL_ATTACK = 0x00002000, // 13 ???
+ AURA_INTERRUPT_FLAG_UNK14 = 0x00004000, // 14
+ AURA_INTERRUPT_FLAG_TRANSFORM = 0x00008000, // 15 removed by transform?
+ AURA_INTERRUPT_FLAG_UNK16 = 0x00010000, // 16
+ AURA_INTERRUPT_FLAG_MOUNT = 0x00020000, // 17 misdirect, aspect, swim speed
+ AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000, // 18 removed by standing up (used by food and drink mostly and sleep/Fake Death like)
+ AURA_INTERRUPT_FLAG_CHANGE_MAP = 0x00080000, // 19 leaving map/getting teleported
+ AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION = 0x00100000, // 20 removed by auras that make you invulnerable, or make other to lose selection on you
+ AURA_INTERRUPT_FLAG_UNK21 = 0x00200000, // 21
+ AURA_INTERRUPT_FLAG_TELEPORTED = 0x00400000, // 22
+ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT = 0x00800000, // 23 removed by entering pvp combat
+ AURA_INTERRUPT_FLAG_DIRECT_DAMAGE = 0x01000000, // 24 removed by any direct damage
+ AURA_INTERRUPT_FLAG_LANDING = 0x02000000, // 25 removed by hitting the ground
+ AURA_INTERRUPT_FLAG_LEAVE_COMBAT = 0x80000000, // 31 removed by leaving combat
+
+ AURA_INTERRUPT_FLAG_NOT_VICTIM = (AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE | AURA_INTERRUPT_FLAG_DIRECT_DAMAGE)
+};
+
+enum SpellModOp : uint8
+{
+ SPELLMOD_DAMAGE = 0,
+ SPELLMOD_DURATION = 1,
+ SPELLMOD_THREAT = 2,
+ SPELLMOD_EFFECT1 = 3,
+ SPELLMOD_CHARGES = 4,
+ SPELLMOD_RANGE = 5,
+ SPELLMOD_RADIUS = 6,
+ SPELLMOD_CRITICAL_CHANCE = 7,
+ SPELLMOD_ALL_EFFECTS = 8,
+ SPELLMOD_NOT_LOSE_CASTING_TIME = 9,
+ SPELLMOD_CASTING_TIME = 10,
+ SPELLMOD_COOLDOWN = 11,
+ SPELLMOD_EFFECT2 = 12,
+ SPELLMOD_IGNORE_ARMOR = 13,
+ SPELLMOD_COST = 14,
+ SPELLMOD_CRIT_DAMAGE_BONUS = 15,
+ SPELLMOD_RESIST_MISS_CHANCE = 16,
+ SPELLMOD_JUMP_TARGETS = 17,
+ SPELLMOD_CHANCE_OF_SUCCESS = 18,
+ SPELLMOD_ACTIVATION_TIME = 19,
+ SPELLMOD_DAMAGE_MULTIPLIER = 20,
+ SPELLMOD_GLOBAL_COOLDOWN = 21,
+ SPELLMOD_DOT = 22,
+ SPELLMOD_EFFECT3 = 23,
+ SPELLMOD_BONUS_MULTIPLIER = 24,
+ // spellmod 25
+ SPELLMOD_PROC_PER_MINUTE = 26,
+ SPELLMOD_VALUE_MULTIPLIER = 27,
+ SPELLMOD_RESIST_DISPEL_CHANCE = 28,
+ SPELLMOD_CRIT_DAMAGE_BONUS_2 = 29, //one not used spell
+ SPELLMOD_SPELL_COST_REFUND_ON_FAIL = 30,
+
+ MAX_SPELLMOD
+};
+
+enum SpellValueMod : uint8
+{
+ SPELLVALUE_BASE_POINT0,
+ SPELLVALUE_BASE_POINT1,
+ SPELLVALUE_BASE_POINT2,
+ SPELLVALUE_RADIUS_MOD,
+ SPELLVALUE_MAX_TARGETS,
+ SPELLVALUE_AURA_STACK,
+ SPELLVALUE_AURA_DURATION
+};
+
+enum SpellFacingFlags
+{
+ SPELL_FACING_FLAG_INFRONT = 0x1
+};
+
+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
+ TRIGGERED_IGNORE_BLOCKED_SPELL_FAMILY = 0x00004000, //! Will ignore blocked casts of SPELL_AURA_BLOCK_SPELL_FAMILY
+ // reuse = 0x00008000,
+ TRIGGERED_IGNORE_CASTER_AURAS = 0x00010000, //! Will ignore caster aura restrictions or requirements
+ // reuse = 0x00020000,
+ 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() {}
+ 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(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& 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;
+ struct
+ {
+ public:
+ void AddMod(SpellValueMod mod, int32 val) { data.push_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> data;
+
+ friend class Unit;
+ } SpellValueOverrides;
+};
+
+#endif // TRINITY_SPELLDEFINES_H
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 7edb47c996..f5a0c19bde 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -562,17 +562,14 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
targets.SetUnitTarget(m_caster);
}
- CustomSpellValues values;
+ CastSpellExtraArgs args(m_originalCasterGUID);
// set basepoints for trigger with value effect
if (m_spellInfo->Effects[effIndex].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)
@@ -612,18 +609,14 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex)
targets.SetUnitTarget(m_caster);
}
- CustomSpellValues values;
+ CastSpellExtraArgs args(m_originalCasterGUID);
// set basepoints for trigger with value effect
if (m_spellInfo->Effects[effIndex].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)
@@ -655,32 +648,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 (m_spellInfo->Effects[effIndex].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);
- }
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
- SpellCastTargets targets;
- targets.SetUnitTarget(m_caster);
-
- unitTarget->CastSpell(targets, spellInfo, &values, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD));
+ unitTarget->CastSpell(m_caster, spellInfo->Id, args);
}
void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex effIndex)
@@ -699,7 +688,7 @@ void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex effIndex)
finish();
- m_caster->CastSpell((Unit*)nullptr, spellInfo, false);
+ m_caster->CastSpell(nullptr, spellInfo->Id, false);
}
void Spell::EffectJump(SpellEffIndex effIndex)
@@ -1912,11 +1901,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);
}
ExecuteLogEffectSummonObject(effIndex, summon);
}
@@ -2053,12 +2044,13 @@ void Spell::EffectDispel(SpellEffIndex effIndex)
// Devour Magic
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->GetCategory() == SPELLCATEGORY_DEVOUR_MAGIC)
{
- int32 heal_amount = m_spellInfo->Effects[EFFECT_1].CalcValue(m_caster);
- m_caster->CastCustomSpell(m_caster, 19658, &heal_amount, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, m_spellInfo->Effects[EFFECT_1].CalcValue());
+ m_caster->CastSpell(m_caster, 19658, args);
// Glyph of Felhunter
if (Unit* owner = m_caster->GetOwner())
if (owner->GetAura(56249))
- owner->CastCustomSpell(owner, 19658, &heal_amount, nullptr, nullptr, true);
+ owner->CastSpell(owner, 19658, args);
}
}
@@ -2710,7 +2702,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:
@@ -3043,8 +3035,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
return;
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
@@ -3252,7 +3243,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;
}
@@ -3370,7 +3361,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();
}
@@ -3389,7 +3380,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_FIRE; slot < MAX_TOTEM_SLOT; ++slot)
{
@@ -3399,14 +3389,17 @@ 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);
}
}
// Glyph of Stoneclaw Totem
if (AuraEffect* aur=unitTarget->GetAuraEffect(63298, 0))
{
- basepoints0 *= aur->GetAmount();
- m_caster->CastCustomSpell(unitTarget, 55277, &basepoints0, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage* aur->GetAmount());
+ m_caster->CastSpell(unitTarget, 55277, args);
}
break;
}
@@ -3940,8 +3933,9 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex)
uint32 count = 1;
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, m_spellInfo->Effects[effIndex].TriggerSpell, &benefit, nullptr, nullptr, true);
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, benefit);
+ m_caster->CastSpell(pet, m_spellInfo->Effects[effIndex].TriggerSpell, args);
}
void Spell::EffectDismissPet(SpellEffIndex effIndex)
@@ -4665,7 +4659,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)
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 347d62c069..96c2931f42 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3018,7 +3018,8 @@ 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;
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index c5b7762c77..24e4656987 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 3476a48121..c8855cd880 100644
--- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
+++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
@@ -356,7 +356,7 @@ class spell_occuthar_occuthars_destruction : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
if (IsExpired())
- caster->CastSpell((Unit*)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/BastionOfTwilight/boss_ascendant_council.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp
index d020aad668..e91588dfa9 100644
--- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp
@@ -806,7 +806,7 @@ class npc_ignacious : public CreatureScript
float y = pos.GetPositionY() + sin(angle) * i;
float z = pos.GetPositionZ();
float floor = me->GetMapHeight(x, y, z);
- me->CastSpell(x, y, floor, SPELL_INFERNO_RUSH_SUMMON, true);
+ me->CastSpell({ x, y, floor }, SPELL_INFERNO_RUSH_SUMMON, true);
}
}
@@ -1989,7 +1989,7 @@ class spell_feludius_heart_of_ice : public AuraScript
void HandlePeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_FROST_IMBUED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_FROST_IMBUED, aurEff);
if (AuraEffect* aurEff = GetEffect(EFFECT_0))
{
@@ -2069,7 +2069,7 @@ class spell_ignacious_rising_flames : public AuraScript
void HandlePeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_RISING_FLAMES_BUFF, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_RISING_FLAMES_BUFF, aurEff);
}
void HandleAuraRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -2108,7 +2108,7 @@ class spell_ignacious_burning_blood : public AuraScript
void HandlePeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_FLAME_IMBUED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_FLAME_IMBUED, aurEff);
if (AuraEffect* aurEff = GetEffect(EFFECT_0))
{
@@ -2491,7 +2491,7 @@ class spell_terrastra_harden_skin : public AuraScript
{
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByEnemySpell))
if (Unit* target = GetTarget())
- target->CastCustomSpell(SPELL_SHATTER, SPELLVALUE_BASE_POINT0, _absorbedDamage, nullptr, true, nullptr, aurEff);
+ target->CastSpell(nullptr, SPELL_SHATTER, CastSpellExtraArgs(aurEff).AddSpellBP0(_absorbedDamage));
}
private:
uint32 _absorbedDamage;
@@ -2544,7 +2544,7 @@ class spell_terrastra_eruption : public SpellScript
float x = caster->GetPositionX() + cos(angle + (i * steps)) * dist;
float y = caster->GetPositionY() + sin(angle + (i * steps)) * dist;
float floor = caster->GetMap()->GetHeight(caster->GetPhaseShift(), x, y, z, true);
- caster->CastSpell(x, y, floor, SPELL_ERUPTION_SUMMON, true);
+ caster->CastSpell({ x, y, floor }, SPELL_ERUPTION_SUMMON, true);
}
}
}
@@ -2666,7 +2666,7 @@ class spell_elementium_monstrosity_liquid_ice : public AuraScript
{
uint32 triggerSpell = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 radius = target->GetObjectScale() * 500;
- target->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff, target->GetGUID());
+ target->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(target->GetGUID()).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius));
}
}
diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp
index 8540461fc2..107f6ac90c 100644
--- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_chogall.cpp
@@ -243,7 +243,7 @@ namespace CorruptionHandler
// Add power to target
power += corruptionAmount;
target->SetPower(POWER_ALTERNATE_POWER, std::min(power, uint8(MAX_CORRUPTION)));
- target->CastCustomSpell(SPELL_CORRUPTED_BLOOD_DAMAGE_INCREASE, SPELLVALUE_AURA_STACK, corruptionAmount, target, true);
+ target->CastSpell(target, SPELL_CORRUPTED_BLOOD_DAMAGE_INCREASE, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, corruptionAmount));
// Achievement check
if (power > CORRUPTION_ACHIEVEMENT_CAP)
@@ -769,10 +769,8 @@ struct npc_chogall_elemental : public PassiveAI
if (Creature* chogall = _instance->GetCreature(DATA_CHOGALL))
chogall->AI()->JustSummoned(me);
- if (me->GetEntry() == NPC_FIRE_ELEMENTAL)
- me->CastCustomSpell(SPELL_FIRE_POWER, SPELLVALUE_AURA_STACK, 10, me, true);
- else
- me->CastCustomSpell(SPELL_SHADOW_POWER, SPELLVALUE_AURA_STACK, 10, me, true);
+ uint32 spellId = me->GetEntry() == NPC_FIRE_ELEMENTAL ? SPELL_FIRE_POWER : SPELL_SHADOW_POWER;
+ me->CastSpell(me, spellId, { SPELLVALUE_AURA_STACK, 10 });
_events.ScheduleEvent(EVENT_ABSORB_ELEMENTAL, 10s + 500ms);
}
@@ -1011,7 +1009,7 @@ class spell_chogall_absorb_elemental_heroic_AuraScript : public AuraScript
if (Creature* chogall = instance->GetCreature(DATA_CHOGALL))
if (uint8 stacks = chogall->AI()->GetData(DATA_ELEMENTAL_POWER_STACKS))
- target->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_AURA_STACK, stacks, target, true);
+ target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, stacks));
}
void Register() override
@@ -1053,7 +1051,7 @@ class spell_chogall_flaming_destruction_heroic : public AuraScript
uint8 stacks = GetStackAmount();
int32 bp = spell->Effects[EFFECT_0].CalcValue();
bp += CalculatePct(bp, stacks * 10);
- caster->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ caster->CastSpell(target, spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1076,7 +1074,7 @@ class spell_chogall_empowered_shadows_heroic : public AuraScript
uint8 stacks = GetStackAmount();
int32 bp = spell->Effects[EFFECT_0].CalcValue();
bp += CalculatePct(bp, stacks * 5);
- caster->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp
index 585a30b0cd..f610f29ceb 100644
--- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp
+++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_theralion_and_valiona.cpp
@@ -1194,7 +1194,7 @@ class spell_theralion_engulfing_magic : public SpellScriptLoader
bp += dmgInfo->GetDamage();
if (bp)
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_ENGULFING_MAGIC_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetCaster(), SPELL_ENGULFING_MAGIC_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp
index cf1d99d30c..32d6044fd9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp
@@ -218,7 +218,7 @@ class spell_karsh_superheated_quicksilver_armor : public SpellScript
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(SPELL_HEAT_WAVE);
uint8 stacks = superheatedArmor->GetStackAmount();
int32 bp = spell->Effects[EFFECT_0].CalcValue() * stacks;
- target->CastCustomSpell(SPELL_HEAT_WAVE, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr);
+ target->CastSpell(target, SPELL_HEAT_WAVE, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -291,7 +291,7 @@ class spell_karsh_superheated_quicksilver_armor_proc : public AuraScript
return;
int32 bp = spell->Effects[EFFECT_0].CalcValue() * stacks;
- target->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp
index 8e73603c46..03935190f6 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_atramedes.cpp
@@ -537,7 +537,7 @@ struct npc_atramedes_ancient_dwarven_shield : public NullCreatureAI
return;
if (atramedes->AI()->GetData(DATA_IS_IN_AIR))
- clicker->CastSpell(clicker, SPELL_RESONATING_CLASH_AIR, true, nullptr, nullptr, me->GetGUID());
+ clicker->CastSpell(clicker, SPELL_RESONATING_CLASH_AIR, me->GetGUID());
else
DoCastSelf(SPELL_RESONATING_CLASH_GROUND);
@@ -731,7 +731,7 @@ class spell_atramedes_roaring_flame_breath : public AuraScript
void HandleTick(AuraEffect const* aurEff)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, aurEff);
}
void Register() override
@@ -839,7 +839,7 @@ class spell_atramedes_sound_bar : public AuraScript
if (Creature* atramedes = instance->GetCreature(DATA_ATRAMEDES))
atramedes->AI()->SetGUID(target->GetGUID(), DATA_ADD_NOISY_PLAYER);
- target->CastSpell(target, SPELL_NOISY, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_NOISY, aurEff);
}
else if (target->GetPower(POWER_ALTERNATE_POWER) >= 50)
if (Creature* atramedes = instance->GetCreature(DATA_ATRAMEDES))
@@ -922,7 +922,7 @@ class spell_atramedes_sonic_flames_AuraScript : public AuraScript
return;
PreventDefaultAction();
- caster->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, aurEff);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp
index 633a433ebe..ccf22063c2 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_chimaeron.cpp
@@ -589,7 +589,7 @@ class spell_chimaeron_double_attack : public AuraScript
{
PreventDefaultAction();
if (Unit* target = eventInfo.GetProcTarget())
- GetTarget()->CastSpell(target, SPELL_DOUBLE_ATTACK_TRIGGERED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(target, SPELL_DOUBLE_ATTACK_TRIGGERED, aurEff);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp
index 83cca1db70..406872f666 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_magmaw.cpp
@@ -770,7 +770,7 @@ struct npc_magmaw_blazing_bone_construct : public ScriptedAI
for (uint8 i = 0; i < 20; i++)
{
Position const pos = me->GetRandomNearPosition(10.0f);
- me->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_IGNITION, true);
+ me->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ() }, SPELL_IGNITION, true);
}
_events.ScheduleEvent(EVENT_ENGAGE_PLAYERS, 1s);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_maloriak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_maloriak.cpp
index 5256961b76..70660f6b1f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_maloriak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_maloriak.cpp
@@ -1134,7 +1134,7 @@ class spell_maloriak_magma_jets_periodic : public AuraScript
float y = target->GetPositionY() + sin(target->GetOrientation()) * dist;
float z = target->GetMapHeight(x, y, target->GetPositionZ() + 5.0f);
if (target->IsWithinLOS(x, y, z))
- target->CastSpell(x, y, z, SPELL_MAGMA_JETS_SUMMON_FIRE, true);
+ target->CastSpell({ x, y, z }, SPELL_MAGMA_JETS_SUMMON_FIRE, true);
else
Remove();
}
@@ -1182,7 +1182,7 @@ class spell_maloriak_vile_swill: public AuraScript
PreventDefaultAction();
Unit* target = GetTarget();
Position const destination = target->GetRandomPoint(target->GetPosition(), 11.0f);
- target->CastSpell(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ(), SPELL_VILE_SWILL_SUMMON, true);
+ target->CastSpell({ destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ() }, SPELL_VILE_SWILL_SUMMON, true);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp
index a9d888627a..cfddb436d5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_nefarians_end.cpp
@@ -1346,14 +1346,14 @@ struct npc_nefarians_end_shadowblaze : public NullCreatureAI
}
}
- me->CastSpell(summonPos.GetPositionX(), summonPos.GetPositionY(), z, 0.f, SPELL_BRUSHFIRE_SUMMON, true);
+ me->CastSpell({ summonPos.GetPositionX(), summonPos.GetPositionY(), z, 0.f }, SPELL_BRUSHFIRE_SUMMON, true);
}
else
{
if (me->GetEntry() == NPC_SHADOWBLAZE_FLASHPOINT)
{
- me->CastSpell(me->GetPositionX() - 5.f, me->GetPositionY(), z, 0.f, SPELL_BRUSHFIRE_SUMMON, true);
- me->CastSpell(me->GetPositionX(), me->GetPositionY() + 5.f, z, 0.f, SPELL_BRUSHFIRE_SUMMON, true);
+ me->CastSpell({ me->GetPositionX() - 5.f, me->GetPositionY(), z, 0.f }, SPELL_BRUSHFIRE_SUMMON, true);
+ me->CastSpell({ me->GetPositionX(), me->GetPositionY() + 5.f, z, 0.f }, SPELL_BRUSHFIRE_SUMMON, true);
}
else if (_summonedByController)
{
@@ -1361,7 +1361,7 @@ struct npc_nefarians_end_shadowblaze : public NullCreatureAI
{
float x = me->GetPositionX() + 5.f;
float y = me->GetPositionY() + 5.f;
- me->CastSpell(x, y, z, 0.f, SPELL_BRUSHFIRE_SUMMON, true);
+ me->CastSpell({ x, y, z, 0.f }, SPELL_BRUSHFIRE_SUMMON, true);
}
}
}
@@ -1843,7 +1843,7 @@ class spell_nefarians_end_dominion_dummy : public SpellScript
Unit* caster = GetCaster();
uint8 size = caster->GetMap()->Is25ManRaid() ? 2 : 5;
if (!targets.empty())
- caster->CastCustomSpell(SPELL_DOMINION_OVERRIDE_ACTION_BAR, SPELLVALUE_MAX_TARGETS, size, caster, true);
+ caster->CastSpell(caster, SPELL_DOMINION_OVERRIDE_ACTION_BAR, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, size));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp
index 9d4a6a5d92..595da2c76d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingDescent/boss_omnotron_defense_system.cpp
@@ -1412,7 +1412,7 @@ class spell_omnotron_unstable_shield : public AuraScript
if (!target)
return;
- caster->CastSpell(target, SPELL_STATIC_SHOCK, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_STATIC_SHOCK, aurEff);
if (InstanceScript* instance = caster->GetInstanceScript())
if (Creature* magmatron = instance->GetCreature(DATA_MAGMATRON))
@@ -1576,7 +1576,7 @@ class spell_omnotron_overcharged_power_generator : public AuraScript
{
uint32 triggerSpell = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 radius = target->GetObjectScale() * 10000;
- target->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff, target->GetGUID());
+ target->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(target->GetGUID()).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius));
}
}
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 b9e323f356..99d3de715e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
@@ -135,7 +135,7 @@ class spell_baron_geddon_inferno : public SpellScriptLoader
{
PreventDefaultAction();
int32 damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 };
- GetTarget()->CastCustomSpell(SPELL_INFERNO_DMG, SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1], (Unit*)nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_INFERNO_DMG, CastSpellExtraArgs(aurEff).AddSpellBP0(damageForTick[aurEff->GetTickNumber() - 1]));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_vanessa_van_cleef.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_vanessa_van_cleef.cpp
index 732a3c4ed6..1552a4ad9a 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_vanessa_van_cleef.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_vanessa_van_cleef.cpp
@@ -327,7 +327,7 @@ class boss_vanessa_van_cleef : public CreatureScript
float y = defiasReinforcementPositions[_currentReinforcement].m_positionY;
float z = defiasReinforcementPositions[_currentReinforcement].m_positionZ;
- me->CastSpell(x, y, z, defiasReinforcementSpells[_currentReinforcement], true);
+ me->CastSpell({ x, y, z }, defiasReinforcementSpells[_currentReinforcement], true);
_currentReinforcement++;
if (_currentReinforcement == REINFORCEMENT_BLOOD_WIZARD)
diff --git a/src/server/scripts/EasternKingdoms/GrimBatol/boss_erudax.cpp b/src/server/scripts/EasternKingdoms/GrimBatol/boss_erudax.cpp
index 4e301bbe46..f5d6992b82 100644
--- a/src/server/scripts/EasternKingdoms/GrimBatol/boss_erudax.cpp
+++ b/src/server/scripts/EasternKingdoms/GrimBatol/boss_erudax.cpp
@@ -516,7 +516,7 @@ class spell_erudax_twilight_corruption_AuraScript : public AuraScript
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellId))
{
int32 damage = CalculatePct(target->GetMaxHealth(), spell->Effects[EFFECT_0].BasePoints);
- target->CastCustomSpell(target, spellId, &damage, 0, 0, true);
+ target->CastSpell(target, spellId, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
}
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index b7a75ee875..e2368df453 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -334,7 +334,7 @@ public:
enfeeble_targets[i] = target->GetGUID();
enfeeble_health[i] = target->GetHealth();
- target->CastSpell(target, SPELL_ENFEEBLE, true, 0, 0, me->GetGUID());
+ target->CastSpell(target, SPELL_ENFEEBLE, me->GetGUID());
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 38d9bd3f5b..626c3e9f91 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -454,7 +454,7 @@ public:
Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]);
if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3))
{
- unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID());
+ unit->CastSpell(unit, 20476, me->GetGUID());
unit->CastSpell(unit, 11027, true);
FlameWreathTarget[i].Clear();
}
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_baron_ashbury.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_baron_ashbury.cpp
index b8d61f8298..fd62ac9aab 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_baron_ashbury.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_baron_ashbury.cpp
@@ -242,7 +242,7 @@ class spell_ashbury_asphyxiate : public AuraScript
if (!target->HasAura(SPELL_ASPHYXIATE_ROOT))
target->CastSpell(target, SPELL_ASPHYXIATE_ROOT, true);
- target->CastCustomSpell(triggerSpell, SPELLVALUE_BASE_POINT0, damage, target, true, nullptr, aurEff, caster->GetGUID());
+ target->CastSpell(target, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(caster->GetGUID()).AddSpellBP0(damage));
}
}
}
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_lord_godfrey.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_lord_godfrey.cpp
index 03965a9e5e..d0535da503 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_lord_godfrey.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_lord_godfrey.cpp
@@ -308,7 +308,7 @@ class spell_godfrey_pistol_barrage : public AuraScript
float posX = target->GetPositionX() + cos(ori) * 60;
float posY = target->GetPositionY() + sin(ori) * 60;
float posZ = target->GetPositionZ();
- target->CastSpell(posX, posY, posZ, spellId, true);
+ target->CastSpell({ posX, posY, posZ }, spellId, true);
_useLeftGun = _useLeftGun ? false : true;
}
diff --git a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp
index 87dacf6290..5d86edcf1a 100644
--- a/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp
+++ b/src/server/scripts/EasternKingdoms/ThroneOfTheTides/boss_commander_ulthok.cpp
@@ -207,7 +207,7 @@ class spell_ulthok_dark_fissure : public AuraScript
{
uint32 triggerSpell = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 radius = target->GetObjectScale() * 300;
- target->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff, target->GetGUID());
+ target->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(target->GetGUID()).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius));
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
index 0cabf7f33b..63f2528ea2 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
@@ -458,7 +458,7 @@ class spell_janalai_flame_breath_AuraScript : public AuraScript
float x = 0.f, y = 0.f, z = 0.f;
_castDestinations[tickNumber - 1].GetPosition(x, y, z);
- GetTarget()->CastSpell(x, y, z, SPELL_FLAME_BREATH_AREA_EFFECT);
+ GetTarget()->CastSpell({ x, y, z }, SPELL_FLAME_BREATH_AREA_EFFECT);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp
index 3224e31a05..6225988cce 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_bloodlord_mandokir.cpp
@@ -186,7 +186,7 @@ struct boss_bloodlord_mandokir : public BossAI
float y = me->GetPositionY() + sin(angle + angleOffset) * (i * 6.0f);
float z = me->GetPositionZ();
angleOffset += 0.3f;
- me->CastSpell(x, y, z, SPELL_DEVASTATING_SLAM_DAMAGE, true);
+ me->CastSpell({ x, y, z }, SPELL_DEVASTATING_SLAM_DAMAGE, true);
}
}
}
@@ -530,8 +530,8 @@ class spell_mandokir_bloodletting : public AuraScript
int32 damage = std::max(7500, target->CountPctFromCurHealth(aurEff->GetAmount()));
- caster->CastCustomSpell(target, SPELL_BLOODLETTING_DAMAGE, &damage, 0, 0, true);
- target->CastCustomSpell(caster, SPELL_BLOODLETTING_HEAL, &damage, 0, 0, true);
+ caster->CastSpell(target, SPELL_BLOODLETTING_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(damage));
+ target->CastSpell(caster, SPELL_BLOODLETTING_HEAL, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_high_priest_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_high_priest_venoxis.cpp
index 5787295711..819dbf0365 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_high_priest_venoxis.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_high_priest_venoxis.cpp
@@ -533,7 +533,7 @@ class spell_venoxis_pool_of_acrid_tears : public AuraScript
{
uint32 triggerSpell = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 radius = target->GetObjectScale() * 75;
- target->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff, target->GetGUID());
+ target->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(target->GetGUID()).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius));
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp
index 20fa5115f0..2c5267e1f9 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_zanzil.cpp
@@ -245,7 +245,7 @@ struct boss_zanzil : public BossAI
float z = _zanzilPosition.GetPositionZ();
if (_zanzilPosition.GetExactDist2d(x, y) <= 30.0f)
- me->CastSpell(x, y, z, SPELL_ZANZILI_FIRE_TRIGGERED, true);
+ me->CastSpell({ x, y, z }, SPELL_ZANZILI_FIRE_TRIGGERED, true);
else
me->RemoveAurasDueToSpell(SPELL_ZANZILI_FIRE);
break;
@@ -321,7 +321,7 @@ struct boss_zanzil : public BossAI
Talk(SAY_ANNOUNCE_ZANZILI_BERSEKER);
Talk(SAY_ZANZILI_BERSEKER);
- me->CastSpell(nearestPos.GetPositionX(), nearestPos.GetPositionY(), nearestPos.GetPositionZ(), SPELL_ZANZILS_RESURRECTION_ELIXIR_BLUE);
+ me->CastSpell({ nearestPos.GetPositionX(), nearestPos.GetPositionY(), nearestPos.GetPositionZ() }, SPELL_ZANZILS_RESURRECTION_ELIXIR_BLUE);
events.ScheduleEvent(EVENT_RESPAWN_BERSERKER, 13s);
break;
}
@@ -340,7 +340,7 @@ struct boss_zanzil : public BossAI
Talk(SAY_ANNOUNCE_ZANZIL_ZOMBIES);
Talk(SAY_ZANZILI_ZOMBIES);
- me->CastSpell(nearestPos.GetPositionX(), nearestPos.GetPositionY(), nearestPos.GetPositionZ(), SPELL_ZANZILS_RESURRECTION_ELIXIR_RED);
+ me->CastSpell({ nearestPos.GetPositionX(), nearestPos.GetPositionY(), nearestPos.GetPositionZ() }, SPELL_ZANZILS_RESURRECTION_ELIXIR_RED);
events.ScheduleEvent(EVENT_RESPAWN_ZOMBIE_GROUP, 13s);
break;
}
@@ -514,7 +514,7 @@ class spell_zanzil_zanzils_resurrection_elixir : public AuraScript
if (!object)
return;
- GetTarget()->CastSpell(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, true);
+ GetTarget()->CastSpell({ object->GetPositionX(), object->GetPositionY(), object->GetPositionZ() }, GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, true);
}
void Register() override
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
index ba65866dc5..9d20500aa0 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
@@ -545,7 +545,7 @@ class spell_zulgurub_ancient_guardian : public AuraScript
{
absorbAmount = dmgInfo.GetDamage();
int32 health = target->CountPctFromMaxHealth(50) - absorbAmount;
- target->CastCustomSpell(SPELL_ANCIENT_GUARDIAN_HEAL, SPELLVALUE_BASE_POINT0, health, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_ANCIENT_GUARDIAN_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(health));
Remove();
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp b/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp
index 4776cbb604..2628e69755 100644
--- a/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_hillsbrad_foothills.cpp
@@ -467,7 +467,7 @@ struct npc_brazie_the_bonatist_vehicle : public VehicleAI
float x = pos.GetPositionX() + cos(angle) * 3;
float y = pos.GetPositionY() + sin(angle) * 3;
- GetPlayer()->CastSpell(x, y, pos.GetPositionZ() + 50.0f, SPELL_CREATE_RANDOM_SUN_POWER, true);
+ GetPlayer()->CastSpell({ x, y, pos.GetPositionZ() + 50.0f }, SPELL_CREATE_RANDOM_SUN_POWER, true);
switch (_currentLevel)
{
@@ -508,7 +508,7 @@ struct npc_brazie_the_bonatist_vehicle : public VehicleAI
}
if (Player* player = GetPlayer())
- player->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), angle, spellId, true);
+ player->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), angle }, spellId, true);
break;
}
case EVENT_ANNOUNCE_GOOD_JOB:
@@ -592,19 +592,19 @@ private:
for (uint8 i = 0; i < MAX_TARGET_POSITIONS; i++)
{
Position pos = LawnMowerPositions[i];
- charmer->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), LawnmowerOrientation, SPELL_CREATE_LAWMOWER, true);
+ charmer->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), LawnmowerOrientation }, SPELL_CREATE_LAWMOWER, true);
pos = GoalStalkerPositions[i];
- charmer->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), GoalStalkerOrientation, SPELL_CREATE_GOAL_STALKER, true);
+ charmer->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), GoalStalkerOrientation }, SPELL_CREATE_GOAL_STALKER, true);
pos = SpitterTargetPositions[i];
- charmer->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SpitterTargetOrientation, SPELL_CREATE_SPITTER_TARGET, true);
+ charmer->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SpitterTargetOrientation }, SPELL_CREATE_SPITTER_TARGET, true);
}
for (uint8 i = 0; i < MAX_EMPTY_SPOT_POSITIONS; i++)
{
Position pos = EmptySpotPositions[i];
- charmer->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), EmptySpotOrientation, SPELL_CREATE_EMPTY_SPOT, true);
+ charmer->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), EmptySpotOrientation }, SPELL_CREATE_EMPTY_SPOT, true);
}
}
@@ -917,7 +917,7 @@ struct npc_brazie_spot : public ScriptedAI
float x = pos.GetPositionX() + cos(angle) * 3;
float y = pos.GetPositionY() + sin(angle) * 3;
- summoner->CastSpell(x, y, pos.GetPositionZ() + 50.0f, SPELL_CREATE_RANDOM_SUN_POWER, true);
+ summoner->CastSpell({ x, y, pos.GetPositionZ() + 50.0f }, SPELL_CREATE_RANDOM_SUN_POWER, true);
}
}
_events.Repeat(17s);
diff --git a/src/server/scripts/EasternKingdoms/zone_twilight_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_twilight_highlands.cpp
index c3649d6b39..1986348cfe 100644
--- a/src/server/scripts/EasternKingdoms/zone_twilight_highlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_twilight_highlands.cpp
@@ -389,7 +389,7 @@ class spell_th_poison : public AuraScript
{
uint32 triggerSpell = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 radius = int32(166.66f * aurEff->GetTickNumber());
- target->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, nullptr, true, nullptr, aurEff, target->GetGUID());
+ target->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(target->GetGUID()).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius));
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index 985b93f5cb..4f327be6b3 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -281,7 +281,7 @@ class spell_anetheron_vampiric_aura : public SpellScriptLoader
return;
int32 bp = damageInfo->GetDamage() * 3;
- eventInfo.GetActor()->CastCustomSpell(SPELL_VAMPIRIC_AURA_HEAL, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetActor(), true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_VAMPIRIC_AURA_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
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 5b059b8020..3ac7fd2663 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -474,7 +474,7 @@ public:
break;
case NPC_DOOMFIRE:
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN, false);
- summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID());
+ summoned->CastSpell(summoned, SPELL_DOOMFIRE, me->GetGUID());
if (Unit* DoomfireSpirit = ObjectAccessor::GetUnit(*me, DoomfireSpiritGUID))
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index 7fe4fc9f49..bbda2d3e2c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -211,7 +211,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 977ef8e05b..a10125d465 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -1323,7 +1323,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);
StrikeTimer = 2000 + rand32() % 1000;
} else StrikeTimer -= diff;
}
@@ -1430,8 +1430,9 @@ public:
EnterEvadeMode();
return;
}
- int dmg = 500 + rand32() % 700;
- me->CastCustomSpell(me->GetVictim(), SPELL_EXPLODING_SHOT, &dmg, 0, 0, false);
+ int32 dmg = 500 + rand32() % 700;
+
+ me->CastSpell(me->GetVictim(), SPELL_EXPLODING_SHOT, { SPELLVALUE_BASE_POINT0, dmg });
ExplodeTimer = 5000 + rand32() % 5000;
} else ExplodeTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DragonSoul/boss_madness_of_deathwing.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DragonSoul/boss_madness_of_deathwing.cpp
index 3e430eeaca..40741f8c87 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DragonSoul/boss_madness_of_deathwing.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DragonSoul/boss_madness_of_deathwing.cpp
@@ -708,7 +708,7 @@ struct boss_madness_of_deathwing : public BossAI
break;
}
- me->CastCustomSpell(SPELL_FACE_TRIGGER, SPELLVALUE_BASE_POINT0, facingSpellID);
+ me->CastSpell(me, SPELL_FACE_TRIGGER, { SPELLVALUE_BASE_POINT0, facingSpellID });
// Nozdormu creates a time zone at the same moment when Deathwing faces a platform
if (!_limbData[DRAGON_ASPECT_NOZDORMU].TentacleKilled)
@@ -1930,7 +1930,7 @@ class spell_madness_of_deathwing_regenerative_blood_periodic : public AuraScript
}
int32 bp = _basePoints * 10;
- target->CastCustomSpell(SPELL_REGENERATIVE_BLOOD_SCRIPT, SPELLVALUE_BASE_POINT0, bp, target);
+ target->CastSpell(target, SPELL_REGENERATIVE_BLOOD_SCRIPT, { SPELLVALUE_BASE_POINT0, bp });
if (aurEff->GetTickNumber() >= 20)
Remove();
@@ -2016,11 +2016,11 @@ class spell_madness_of_deathwing_burning_blood : public AuraScript
uint8 stackDiff = std::max(0, uint8(lostHealthPct) - GetStackAmount());
if (stackDiff)
- target->CastCustomSpell(GetSpellInfo()->Id, SPELLVALUE_AURA_STACK, stackDiff, target);
+ target->CastSpell(target, GetSpellInfo()->Id, { SPELLVALUE_AURA_STACK, stackDiff });
uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, target);
int32 bp = sSpellMgr->AssertSpellInfo(spellId)->Effects[EFFECT_0].CalcValue() * GetStackAmount();
- target->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, bp, target, true);
+ target->CastSpell(target, spellId, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
void Register() override
@@ -2600,7 +2600,7 @@ public:
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellId))
if (uint32 triggerSpellId = spell->Effects[EFFECT_0].TriggerSpell)
- player->CastCustomSpell(triggerSpellId, SPELLVALUE_BASE_POINT1, spellId, player, true);
+ player->CastSpell(player, triggerSpellId, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_BASE_POINT1, spellId));
return true;
}
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_isiset.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_isiset.cpp
index 414af2e1dc..a63b86ba83 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_isiset.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_isiset.cpp
@@ -631,7 +631,7 @@ public:
return;
int32 damage = CalculatePct(absorbAmount, reflectPct);
- GetCaster()->CastCustomSpell(SPELL_VEIL_OF_SKY_DAMAGE, SPELLVALUE_BASE_POINT0, damage, dmgInfo.GetAttacker(), true);
+ GetCaster()->CastSpell(dmgInfo.GetAttacker(), SPELL_VEIL_OF_SKY_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
void Register() override
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 fe5d442ba9..754e931b39 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp
@@ -339,14 +339,8 @@ class spell_anhuur_divine_reckoning : public AuraScript
void OnPeriodic(AuraEffect const* aurEff)
{
if (Unit* caster = GetCaster())
- {
if (!caster->isDead())
- {
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
- caster->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, values, GetTarget());
- }
- }
+ caster->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, { SPELLVALUE_BASE_POINT0, aurEff->GetAmount() });
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index a1fe2f4d59..af678d2d25 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -743,7 +743,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/ThroneOfTheFourWinds/boss_alakir.cpp b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp
index c8bfdc2d44..80c7cfcdaf 100644
--- a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp
+++ b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_alakir.cpp
@@ -193,7 +193,7 @@ class RelentlessStormTeleportEvent : public BasicEvent
float y = RelentlessStormTeleportReferencePos.GetPositionY() + frand(-15.0f, 15.0f);
float z = RelentlessStormTeleportReferencePos.GetPositionZ() + frand(-15.0f, 15.0f);
- _owner->CastSpell(x, y, z, SPELL_RELENTLESS_STORM_INITIAL_VEHICLE_RIDE_TELEPORT, true);
+ _owner->CastSpell({ x, y, z }, SPELL_RELENTLESS_STORM_INITIAL_VEHICLE_RIDE_TELEPORT, true);
return true;
}
private:
@@ -444,8 +444,8 @@ struct boss_alakir : public BossAI
if (Creature* cloud = DoSummon(NPC_LIGHTNING_CLOUDS_BOTTOM, LightningCloudBottomPos, 0, TEMPSUMMON_MANUAL_DESPAWN))
for (uint8 i = 0; i < 48; i++)
- cloud->CastSpell(LightningCloudsExtraVisualsBottomPositions[i].GetPositionX(), LightningCloudsExtraVisualsBottomPositions[i].GetPositionY(),
- LightningCloudsExtraVisualsBottomPositions[i].GetPositionZ(), SPELL_LIGHTNING_CLOUDS_SUMMON_EXTRA_VISUALS_BOTTOM);
+ cloud->CastSpell({ LightningCloudsExtraVisualsBottomPositions[i].GetPositionX(), LightningCloudsExtraVisualsBottomPositions[i].GetPositionY(),
+ LightningCloudsExtraVisualsBottomPositions[i].GetPositionZ() }, SPELL_LIGHTNING_CLOUDS_SUMMON_EXTRA_VISUALS_BOTTOM);
}
}
@@ -512,8 +512,8 @@ struct boss_alakir : public BossAI
}, 5s);
for (uint8 i = 0; i < 24; i++)
- summon->CastSpell(LightningCloudsExtraVisualsPositions[i].GetPositionX(), LightningCloudsExtraVisualsPositions[i].GetPositionY(),
- summon->GetPositionZ(), SPELL_LIGHTNING_CLOUDS_SUMMON_EXTRA_VISUALS);
+ summon->CastSpell({ LightningCloudsExtraVisualsPositions[i].GetPositionX(), LightningCloudsExtraVisualsPositions[i].GetPositionY(),
+ summon->GetPositionZ() }, SPELL_LIGHTNING_CLOUDS_SUMMON_EXTRA_VISUALS);
break;
default:
break;
@@ -666,7 +666,7 @@ struct npc_alakir_ice_storm : public ScriptedAI
if (!possibleDestinations.empty())
{
Position dest = Trinity::Containers::SelectRandomContainerElement(possibleDestinations);
- me->CastSpell(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), SPELL_ICE_STORM_CHARGE, true);
+ me->CastSpell({ dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ() }, SPELL_ICE_STORM_CHARGE, true);
}
break;
}
@@ -811,7 +811,7 @@ class spell_alakir_lightning_strike_periodic : public SpellScript
float x = caster->GetPositionX() + cos(angle) * 75.0f;
float y = caster->GetPositionY() + sin(angle) * 75.0f;
float z = caster->GetPositionZ();
- caster->CastSpell(x, y, z, SPELL_LIGHTNING_STRIKE_VISUAL, true);
+ caster->CastSpell({ x, y, z }, SPELL_LIGHTNING_STRIKE_VISUAL, true);
}
}
@@ -995,7 +995,7 @@ class spell_alakir_lightning_clouds_periodic : public AuraScript
Unit* target = GetTarget();
Position pos = target->GetRandomPoint(target->GetPosition(), 80.0f);
pos.m_positionZ = target->GetPositionZ() + frand(-10.0f, 10.0f);
- target->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_LIGHTNING_CLOUDS_VISUAL_DEST);
+ target->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ() }, SPELL_LIGHTNING_CLOUDS_VISUAL_DEST);
}
void Register() override
@@ -1048,7 +1048,7 @@ class spell_alakir_lightning_clouds_targeting : public SpellScript
float y = caster->GetPositionY();
float z = GetHitUnit()->GetPositionZ();
float o = GetHitUnit()->GetOrientation();
- caster->CastSpell(x, y, z, o, SPELL_SUMMON_LIGHTNING_CLOUDS_SUMMON);
+ caster->CastSpell({ x, y, z, o }, SPELL_SUMMON_LIGHTNING_CLOUDS_SUMMON);
}
}
diff --git a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp
index 597aafd4fd..287389235b 100644
--- a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp
+++ b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/boss_conclave_of_wind.cpp
@@ -1137,7 +1137,7 @@ class spell_conclave_of_wind_winds : public AuraScript
}
if (spellId)
- owner->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, damage, owner, true);
+ owner->CastSpell(owner, spellId, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/VortexPinnacle/boss_asaad.cpp b/src/server/scripts/Kalimdor/VortexPinnacle/boss_asaad.cpp
index e1e6d2d8b2..81b75ef859 100644
--- a/src/server/scripts/Kalimdor/VortexPinnacle/boss_asaad.cpp
+++ b/src/server/scripts/Kalimdor/VortexPinnacle/boss_asaad.cpp
@@ -460,7 +460,7 @@ struct npc_asaad_unstable_grounding_field : public ScriptedAI
DoCast(me, SPELL_STORM_SUMMON_GROUNDING_FIELD);
Position pos = ENSURE_AI(AsaadAI, asaad->AI())->GetTriangleCenterPosition();
- me->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_STORM_SUMMON_GROUNDING_FIELD, true);
+ me->CastSpell({ pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ() }, SPELL_STORM_SUMMON_GROUNDING_FIELD, true);
_events.ScheduleEvent(EVENT_STORM_ASAAD_TELEPORT, 500);
break;
}
diff --git a/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp b/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp
index f321d5e131..169445ece1 100644
--- a/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp
+++ b/src/server/scripts/Kalimdor/zone_mount_hyjal.cpp
@@ -693,7 +693,7 @@ class spell_mh_inferno : public AuraScript
bp += CalculatePct(bp, 10) * ticks;
bp = std::min(bp, basePoints);
- caster->CastCustomSpell(SPELL_INFERNO_TRIGGERED, SPELLVALUE_BASE_POINT0, bp, caster, true);
+ caster->CastSpell(caster, SPELL_INFERNO_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index c754423c11..98cd26fe87 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -494,7 +494,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);
@@ -544,7 +544,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:
{
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 94af7419a1..38da75c5ea 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
@@ -364,14 +364,14 @@ class boss_high_priestess_azil : public CreatureScript
if (events.IsInPhase(PHASE_ONE))
{
if (Creature* worldtrigger = me->FindNearestCreature(NPC_WORLDTRIGGER, 150.0f))
- worldtrigger->CastCustomSpell(SPELL_SUMMON_WAVE_SOUTH, SPELLVALUE_BASE_POINT0, 3, worldtrigger, true);
+ worldtrigger->CastSpell(worldtrigger, SPELL_SUMMON_WAVE_SOUTH, { SPELLVALUE_BASE_POINT0, 3});
}
else
{
if (Creature* worldtrigger = me->FindNearestCreature(NPC_WORLDTRIGGER, 150.0f))
{
- worldtrigger->CastCustomSpell(SPELL_SUMMON_WAVE_SOUTH, SPELLVALUE_BASE_POINT0, 10, worldtrigger, true);
- worldtrigger->CastCustomSpell(SPELL_SUMMON_WAVE_WEST, SPELLVALUE_BASE_POINT0, 10, worldtrigger, true);
+ worldtrigger->CastSpell(worldtrigger, SPELL_SUMMON_WAVE_SOUTH, { SPELLVALUE_BASE_POINT0, 10 });
+ worldtrigger->CastSpell(worldtrigger, SPELL_SUMMON_WAVE_WEST, { SPELLVALUE_BASE_POINT0, 10 });
events.Repeat(10s, 13s);
}
}
@@ -720,7 +720,7 @@ class spell_azil_seismic_shard : public SpellScript
target->ExitVehicle();
if (DynamicObject* dynamicObject = GetCaster()->GetDynObject(SPELL_SEISMIC_SHARD_TARGETING))
- target->CastSpell(dynamicObject->GetPositionX(), dynamicObject->GetPositionY(), dynamicObject->GetPositionZ(), SPELL_SEISMIC_SHARD_MISSLE, true);
+ target->CastSpell({ dynamicObject->GetPositionX(), dynamicObject->GetPositionY(), dynamicObject->GetPositionZ() }, SPELL_SEISMIC_SHARD_MISSLE, true);
}
void Register() override
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_ozruk.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_ozruk.cpp
index baa3e1e364..4362260cc7 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_ozruk.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_ozruk.cpp
@@ -203,7 +203,7 @@ class spell_ozruk_rupture : public AuraScript
float y = caster->GetPositionY() + sin(angle) * dist;
float z = caster->GetMap()->GetStaticHeight(caster->GetPhaseShift(), x, y, caster->GetPositionZ() + 3.0f);
if (std::abs(z) < caster->GetPositionZ() + 5.0f)
- caster->CastSpell(x, y, z, SPELL_RUPTURE_SUMMON, true);
+ caster->CastSpell({ x, y, z }, SPELL_RUPTURE_SUMMON, true);
angle += 0.2f;
}
}
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 69cbb3dd04..fa73c4a504 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -256,7 +256,7 @@ class spell_ahn_kahet_swarm : public SpellScriptLoader
aura->RefreshDuration();
}
else
- GetCaster()->CastCustomSpell(SPELL_SWARM_BUFF, SPELLVALUE_AURA_STACK, _targetCount, GetCaster(), TRIGGERED_FULL_MASK);
+ GetCaster()->CastSpell(GetCaster(), SPELL_SWARM_BUFF, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount));
}
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 c97240df07..dcdcabe4ac 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -355,7 +355,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.GetPositionX(), _meteorStrikePos.GetPositionY(), _meteorStrikePos.GetPositionZ() }, SPELL_METEOR_STRIKE, me->GetGUID());
Talk(SAY_METEOR_STRIKE);
}
events.ScheduleEvent(EVENT_METEOR_STRIKE, Seconds(38));
@@ -1240,11 +1240,11 @@ 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);
+ me->CastSpell(me, SPELL_SCALE_AURA, { SPELLVALUE_AURA_STACK, int32(stackAmount + 1) });
DoCastSelf(_damageSpell);
int32 damage = 1200 + (stackAmount * 1290); // Needs more research.
- summoner->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, summoner);
+ summoner->CastSpell(summoner, _explosionSpell, { SPELLVALUE_BASE_POINT0, damage });
}
void UpdateAI(uint32 /*diff*/) override { }
@@ -1502,8 +1502,7 @@ class spell_halion_combustion_consumption_periodic : public SpellScriptLoader
uint32 triggerSpell = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
int32 radius = caster->GetObjectScale() * M_PI * 10000 / 3;
-
- caster->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, radius, (Unit*)nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff, caster->GetGUID());
+ caster->CastSpell(nullptr, triggerSpell, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_RADIUS_MOD, radius).SetOriginalCaster(caster->GetGUID()));
}
void Register() override
@@ -1552,7 +1551,7 @@ 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());
+ GetTarget()->CastSpell(GetTarget(), _summonSpellId, CastSpellExtraArgs(GetCasterGUID()).AddSpellMod(SPELLVALUE_BASE_POINT1, aurEff->GetBase()->GetStackAmount()));
}
void Register() override
@@ -1765,7 +1764,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->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ() }, 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 cad9b53f06..7f8b6956a2 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -196,7 +196,7 @@ 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);
+ GetCaster()->CastSpell(GetCaster(), SPELL_RALLY, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount));
}
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 93e183b018..cdc344782b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -664,7 +664,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 079fe57acd..a417ec444f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -309,12 +309,12 @@ 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));
+ DoCastAOE(SPELL_PENETRATING_COLD, { SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5) });
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));
+ DoCastAOE(SPELL_SUMMON_BURROWER, { SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4) });
events.ScheduleEvent(EVENT_SUMMON_NERUBIAN, 45*IN_MILLISECONDS, 0, PHASE_MELEE);
return;
case EVENT_NERUBIAN_SHADOW_STRIKE:
@@ -881,10 +881,11 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader
int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount());
if (lifeLeeched < 250)
lifeLeeched = 250;
+
// Damage
- caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, true);
+ caster->CastSpell(target, SPELL_LEECHING_SWARM_DMG, CastSpellExtraArgs(true).AddSpellBP0(lifeLeeched));
// Heal
- caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, true);
+ caster->CastSpell(caster, SPELL_LEECHING_SWARM_HEAL, CastSpellExtraArgs(true).AddSpellBP0(lifeLeeched));
}
}
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 0f44ecb7f3..c4799ff437 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -2271,7 +2271,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 1fd380cb71..b04a8c52ce 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -175,7 +175,7 @@ class boss_jaraxxus : public CreatureScript
events.ScheduleEvent(EVENT_INCINERATE_FLESH, urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS));
return;
case EVENT_NETHER_POWER:
- me->CastCustomSpell(SPELL_NETHER_POWER, SPELLVALUE_AURA_STACK, RAID_MODE(5, 10, 5, 10), me, true);
+ me->CastSpell(me, SPELL_NETHER_POWER, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, RAID_MODE(5, 10, 5, 10)));
events.ScheduleEvent(EVENT_NETHER_POWER, 40*IN_MILLISECONDS);
return;
case EVENT_LEGION_FLAME:
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 e1ca6ae002..8082e4c0c2 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -1332,7 +1332,7 @@ public:
slowEff->ChangeAmount(newAmount);
if (newAmount <= -100 && !GetTarget()->HasAura(SPELL_PARALYSIS))
- GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, true, nullptr, slowEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, { slowEff, GetCasterGUID() });
}
}
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 a4dacbc29f..b878c6a379 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -318,7 +318,7 @@ 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);
+ me->CastSpell(target, TouchSpellId, { SPELLVALUE_MAX_TARGETS, 1 });
events.ScheduleEvent(EVENT_TOUCH, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
break;
case EVENT_BERSERK:
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index 71eee55427..661271ea49 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;
@@ -273,7 +273,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 ac8a010bf3..e80e72a8c0 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -198,7 +198,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 23c9fdcaab..31ccaf0c19 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
@@ -408,7 +408,7 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader
return;
int32 damage = CalculatePct(static_cast(damageInfo->GetDamage()), 45);
- GetTarget()->CastCustomSpell(SPELL_MIRRORED_SOUL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetCaster(), true);
+ GetTarget()->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
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 64582fb285..a71d4da100 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -149,7 +149,7 @@ class spell_marwyn_shared_suffering : public SpellScriptLoader
{
int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
if (remainingDamage > 0)
- caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK);
+ caster->CastSpell(GetTarget(), SPELL_SHARED_SUFFERING_DISPEL, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_BASE_POINT1, remainingDamage));
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 798b457ea4..a64686413a 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -280,7 +280,7 @@ class boss_ick : public CreatureScript
case EVENT_PURSUIT:
if (Creature* krick = GetKrick())
krick->AI()->Talk(SAY_KRICK_CHASE);
- me->CastCustomSpell(SPELL_PURSUIT, SPELLVALUE_MAX_TARGETS, 1, me);
+ me->CastSpell(me, 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 40b0fa1c65..f62a93b08a 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -403,13 +403,13 @@ 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());
+ me->CastSpell(victim, SPELL_OVERLORD_BRAND_DAMAGE, CastSpellExtraArgs(tyrannus->GetGUID()).AddSpellBP0(damage));
}
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());
+ me->CastSpell(tyrannus, SPELL_OVERLORD_BRAND_HEAL, CastSpellExtraArgs(tyrannus->GetGUID()).AddSpellBP0(int32(addHealth * 5.5f)));
}
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 4cc2f632bf..e922ae576e 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -232,7 +232,7 @@ 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);
+ owner->CastSpell(owner, SPELL_MOJO_FRENZY_CAST_SPEED, CastSpellExtraArgs(true).AddSpellBP0(castSpeedBonus));
}
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 cbf203afae..5624a37d3e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -806,7 +806,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:
{
@@ -1450,7 +1450,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 ee8d01f692..a542b80fd5 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
@@ -663,7 +663,7 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader
return;
int32 heal = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), TRIGGERED_FULL_MASK, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -743,7 +743,7 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader
int32 damage = damageSpell->Effects[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);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
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 e4325bfe7b..ff504972e4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -435,7 +435,7 @@ 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, (Unit*)nullptr, true);
+ target->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(true).AddSpellBP0(1));
break;
default:
break;
@@ -1044,7 +1044,7 @@ class spell_deathbringer_blood_link : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_POWER, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true);
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BLOOD_LINK_POWER, CastSpellExtraArgs(true).AddSpellBP0(GetEffectValue()));
PreventHitDefaultEffect(EFFECT_0);
}
@@ -1152,7 +1152,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, (Unit*)nullptr, true);
+ GetHitUnit()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(true).AddSpellBP0(1));
}
void Register() override
@@ -1183,7 +1183,7 @@ class spell_deathbringer_blood_beast_blood_link : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetProcTarget()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 3, (Unit*)nullptr, true, nullptr, aurEff);
+ eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(aurEff).AddSpellBP0(3));
}
void Register() override
@@ -1213,7 +1213,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, (Unit*)nullptr, true);
+ GetHitUnit()->CastSpell(nullptr, SPELL_BLOOD_LINK_DUMMY, CastSpellExtraArgs(true).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 e3b1c24041..7ebdb6291b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -201,7 +201,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));
@@ -236,7 +236,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(2, 3, 2, 3), me);
+ me->CastSpell(me, SPELL_GAS_SPORE, { SPELLVALUE_MAX_TARGETS, RAID_MODE(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 e5b7cd9f9b..2a56905e66 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -1823,7 +1823,8 @@ class spell_igb_rocket_pack : public SpellScriptLoader
void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
SpellInfo const* damageInfo = sSpellMgr->AssertSpellInfo(SPELL_ROCKET_PACK_DAMAGE);
- GetTarget()->CastCustomSpell(SPELL_ROCKET_PACK_DAMAGE, SPELLVALUE_BASE_POINT0, 2 * (damageInfo->Effects[EFFECT_0].CalcValue() + aurEff->GetTickNumber() * aurEff->GetPeriodic()), nullptr, TRIGGERED_FULL_MASK);
+ int32 bp = 2 * (damageInfo->Effects[EFFECT_0].CalcValue() + aurEff->GetTickNumber() * aurEff->GetPeriodic());
+ GetTarget()->CastSpell(nullptr, SPELL_ROCKET_PACK_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(bp));
GetTarget()->CastSpell(nullptr, SPELL_ROCKET_BURST, TRIGGERED_FULL_MASK);
}
@@ -2195,7 +2196,7 @@ 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);
+ GetCaster()->CastSpell(nullptr, uint32(GetEffectValue()), CastSpellExtraArgs(true).AddSpellBP0(8000));
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BURNING_PITCH, TRIGGERED_FULL_MASK);
}
@@ -2257,7 +2258,7 @@ 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);
+ GetCaster()->CastSpell(nullptr, instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_DAMAGE_A : SPELL_BURNING_PITCH_DAMAGE_H, CastSpellExtraArgs(true).AddSpellBP0(5000));
}
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 62f2ad3c67..8925590b27 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -368,7 +368,7 @@ 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);
+ me->CastSpell(nullptr, SPELL_SUMMON_SPIRITS, { SPELLVALUE_MAX_TARGETS, Is25ManRaid() ? 2 : 1 });
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 9facf081f0..b9c64609ab 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -382,7 +382,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
@@ -479,7 +479,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;
@@ -588,7 +588,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);
+ me->CastSpell(nullptr, 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:
@@ -822,7 +822,7 @@ class npc_gas_cloud : public CreatureScript
void CastMainSpell() override
{
- me->CastCustomSpell(SPELL_GASEOUS_BLOAT, SPELLVALUE_AURA_STACK, 10, me, false);
+ me->CastSpell(me, SPELL_GASEOUS_BLOAT, { SPELLVALUE_AURA_STACK, 10 });
}
private:
@@ -849,7 +849,7 @@ 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);
+ caster->CastSpell(caster, SPELL_GASEOUS_BLOAT, { SPELLVALUE_AURA_STACK, 10 });
}
}
@@ -863,7 +863,7 @@ 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);
+ caster->CastSpell(nullptr, SPELL_EXPUNGED_GAS, { SPELLVALUE_BASE_POINT0, dmg });
}
void Register() override
@@ -1104,7 +1104,7 @@ class spell_putricide_ooze_tank_protection : public SpellScriptLoader
PreventDefaultAction();
Unit* actionTarget = eventInfo.GetActionTarget();
- actionTarget->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff);
+ actionTarget->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, aurEff);
}
void Register() override
@@ -1136,7 +1136,7 @@ class spell_putricide_choking_gas_bomb : public SpellScriptLoader
continue;
uint32 spellId = uint32(GetSpellInfo()->Effects[i].CalcValue());
- GetCaster()->CastSpell(GetCaster(), spellId, true, nullptr, nullptr, GetCaster()->GetGUID());
+ GetCaster()->CastSpell(GetCaster(), spellId, GetCaster()->GetGUID());
}
}
@@ -1298,8 +1298,7 @@ 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());
+ GetTarget()->CastSpell(GetTarget(), triggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()).AddSpellBP0(damage));
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1311,7 +1310,7 @@ class spell_putricide_mutated_plague : public SpellScriptLoader
return;
int32 heal = healSpellInfo->Effects[0].CalcValue() * GetStackAmount();
- GetTarget()->CastCustomSpell(healSpell, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, nullptr, nullptr, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), healSpell, CastSpellExtraArgs(GetCasterGUID()).AddSpellBP0(heal));
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index f342ef3536..e50108a003 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& targets)
@@ -545,7 +545,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->CastSpell(target, uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), true, nullptr, aurEff, GetCasterGUID());
+ target->CastSpell(target, uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), { aurEff, GetCasterGUID() });
}
void Register() override
@@ -667,7 +667,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(false).SetOriginalCaster(GetCaster()->GetGUID()));
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(false));
}
@@ -744,7 +744,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 e0f9c25219..fea57328fd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -194,7 +194,7 @@ class FrostBombExplosion : public BasicEvent
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
{
- _owner->CastSpell((Unit*)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;
}
@@ -370,7 +370,7 @@ 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(2, 5, 2, 6), nullptr, TRIGGERED_FULL_MASK);
+ me->CastSpell(nullptr, SPELL_ICE_TOMB_TARGET, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 6)));
me->SetFacingTo(float(M_PI), true);
events.ScheduleEvent(EVENT_AIR_MOVEMENT_FAR, 1);
events.ScheduleEvent(EVENT_FROST_BOMB, 9000);
@@ -507,7 +507,7 @@ 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);
+ me->CastSpell(nullptr, SPELL_ICE_TOMB_TARGET, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
events.ScheduleEvent(EVENT_ICE_TOMB, urand(16000, 23000));
break;
case EVENT_FROST_BOMB:
@@ -517,7 +517,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);
events.ScheduleEvent(EVENT_FROST_BOMB, urand(6000, 8000));
break;
}
@@ -1236,7 +1236,7 @@ class spell_sindragosa_instability : public SpellScriptLoader
void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::Expired))
- GetTarget()->CastCustomSpell(SPELL_BACKLASH, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_BACKLASH, CastSpellExtraArgs().SetOriginalCaster(GetCasterGUID()).AddSpellBP0(aurEff->GetAmount()).SetTriggeringAura(aurEff));
}
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 966d36dfd1..0d228c3145 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, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
if (--_counter)
{
@@ -2105,11 +2105,8 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader
{
if (!GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByEnemySpell | AuraRemoveFlags::Expired | AuraRemoveFlags::ByDeath))
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());
+ //args.AddSpellMod(SPELLVALUE_AURA_STACK, 2);
+ GetTarget()->CastSpell(nullptr, SPELL_NECROTIC_PLAGUE_JUMP, CastSpellExtraArgs(GetCasterGUID()).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
if (Unit* caster = GetCaster())
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
}
@@ -2193,9 +2190,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::Expired | AuraRemoveFlags::ByDeath))
{
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount());
- GetTarget()->CastCustomSpell(SPELL_NECROTIC_PLAGUE_JUMP, values, nullptr, TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID());
+ GetTarget()->CastSpell(nullptr, SPELL_NECROTIC_PLAGUE_JUMP, CastSpellExtraArgs(GetCasterGUID()).AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount()));
if (Unit* caster = GetCaster())
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
}
@@ -2212,10 +2207,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, static_cast(AuraRemoveFlags::ByEnemySpell)); // 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.AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount());
+ args.AddSpellMod(SPELLVALUE_BASE_POINT1, static_cast(AuraRemoveFlags::ByEnemySpell)); // 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);
@@ -2606,7 +2601,7 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader
void TriggerHeal()
{
- GetHitUnit()->CastCustomSpell(SPELL_LIFE_SIPHON_HEAL, SPELLVALUE_BASE_POINT0, GetHitDamage() * 10, GetCaster(), true);
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_LIFE_SIPHON_HEAL, CastSpellExtraArgs(true).AddSpellBP0(GetHitDamage() * 10));
}
void Register() override
@@ -2644,7 +2639,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader
void OnPeriodic(AuraEffect const* aurEff)
{
if (_is25Man || ((aurEff->GetTickNumber() - 1) % 5))
- GetTarget()->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()));
}
void Register() override
@@ -2794,7 +2789,7 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader
{
// m_originalCaster to allow stacking from different casters, meh
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByDeath))
- GetTarget()->CastSpell((Unit*)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
@@ -2856,7 +2851,7 @@ 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());
+ caster->CastSpell(GetTarget(), SPELL_SOUL_RIP_DAMAGE, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()).AddSpellBP0(5000 * aurEff->GetTickNumber()));
}
void Register() override
@@ -2949,7 +2944,7 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader
return;
int32 heal = static_cast(damageInfo->GetDamage()) / 2;
- GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DARK_HUNGER_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -2980,7 +2975,7 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader
{
// m_originalCaster to allow stacking from different casters, meh
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByDeath))
- GetTarget()->CastSpell((Unit*)nullptr, SPELL_HARVESTED_SOUL, true, nullptr, nullptr, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
+ GetTarget()->CastSpell((Unit*)nullptr, SPELL_HARVESTED_SOUL, GetTarget()->GetInstanceScript()->GetGuidData(DATA_THE_LICH_KING));
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 963dd87558..64b625f410 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -720,7 +720,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);
+ me->CastSpell(me, SPELL_CARESS_OF_DEATH, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_MAX_TARGETS, 1));
break;
case ACTION_START_GAUNTLET:
me->setActive(true);
@@ -777,7 +777,7 @@ 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);
+ summon->CastSpell(target, VEHICLE_SPELL_RIDE_HARDCODED, { SPELLVALUE_BASE_POINT0, 1 });
summon->SetFlag(UNIT_FIELD_FLAGS_2, 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 b5c1ea33df..62ac0b5485 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -23,6 +23,7 @@
#include "Player.h"
#include "ScriptedGossip.h"
#include "Spell.h"
+#include "SpellInfo.h"
#include "SpellMgr.h"
static std::vector const TeleportSpells =
@@ -64,7 +65,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 1ac70e3aa7..d1d023ea2c 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -138,7 +138,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);
}
@@ -194,7 +194,7 @@ public:
if (ObjectGuid target = Trinity::Containers::SelectRandomContainerElement(guardCorpses))
if (Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target))
{
- 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 a4c411c796..e0c38ca89b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -727,7 +727,7 @@ class spell_four_horsemen_mark : public SpellScriptLoader
break;
}
if (damage)
- caster->CastCustomSpell(SPELL_MARK_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetTarget());
+ caster->CastSpell(GetTarget(), SPELL_MARK_DAMAGE, { SPELLVALUE_BASE_POINT0, damage });
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index 0d908f1363..8b62548b10 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -311,7 +311,7 @@ public:
{
int32 damage = int32(unit->GetHealth()) - int32(unit->CountPctFromMaxHealth(5));
if (damage > 0)
- GetCaster()->CastCustomSpell(SPELL_DECIMATE_DMG, SPELLVALUE_BASE_POINT0, damage, unit);
+ GetCaster()->CastSpell(unit, SPELL_DECIMATE_DMG, { SPELLVALUE_BASE_POINT0, damage });
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 873d299af9..dc9f470d43 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -161,7 +161,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, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()));
}
}
@@ -196,7 +196,7 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader
uint32 triggerSpell = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
int32 mod = int32(((float(aurEff->GetTickNumber()) / aurEff->GetTotalTicks()) * 0.9f + 0.1f) * 10000 * 2 / 3);
- GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)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/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 9db689d318..0046bc6d2e 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -934,7 +934,7 @@ 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);
+ target->CastSpell(target, SPELL_MANA_DETONATION_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(int32(-mana * 10)));
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index bce99c0d77..66dd1452f6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -179,7 +179,7 @@ class spell_loatheb_deathbloom : public SpellScriptLoader
if (!GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::Expired))
return;
- GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, true, nullptr, eff, GetCasterGUID());
+ GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, { eff, 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 8b518f69b7..ed266830c9 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -215,7 +215,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 8093fbd0e0..2442e1a718 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -755,13 +755,13 @@ public:
switch (eventId)
{
case EVENT_START_FIRST_RANDOM_PORTAL:
- me->CastCustomSpell(SPELL_RANDOM_PORTAL, SPELLVALUE_MAX_TARGETS, 1);
+ me->CastSpell(nullptr, 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);
+ me->CastSpell(nullptr, 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)))
@@ -1986,7 +1986,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 ac24b55b41..f46335dcbd 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -201,7 +201,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(false).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 2069cd77d4..8cdabd553b 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
@@ -787,7 +787,7 @@ class spell_assembly_rune_of_summoning : public AuraScript
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 8d0d498075..08c52e722e 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -1039,7 +1039,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->GetPositionX(), me->GetPositionY(), me->GetPositionZ() }, 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 05430fc496..6b46b236f1 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -379,7 +379,7 @@ class boss_freya : public CreatureScript
else
Talk(SAY_AGGRO_WITH_ELDER);
- me->CastCustomSpell(SPELL_ATTUNED_TO_NATURE, SPELLVALUE_AURA_STACK, 150, me, true);
+ me->CastSpell(me, SPELL_ATTUNED_TO_NATURE, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, 150));
events.ScheduleEvent(EVENT_WAVE, 10000);
events.ScheduleEvent(EVENT_EONAR_GIFT, 25000);
@@ -754,7 +754,7 @@ 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);
+ me->CastSpell(me, SPELL_SOLAR_FLARE, { SPELLVALUE_MAX_TARGETS, stackAmount });
events.ScheduleEvent(EVENT_SOLAR_FLARE, urand(5000, 10000));
break;
}
@@ -840,7 +840,7 @@ 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);
+ who->CastSpell(who, SPELL_PETRIFIED_BARK_DMG, CastSpellExtraArgs(true).AddSpellBP0(reflect));
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 16198ea616..8976d28fc6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -463,7 +463,7 @@ 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);
+ caster->CastSpell(GetTarget(), SPELL_MARK_OF_THE_FACELESS_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT1, aurEff->GetAmount()));
}
void Register() override
@@ -523,8 +523,8 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader
{
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);
+ caster->CastSpell(GetTarget(), SPELL_SARONITE_VAPORS_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellBP0(mana));
+ caster->CastSpell(GetTarget(), SPELL_SARONITE_VAPORS_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 38c98d35ad..221bf89d23 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -1044,7 +1044,7 @@ public:
return;
int32 damage = int32(200 * std::pow(2.0f, GetStackAmount()));
- caster->CastCustomSpell(caster, SPELL_BITING_COLD_DAMAGE, &damage, nullptr, nullptr, true);
+ caster->CastSpell(caster, SPELL_BITING_COLD_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(damage));
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 a24b23bab4..f31304480b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -342,7 +342,7 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader
ObjectGuid originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetGuidData(DATA_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 bf80b3fdd2..813be0aae3 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:
@@ -1235,15 +1235,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:
@@ -2145,7 +2145,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
@@ -2189,7 +2189,7 @@ class spell_mimiron_rocket_strike : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- GetHitUnit()->CastSpell((Unit*)nullptr, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, true, nullptr, nullptr, GetCaster()->GetGUID());
+ GetHitUnit()->CastSpell(nullptr, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, GetCaster()->GetGUID());
}
void Register() override
@@ -2283,7 +2283,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);
}
@@ -2371,7 +2371,7 @@ class spell_mimiron_summon_assault_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(DATA_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, CastSpellExtraArgs(aurEff).SetOriginalCaster(instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT)));
}
void Register() override
@@ -2434,7 +2434,7 @@ class spell_mimiron_summon_fire_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(DATA_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
@@ -2612,7 +2612,7 @@ class spell_mimiron_summon_junk_bot : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(DATA_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_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 06688479c9..645f60f660 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -554,7 +554,7 @@ class boss_razorscale : public CreatureScript
return;
case EVENT_DEVOURING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true))
- me->CastSpell(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), SPELL_DEVOURING_FLAME, true);
+ me->CastSpell({ target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() }, SPELL_DEVOURING_FLAME, true);
events.ScheduleEvent(EVENT_DEVOURING, 10000, 0, PHASE_FLIGHT);
return;
case EVENT_SUMMON:
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 03dee360fd..3aadbc4fe4 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -956,7 +956,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(DATA_XT002));
+ toyPile->CastSpell(toyPile, spellId, instance->GetGuidData(DATA_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 55f51bfe57..54a05637e7 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -519,7 +519,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
instance->DoStartTimedAchievement(ACHIEVEMENT_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);
@@ -563,7 +563,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;
@@ -574,7 +574,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:
@@ -796,15 +796,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:
@@ -838,15 +838,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:
@@ -1646,7 +1646,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:
@@ -2459,7 +2459,7 @@ 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);
+ GetTarget()->CastSpell(GetTarget(), SPELL_EMPOWERED_BUFF, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, 9));
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
@@ -2471,7 +2471,7 @@ 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);
+ target->CastSpell(target, SPELL_EMPOWERED_BUFF, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, stack));
}
else if (!target->HealthAbovePct(1) && !target->HasAura(SPELL_WEAKENED))
target->CastSpell(target, SPELL_WEAKENED, true);
@@ -2686,7 +2686,7 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305
return;
int32 damage = CalculatePct(static_cast(damageInfo->GetDamage()), 60);
- GetTarget()->CastCustomSpell(SPELL_GRIM_REPRISAL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, damageInfo->GetAttacker(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(damageInfo->GetAttacker(), SPELL_GRIM_REPRISAL_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
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 febd2887fa..01cf86d899 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
@@ -464,7 +464,7 @@ class spell_ingvar_woe_strike : public SpellScriptLoader
void HandleProc(AuraEffect const* 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 53d31c894e..f774607641 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -217,7 +217,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 57bd126f2c..fdcba0ff86 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(true).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 ef2db6beac..acda478adc 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
@@ -199,7 +199,7 @@ class spell_koralon_meteor_fists : public SpellScriptLoader
void TriggerFists(AuraEffect const* 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
@@ -270,7 +270,7 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader
void TriggerFists(AuraEffect const* 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 afc605260c..eac187bb9c 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -92,7 +92,7 @@ class boss_toravon : public CreatureScript
switch (eventId)
{
case EVENT_FROZEN_ORB:
- me->CastCustomSpell(SPELL_FROZEN_ORB, SPELLVALUE_MAX_TARGETS, 1, me);
+ DoCastSelf(SPELL_FROZEN_ORB, { SPELLVALUE_MAX_TARGETS, 1 });
events.ScheduleEvent(EVENT_FROZEN_ORB, 38000);
break;
case EVENT_WHITEOUT:
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index acbf87c7f7..a1b760e5e5 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -115,7 +115,7 @@ class spell_moragg_ray : public SpellScriptLoader
if (Unit* target = GetTarget()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
{
uint32 triggerSpell = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
- GetTarget()->CastSpell(target, triggerSpell, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ GetTarget()->CastSpell(target, triggerSpell, aurEff);
}
}
@@ -143,12 +143,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 b8abd48477..f74017b5b1 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 aa53cd5bf3..acd531f8c0 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -829,7 +829,7 @@ class npc_wild_wyrm : public CreatureScript
if (seatId != SEAT_INITIAL)
return;
- me->CastCustomSpell(SPELL_GRIP, SPELLVALUE_AURA_STACK, 50);
+ DoCastAOE(SPELL_GRIP, { 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 205e1de80d..1f04c8d7ef 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -743,7 +743,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 0bf14abc9f..4705397512 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 (aurEff->GetBase()->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 fff749e42f..29a03573f6 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -302,7 +302,7 @@ class spell_illidari_nightlord_shadow_inferno : public SpellScriptLoader
{
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(true).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 ac943a552b..473e813020 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
@@ -499,7 +499,7 @@ public:
{
// Need be negative to heal trigger
int32 bp = addhealth * (-1);
- me->CastCustomSpell(SPELL_SHARED_RULE, SPELLVALUE_BASE_POINT0, bp, (Unit*) nullptr, true);
+ DoCast(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
void ExecuteEvent(uint32 eventId) override
@@ -696,7 +696,7 @@ class spell_illidari_council_balance_of_power : public SpellScriptLoader
{
PreventDefaultAction();
int32 bp = dmgInfo.GetDamage();
- GetTarget()->CastCustomSpell(SPELL_SHARED_RULE, SPELLVALUE_BASE_POINT0, bp, (Unit*) nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -729,7 +729,7 @@ class spell_illidari_council_deadly_strike : public SpellScriptLoader
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, CastSpellExtraArgs(aurEff));
}
void Register() override
@@ -795,7 +795,7 @@ class spell_illidari_council_reflective_shield : public SpellScriptLoader
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(bp));
}
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 4d5f436dde..44e6a78dc0 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -176,7 +176,7 @@ public:
break;
case EVENT_FATAL_ATTRACTION:
Talk(SAY_SPELL);
- me->CastCustomSpell(SPELL_FATAL_ATTACTION_TELEPORT, SPELLVALUE_MAX_TARGETS, 3, me);
+ DoCastSelf(SPELL_FATAL_ATTACTION_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 b985f9dd01..5712c06971 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -392,7 +392,7 @@ public:
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:
@@ -618,7 +618,7 @@ public:
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:
@@ -738,7 +738,7 @@ class spell_reliquary_of_souls_aura_of_desire : public SpellScriptLoader
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(bp));
}
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 9af9795b84..d16f1f9b5a 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -204,7 +204,7 @@ public:
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 e3938c2b21..63b72a78db 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
@@ -516,7 +516,7 @@ public:
{
//DoCastVictim(SPELL_CHAOS_BLAST, true);
int damage = 100;
- me->CastCustomSpell(me->GetVictim(), SPELL_CHAOS_BLAST, &damage, nullptr, nullptr, false, nullptr, nullptr, me->GetGUID());
+ DoCast(me->GetVictim(), SPELL_CHAOS_BLAST, CastSpellExtraArgs(damage).SetOriginalCaster(me->GetGUID()));
}
ChaosBlast_Timer = 3000;
} else ChaosBlast_Timer -= diff;
@@ -673,7 +673,7 @@ public:
{
//DoCastVictim(SPELL_CHAOS_BLAST, true);
int damage = 100;
- me->CastCustomSpell(me->GetVictim(), SPELL_CHAOS_BLAST, &damage, nullptr, nullptr, false, nullptr, nullptr, me->GetGUID());
+ DoCast(me->GetVictim(), SPELL_CHAOS_BLAST, CastSpellExtraArgs(damage).SetOriginalCaster(me->GetGUID()));
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 6b1c3462e0..68e614a111 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -439,7 +439,7 @@ public:
{
int bp0 = 1100;
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- me->CastCustomSpell(target, SPELL_SHOOT, &bp0, nullptr, nullptr, true);
+ DoCast(target, SPELL_SHOOT, CastSpellExtraArgs(true).AddSpellBP0(bp0));
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 6e23786159..50d6365ed0 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
@@ -998,7 +998,7 @@ public:
void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
- GetCaster()->CastSpell(GetHitDest()->GetPositionX(), GetHitDest()->GetPositionY(), GetHitDest()->GetPositionZ(), SPELL_ICE_BOMBARDMENT, true);
+ GetCaster()->CastSpell({ GetHitDest()->GetPositionX(), GetHitDest()->GetPositionY(), GetHitDest()->GetPositionZ() }, 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 e94678d907..a53237ec05 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 1b2f2179b9..c9b5596ad2 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -180,7 +180,7 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
uint32 triggerSpell = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
int32 mod = int32(((float(aurEff->GetTickNumber()) / aurEff->GetTotalTicks()) * 0.9f + 0.1f) * 10000 * 2 / 3);
- GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)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 71ef28de82..b19aa11e9b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -239,11 +239,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 5c7b5845cb..f8578fb825 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, 0, 0, me->GetGUID());
+ summoned->CastSpell(summoned, SPELL_CONSUMPTION, CastSpellExtraArgs(false).SetOriginalCaster(me->GetGUID()));
}
void KilledUnit(Unit* /*victim*/) 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 c0cc43148e..568c3fb7bf 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, false);
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 1d12bfdae3..3de0a64836 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
@@ -241,7 +241,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 50fa936ee4..38f15439a5 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, 0, 0, true, 0, 0, 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 aa7feb972c..24c2f3cb5a 100644
--- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
+++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
@@ -199,7 +199,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);
}
@@ -237,7 +237,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 558858d80e..b24ecda929 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);
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 8fb3a4f403..b9dc3ad003 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -852,7 +852,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(true).AddSpellBP0(bp));
}
}
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index acd13f56ee..7f4d7e0067 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -218,7 +218,7 @@ class spell_pet_silverback : public SpellScriptLoader
PreventDefaultAction();
uint32 spellId = triggerSpell[GetSpellInfo()->GetRank() - 1];
- eventInfo.GetActor()->CastSpell((Unit*)nullptr, spellId, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell((Unit*)nullptr, spellId, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index 1ead4e371a..202cc3af9b 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -222,7 +222,7 @@ class spell_dk_blood_gorged : public AuraScript
Unit* target = GetTarget();
// The tooltip states that it is 10% per stack but sniffs say 5% instead
int32 bp = CalculatePct(target->GetMaxHealth(), 5 * GetStackAmount());
- target->CastCustomSpell(SPELL_DK_BLOOD_BURST, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_BLOOD_BURST, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -243,7 +243,7 @@ class spell_dk_butchery : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_DK_BUTCHERY, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DK_BUTCHERY, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -262,7 +262,7 @@ class spell_dk_death_and_decay : public AuraScript
void HandleDummyTick(AuraEffect const* aurEff)
{
if (DynamicObject* dyn = GetTarget()->GetDynObject(aurEff->GetId()))
- GetTarget()->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_DK_DEATH_AND_DECAY_DAMAGE, aurEff);
}
void Register() override
@@ -313,14 +313,14 @@ class spell_dk_death_coil : public SpellScript
if (caster->IsFriendlyTo(target))
{
bp *= 3.5f;
- caster->CastCustomSpell(SPELL_DK_DEATH_COIL_HEAL, SPELLVALUE_BASE_POINT0, bp, target, true);
+ caster->CastSpell(target, SPELL_DK_DEATH_COIL_HEAL, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
else
{
if (AuraEffect const* auraEffect = caster->GetAuraEffect(SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART, EFFECT_1))
bp += auraEffect->GetBaseAmount();
- caster->CastCustomSpell(SPELL_DK_DEATH_COIL_DAMAGE, SPELLVALUE_BASE_POINT0, bp, target, true);
+ caster->CastSpell(target, SPELL_DK_DEATH_COIL_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -369,7 +369,7 @@ class spell_dk_death_grip : public SpellScript
if (Unit* target = GetHitUnit())
{
if (!target->HasAuraType(SPELL_AURA_DEFLECT_SPELLS)) // Deterrence
- target->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), damage, true);
+ target->CastSpell({ pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ() }, damage, true);
}
}
@@ -452,7 +452,7 @@ class spell_dk_death_strike : public SpellScript
heal = AddPct(heal, aurEff->GetAmount());
heal = std::max(heal, int32(GetCaster()->CountPctFromMaxHealth(GetEffectValue())));
- GetCaster()->CastCustomSpell(SPELL_DK_DEATH_STRIKE_HEAL, SPELLVALUE_BASE_POINT0, heal, GetCaster(), true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_DK_DEATH_STRIKE_HEAL, CastSpellExtraArgs(true).AddSpellBP0(heal));
}
if (!GetCaster()->HasAura(SPELL_DK_BLOOD_PRESENCE))
@@ -465,7 +465,7 @@ class spell_dk_death_strike : public SpellScript
if (AuraEffect const* bloodShieldEffect = GetCaster()->GetAuraEffect(SPELL_DK_BLOOD_SHIELD_ABSORB, EFFECT_0))
bp += std::min(bp + bloodShieldEffect->GetAmount(), int32(GetCaster()->GetMaxHealth()));
- GetCaster()->CastCustomSpell(SPELL_DK_BLOOD_SHIELD_ABSORB, SPELLVALUE_BASE_POINT0, bp, GetCaster(), true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_DK_BLOOD_SHIELD_ABSORB, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -740,12 +740,12 @@ class spell_dk_presence : public AuraScript
// Improved Unholy Presence
if (spellId == SPELL_DK_UNHOLY_PRESENCE || spellId == SPELL_DK_FROST_PRESENCE)
if (AuraEffect const* eff = target->GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, DK_ICON_ID_IMPROVED_UNHOLY_PRESENCE, EFFECT_0))
- target->CastCustomSpell(SPELL_DK_IMPROVED_UNHOLY_PRESENCE, SPELLVALUE_BASE_POINT0, eff->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE, CastSpellExtraArgs(aurEff).AddSpellBP0(eff->GetAmount()));
// Improved Frost Presence
if (spellId == SPELL_DK_UNHOLY_PRESENCE || spellId == SPELL_DK_BLOOD_PRESENCE)
if (AuraEffect const* eff = target->GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, DK_ICON_ID_IMPROVED_FROST_PRESENCE, EFFECT_0))
- target->CastCustomSpell(SPELL_DK_IMPROVED_FROST_PRESENCE, SPELLVALUE_BASE_POINT0, eff->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_IMPROVED_FROST_PRESENCE, CastSpellExtraArgs(aurEff).AddSpellBP0(eff->GetAmount()));
// Improved Blood Presence and Blood Presence triggered effect
if (spellId == SPELL_DK_BLOOD_PRESENCE)
@@ -757,21 +757,21 @@ class spell_dk_presence : public AuraScript
{
// Rune Regeneration bonus effect
if (AuraEffect const* eff2 = improvedBloodPresenceAura->GetEffect(EFFECT_2))
- target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE, SPELLVALUE_BASE_POINT0, eff2->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE, CastSpellExtraArgs(aurEff).AddSpellBP0(eff2->GetAmount()));
// Crit Hit Chance reduction bonus effect
if (AuraEffect const* eff1 = improvedBloodPresenceAura->GetEffect(EFFECT_1))
- target->CastCustomSpell(SPELL_DK_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, eff1->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT1, eff1->GetAmount()));
}
else
- target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, aurEff);
}
else
{
// Damage Reduction bonus effect for the other presences
if (Aura const* improvedBloodPresenceAura = target->GetAuraOfRankedSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1, target->GetGUID()))
if (AuraEffect const* eff0 = improvedBloodPresenceAura->GetEffect(EFFECT_0))
- target->CastCustomSpell(SPELL_DK_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, -eff0->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(-eff0->GetAmount()));
}
}
@@ -819,7 +819,7 @@ class spell_dk_improved_presence : public AuraScript
target->RemoveAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE);
if (target->HasAura(SPELL_DK_BLOOD_PRESENCE))
- target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, true, nullptr);
+ target->CastSpell(target, SPELL_DK_BLOOD_PRESENCE_TRIGGERED, true);
}
void Register() override
@@ -859,8 +859,7 @@ class spell_dk_raise_dead : public SpellScript
void HandleRaiseDead()
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(GetGhoulSpellId());
- GetCaster()->CastSpell((Unit*)nullptr, spellInfo, TRIGGERED_FULL_MASK);
+ GetCaster()->CastSpell(nullptr, GetGhoulSpellId(), true);
}
void Register() override
@@ -894,7 +893,7 @@ class spell_dk_scent_of_blood : public AuraScript
void OnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, aurEff);
GetTarget()->RemoveAuraFromStack(GetId());
}
@@ -929,7 +928,7 @@ class spell_dk_scourge_strike : public SpellScript
AddPct(multiplier, aurEff->GetAmount());
int32 bp = CalculatePct(GetHitDamage(), multiplier) * unitTarget->GetDiseasesByCaster(caster->GetGUID());
- caster->CastCustomSpell(unitTarget, SPELL_DK_SCOURGE_STRIKE_TRIGGERED, &bp, nullptr, nullptr, true);
+ caster->CastSpell(unitTarget, SPELL_DK_SCOURGE_STRIKE_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -977,7 +976,7 @@ class spell_dk_will_of_the_necropolis : public AuraScript
{
Unit* target = GetTarget();
int32 bp = aurEff->GetAmount();
- target->CastCustomSpell(SPELL_DK_WILL_OF_THE_NECROPOLIS, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_WILL_OF_THE_NECROPOLIS, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
target->GetSpellHistory()->ResetCooldown(SPELL_DK_BLOOD_TAP, true);
}
@@ -1163,7 +1162,7 @@ class spell_dk_runic_empowerment : public AuraScript
if (AuraEffect* corruptionEff = player->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_DEATHKNIGHT, DK_ICON_ID_RUNIC_CORRUPTION, EFFECT_0))
{
int32 bp0 = corruptionEff->GetAmount();
- player->CastCustomSpell(player, SPELL_DK_RUNIC_CORRUPTION_TRIGGERED, &bp0, 0, 0, true, nullptr, aurEff);
+ player->CastSpell(player, SPELL_DK_RUNIC_CORRUPTION_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp0));
}
else
{
@@ -1173,13 +1172,13 @@ class spell_dk_runic_empowerment : public AuraScript
{
case RUNE_BLOOD:
case RUNE_DEATH:
- player->CastSpell(player, SPELL_DK_ENERGIZE_BLOOD_RUNE, true, nullptr, aurEff);
+ player->CastSpell(player, SPELL_DK_ENERGIZE_BLOOD_RUNE,aurEff);
break;
case RUNE_FROST:
- player->CastSpell(player, SPELL_DK_ENERGIZE_FROST_RUNE, true, nullptr, aurEff);
+ player->CastSpell(player, SPELL_DK_ENERGIZE_FROST_RUNE, aurEff);
break;
case RUNE_UNHOLY:
- player->CastSpell(player, SPELL_DK_ENERGIZE_UNHOLY_RUNE, true, nullptr, aurEff);
+ player->CastSpell(player, SPELL_DK_ENERGIZE_UNHOLY_RUNE, aurEff);
break;
default:
break;
@@ -1271,7 +1270,7 @@ class spell_dk_threat_of_thassarian : public AuraScript
}
if (offhandSpellId && eventInfo.GetProcTarget())
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), offhandSpellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), offhandSpellId, aurEff);
}
}
@@ -1315,7 +1314,7 @@ class spell_dk_reaping : public AuraScript
// T11 set bonus effect
if (AuraEffect const* aurEff = player->GetAuraEffect(SPELL_DK_ITEM_T11_DPS_4P_BONUS, EFFECT_0))
- player->CastSpell(player, SPELL_DK_DEATH_EATER, true, nullptr, aurEff);
+ player->CastSpell(player, SPELL_DK_DEATH_EATER, aurEff);
}
void Register() override
@@ -1452,7 +1451,7 @@ class spell_dk_disease : public AuraScript
{
int32 bp0 = GetId() == SPELL_DK_FROST_FEVER ? 1 : 0;
int32 bp1 = GetId() == SPELL_DK_BLOOD_PLAGUE ? 1 : 0;
- caster->CastCustomSpell(caster, SPELL_DK_RESILIENT_INFECTION, &bp0, &bp1, nullptr, true);
+ caster->CastSpell(caster, SPELL_DK_RESILIENT_INFECTION, CastSpellExtraArgs(true).AddSpellBP0(bp0).AddSpellMod(SPELLVALUE_BASE_POINT1, bp1));
}
}
}
@@ -1559,7 +1558,7 @@ class spell_dk_ebon_plaguebringer : public AuraScript
int32 bp = aurEff->GetAmount();
if (Unit* target = spell->m_targets.GetUnitTarget())
- GetTarget()->CastCustomSpell(SPELL_DK_EBON_PLAGUE, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ GetTarget()->CastSpell(target, SPELL_DK_EBON_PLAGUE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1597,7 +1596,7 @@ class spell_dk_unoly_blight : public AuraScript
{
PreventDefaultAction();
int32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), 1);
- GetTarget()->CastCustomSpell(SPELL_DK_UNHOLY_BLIGHT_PERIODIC, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_UNHOLY_BLIGHT_PERIODIC, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
void Register() override
@@ -1668,7 +1667,7 @@ class spell_dk_killing_machine : public SpellScript
{
Unit* target = GetHitUnit();
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_DK_ITEM_T11_DPS_4P_BONUS, EFFECT_0))
- target->CastSpell(target, SPELL_DK_DEATH_EATER, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DK_DEATH_EATER, aurEff);
}
void Register() override
@@ -1694,7 +1693,7 @@ class spell_dk_item_death_knight_t12_dps_4p_bonus : public AuraScript
{
PreventDefaultAction();
int32 damage = CalculatePct(aurEff->GetAmount(), eventInfo.GetDamageInfo()->GetDamage());
- GetTarget()->CastCustomSpell(SPELL_DK_FLAMING_TORRENT, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_FLAMING_TORRENT, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
void Register() override
@@ -1714,7 +1713,7 @@ class spell_dk_smoldering_rune : public AuraScript
void HandleDummyTick(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_DK_SMOLDERING_RUNE_ENERGIZE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DK_SMOLDERING_RUNE_ENERGIZE, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index 59cb11a20b..6a5251c6ef 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -218,7 +218,7 @@ class spell_dru_eclipse : public AuraScript
// Handle Sunfire talent
if (GetSpellInfo()->Id == SPELL_DRUID_SOLAR_ECLIPSE && target->GetDummyAuraEffect(SPELLFAMILY_DRUID, SPELL_ICON_ID_SUNFIRE, EFFECT_0))
if (!target->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_SUNFIRE))
- target->CastCustomSpell(SPELL_DRUID_SOLAR_ECLIPSE_SUNFIRE, SPELLVALUE_BASE_POINT0, SPELL_DRUID_SUNFIRE, target, true);
+ target->CastSpell(target, SPELL_DRUID_SOLAR_ECLIPSE_SUNFIRE, CastSpellExtraArgs(true).AddSpellBP0(SPELL_DRUID_SUNFIRE));
}
void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -290,14 +290,14 @@ class spell_dru_eclipse_mastery_driver_passive : public AuraScript
// Cast Energy Gain
uint32 energizeSpell = (eventInfo.GetSpellInfo()->SpellFamilyFlags[2] & 0x2000000) != 0 ? SPELL_DRUID_STARSURGE_ENERGIZE : SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE;
- target->CastCustomSpell(target, energizeSpell, &_energyAmount, 0, 0, false, nullptr, aurEff);
+ target->CastSpell(target, energizeSpell, CastSpellExtraArgs().AddSpellBP0(_energyAmount));
// Cast Euphoria Bonus
if (_euphoriaEnergyAmount)
- target->CastCustomSpell(target, SPELL_DRUID_EUPHORIA_ENERGIZE, &_euphoriaEnergyAmount, 0, 0, false, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DRUID_EUPHORIA_ENERGIZE, CastSpellExtraArgs().AddSpellBP0(_euphoriaEnergyAmount));
}
- void HandleEclipseProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ void HandleEclipseProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
{
Unit* target = GetTarget();
uint32 newMarkerSpellId = 0;
@@ -325,7 +325,7 @@ class spell_dru_eclipse_mastery_driver_passive : public AuraScript
if (Aura* aura = _eclipseMarker->GetBase())
aura->Remove();
- target->CastSpell(target, newMarkerSpellId, false, nullptr, aurEff);
+ target->CastSpell(target, newMarkerSpellId, false);
// Reset Nature's Grace proc cooldown
if (Aura* aura = target->GetAuraOfRankedSpell(SPELL_DRUID_NATURES_GRACE))
@@ -333,11 +333,11 @@ class spell_dru_eclipse_mastery_driver_passive : public AuraScript
// Euphoria Mana Bonus
if (AuraEffect const* euphoria = target->GetDummyAuraEffect(SPELLFAMILY_DRUID, SPELL_ICON_ID_EUPHORIA, EFFECT_2))
- target->CastCustomSpell(SPELL_DRUID_EUPHORIA_MANA_ENERGIZE, SPELLVALUE_BASE_POINT0, euphoria->GetAmount(), target, false, nullptr, euphoria);
+ target->CastSpell(target, SPELL_DRUID_EUPHORIA_MANA_ENERGIZE, CastSpellExtraArgs().AddSpellBP0(euphoria->GetAmount()));
// T11 Bonus
if (AuraEffect const* t11Bonus = target->GetAuraEffect(SPELL_DRUID_ITEM_T11_BALANCE_4P_BONUS, EFFECT_0))
- target->CastCustomSpell(SPELL_DRUID_ASTRAL_ALIGNMENT, SPELLVALUE_AURA_STACK, 3, target, false, nullptr, t11Bonus);
+ target->CastSpell(target, SPELL_DRUID_ASTRAL_ALIGNMENT, CastSpellExtraArgs().AddSpellMod(SPELLVALUE_AURA_STACK, 3));
}
void Register() override
@@ -437,7 +437,7 @@ class spell_dru_enrage : public AuraScript
{
Unit* target = GetTarget();
if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0))
- target->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true);
+ target->CastSpell(target, SPELL_DRUID_ENRAGE_MOD_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
// Item - Druid T10 Feral 4P Bonus
if (target->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS))
@@ -522,7 +522,7 @@ class spell_dru_glyph_of_starfire_proc : public AuraScript
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_STARFIRE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_STARFIRE, aurEff);
}
void Register() override
@@ -644,15 +644,15 @@ class spell_dru_lifebloom : public AuraScript
healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack);
healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack);
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(healAmount).SetOriginalCaster(GetCasterGUID()));
// restore mana
int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2;
- caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ caster->CastSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellBP0(returnMana).SetOriginalCaster(GetCasterGUID()));
return;
}
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(healAmount).SetOriginalCaster(GetCasterGUID()));
}
void HandleDispel(DispelInfo* dispelInfo)
@@ -667,15 +667,15 @@ class spell_dru_lifebloom : public AuraScript
{
healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
- target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
+ target->CastSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, CastSpellExtraArgs(GetCasterGUID()).AddSpellBP0(healAmount));
// restore mana
int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2;
- caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
+ caster->CastSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, CastSpellExtraArgs(GetCasterGUID()).AddSpellBP0(returnMana));
return;
}
- target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID());
+ target->CastSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, CastSpellExtraArgs(GetCasterGUID()).AddSpellBP0(healAmount));
}
}
}
@@ -699,7 +699,7 @@ class spell_dru_living_seed : public AuraScript
{
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);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_LIVING_SEED_PROC, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
void Register() override
@@ -719,7 +719,7 @@ class spell_dru_living_seed_proc : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_LIVING_SEED_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -780,7 +780,7 @@ class spell_dru_savage_defense : public AuraScript
absorbPct += masteryAurEff->GetAmount();
int32 amount = uint32(CalculatePct(GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK), absorbPct));
- target->CastCustomSpell(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, amount, target, true);
+ target->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, CastSpellExtraArgs(true).AddSpellBP0(amount));
}
void Register() override
@@ -817,7 +817,7 @@ class spell_dru_savage_roar_AuraScript : public AuraScript
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*/)
@@ -886,8 +886,8 @@ class spell_dru_stampede : public AuraScript
if (GetTarget()->GetShapeshiftForm() != FORM_CAT || eventInfo.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 const* aurEff, ProcEventInfo& eventInfo)
@@ -896,7 +896,7 @@ class spell_dru_stampede : public AuraScript
if (GetTarget()->GetShapeshiftForm() != FORM_BEAR || eventInfo.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
@@ -933,7 +933,7 @@ class spell_dru_survival_instincts_AuraScript : public AuraScript
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_SURVIVAL_INSTINCTS, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_SURVIVAL_INSTINCTS, aurEff);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1019,7 +1019,7 @@ class spell_dru_tiger_s_fury : public SpellScript
void OnHit()
{
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_1))
- GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_DRUID_TIGER_S_FURY_ENERGIZE, CastSpellExtraArgs(true).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -1156,7 +1156,7 @@ class spell_dru_solar_beam : public AuraScript
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
if (DynamicObject* dyn = GetTarget()->GetDynObject(aurEff->GetId()))
- GetTarget()->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_DRUID_SOLAR_BEAM_SILENCE, true);
+ GetTarget()->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_DRUID_SOLAR_BEAM_SILENCE, true);
}
void Register() override
@@ -1177,7 +1177,7 @@ class spell_dru_effloresence : public AuraScript
{
healAmount = CalculatePct(heal->GetHeal(), GetSpellInfo()->Effects[EFFECT_0].BasePoints);
if (healAmount)
- GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_BASE_POINT1, healAmount, heal->GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(heal->GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT1, healAmount));
}
}
@@ -1199,7 +1199,7 @@ class spell_dru_effloresence_aoe : public AuraScript
{
if (Unit* caster = GetCaster())
if (DynamicObject* dyn = caster->GetDynObject(aurEff->GetId()))
- caster->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_DRUID_EFFLORESCENCE_HEAL, true, nullptr, aurEff, caster->GetGUID());
+ caster->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_DRUID_EFFLORESCENCE_HEAL, { aurEff, caster->GetGUID() });
}
void Register() override
@@ -1264,7 +1264,7 @@ class spell_dru_rejuvenation : public AuraScript
if (naturesBountyAurEff->GetBonusAmount() >= 3)
{
int32 bp0 = -naturesBountyAurEff->GetSpellInfo()->Effects[EFFECT_1].BasePoints;
- caster->CastCustomSpell(caster, SPELL_DRUID_NATURES_BOUNTY, &bp0, 0, 0, true);
+ caster->CastSpell(caster, SPELL_DRUID_NATURES_BOUNTY, CastSpellExtraArgs(true).AddSpellBP0(bp0));
}
}
}
@@ -1277,7 +1277,7 @@ class spell_dru_rejuvenation : public AuraScript
if (AuraEffect const* giftEffect = caster->GetDummyAuraEffect(SPELLFAMILY_DRUID, SPELL_ICON_ID_GIFT_OF_THE_EARTHMOTHER, EFFECT_1))
{
int32 bp = CalculatePct(aurEff->GetAmount() * aurEff->GetTotalTicks(), giftEffect->GetAmount());
- caster->CastCustomSpell(SPELL_DRUID_REJUVENATION_DIRECT_HEAL, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true);
+ caster->CastSpell(GetTarget(), SPELL_DRUID_REJUVENATION_DIRECT_HEAL, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
}
@@ -1320,9 +1320,9 @@ class spell_dru_tree_of_life : public AuraScript
{
if (Unit* target = GetTarget())
{
- target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_1, true, nullptr, aurEff);
- target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_2, true, nullptr, aurEff);
- target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_3, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_1, aurEff);
+ target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_2, aurEff);
+ target->CastSpell(target, SPELL_DRUID_TREE_OF_LIFE_PASSIVE_3, aurEff);
}
}
@@ -1356,7 +1356,7 @@ class spell_dru_harmony : public AuraScript
{
PreventDefaultAction();
int32 amount = aurEff->GetAmount();
- GetTarget()->CastCustomSpell(SPELL_DRUID_HARMONY, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_HARMONY, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
void Register() override
@@ -1399,10 +1399,10 @@ class spell_dru_leader_of_the_pack : public AuraScript
mana = CalculatePct(target->GetMaxPower(POWER_MANA), bp);
if (heal)
- target->CastCustomSpell(SPELL_DRUID_LEADER_OF_THE_PACK_HEAL, SPELLVALUE_BASE_POINT0, heal, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DRUID_LEADER_OF_THE_PACK_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
if (mana)
- target->CastCustomSpell(SPELL_DRUID_LEADER_OF_THE_PACK_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DRUID_LEADER_OF_THE_PACK_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellBP0(mana));
}
void Register() override
@@ -1583,7 +1583,7 @@ class spell_dru_ferocious_bite : public SpellScript
{
int32 totalEnergySpentMultiplier = std::floor((GetSpell()->GetPowerCost() + energy) / 10);
int32 bp = aurEff->GetAmount() * totalEnergySpentMultiplier;
- caster->CastCustomSpell(SPELL_DRUID_GLYPH_OF_FEROCIOUS_BITE, SPELLVALUE_BASE_POINT0, bp, caster, true);
+ caster->CastSpell(caster, SPELL_DRUID_GLYPH_OF_FEROCIOUS_BITE, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -1612,7 +1612,7 @@ class spell_dru_empowered_touch : public AuraScript
{
PreventDefaultAction();
Unit* target = GetTarget();
- target->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_EMPOWERED_TOUCH_SCRIPT, true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_EMPOWERED_TOUCH_SCRIPT, aurEff);
}
void Register() override
@@ -1691,7 +1691,7 @@ class spell_dru_pulverize : public SpellScript
SetEffectValue(bp);
uint32 critPerStack = sSpellMgr->GetSpellInfo(SPELL_DRUID_PULVERIZE_TRIGGERED)->Effects[EFFECT_0].BasePoints;
- caster->CastCustomSpell(SPELL_DRUID_PULVERIZE_TRIGGERED, SPELLVALUE_BASE_POINT0, int32(critPerStack * stacks), caster, true);
+ caster->CastSpell(caster, SPELL_DRUID_PULVERIZE_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(int32(critPerStack * stacks)));
aura->Remove();
}
else
@@ -1734,7 +1734,7 @@ class spell_dru_frenzied_regeneration : public AuraScript
int32 heal = CalculatePct(target->GetMaxHealth(), healthPct) * CalculatePct(rage, 10);
target->ModifyPower(POWER_RAGE, int32(rage * -1));
- target->CastCustomSpell(SPELL_DRUID_FRENZIED_REGENERATION_HEAL, SPELLVALUE_BASE_POINT0, heal, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_DRUID_FRENZIED_REGENERATION_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -1820,7 +1820,7 @@ class spell_dru_blood_in_the_water : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLOOD_IN_THE_WATER_SCRIPT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLOOD_IN_THE_WATER_SCRIPT, aurEff);
}
void Register() override
@@ -1896,7 +1896,7 @@ class spell_dru_item_t11_feral_4p_bonus : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STRENGTH_OF_THE_PANTHER, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STRENGTH_OF_THE_PANTHER, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index d3383ce744..804102716b 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -158,7 +158,7 @@ class spell_gen_adaptive_warding : public SpellScriptLoader
default:
return;
}
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
void Register() override
@@ -213,7 +213,7 @@ class spell_gen_alchemist_stone : public SpellScriptLoader
if (!spellId)
return;
- GetTarget()->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
@@ -504,7 +504,7 @@ class spell_gen_blood_reserve : public SpellScriptLoader
PreventDefaultAction();
Unit* caster = eventInfo.GetActionTarget();
- caster->CastCustomSpell(SPELL_GEN_BLOOD_RESERVE_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), caster, TRIGGERED_FULL_MASK, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_GEN_BLOOD_RESERVE_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
caster->RemoveAura(SPELL_GEN_BLOOD_RESERVE_AURA);
}
@@ -552,7 +552,7 @@ class spell_gen_blade_warding : public SpellScriptLoader
for (uint8 i = 0; i < stacks; ++i)
bp += spellInfo->Effects[EFFECT_0].CalcValue(caster);
- caster->CastCustomSpell(SPELL_GEN_BLADE_WARDING_TRIGGERED, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetActor(), TRIGGERED_FULL_MASK, nullptr, aurEff);
+ caster->CastSpell(eventInfo.GetActor(), SPELL_GEN_BLADE_WARDING_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -854,7 +854,7 @@ class spell_gen_chaos_blast : public SpellScriptLoader
int32 basepoints0 = 100;
Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
- caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, nullptr, nullptr, true);
+ caster->CastSpell(target, SPELL_CHAOS_BLAST, CastSpellExtraArgs(true).AddSpellBP0(basepoints0));
}
void Register() override
@@ -1415,7 +1415,7 @@ class spell_gen_defend : public SpellScriptLoader
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());
@@ -1667,7 +1667,7 @@ class spell_gen_elune_candle : public SpellScriptLoader
else
spellId = SPELL_ELUNE_CANDLE_NORMAL;
- GetCaster()->CastSpell(GetHitUnit(), spellId, true, nullptr);
+ GetCaster()->CastSpell(GetHitUnit(), spellId, true);
}
void Register() override
@@ -1906,10 +1906,9 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
}
};
-
enum Interrupt
{
- SPELL_GEN_THROW_INTERRUPT = 32747
+ SPELL_GEN_THROW_INTERRUPT = 32747
};
// 32748 - Deadly Throw Interrupt
@@ -1929,7 +1928,7 @@ class spell_gen_interrupt : public SpellScriptLoader
void HandleProc(AuraEffect const* 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
@@ -2002,7 +2001,7 @@ class spell_gen_lifebloom : public SpellScriptLoader
return;
// final heal
- GetTarget()->CastSpell(GetTarget(), _spellId, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(GetTarget(), _spellId, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()));
}
void Register() override
@@ -2204,7 +2203,7 @@ class spell_gen_moss_covered_feet : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActionTarget()->CastSpell((Unit*)nullptr, SPELL_FALL_DOWN, true, nullptr, aurEff);
+ eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_FALL_DOWN, aurEff);
}
void Register() override
@@ -2389,7 +2388,7 @@ class spell_gen_obsidian_armor : public SpellScriptLoader
default:
return;
}
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
void Register() override
@@ -2519,7 +2518,7 @@ class spell_gen_paralytic_poison : public SpellScriptLoader
if (!GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::Expired))
return;
- GetTarget()->CastSpell((Unit*)nullptr, SPELL_PARALYSIS, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_PARALYSIS, aurEff);
}
void Register() override
@@ -2971,7 +2970,7 @@ class spell_gen_two_forms : public SpellScriptLoader
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(true).AddSpellBP0(1));
}
void Register() override
@@ -3348,7 +3347,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader
// 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, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()));
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
@@ -3448,7 +3447,7 @@ class spell_gen_vampiric_touch : public SpellScriptLoader
Unit* caster = eventInfo.GetActor();
int32 bp = damageInfo->GetDamage() / 2;
- caster->CastCustomSpell(SPELL_VAMPIRIC_TOUCH_HEAL, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_VAMPIRIC_TOUCH_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -4610,7 +4609,7 @@ class spell_gen_vengeance : public AuraScript
uint32 healthCap = CalculatePct(caster->GetCreateHealth(), 10) + caster->GetStat(STAT_STAMINA);
uint32 damageBonus = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), 33);
int32 bp = std::min(damageBonus, healthCap);
- caster->CastCustomSpell(caster, SPELL_VENGEANCE_TRIGGERED, &bp, &bp, &bp, true);
+ caster->CastSpell(caster, SPELL_VENGEANCE_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp).AddSpellMod(SPELLVALUE_BASE_POINT1, bp).AddSpellMod(SPELLVALUE_BASE_POINT2, bp));
}
}
@@ -4670,7 +4669,7 @@ class spell_gen_vengeance_triggered : public AuraScript
uint32 healthCap = CalculatePct(target->GetCreateHealth(), 10) + target->GetStat(STAT_STAMINA);
damageLastTwoSeconds = std::min(healthCap, CalculatePct(damageLastTwoSeconds, 33));
if (damageLastTwoSeconds)
- target->CastCustomSpell(target, SPELL_VENGEANCE_TRIGGERED, &damageLastTwoSeconds, &damageLastTwoSeconds, &damageLastTwoSeconds, true);
+ target->CastSpell(target, SPELL_VENGEANCE_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(damageLastTwoSeconds).AddSpellMod(SPELLVALUE_BASE_POINT1, damageLastTwoSeconds).AddSpellMod(SPELLVALUE_BASE_POINT2, damageLastTwoSeconds));
else
Remove();
}
@@ -5015,7 +5014,7 @@ class spell_gen_guild_battle_standard : public AuraScript
}
if (spellId)
- target->CastCustomSpell(target, spellId, &bp, &bp, &bp, true, nullptr, aurEff);
+ target->CastSpell(target, spellId, CastSpellExtraArgs(aurEff).AddSpellBP0(bp).AddSpellMod(SPELLVALUE_BASE_POINT1, bp).AddSpellMod(SPELLVALUE_BASE_POINT2, bp));
}
void Register() override
@@ -5124,7 +5123,7 @@ class spell_gen_cauldron_of_battle : public SpellScript
{
float radius = spell->Effects[EFFECT_0].CalcRadius(target) - target->GetCombatReach();
target->GetNearPoint(target, dest.m_positionX, dest.m_positionY, dest.m_positionZ, radius, target->GetOrientation());
- target->CastSpell(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), spellId);
+ target->CastSpell({ dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ() }, spellId);
}
}
}
@@ -5233,7 +5232,7 @@ class spell_gen_flask_of_battle : public SpellScript
int32 durationBonus = sSpellMgr->AssertSpellInfo(chugALugSpellId)->Effects[EFFECT_0].CalcValue();
int32 duration = sSpellMgr->AssertSpellInfo(spellId)->GetMaxDuration();
AddPct(duration, durationBonus);
- player->CastCustomSpell(spellId, SPELLVALUE_AURA_DURATION, duration, player);
+ player->CastSpell(player, spellId, { SPELLVALUE_AURA_DURATION, duration });
}
else
player->CastSpell(player, spellId);
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index 6253557b58..911ff73aff 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -554,7 +554,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()))
@@ -1155,12 +1155,12 @@ 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);
+ target->CastSpell(target, SPELL_RAM_FATIGUE, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, 1));
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);
+ target->CastSpell(target, SPELL_RAM_FATIGUE, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, target->HasAura(SPELL_RAM_FATIGUE) ? 4 : 5 /*Hack*/));
if (aurEff->GetTickNumber() == 8)
target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_RED, true);
break;
@@ -1664,7 +1664,7 @@ class spell_darkmoon_island_ring_toss : public SpellScript
if (target->GetExactDist2d(destination) <= 1.0f)
caster->CastSpell(target, SPELL_RING_TOSS_HIT, true);
else
- caster->CastSpell(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ(), SPELL_RING_TOSS_MISS, true);
+ caster->CastSpell({ destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ() }, SPELL_RING_TOSS_MISS, true);
_hasHit = true;
}
@@ -1675,7 +1675,7 @@ class spell_darkmoon_island_ring_toss : public SpellScript
if (!_hasHit)
{
Position destination = GetExplTargetDest()->GetPosition();
- caster->CastSpell(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ(), SPELL_RING_TOSS_MISS, true);
+ caster->CastSpell({destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ()} , SPELL_RING_TOSS_MISS, true);
}
if (!caster->GetPower(POWER_ALTERNATE_POWER))
@@ -1720,7 +1720,7 @@ class spell_darkmoon_island_whack_summon_aura : public AuraScript
void OnPeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_GNOLL_AURA_OKAY_TO_HIT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_GNOLL_AURA_OKAY_TO_HIT, aurEff);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 873cde8181..ad9fd1ead7 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -228,7 +228,7 @@ class spell_hun_cobra_shot : public SpellScriptLoader
if (spellTarget->GetHealthPct() <= float(terminationAura->GetSpellInfo()->Effects[EFFECT_1].BasePoints))
amount += terminationAura->GetEffect(EFFECT_0)->GetAmount();
}
- caster->CastCustomSpell(SPELL_HUNTER_GENERIC_ENERGIZE_FOCUS, SPELLVALUE_BASE_POINT0, amount, caster, true);
+ caster->CastSpell(caster, SPELL_HUNTER_GENERIC_ENERGIZE_FOCUS, CastSpellExtraArgs(true).AddSpellBP0(amount));
}
}
@@ -349,7 +349,7 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, aurEff);
}
void Register() override
@@ -377,7 +377,7 @@ class spell_hun_invigoration : public SpellScript
{
Unit* target = GetHitUnit();
if (AuraEffect* aurEff = target->GetDummyAuraEffect(SPELLFAMILY_HUNTER, HUNTER_ICON_ID_INVIGORATION, EFFECT_0))
- target->CastCustomSpell(SPELL_HUNTER_INVIGORATION_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_HUNTER_INVIGORATION_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -403,7 +403,7 @@ class spell_hun_last_stand_pet : public SpellScriptLoader
{
Unit* caster = GetCaster();
int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30));
- caster->CastCustomSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr);
+ caster->CastSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(healthModSpellBasePoints0));
}
void Register() override
@@ -549,7 +549,7 @@ class spell_hun_misdirection : public SpellScriptLoader
void HandleProc(AuraEffect const* 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
@@ -671,7 +671,7 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
if (Unit* owner = caster->GetOwner())
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);
+ owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(100));
caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true);
}
}
@@ -716,7 +716,7 @@ class spell_hun_rapid_recuperation : public SpellScriptLoader
return;
int32 focus = aurEff->GetAmount();
- GetTarget()->CastCustomSpell(SPELL_HUNTER_RAPID_RECUPERATION, SPELLVALUE_BASE_POINT0, focus, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_RAPID_RECUPERATION, CastSpellExtraArgs(aurEff).AddSpellBP0(focus));
}
void Register() override
@@ -792,7 +792,7 @@ class spell_hun_ready_set_aim : public SpellScriptLoader
{
if (GetStackAmount() == 5)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_FIRE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_FIRE, aurEff);
GetTarget()->RemoveAura(GetId());
}
}
@@ -864,7 +864,7 @@ class spell_hun_sniper_training : public SpellScriptLoader
Unit* target = GetTarget();
uint32 spellId = SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_HUNTER_SNIPER_TRAINING_R1;
- target->CastSpell(target, spellId, true, 0, aurEff);
+ target->CastSpell(target, spellId, aurEff);
if (Player* playerTarget = GetUnitOwner()->ToPlayer())
{
int32 baseAmount = aurEff->GetBaseAmount();
@@ -943,7 +943,7 @@ class spell_hun_steady_shot : public SpellScriptLoader
amount += terminationAura->GetEffect(EFFECT_0)->GetAmount();
}
- caster->CastCustomSpell(SPELL_HUNTER_STEADY_SHOT_FOCUS, SPELLVALUE_BASE_POINT0, amount, caster, true);
+ caster->CastSpell(caster, SPELL_HUNTER_STEADY_SHOT_FOCUS, CastSpellExtraArgs(true).AddSpellBP0(amount));
}
}
@@ -986,7 +986,7 @@ class spell_hun_improved_steady_shot : public SpellScriptLoader
_steadyShotCounter++;
if (_steadyShotCounter == 2)
{
- GetCaster()->CastCustomSpell(SPELL_HUNTER_IMPROVED_STEADY_SHOT_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetCaster(), true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_IMPROVED_STEADY_SHOT_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
_steadyShotCounter = 0;
}
}
@@ -1136,7 +1136,7 @@ class spell_hun_thrill_of_the_hunt : public SpellScriptLoader
int32 focus = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), SpellSchoolMask(eventInfo.GetDamageInfo()->GetSchoolMask()));
focus = CalculatePct(focus, aurEff->GetAmount());
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_HUNTER_THRILL_OF_THE_HUNT, &focus, nullptr, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_THRILL_OF_THE_HUNT, CastSpellExtraArgs(aurEff).AddSpellBP0(focus));
}
void Register() override
@@ -1167,7 +1167,7 @@ class spell_hun_tnt : public AuraScript
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_LOCK_AND_LOAD, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_LOCK_AND_LOAD, aurEff);
}
void Register() override
@@ -1200,7 +1200,7 @@ class spell_hun_wild_quiver : public SpellScriptLoader
PreventDefaultAction();
if (Unit* caster = GetCaster())
if (Unit* target = eventInfo.GetActionTarget())
- caster->CastSpell(target, SPELL_HUNTER_WILD_QUIVER_DAMAGE, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_HUNTER_WILD_QUIVER_DAMAGE, aurEff);
}
void Register() override
@@ -1233,7 +1233,7 @@ class spell_hun_serpent_sting : public AuraScript
if (AuraEffect const* improved = caster->GetDummyAuraEffect(SPELLFAMILY_HUNTER, HUNTER_ICON_ID_IMPROVED_SERPPENT_STING, EFFECT_0))
{
int32 bp = CalculatePct(aurEff->GetAmount() * aurEff->GetTotalTicks(), improved->GetAmount());
- caster->CastCustomSpell(SPELL_HUNTER_IMPROVED_SERPENT_STING_DAMAGE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, improved);
+ caster->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_SERPENT_STING_DAMAGE, CastSpellExtraArgs(improved).AddSpellBP0(bp));
}
}
@@ -1290,7 +1290,7 @@ class spell_hun_piercing_shots : public SpellScriptLoader
if (tickNumber)
{
uint32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage() * aurEff->GetAmount(), 1) / tickNumber;
- GetCaster()->CastCustomSpell(SPELL_HUNTER_PIERCING_SHOTS, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetActionTarget(), true);
+ GetCaster()->CastSpell(eventInfo.GetActionTarget(), SPELL_HUNTER_PIERCING_SHOTS, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
@@ -1376,7 +1376,7 @@ class spell_hun_trap_launcher : public AuraScript
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_STEADY_SHOT_TRIGGERED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_STEADY_SHOT_TRIGGERED, aurEff);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1415,7 +1415,7 @@ class spell_hun_glyph_of_kill_shot : public AuraScript
if (damage->GetDamage() < victim->GetHealth())
{
target->GetSpellHistory()->ResetCooldown(spell->Id, true);
- target->CastSpell(target, SPELL_HUNTER_GLYPH_OF_KILL_SHOT_COOLDOWN, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_HUNTER_GLYPH_OF_KILL_SHOT_COOLDOWN, aurEff);
}
}
@@ -1466,7 +1466,7 @@ class spell_hun_camouflage_duration : public AuraScript
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_CAMOUFLAGE_PERIODIC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_CAMOUFLAGE_PERIODIC, aurEff);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1531,7 +1531,7 @@ class spell_hun_marked_for_death : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_HUNTER_MARKED_FOR_DEATH_TRIGGERED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_HUNTER_MARKED_FOR_DEATH_TRIGGERED, aurEff);
}
void Register() override
@@ -1577,7 +1577,7 @@ class spell_hun_focus_fire : public AuraScript
{
uint8 stacks = frenzy->GetStackAmount();
int32 bp = aurEff->GetAmount() * stacks;
- player->CastCustomSpell(SPELL_HUNTER_FOCUS_FIRE_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, pet, true, nullptr, aurEff);
+ player->CastSpell(pet, SPELL_HUNTER_FOCUS_FIRE_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
frenzy->Remove();
}
}
@@ -1607,7 +1607,7 @@ class spell_hun_frenzy_effect : public AuraScript
if (GetStackAmount() == GetSpellInfo()->StackAmount)
if (Unit* owner = GetTarget()->GetOwner())
if (owner->HasSpell(SPELL_HUNTER_FOCUS_FIRE))
- owner->CastSpell(owner, SPELL_HUNTER_FOCUS_FIRE_DUMMY, true, nullptr, aurEff);
+ owner->CastSpell(owner, SPELL_HUNTER_FOCUS_FIRE_DUMMY, aurEff);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1702,7 +1702,7 @@ class spell_hun_killing_streak : public AuraScript
{
if (_firstCrit)
{
- GetTarget()->CastSpell(GetTarget(), KillingStreakTriggerSpells[GetSpellInfo()->GetRank() - 1], true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), KillingStreakTriggerSpells[GetSpellInfo()->GetRank() - 1], aurEff);
_firstCrit = false;
}
else
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index b3ac0309db..80649534b1 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -61,7 +61,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
@@ -97,7 +97,7 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, aurEff);
}
void Register() override
@@ -168,7 +168,7 @@ class spell_item_alchemists_stone : public SpellScriptLoader
}
int32 amount = CalculatePct(spellInfo->Effects[i].CalcValue(caster), 40);
- caster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, spellId, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
}
@@ -232,7 +232,7 @@ class spell_item_anger_capacitor : public SpellScriptLoader
if (player->GetWeaponForAttack(OFF_ATTACK, true) && urand(0, 1))
spellId = SPELL_MANIFEST_ANGER_OFF_HAND;
- caster->CastSpell(target, spellId, true, nullptr, aurEff);
+ caster->CastSpell(target, spellId, aurEff);
}
void Register() override
@@ -350,7 +350,7 @@ class spell_item_aura_of_madness : public SpellScriptLoader
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);
@@ -388,7 +388,7 @@ class spell_item_dementia : public SpellScriptLoader
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
@@ -444,7 +444,7 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader
protEff->GetBase()->RefreshDuration();
}
else
- GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PROTECTION_OF_ANCIENT_KINGS, CastSpellExtraArgs(aurEff).AddSpellBP0(absorb));
}
void Register() override
@@ -521,7 +521,7 @@ class spell_item_deadly_precision_dummy : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_DEADLY_PRECISION);
- GetCaster()->CastCustomSpell(spellInfo->Id, SPELLVALUE_AURA_STACK, spellInfo->StackAmount, GetCaster(), true);
+ GetCaster()->CastSpell(GetCaster(), spellInfo->Id, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, spellInfo->StackAmount));
}
void Register() override
@@ -614,7 +614,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
@@ -706,7 +706,7 @@ class spell_item_defibrillate : public SpellScriptLoader
{
PreventHitDefaultEffect(effIndex);
if (_failSpell)
- GetCaster()->CastSpell(GetCaster(), _failSpell, true, GetCastItem());
+ GetCaster()->CastSpell(GetCaster(), _failSpell, GetCastItem());
}
}
@@ -751,7 +751,7 @@ class spell_item_desperate_defense : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, aurEff);
}
void Register() override
@@ -798,7 +798,7 @@ class spell_item_deviate_fish : public SpellScriptLoader
{
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
@@ -937,7 +937,7 @@ class spell_item_flask_of_the_north : public SpellScriptLoader
break;
}
- caster->CastSpell(caster, possibleSpells[urand(0, (possibleSpells.size() - 1))], true, nullptr);
+ caster->CastSpell(caster, possibleSpells[urand(0, (possibleSpells.size() - 1))], true);
}
void Register() override
@@ -980,7 +980,7 @@ class spell_item_frozen_shadoweave : public SpellScriptLoader
int32 amount = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount());
Unit* caster = eventInfo.GetActor();
- caster->CastCustomSpell(SPELL_SHADOWMEND, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, SPELL_SHADOWMEND, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
void Register() override
@@ -1097,7 +1097,7 @@ class spell_item_healing_touch_refund : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell((Unit*)nullptr, SPELL_HEALING_TOUCH_MANA, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_HEALING_TOUCH_MANA, aurEff);
}
void Register() override
@@ -1175,7 +1175,7 @@ class spell_item_heartpierce : public SpellScriptLoader
return;
}
- caster->CastSpell((Unit*)nullptr, spellId, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, spellId, aurEff);
}
void Register() override
@@ -1267,7 +1267,7 @@ class spell_item_make_a_wish : public SpellScriptLoader
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
@@ -1309,7 +1309,7 @@ class spell_item_mark_of_conquest : public SpellScriptLoader
// in that case, do not cast heal spell
PreventDefaultAction();
// but mana instead
- eventInfo.GetActor()->CastSpell((Unit*)nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, aurEff);
}
}
@@ -1410,7 +1410,7 @@ class spell_item_necrotic_touch : public SpellScriptLoader
return;
int32 bp = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_ITEM_NECROTIC_TOUCH_PROC, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1463,7 +1463,7 @@ class spell_item_net_o_matic : public SpellScriptLoader
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);
}
}
@@ -1520,7 +1520,7 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader
case 2: spellId = SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED2; break;
}
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
void Register() override
@@ -1597,7 +1597,7 @@ class spell_item_persistent_shield : public SpellScriptLoader
if (shield->GetAmount() > bp0)
return;
- caster->CastCustomSpell(SPELL_PERSISTENT_SHIELD_TRIGGERED, SPELLVALUE_BASE_POINT0, bp0, target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PERSISTENT_SHIELD_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp0));
}
void Register() override
@@ -1642,7 +1642,7 @@ class spell_item_pet_healing : public SpellScriptLoader
int32 bp = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount());
Unit* caster = eventInfo.GetActor();
- caster->CastCustomSpell(SPELL_HEALTH_LINK, SPELLVALUE_BASE_POINT0, bp, (Unit*)nullptr, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, SPELL_HEALTH_LINK, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1767,7 +1767,7 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader
// 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
@@ -1960,14 +1960,14 @@ class spell_item_shadowmourne : public SpellScriptLoader
void HandleProc(AuraEffect const* 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();
}
}
@@ -2104,7 +2104,7 @@ class spell_item_six_demon_bag : public SpellScriptLoader
target = caster;
}
- caster->CastSpell(target, spellId, true, GetCastItem());
+ caster->CastSpell(target, spellId, GetCastItem());
}
}
@@ -2144,7 +2144,7 @@ class spell_item_swift_hand_justice_dummy : public SpellScriptLoader
Unit* caster = eventInfo.GetActor();
int32 amount = caster->CountPctFromMaxHealth(aurEff->GetAmount());
- caster->CastCustomSpell(SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff);
+ caster->CastSpell(nullptr, SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
void Register() override
@@ -2181,7 +2181,7 @@ class spell_item_totem_of_flowing_water : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- eventInfo.GetActor()->CastSpell((Unit*)nullptr, SPELL_LESSER_HEALING_WAVE_MANA, true, nullptr, aurEff);
+ eventInfo.GetActor()->CastSpell(nullptr, SPELL_LESSER_HEALING_WAVE_MANA, aurEff);
}
void Register() override
@@ -2263,7 +2263,7 @@ class spell_item_underbelly_elixir : public SpellScriptLoader
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
@@ -2758,7 +2758,7 @@ class spell_item_purify_helboar_meat : public SpellScriptLoader
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
@@ -2907,9 +2907,9 @@ class spell_item_nigh_invulnerability : public SpellScriptLoader
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);
}
}
@@ -2946,7 +2946,7 @@ class spell_item_poultryizer : public SpellScriptLoader
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
@@ -3093,7 +3093,7 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader
GetHitCreature()->DespawnOrUnsummon();
//cast spell Raptor Capture Credit
- caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true, nullptr);
+ caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true);
}
}
@@ -3253,7 +3253,7 @@ class spell_item_nitro_boosts : public SpellScriptLoader
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 4.3.4
- 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
@@ -3292,7 +3292,7 @@ class spell_item_nitro_boosts_backfire : public SpellScriptLoader
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
@@ -3386,7 +3386,7 @@ class spell_item_rocket_boots : public SpellScriptLoader
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()
@@ -3628,10 +3628,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
@@ -3681,16 +3681,16 @@ public:
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;
@@ -3769,10 +3769,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
@@ -3917,7 +3917,7 @@ class spell_item_mind_control_cap : public SpellScriptLoader
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
}
@@ -3968,11 +3968,11 @@ class spell_item_universal_remote : public SpellScriptLoader
{
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());
}
}
@@ -4112,7 +4112,7 @@ public:
}
if (useElixir)
- target->CastSpell(target, chosenElixir, true, GetCastItem());
+ target->CastSpell(target, chosenElixir, GetCastItem());
}
void Register() override
@@ -4162,7 +4162,7 @@ public:
uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs);
- target->CastSpell(target, chosenElixir, true, GetCastItem());
+ target->CastSpell(target, chosenElixir, GetCastItem());
}
void Register() override
@@ -4219,17 +4219,17 @@ public:
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:
@@ -4291,7 +4291,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
@@ -4302,7 +4302,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
@@ -4389,7 +4389,7 @@ public:
stat = spi;
}
- caster->CastSpell(caster, spellTrigger, true, nullptr, aurEff);
+ caster->CastSpell(caster, spellTrigger, aurEff);
}
void Register() override
@@ -4432,7 +4432,7 @@ public:
if (target)
{
int32 bp = CalculatePct(target->GetCreateHealth(),aurEff->GetSpellInfo()->Effects[1].CalcValue());
- caster->CastCustomSpell(target, SPELL_CHARM_WITCH_DOCTOR_PROC, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_CHARM_WITCH_DOCTOR_PROC, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -4479,10 +4479,10 @@ public:
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
@@ -4523,13 +4523,13 @@ class spell_item_egg_shell : public AuraScript
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
- GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Id == SPELL_EGG_SHELL_NORMAL ? SPELL_EGG_SHELL_PERIODIC_NORMAL : SPELL_EGG_SHELL_PERIODIC_HEROIC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Id == SPELL_EGG_SHELL_NORMAL ? SPELL_EGG_SHELL_PERIODIC_NORMAL : SPELL_EGG_SHELL_PERIODIC_HEROIC, aurEff);
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByCancel))
- GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Id == SPELL_EGG_SHELL_NORMAL ? SPELL_EGG_SHELL_PERIODIC_NORMAL : SPELL_EGG_SHELL_PERIODIC_HEROIC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Id == SPELL_EGG_SHELL_NORMAL ? SPELL_EGG_SHELL_PERIODIC_NORMAL : SPELL_EGG_SHELL_PERIODIC_HEROIC, aurEff);
}
void Register() override
@@ -4752,7 +4752,7 @@ class spell_item_blessing_of_khazgoroth : public SpellScript
if (spellId && basePoints)
{
- player->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, basePoints, player, true);
+ player->CastSpell(player, spellId, CastSpellExtraArgs(true).AddSpellBP0(basePoints));
aura->Remove();
}
}
@@ -4796,7 +4796,7 @@ class spell_item_weight_of_a_feather : public AuraScript
basePoints += effect->GetAmount();
basePoints = std::min(basePoints, aurEff->GetAmount());
- target->CastCustomSpell(SPELL_WEIGHT_OF_A_FEATHER, SPELLVALUE_BASE_POINT0, basePoints, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_WEIGHT_OF_A_FEATHER, CastSpellExtraArgs(aurEff).AddSpellBP0(basePoints));
}
void Register() override
@@ -4918,7 +4918,7 @@ class spell_item_variable_pulse_lightning_capacitor : public AuraScript
if (Item* castItem = target->GetItemByGuid(itemGUID))
{
if (!chargeEffect || roll_chance_i(60))
- target->CastSpell(target, SPELL_ELECTRICAL_CHARGE, true, castItem, aurEff);
+ target->CastSpell(target, SPELL_ELECTRICAL_CHARGE, CastSpellExtraArgs(castItem).SetTriggeringAura(aurEff));
else
{
int32 bp = 0;
@@ -4929,7 +4929,7 @@ class spell_item_variable_pulse_lightning_capacitor : public AuraScript
bp *= chargeEffect->GetBase()->GetStackAmount();
chargeEffect->GetBase()->Remove();
- target->CastCustomSpell(SPELL_LIGHTNING_BOLT, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, castItem, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_LIGHTNING_BOLT, CastSpellExtraArgs(castItem).SetTriggeringAura(aurEff).AddSpellBP0(bp));
}
}
}
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 563e659958..5cf174f25a 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -178,7 +178,7 @@ class spell_mage_arcane_potency : public AuraScript
if (!spellId)
return;
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
@@ -223,7 +223,7 @@ class spell_mage_blast_wave : public SpellScriptLoader
return;
loc->GetPosition(x, y, z);
- GetCaster()->CastSpell(x, y, z, SPELL_MAGE_FLAMESTRIKE, true);
+ GetCaster()->CastSpell({ x, y, z }, SPELL_MAGE_FLAMESTRIKE, true);
}
}
@@ -258,7 +258,7 @@ class spell_mage_blazing_speed : public SpellScriptLoader
void OnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_BLAZING_SPEED, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_BLAZING_SPEED, aurEff);
}
void Register() override
@@ -508,7 +508,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader
{
int32 bp = dmgInfo.GetDamage();
dmgInfo.AbsorbDamage(bp);
- target->CastCustomSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
absorbAmount = 0;
PreventDefaultAction();
}
@@ -536,7 +536,7 @@ class spell_mage_focus_magic : public AuraScript
PreventDefaultAction();
if (Unit* caster = GetCaster())
if (caster->IsAlive())
- caster->CastSpell(caster, GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, true, nullptr, aurEff);
+ caster->CastSpell(caster, GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, aurEff);
}
void Register() override
@@ -738,7 +738,7 @@ class spell_mage_living_bomb : public AuraScript
return;
if (Unit* caster = GetCaster())
- caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), aurEff);
}
void Register() override
@@ -830,7 +830,7 @@ class spell_mage_ignite : public AuraScript
if (!ignite->GetTickNumber())
bp += ignite->GetAmount();
- target->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_IGNITE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -864,7 +864,7 @@ class spell_mage_mage_ward : public SpellScriptLoader
if (AuraEffect const* aurEff = GetTarget()->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_GENERIC, ICON_MAGE_INCANTER_S_ABSORPTION, EFFECT_0))
{
int32 bp = CalculatePct(absorbAmount, aurEff->GetAmount());
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, nullptr, nullptr, true);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -915,7 +915,7 @@ class spell_mage_mana_shield : public SpellScriptLoader
if (AuraEffect const* aurEff = GetTarget()->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_GENERIC, ICON_MAGE_INCANTER_S_ABSORPTION, EFFECT_0))
{
int32 bp = CalculatePct(absorbAmount, aurEff->GetAmount());
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, nullptr, nullptr, true);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
@@ -962,7 +962,7 @@ class spell_mage_master_of_elements : public AuraScript
mana = CalculatePct(mana, aurEff->GetAmount());
if (mana)
- GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellBP0(mana));
}
void Register() override
@@ -992,7 +992,7 @@ class spell_mage_nether_vortex : public AuraScript
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_SLOW, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_SLOW, aurEff);
}
void Register() override
@@ -1025,8 +1025,8 @@ class spell_mage_permafrost : public AuraScript
Unit* target = GetTarget();
int32 heal = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
- target->CastCustomSpell(SPELL_MAGE_PERMAFROST_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, aurEff);
- target->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_PERMAFROST_REDUCE_HEAL, true, nullptr, aurEff);
+ target->CastSpell(nullptr, SPELL_MAGE_PERMAFROST_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_PERMAFROST_REDUCE_HEAL, aurEff);
}
void Register() override
@@ -1075,8 +1075,8 @@ class spell_mage_polymorph : public SpellScriptLoader
if (_caster->HasAura(SPELL_MAGE_IMPROVED_POLYMORPH_MARKER))
return;
- GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1, improvedPolymorph->GetSpellInfo()->GetRank()), true, nullptr, aurEff);
- _caster->CastSpell(_caster, SPELL_MAGE_IMPROVED_POLYMORPH_MARKER, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1, improvedPolymorph->GetSpellInfo()->GetRank()), aurEff);
+ _caster->CastSpell(_caster, SPELL_MAGE_IMPROVED_POLYMORPH_MARKER, aurEff);
}
}
@@ -1167,7 +1167,7 @@ class spell_mage_replenish_mana : public SpellScriptLoader
if (AuraEffect* aurEff = GetCaster()->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_MAGE, ICON_MAGE_IMPROVED_MANA_GEM, EFFECT_0))
{
int32 bp = CalculatePct(GetCaster()->GetMaxPower(POWER_MANA), aurEff->GetAmount());
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_MAGE_IMPROVED_MANA_GEM_TRIGGERED, &bp, &bp, nullptr, true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_IMPROVED_MANA_GEM_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp).AddSpellMod(SPELLVALUE_BASE_POINT1, bp));
}
}
@@ -1212,7 +1212,7 @@ class spell_mage_ring_of_frost : public SpellScriptLoader
{
if (ringOfFrost)
if (GetMaxDuration() - (int32)ringOfFrost->GetTimer() >= sSpellMgr->GetSpellInfo(SPELL_MAGE_RING_OF_FROST_DUMMY)->GetDuration())
- GetTarget()->CastSpell(ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ(), SPELL_MAGE_RING_OF_FROST_FREEZE, true);
+ GetTarget()->CastSpell({ ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ() }, SPELL_MAGE_RING_OF_FROST_FREEZE, true);
}
void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1394,7 +1394,7 @@ class spell_mage_water_elemental_freeze : public SpellScriptLoader
if (AuraEffect* aurEff = owner->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_MAGE, ICON_MAGE_IMPROVED_FREEZE, EFFECT_0))
{
if (roll_chance_i(aurEff->GetAmount()))
- owner->CastCustomSpell(SPELL_MAGE_FINGERS_OF_FROST, SPELLVALUE_AURA_STACK, 2, owner, true);
+ owner->CastSpell(owner, SPELL_MAGE_FINGERS_OF_FROST, CastSpellExtraArgs(true).AddSpellMod(SPELLVALUE_AURA_STACK, 2));
}
}
@@ -1510,7 +1510,7 @@ public:
void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(caster, SPELL_MAGE_EARLY_FROST_VISUAL , true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_MAGE_EARLY_FROST_VISUAL, aurEff);
}
void Register() override
@@ -1717,7 +1717,7 @@ class spell_mage_hot_streak : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, aurEff);
}
void Register() override
@@ -1788,7 +1788,7 @@ class spell_mage_improved_hot_streak : public SpellScriptLoader
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, aurEff);
}
void Register() override
@@ -1963,7 +1963,7 @@ class spell_mage_pyromaniac : public AuraScript
if (_dotTargetGuids.size() >= 3)
{
- target->CastCustomSpell(SPELL_MAGE_PYROMANIAC_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_MAGE_PYROMANIAC_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
_buffActive = true;
}
}
@@ -2136,7 +2136,7 @@ class spell_mage_combustion : public SpellScript
}
if (totalAmount)
- caster->CastCustomSpell(SPELL_MAGE_COMBUSTION_DAMAGE, SPELLVALUE_BASE_POINT0, totalAmount, target, true);
+ caster->CastSpell(target, SPELL_MAGE_COMBUSTION_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(totalAmount));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index 91f1daddcf..14fbb4fc03 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -141,7 +141,7 @@ class spell_pal_ardent_defender : public AuraScript
if (dmgInfo.GetDamage() >= target->GetHealth())
{
int32 health = target->CountPctFromMaxHealth(15);
- target->CastCustomSpell(SPELL_PALADIN_ARDENT_DEFENDER_HEAL, SPELLVALUE_BASE_POINT0, health, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PALADIN_ARDENT_DEFENDER_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(health));
Remove();
}
}
@@ -235,7 +235,7 @@ class spell_pal_avenging_wrath : public AuraScript
{
Unit* target = GetTarget();
if (target->GetAuraOfRankedSpell(SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1))
- target->CastSpell(target, SPELL_PALADIN_SANCTIFIED_WRATH, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PALADIN_SANCTIFIED_WRATH, aurEff);
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -336,7 +336,7 @@ class spell_pal_consecration : public SpellScriptLoader
return;
if (Unit* caster = GetCaster())
- caster->CastSpell(castPos.GetPositionX(), castPos.GetPositionY(), castPos.GetPositionZ(), SPELL_PALADIN_CONSECRATION_TRIGGERED, true, nullptr, aurEff);
+ caster->CastSpell({ castPos.GetPositionX(), castPos.GetPositionY(), castPos.GetPositionZ() }, SPELL_PALADIN_CONSECRATION_TRIGGERED, aurEff);
}
private:
@@ -421,7 +421,7 @@ class spell_pal_divine_storm : public SpellScript
if (Unit* caster = GetCaster())
{
int32 heal = CalculatePct(GetHitDamage(), GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster()));
- caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, heal, caster, true);
+ caster->CastSpell(caster, SPELL_PALADIN_DIVINE_STORM_DUMMY, CastSpellExtraArgs(true).AddSpellBP0(heal));
}
}
@@ -466,7 +466,7 @@ class spell_pal_divine_storm_dummy : public SpellScript
return;
int32 heal = GetEffectValue() / _targetCount;
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, &heal, nullptr, nullptr, true);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, CastSpellExtraArgs(true).AddSpellBP0(heal));
}
void Register() override
@@ -530,7 +530,7 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader
{
PreventDefaultAction();
int32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
void Register() override
@@ -769,7 +769,7 @@ class spell_pal_item_healing_discount : public SpellScriptLoader
void HandleProc(AuraEffect const* 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
@@ -836,7 +836,7 @@ class spell_pal_judgement : public SpellScript
else
bp = 1 + int32(1 + ap * 0.16f + 0.25f * holy);
- caster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr);
+ caster->CastSpell(target, spellId, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
void Register() override
@@ -882,7 +882,7 @@ class spell_pal_lay_on_hands : public SpellScript
// Glyph of Divinity
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PALADIN, PALADIN_ICON_ID_GLYPH_OF_DIVINITY, EFFECT_0))
- caster->CastSpell(caster, SPELL_PALADIN_GLYPH_OF_DIVINITY, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_PALADIN_GLYPH_OF_DIVINITY, aurEff);
}
void Register() override
@@ -1078,9 +1078,9 @@ class spell_pal_seal_of_righteousness : public AuraScript
int32 bp = int32((ap * 0.011f + 0.022f * holy) * target->GetAttackTime(BASE_ATTACK) / 1000);
if (target->GetDummyAuraEffect(SPELLFAMILY_PALADIN, PALADIN_ICON_ID_SEALS_OF_COMMAND, EFFECT_1))
- target->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS_DAMAGE_AOE, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS_DAMAGE_AOE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
else
- target->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS_DAMAGE, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1115,7 +1115,7 @@ class spell_pal_illuminated_healing : public AuraScript
aura->RefreshDuration();
}
else
- caster->CastCustomSpell(SPELL_PALADIN_ILLUMINATED_HEALING, SPELLVALUE_BASE_POINT0, shieldAmount, target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PALADIN_ILLUMINATED_HEALING, CastSpellExtraArgs(aurEff).AddSpellBP0(shieldAmount));
}
}
}
@@ -1161,7 +1161,7 @@ class spell_pal_hand_of_light : public SpellScriptLoader
if (Unit* target = eventInfo.GetProcTarget())
{
uint32 damageAmount = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount());
- caster->CastCustomSpell(SPELL_PALADIN_HAND_OF_LIGHT, SPELLVALUE_BASE_POINT0, damageAmount, target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PALADIN_HAND_OF_LIGHT, CastSpellExtraArgs(aurEff).AddSpellBP0(damageAmount));
}
}
}
@@ -1207,7 +1207,7 @@ class spell_pal_judgements : public AuraScript
if (uint32 mana = actor->GetCreateMana())
bp = CalculatePct(CalculatePct(mana, spell->Effects[EFFECT_0].BasePoints), spell->GetMaxTicks());
- actor->CastCustomSpell(actor, spellId, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ actor->CastSpell(actor, spellId, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -1285,11 +1285,11 @@ class spell_pal_seal_of_truth : public AuraScript
if (Aura* aura = target->GetAura(SPELL_PALADIN_CENSURE, caster->GetGUID()))
if (aura->GetStackAmount() == aura->GetSpellInfo()->StackAmount)
- caster->CastSpell(target, SPELL_PALADIN_SEAL_OF_TRUTH_DAMAGE, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PALADIN_SEAL_OF_TRUTH_DAMAGE, aurEff);
float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.0270f;
float holy = caster->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY) * 0.01f;
- caster->CastCustomSpell(SPELL_PALADIN_CENSURE, SPELLVALUE_BASE_POINT0, int32(ap + holy), target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PALADIN_CENSURE, CastSpellExtraArgs(aurEff).AddSpellBP0(int32(ap + holy)));
}
void Register() override
@@ -1319,7 +1319,7 @@ class spell_pal_long_arm_of_the_law : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_LONG_ARM_OF_THE_LAW, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_LONG_ARM_OF_THE_LAW, aurEff);
}
void Register() override
@@ -1340,7 +1340,7 @@ class spell_pal_communion : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_GENERIC_REPLENISHMENT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_GENERIC_REPLENISHMENT, aurEff);
}
void Register() override
@@ -1367,7 +1367,7 @@ class spell_pal_sacred_shield : public AuraScript
Unit* target = GetTarget();
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell);
int32 absorb = (spell->Effects[EFFECT_0].CalcValue() * 2) + target->GetTotalAttackPowerValue(BASE_ATTACK) * 2.8f;
- target->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, absorb, target, true, nullptr, aurEff);
+ target->CastSpell(target, spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(absorb));
}
void Register() override
@@ -1429,7 +1429,7 @@ class spell_pal_word_of_glory: public SpellScript
if (roll_chance_i(aurEff->GetAmount()))
{
uint8 powerCost = 1 + GetSpell()->GetPowerCost();
- caster->CastCustomSpell(SPELL_PALADIN_ETERNAL_GLORY_PROC, SPELLVALUE_BASE_POINT0, powerCost, caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_PALADIN_ETERNAL_GLORY_PROC, CastSpellExtraArgs(aurEff).AddSpellBP0(powerCost));
}
}
}
@@ -1498,7 +1498,7 @@ class spell_pal_selfless_healer : public AuraScript
Unit* target = GetTarget();
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell);
int32 bp = aurEff->GetAmount() * (1 + target->GetPower(POWER_HOLY_POWER));
- target->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ target->CastSpell(target, spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1531,7 +1531,7 @@ class spell_pal_divine_purpose : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_DIVINE_PURPOSE_PROC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_DIVINE_PURPOSE_PROC, aurEff);
}
void Register() override
@@ -1657,10 +1657,8 @@ class spell_pal_ancient_healer : public AuraScript
for (Unit* guardian : GetTarget()->m_Controlled)
- {
if (guardian->GetUInt32Value(UNIT_CREATED_BY_SPELL) == SPELL_PALADIN_GUARDIAN_OF_ANCIENT_KINGS_HOLY)
- guardian->CastCustomSpell(heal->GetTarget(), SPELL_PALADIN_LIGHT_OF_THE_ANCIENT_KINGS, &bp0, &bp1, nullptr, false, nullptr, aurEff);
- }
+ guardian->CastSpell(heal->GetTarget(), SPELL_PALADIN_LIGHT_OF_THE_ANCIENT_KINGS, CastSpellExtraArgs(aurEff).AddSpellBP0(bp0).AddSpellMod(SPELLVALUE_BASE_POINT1, bp1));
_procCount++;
}
@@ -1694,10 +1692,10 @@ class spell_pal_ancient_crusader : public AuraScript
{
if (TempSummon* summon = GetTarget()->ToTempSummon())
if (Unit* summoner = summon->GetSummoner())
- summoner->CastSpell(summoner, SPELL_PALADIN_ANCIENT_POWER, true, nullptr, aurEff);
+ summoner->CastSpell(summoner, SPELL_PALADIN_ANCIENT_POWER, aurEff);
}
else
- GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ANCIENT_POWER, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ANCIENT_POWER, aurEff);
}
void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
@@ -1708,7 +1706,7 @@ class spell_pal_ancient_crusader : public AuraScript
Unit* target = GetTarget();
if (Aura* aura = target->GetAura(SPELL_PALADIN_ANCIENT_POWER))
{
- target->CastSpell(target, SPELL_PALADIN_ANCIENT_FURY, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PALADIN_ANCIENT_FURY, aurEff);
aura->Remove();
}
}
@@ -1853,7 +1851,7 @@ class spell_pal_holy_radiance_AuraScript : public AuraScript
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(GetTarget(), SPELL_PALADIN_HOLY_RADIANCE_TRIGGERED, true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_PALADIN_HOLY_RADIANCE_TRIGGERED, aurEff);
}
private:
@@ -1898,7 +1896,7 @@ class spell_pal_lights_beacon : public AuraScript
if (Unit* caster = GetCaster())
if (Aura* aura = caster->GetAura(SPELL_PALADIN_BEACON_OF_LIGHT))
if (Unit* originalCaster = aura->GetCaster())
- originalCaster->CastCustomSpell(SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
+ originalCaster->CastSpell(caster, SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 0cc9bb558a..9ed91954ab 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -173,7 +173,7 @@ class spell_pri_body_and_soul : public AuraScript
if (!(eventInfo.GetDamageInfo()->GetSpellInfo()->SpellFamilyFlags[0] & 0x1 || eventInfo.GetDamageInfo()->GetSpellInfo()->SpellFamilyFlags[2] & 0x80000))
return;
- GetTarget()->CastCustomSpell(SPELL_PRIEST_BODY_AND_SOUL_SPEED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_BODY_AND_SOUL_SPEED, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void HandleEffectDispelProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -184,7 +184,7 @@ class spell_pri_body_and_soul : public AuraScript
return;
if (roll_chance_i(aurEff->GetAmount()))
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_BODY_AND_SOUL_DISPEL, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_BODY_AND_SOUL_DISPEL, aurEff);
}
void Register() override
@@ -252,7 +252,7 @@ class spell_pri_dispel_magic : public SpellScript
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC, EFFECT_0))
{
int32 heal = GetHitUnit()->CountPctFromMaxHealth(aurEff->GetAmount());
- GetCaster()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, SPELLVALUE_BASE_POINT0, heal, GetHitUnit());
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, CastSpellExtraArgs().AddSpellBP0(heal));
}
}
else
@@ -294,7 +294,7 @@ class spell_pri_divine_aegis : public AuraScript
absorb = std::min(absorb, int32(CalculatePct(eventInfo.GetProcTarget()->GetMaxHealth(), 40)));
- GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_DIVINE_AEGIS, CastSpellExtraArgs(aurEff).AddSpellBP0(SPELLVALUE_BASE_POINT0));
}
void Register() override
@@ -340,7 +340,7 @@ class spell_pri_glyph_of_prayer_of_healing : public AuraScript
SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL);
int32 heal = int32(CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks());
- GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -382,7 +382,7 @@ class spell_pri_item_greater_heal_refund : public AuraScript
void OnProc(AuraEffect const* 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
@@ -421,7 +421,7 @@ class spell_pri_guardian_spirit : public AuraScript
if (AuraEffect* aurEff = GetEffect(EFFECT_0))
aurEff->SetAmount(0);
- target->CastCustomSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, &healAmount, nullptr, nullptr, true);
+ target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, CastSpellExtraArgs(true).AddSpellBP0(healAmount));
absorbAmount = dmgInfo.GetDamage();
Remove();
}
@@ -474,7 +474,7 @@ class spell_pri_leap_of_faith_effect_trigger : public SpellScript
SpellCastTargets targets;
targets.SetDst(destPos);
targets.SetUnitTarget(GetCaster());
- GetHitUnit()->CastSpell(targets, sSpellMgr->GetSpellInfo(GetEffectValue()), nullptr);
+ GetHitUnit()->CastSpell(targets, GetEffectValue());
}
void Register() override
@@ -519,7 +519,7 @@ class spell_pri_mana_leech : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, nullptr, aurEff);
+ GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, aurEff);
}
void Register() override
@@ -719,7 +719,7 @@ class spell_pri_power_word_shield_AuraScript : public AuraScript
if (AuraEffect const* glyphEff = caster->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_POWER_WORD_SHIELD, EFFECT_0))
{
int32 bp = CalculatePct(amount, glyphEff->GetAmount());
- caster->CastCustomSpell(target, SPELL_PRIEST_GLYPH_OF_POWER_WORD_SHIELD_HEAL, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PRIEST_GLYPH_OF_POWER_WORD_SHIELD_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
}
@@ -734,7 +734,7 @@ class spell_pri_power_word_shield_AuraScript : public AuraScript
if (AuraEffect const* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0))
{
int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount());
- target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ target->CastSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -790,7 +790,7 @@ class spell_pri_renew : public AuraScript
uint32 heal = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), aurEff->GetAmount(), DOT, aurEff->GetEffIndex());
heal = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), heal, DOT);
int32 basepoints0 = CalculatePct(int32(heal) * aurEff->GetTotalTicks(), empoweredRenewAurEff->GetAmount());
- caster->CastCustomSpell(GetTarget(), SPELL_PRIEST_DIVINE_TOUCH, &basepoints0, nullptr, nullptr, true, nullptr, aurEff);
+ caster->CastSpell(GetTarget(), SPELL_PRIEST_DIVINE_TOUCH, CastSpellExtraArgs(aurEff).AddSpellBP0(basepoints0));
}
}
}
@@ -840,7 +840,7 @@ class spell_pri_shadow_word_death : public SpellScript
if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1))
AddPct(damage, aurEff->GetAmount());
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, &damage, nullptr, nullptr, true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, CastSpellExtraArgs(true).AddSpellBP0(damage));
}
void Register() override
@@ -900,7 +900,7 @@ class spell_pri_vampiric_embrace : public AuraScript
int32 self = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
int32 team = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount() / 2));
- GetTarget()->CastCustomSpell((Unit*)nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, &team, &self, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(team).AddSpellMod(SPELLVALUE_BASE_POINT1, self));
}
void Register() override
@@ -944,7 +944,7 @@ class spell_pri_vampiric_touch : public AuraScript
{
int32 damage = aurEff->GetAmount() * 8;
// backfire damage
- caster->CastCustomSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
@@ -955,7 +955,7 @@ class spell_pri_vampiric_touch : public AuraScript
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
- eventInfo.GetProcTarget()->CastSpell((Unit*)nullptr, SPELL_GEN_REPLENISHMENT, true, nullptr, aurEff);
+ eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, aurEff);
}
void Register() override
@@ -993,7 +993,7 @@ class spell_pri_echo_of_light : public AuraScript
uint32 healAmount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
uint8 tickNumber = sSpellMgr->GetSpellInfo(SPELL_PRIEST_ECHO_OF_LIGHT)->GetMaxTicks();
if (healAmount && tickNumber)
- caster->CastCustomSpell(SPELL_PRIEST_ECHO_OF_LIGHT, SPELLVALUE_BASE_POINT0, healAmount / tickNumber, target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PRIEST_ECHO_OF_LIGHT, CastSpellExtraArgs(aurEff).AddSpellBP0(int32(healAmount / tickNumber)));
}
}
}
@@ -1035,7 +1035,7 @@ class spell_pri_shadow_orbs : public AuraScript
{
PreventDefaultAction();
int32 basePoints = 10;
- GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_BASE_POINT0, basePoints, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, CastSpellExtraArgs(aurEff).AddSpellBP0(basePoints));
}
void Register() override
@@ -1057,7 +1057,7 @@ class spell_pri_shadow_orb_power : public AuraScript
{
PreventDefaultAction();
int32 amount = 10 + aurEff->GetAmount();
- GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, CastSpellExtraArgs(aurEff).AddSpellBP0(amount));
}
void Register() override
@@ -1095,7 +1095,7 @@ class spell_pri_shadow_orb : public AuraScript
Unit* target = GetTarget();
int32 bp = aurEff->GetAmount();
- target->CastCustomSpell(target, SPELL_PRIEST_EMPOWERED_SHADOW, &bp, &bp, 0, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_EMPOWERED_SHADOW, CastSpellExtraArgs(aurEff).AddSpellBP0(bp).AddSpellMod(SPELLVALUE_BASE_POINT1, bp));
target->RemoveAurasDueToSpell(SPELL_PRIEST_SHADOW_ORB_MARKER);
Remove();
}
@@ -1149,7 +1149,7 @@ class spell_pri_chakra : public AuraScript
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_CHAKRA_SERENITY);
int32 bp = caster->HasAura(SPELL_PRIEST_REVELATIONS) ? spell->Effects[EFFECT_2].BasePoints : SPELL_PRIEST_HOLY_WORD_CHASTISE;
- caster->CastCustomSpell(SPELL_PRIEST_CHAKRA_SERENITY, SPELLVALUE_BASE_POINT2, bp, caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_SERENITY, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT2, bp));
}
// Chakra: Sanctuary
@@ -1158,13 +1158,13 @@ class spell_pri_chakra : public AuraScript
SpellInfo const* spell = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_CHAKRA_SANCTUARY);
int32 bp = caster->HasAura(SPELL_PRIEST_REVELATIONS) ? spell->Effects[EFFECT_2].BasePoints : SPELL_PRIEST_HOLY_WORD_CHASTISE;
- caster->CastCustomSpell(SPELL_PRIEST_CHAKRA_SANCTUARY, SPELLVALUE_BASE_POINT2, bp, caster, true, nullptr, aurEff);
- caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_SANCTUARY, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT2, bp));
+ caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED, aurEff);
}
// Chakra: Chastise
if (spell->SpellFamilyFlags.HasFlag(0x00000080) || spell->SpellFamilyFlags.HasFlag(0, 0x00010000))
- caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_CHASTISE, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_CHASTISE, aurEff);
// T11 Bonus
if (caster->GetAuraEffect(SPELL_PRIEST_ITEM_T11_HEALER_4P_BONUS, EFFECT_0))
@@ -1263,7 +1263,7 @@ class spell_pri_holy_word_sanctuary : public AuraScript
void HandleDummyTick(AuraEffect const* aurEff)
{
if (DynamicObject* dyn = GetTarget()->GetDynObject(aurEff->GetId()))
- GetTarget()->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_PRIEST_HOLY_WORD_SANCTUARY, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_DISALLOW_PROC_EVENTS), nullptr, aurEff);
+ GetTarget()->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_PRIEST_HOLY_WORD_SANCTUARY, CastSpellExtraArgs(TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_DISALLOW_PROC_EVENTS)).SetTriggeringAura(aurEff));
}
void Register() override
@@ -1327,12 +1327,12 @@ class spell_pri_evangelism : public AuraScript
spellId = spellId == SPELL_PRIEST_EVANGELISM_TRIGGERED_1 ?
SPELL_PRIEST_DARK_EVANGELISM_TRIGGERED_1 : SPELL_PRIEST_DARK_EVANGELISM_TRIGGERED_2;
- target->CastSpell(target, spellId, true, nullptr, aurEff);
- target->CastSpell(target, SPELL_PRIEST_EVANGELISM_ARCHANGEL_DUMMY, true, nullptr, aurEff);
+ target->CastSpell(target, spellId, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_EVANGELISM_ARCHANGEL_DUMMY, aurEff);
if (Aura* aura = target->GetAura(spellId))
if (aura->GetStackAmount() == aura->GetSpellInfo()->StackAmount)
- target->CastSpell(target, SPELL_PRIEST_ARCHANGEL_DUMMY, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_ARCHANGEL_DUMMY, aurEff);
}
void Register() override
@@ -1410,8 +1410,8 @@ class spell_pri_archangel : public SpellScript
if (spellId == SPELL_PRIEST_EVANGELISM_TRIGGERED_1 || spellId == SPELL_PRIEST_EVANGELISM_TRIGGERED_2)
{
int32 bp = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_ARCHANGEL_TRIGGERED)->Effects[EFFECT_0].BasePoints * stacks;
- caster->CastCustomSpell(SPELL_PRIEST_ARCHANGEL_TRIGGERED, SPELLVALUE_BASE_POINT0, bp, caster, true);
- caster->CastCustomSpell(SPELL_PRIEST_ARCHANGEL_ENERGIZE, SPELLVALUE_BASE_POINT0, stacks, caster, true);
+ caster->CastSpell(caster, SPELL_PRIEST_ARCHANGEL_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp));
+ caster->CastSpell(caster, SPELL_PRIEST_ARCHANGEL_ENERGIZE, CastSpellExtraArgs(true).AddSpellBP0(stacks));
}
else
{
@@ -1419,8 +1419,8 @@ class spell_pri_archangel : public SpellScript
int32 bp0 = spell->Effects[EFFECT_0].BasePoints * stacks;
int32 bp1 = spell->Effects[EFFECT_1].BasePoints * stacks;
int32 energize = spell->Effects[EFFECT_2].BasePoints * stacks;
- caster->CastCustomSpell(caster, SPELL_PRIEST_DARK_ARCHANGEL_TRIGGERED, &bp0, &bp1, nullptr, true);
- caster->CastCustomSpell(SPELL_PRIEST_ARCHANGEL_ENERGIZE, SPELLVALUE_BASE_POINT0, energize, caster, true);
+ caster->CastSpell(caster, SPELL_PRIEST_DARK_ARCHANGEL_TRIGGERED, CastSpellExtraArgs(true).AddSpellBP0(bp0).AddSpellMod(SPELLVALUE_BASE_POINT1, bp1));
+ caster->CastSpell(caster, SPELL_PRIEST_ARCHANGEL_ENERGIZE, CastSpellExtraArgs(true).AddSpellBP0(energize));
}
caster->RemoveAurasDueToSpell(spellId);
@@ -1486,15 +1486,15 @@ class spell_pri_strength_of_soul : public AuraScript
if (eventInfo.GetSpellInfo()->Id == SPELL_PRIEST_INNER_FOCUS)
{
if (aurEff->GetId() == SPELL_PRIEST_STRENGTH_OF_SOUL_R1)
- target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R1, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R1, aurEff);
else
- target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R2, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R2, aurEff);
}
else
{
uint32 spellId = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell;
int32 bp = aurEff->GetAmount() * IN_MILLISECONDS;
- target->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), spellId, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -1547,14 +1547,9 @@ class spell_pri_atonement : public AuraScript
int32 bp = CalculatePct(damage->GetDamage(), aurEff->GetAmount());
if (target->GetCombatReach() >= 15.0f)
- {
- CustomSpellValues values;
- values.AddSpellMod(SPELLVALUE_BASE_POINT0, bp);
- values.AddSpellMod(SPELLVALUE_RADIUS_MOD, int32(target->GetCombatReach() + 15.0f) * 100);
- caster->CastCustomSpell(SPELL_PRIEST_ATONEMENT_TRIGGERED_LARGE, values, target, TRIGGERED_FULL_MASK, nullptr, aurEff);
- }
+ caster->CastSpell(target, SPELL_PRIEST_ATONEMENT_TRIGGERED_LARGE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp).AddSpellMod(SPELLVALUE_RADIUS_MOD, int32(target->GetCombatReach() + 15.0f) * 100));
else
- caster->CastCustomSpell(SPELL_PRIEST_ATONEMENT_TRIGGERED_DEFAULT, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_PRIEST_ATONEMENT_TRIGGERED_DEFAULT, CastSpellExtraArgs(aurEff).AddSpellBP0(SPELLVALUE_BASE_POINT0));
}
void Register() override
@@ -1603,7 +1598,7 @@ class spell_pri_spirit_of_redemption : public AuraScript
if (damage >= target->GetHealth() && target->GetAuraEffectsByType(SPELL_AURA_SPIRIT_OF_REDEMPTION).empty())
{
absorbAmount = damage;
- target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION_TRIGGERED, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION_TRIGGERED, aurEff);
}
}
@@ -1649,7 +1644,7 @@ class spell_pri_mind_blast : public SpellScript
if (AuraEffect* effect = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_PRIEST, PRIEST_ICON_ID_IMPROVED_MIND_BLAST, EFFECT_0))
if (roll_chance_i(effect->GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster)))
- caster->CastSpell(GetHitUnit(), SPELL_PRIEST_MIND_TRAUMA, true, nullptr, effect);
+ caster->CastSpell(GetHitUnit(), SPELL_PRIEST_MIND_TRAUMA, effect);
}
void Register() override
@@ -1734,7 +1729,7 @@ class spell_pri_harnessed_shadows : public AuraScript
if (AuraEffect const* effect = target->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_PRIEST, 0, 0, 0x00100000))
basePoints += effect->GetAmount();
- GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, SPELLVALUE_BASE_POINT0, basePoints, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, CastSpellExtraArgs(aurEff).AddSpellBP0(basePoints));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 5d39c4c706..d07041de57 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -152,7 +152,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
@@ -310,7 +310,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
@@ -481,7 +481,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();
}
@@ -587,7 +587,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
@@ -619,7 +619,7 @@ class spell_q12683_take_sputum_sample : public SpellScriptLoader
if (caster->HasAuraEffect(reqAuraId, 0))
{
uint32 spellId = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
- caster->CastSpell(caster, spellId, true, nullptr);
+ caster->CastSpell(caster, spellId, true);
}
}
@@ -725,7 +725,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();
}
@@ -1856,7 +1856,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->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ() }, GetEffectValue(), true);
}
void Register() override
@@ -2221,7 +2221,7 @@ class spell_q12619_emblazon_runeblade : public SpellScriptLoader
{
PreventDefaultAction();
if (Unit* caster = GetCaster())
- caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff);
+ caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, aurEff);
}
void Register() override
@@ -2284,7 +2284,7 @@ class spell_q12919_gymers_grab : public SpellScriptLoader
int8 seatId = 2;
if (!GetHitCreature())
return;
- GetHitCreature()->CastCustomSpell(SPELL_RIDE_GYMER, SPELLVALUE_BASE_POINT0, seatId, GetCaster(), true);
+ GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_GYMER, CastSpellExtraArgs(true).AddSpellBP0(seatId));
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 ac61277ba8..1a0cff05b9 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -104,7 +104,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader
if (DamageInfo* damageInfo = eventInfo.GetDamageInfo())
if (Unit* procTarget = damageInfo->GetVictim())
if (Unit* target = GetTarget()->SelectNearbyTarget(procTarget, GetTarget()->GetFloatValue(UNIT_FIELD_COMBATREACH)))
- GetTarget()->CastCustomSpell(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, SPELLVALUE_BASE_POINT0, damageInfo->GetDamage(), target, true, nullptr, aurEff);
+ GetTarget()->CastSpell(target, SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, CastSpellExtraArgs(aurEff).AddSpellBP0(damageInfo->GetDamage()));
}
void Register() override
@@ -197,7 +197,7 @@ class spell_rog_crippling_poison : public SpellScriptLoader
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_CRIPPLING_POISON, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_CRIPPLING_POISON, aurEff);
}
void Register() override
@@ -310,9 +310,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);
}
}
}
@@ -614,7 +614,7 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader
if (!target->HasAura(SPELL_ROGUE_PREY_ON_THE_WEAK))
{
int32 bp = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
- target->CastCustomSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, &bp, nullptr, nullptr, true);
+ target->CastSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
}
else
@@ -858,7 +858,7 @@ class spell_rog_stealth : public SpellScriptLoader
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE, EFFECT_0))
{
int32 basepoints0 = aurEff->GetAmount();
- target->CastCustomSpell(target, SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, &basepoints0, nullptr, nullptr, true);
+ target->CastSpell(target, SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT, CastSpellExtraArgs(true).AddSpellBP0(basepoints0));
}
// Overkill
@@ -987,7 +987,7 @@ class spell_rog_honor_among_thieves : public AuraScript
if (Player* player = caster->ToPlayer())
if (Unit* target = ObjectAccessor::GetUnit(*player, player->GetTarget()))
- caster->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_TRIGGERED, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_TRIGGERED, aurEff);
}
void Register() override
@@ -1028,7 +1028,7 @@ class spell_rog_main_gauche : public AuraScript
Unit* target = eventInfo.GetProcTarget();
Item* item = ASSERT_NOTNULL(caster->GetWeaponForAttack(BASE_ATTACK));
- caster->CastSpell(target, SPELL_ROGUE_MAIN_GAUCHE, true, item, aurEff);
+ caster->CastSpell(target, SPELL_ROGUE_MAIN_GAUCHE, CastSpellExtraArgs(item).SetTriggeringAura(aurEff));
}
void Register() override
@@ -1057,7 +1057,7 @@ class spell_rog_glyph_of_hemorrhage : public AuraScript
if (uint8 ticks = spell->GetMaxTicks())
{
bp /= ticks;
- GetTarget()->CastCustomSpell(damage->GetVictim(), SPELL_ROGUE_GLYPH_HEMORRHAGE_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(damage->GetVictim(), SPELL_ROGUE_GLYPH_HEMORRHAGE_TRIGGERED, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -1297,7 +1297,7 @@ class spell_rog_improved_expose_armor : public AuraScript
{
PreventDefaultAction();
Player* player = GetTarget()->ToPlayer();
- player->CastCustomSpell(SPELL_ROGUE_IMPROVED_EXPOSE_ARMOR, SPELLVALUE_BASE_POINT0, player->GetComboPoints(), eventInfo.GetProcTarget(), true);
+ player->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_IMPROVED_EXPOSE_ARMOR, CastSpellExtraArgs(true).AddSpellBP0(player->GetComboPoints()));
}
void Register() override
@@ -1323,7 +1323,7 @@ class spell_rog_murderous_intent : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_ROGUE_MURDEROUS_INTENT, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true);
+ GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_MURDEROUS_INTENT, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -1443,7 +1443,7 @@ class spell_rog_bandits_guile : public AuraScript
}
target->CastSpell(target, spellId, true);
- target->CastCustomSpell(procTarget, SPELL_ROGUE_BANDITS_GUILE, &basepoints, &basepoints, nullptr, true);
+ target->CastSpell(procTarget, SPELL_ROGUE_BANDITS_GUILE, CastSpellExtraArgs(true).AddSpellBP0(basepoints).AddSpellMod(SPELLVALUE_BASE_POINT1, basepoints));
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index af7be6cad8..8a2ea91cc5 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -151,7 +151,7 @@ class spell_sha_ancestral_awakening : public SpellScriptLoader
PreventDefaultAction();
int32 heal = int32(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()));
- GetTarget()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_AWAKENING, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_SHAMAN_ANCESTRAL_AWAKENING, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -194,7 +194,7 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- GetCaster()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, CastSpellExtraArgs(true).AddSpellBP0(GetEffectValue()));
}
void Register() override
@@ -334,7 +334,7 @@ class spell_sha_earth_shield : public AuraScript
if (AuraEffect const* glyphEff = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_GLYPH_OF_EARTH_SHIELD, EFFECT_0))
AddPct(bp, glyphEff->GetAmount());
- target->CastCustomSpell(SPELL_SHAMAN_EARTH_SHIELD_HEAL, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff, GetCasterGUID());
+ target->CastSpell(target, SPELL_SHAMAN_EARTH_SHIELD_HEAL, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()).AddSpellBP0(bp));
}
}
@@ -542,7 +542,7 @@ class spell_sha_flame_shock : public SpellScriptLoader
return;
int32 basepoints = aurEff->GetAmount();
- caster->CastCustomSpell(caster, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1, &basepoints, nullptr, nullptr, true);
+ caster->CastSpell(caster, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1, CastSpellExtraArgs(true).AddSpellBP0(basepoints));
}
}
}
@@ -585,7 +585,7 @@ class spell_sha_focused_insight : public SpellScriptLoader
int32 bp0 = -CalculatePct(eventInfo.GetSpellInfo()->CalcPowerCost(GetUnitOwner(), SpellSchoolMask(eventInfo.GetSpellInfo()->SchoolMask)), aurEff->GetAmount());
int32 bp1 = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue();
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_FOCUSED_INSIGHT, &bp0, &bp1, &bp1, true, NULL, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_FOCUSED_INSIGHT, CastSpellExtraArgs(aurEff).AddSpellBP0(bp0).AddSpellMod(SPELLVALUE_BASE_POINT1, bp1).AddSpellMod(SPELLVALUE_BASE_POINT2, bp1));
}
void Register() override
@@ -625,7 +625,7 @@ class spell_sha_glyph_of_healing_wave : public SpellScriptLoader
PreventDefaultAction();
int32 heal = CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE, CastSpellExtraArgs(aurEff).AddSpellBP0(heal));
}
void Register() override
@@ -664,7 +664,7 @@ class spell_sha_healing_stream_totem : public SpellScript
if (AuraEffect* dummy = caster->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SOOTHING_RAIN, EFFECT_0))
AddPct(bp, dummy->GetAmount());
- caster->CastCustomSpell(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, SPELLVALUE_BASE_POINT0, bp, GetHitUnit(), true, nullptr, nullptr, caster->GetCreatorGUID());
+ caster->CastSpell(GetHitUnit(), SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, CastSpellExtraArgs(caster->GetCreatorGUID()).AddSpellBP0(bp));
}
void Register() override
@@ -736,7 +736,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader
void OnProc(AuraEffect const* 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
@@ -767,7 +767,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
void OnProc(AuraEffect const* 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
@@ -801,7 +801,7 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), SpellSchoolMask(eventInfo.GetDamageInfo()->GetSchoolMask()));
mana = int32(CalculatePct(mana, 35));
- GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_MANA_SURGE, CastSpellExtraArgs(aurEff).AddSpellBP0(mana));
}
void Register() override
@@ -891,7 +891,7 @@ class spell_sha_lava_lash : public SpellScript
}
if (target->HasAura(SPELL_SHAMAN_FLAME_SHOCK, caster->GetGUID()))
- caster->CastCustomSpell(SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK, SPELLVALUE_MAX_TARGETS, 4, target, true, nullptr, bonusAura);
+ caster->CastSpell(target, SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK, CastSpellExtraArgs(bonusAura).AddSpellMod(SPELLVALUE_MAX_TARGETS, 4));
}
SetEffectValue(GetEffectValue() + bonusDamage);
}
@@ -1051,7 +1051,7 @@ class spell_sha_nature_guardian : public SpellScriptLoader
PreventDefaultAction();
int32 basePoints0 = GetTarget()->CountPctFromMaxHealth(aurEff->GetAmount());
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_NATURE_GUARDIAN, &basePoints0, nullptr, nullptr, true);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_NATURE_GUARDIAN, CastSpellExtraArgs(true).AddSpellBP0(basePoints0));
if (eventInfo.GetProcTarget() && eventInfo.GetProcTarget()->IsAlive())
eventInfo.GetProcTarget()->GetThreatManager().ModifyThreatByPercent(GetTarget(), -10);
@@ -1103,7 +1103,7 @@ class spell_sha_rolling_thunder : public AuraScript
// Fulmination visual
if (target->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_FULMINATION, EFFECT_0))
if (charges == aurEff->GetAmount())
- target->CastSpell(GetTarget(), SPELL_SHAMAN_FULMINATION_PROC, true, nullptr, aurEff);
+ target->CastSpell(GetTarget(), SPELL_SHAMAN_FULMINATION_PROC, aurEff);
}
}
@@ -1132,7 +1132,7 @@ class spell_sha_telluric_currents : public SpellScriptLoader
PreventDefaultAction();
int32 basePoints0 = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount());
- GetUnitOwner()->CastCustomSpell(GetUnitOwner(), SPELL_SHAMAN_TELLURIC_CURRENTS, &basePoints0, 0, 0, true, nullptr, aurEff);
+ GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SHAMAN_TELLURIC_CURRENTS, CastSpellExtraArgs(aurEff).AddSpellBP0(basePoints0));
}
void Register() override
@@ -1196,7 +1196,7 @@ class spell_sha_tidal_waves : public SpellScriptLoader
int32 basePoints0 = -aurEff->GetAmount();
int32 basePoints1 = aurEff->GetAmount();
- GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, &basePoints0, &basePoints1, nullptr, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, CastSpellExtraArgs(aurEff).AddSpellBP0(basePoints0).AddSpellMod(SPELLVALUE_BASE_POINT1, basePoints1));
}
void Register() override
@@ -1442,7 +1442,7 @@ class spell_sha_ancestral_healing : public SpellScriptLoader
health -= oldVigor->GetEffect(EFFECT_0)->GetAmount();
int32 bp = std::min(heal, CalculatePct(health, aurEff->GetAmount()));
- GetUnitOwner()->CastCustomSpell(target, SPELL_SHAMAN_ANCESTRAL_VIGOR, &bp, 0, 0, true, nullptr, aurEff);
+ GetUnitOwner()->CastSpell(target, SPELL_SHAMAN_ANCESTRAL_VIGOR, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
@@ -1554,7 +1554,7 @@ class spell_sha_earth_shock : public SpellScript
bp = caster->SpellDamageBonusDone(target, lightningShieldSpell, bp, SPELL_DIRECT_DAMAGE, EFFECT_0);
bp *= surplousCharges;
- caster->CastCustomSpell(SPELL_SHAMAN_FULMINATION_DAMAGE, SPELLVALUE_BASE_POINT0, bp, target, true);
+ caster->CastSpell(target, SPELL_SHAMAN_FULMINATION_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(bp));
caster->RemoveAurasDueToSpell(SPELL_SHAMAN_FULMINATION_PROC);
}
}
@@ -1583,7 +1583,7 @@ class spell_sha_healing_rain : public SpellScriptLoader
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
if (DynamicObject* dyn = GetTarget()->GetDynObject(aurEff->GetId()))
- GetTarget()->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_SHAMAN_HEALING_RAIN_TRIGGERED, true);
+ GetTarget()->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_SHAMAN_HEALING_RAIN_TRIGGERED, true);
}
void Register() override
@@ -1715,7 +1715,7 @@ class spell_sha_flametongue_weapon : public AuraScript
float const coeff = 0.03811f;
statBonus *= coeff * attackSpeed;
- player->CastCustomSpell(SPELL_SHAMAN_FLAMETONGUE_ATTACK, SPELLVALUE_BASE_POINT0, fireDamage + statBonus, target, true, item, aurEff);
+ player->CastSpell(target, SPELL_SHAMAN_FLAMETONGUE_ATTACK, CastSpellExtraArgs(aurEff).SetCastItem(item).AddSpellBP0(fireDamage + statBonus));
}
void Register() override
@@ -1780,7 +1780,7 @@ class spell_sha_windfury_weapon : public AuraScript
uint32 spellId = attType == BASE_ATTACK ? SPELL_SHAMAN_WINDFURY_ATTACK_MAINHAND : SPELL_SHAMAN_WINDFURY_ATTACK_OFFHAND;
for (uint8 i = 0; i < 3; i++)
- player->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, target, true, item, aurEff);
+ player->CastSpell(target, spellId, CastSpellExtraArgs(aurEff).SetCastItem(item).AddSpellBP0(amount));
}
void Register() override
@@ -1884,7 +1884,7 @@ class spell_sha_static_shock : public AuraScript
Unit* caster = eventInfo.GetActor();
Unit* target = eventInfo.GetProcTarget();
- caster->CastSpell(target, SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE, aurEff);
}
void Register() override
@@ -1917,7 +1917,7 @@ class spell_sha_frozen_power : public AuraScript
if (caster->GetDistance(target) < minDistance)
return;
- caster->CastSpell(target, SPELL_SHAMAN_FREEZE, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_SHAMAN_FREEZE, aurEff);
}
void Register() override
@@ -1937,7 +1937,7 @@ class spell_sha_earthquake : public AuraScript
void HandleDummyTick(AuraEffect const* aurEff)
{
if (DynamicObject* dyn = GetTarget()->GetDynObject(aurEff->GetId()))
- GetTarget()->CastSpell(dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ(), SPELL_SHAMAN_EARTHQUAKE_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell({ dyn->GetPositionX(), dyn->GetPositionY(), dyn->GetPositionZ() }, SPELL_SHAMAN_EARTHQUAKE_DAMAGE, aurEff);
}
void Register() override
@@ -1999,7 +1999,7 @@ class spell_sha_searing_bolt : public SpellScript
if (Unit* owner = caster->GetOwner())
if (AuraEffect const* effect = owner->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SEARING_FLAMES, EFFECT_0))
if (roll_chance_i(effect->GetAmount()))
- owner->CastSpell(GetHitUnit(), SPELL_SHAMAN_SEARING_FLAMES_DAMAGE, true, nullptr, effect);
+ owner->CastSpell(GetHitUnit(), SPELL_SHAMAN_SEARING_FLAMES_DAMAGE, effect);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index cca7a59033..216f264f53 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -148,7 +148,7 @@ class spell_warl_aftermath : public AuraScript
{
PreventDefaultAction();
if (eventInfo.GetProcTarget() && roll_chance_i(aurEff->GetAmount()))
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_AFTERMATH_STUN, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_AFTERMATH_STUN, aurEff);
}
}
@@ -298,7 +298,7 @@ class spell_warl_bane_of_doom : public SpellScriptLoader
return;
if (GetCaster()->ToPlayer()->isHonorOrXPTarget(GetTarget()))
- GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_BANE_OF_DOOM_EFFECT, true, nullptr, aurEff);
+ GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_BANE_OF_DOOM_EFFECT, aurEff);
}
void Register() override
@@ -499,7 +499,7 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader
{
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER);
int32 hp = int32(targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0)));
- targetCreature->CastCustomSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, nullptr, nullptr, true);
+ targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, CastSpellExtraArgs(true).AddSpellBP0(hp));
break;
}
case CREATURE_FAMILY_FELGUARD:
@@ -624,7 +624,7 @@ class spell_warl_fel_synergy : public SpellScriptLoader
PreventDefaultAction();
int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount());
- GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, aurEff); // TARGET_UNIT_PET
+ GetTarget()->CastSpell(nullptr, SPELL_WARLOCK_FEL_SYNERGY_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(heal)); // TARGET_UNIT_PET
}
void Register() override
@@ -656,7 +656,7 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, aurEff);
}
void Register() override
@@ -705,7 +705,7 @@ class spell_warl_haunt : public SpellScriptLoader
if (Unit* caster = GetCaster())
{
int32 amount = aurEff->GetAmount();
- GetTarget()->CastCustomSpell(caster, SPELL_WARLOCK_HAUNT_HEAL, &amount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID());
+ GetTarget()->CastSpell(caster, SPELL_WARLOCK_HAUNT_HEAL, CastSpellExtraArgs(aurEff).SetOriginalCaster(GetCasterGUID()).AddSpellBP0(amount));
}
}
@@ -827,8 +827,8 @@ class spell_warl_improved_soul_fire : public AuraScript
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastCustomSpell(SPELL_WARLOCK_IMPROVED_SOUL_FIRE_PCT, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff);
- GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_IMPROVED_SOUL_FIRE_STATE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_IMPROVED_SOUL_FIRE_PCT, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
+ GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_IMPROVED_SOUL_FIRE_STATE, aurEff);
}
void Register() override
@@ -871,14 +871,14 @@ class spell_warl_life_tap : public SpellScriptLoader
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_IMPROVED_LIFE_TAP, 0))
AddPct(mana, aurEff->GetAmount());
- caster->CastCustomSpell(target, SPELL_WARLOCK_LIFE_TAP_ENERGIZE, &mana, nullptr, nullptr, false);
+ caster->CastSpell(target, SPELL_WARLOCK_LIFE_TAP_ENERGIZE, { SPELLVALUE_BASE_POINT0, mana });
// Mana Feed
if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_MANA_FEED, 0))
{
int32 manaFeedVal = aurEff->GetAmount();
ApplyPct(manaFeedVal, mana);
- caster->CastCustomSpell(caster, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2, &manaFeedVal, nullptr, nullptr, true, nullptr);
+ caster->CastSpell(caster, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2, CastSpellExtraArgs(true).AddSpellBP0(manaFeedVal));
}
}
}
@@ -1024,8 +1024,8 @@ class spell_warl_seed_of_corruption : public AuraScript
{
if (_affectedBySoulburn)
{
- caster->CastSpell(caster, SPELL_WARLOCK_SOUL_SHARD, true, nullptr, aurEff);
- caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_WARLOCK_SOUL_SHARD, aurEff);
+ caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, aurEff);
}
else
caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, true);
@@ -1058,8 +1058,8 @@ class spell_warl_seed_of_corruption : public AuraScript
if (_affectedBySoulburn)
{
- caster->CastSpell(caster, SPELL_WARLOCK_SOUL_SHARD, true, nullptr, aurEff);
- caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_WARLOCK_SOUL_SHARD, aurEff);
+ caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, aurEff);
}
else
caster->CastSpell(target, SPELL_WARLOCK_SEED_OF_CORRUPTION_TRIGGERED, true);
@@ -1122,7 +1122,7 @@ class spell_warl_shadow_trance_proc : public SpellScriptLoader
void OnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
- GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_SHADOW_TRANCE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_SHADOW_TRANCE, aurEff);
}
void Register() override
@@ -1169,7 +1169,7 @@ class spell_warl_soul_leech : public AuraScript
void OnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
- GetTarget()->CastSpell((Unit*)nullptr, SPELL_GEN_REPLENISHMENT, true, nullptr, aurEff);
+ GetTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, aurEff);
}
void Register() override
@@ -1436,7 +1436,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
{
int32 damage = aurEff->GetAmount() * 9;
// backfire damage and silence
- caster->CastCustomSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff);
+ caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
@@ -1478,7 +1478,7 @@ class spell_warl_drain_life : public SpellScriptLoader
if (caster->HealthBelowPct(25))
baseAmount += int32(deathsEmbraceAurEff->GetAmount());
- caster->CastCustomSpell(caster, SPELL_WARLOCK_DRAIN_LIFE_HEAL, &baseAmount, 0, 0, true);
+ caster->CastSpell(caster, SPELL_WARLOCK_DRAIN_LIFE_HEAL, CastSpellExtraArgs(true).AddSpellBP0(baseAmount));
}
}
@@ -1608,7 +1608,7 @@ class spell_warl_fel_armor : public SpellScriptLoader
PreventDefaultAction();
int32 bp = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount());
if (Unit* caster = GetCaster())
- caster->CastCustomSpell(caster, SPELL_WARLOCK_FEL_ARMOR_HEAL, &bp, 0, 0, true);
+ caster->CastSpell(caster, SPELL_WARLOCK_FEL_ARMOR_HEAL, CastSpellExtraArgs(true).AddSpellBP0(bp));
}
void Register() override
@@ -1633,7 +1633,7 @@ class spell_warl_soul_harvest : public AuraScript
void HandleDummy(AuraEffect const* aurEff)
{
if (!(aurEff->GetTickNumber() % 3))
- GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_SOUL_HARVEST_ENERGIZE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_SOUL_HARVEST_ENERGIZE, aurEff);
}
void Register() override
@@ -1679,13 +1679,13 @@ class spell_warl_soulburn : public AuraScript
switch (spellInfo->Id)
{
case SPELL_WARLOCK_HEALTHSTONE:
- target->CastSpell(target, SPELL_WARLOCK_SOULBURN_HEALTHSTONE, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_WARLOCK_SOULBURN_HEALTHSTONE, aurEff);
break;
case SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT:
- target->CastSpell(target, SPELL_WARLOCK_SOULBURN_DEMONIC_CIRCLE, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_WARLOCK_SOULBURN_DEMONIC_CIRCLE, aurEff);
break;
case SPELL_WARLOCK_SEARING_PAIN:
- target->CastSpell(target, SPELL_WARLOCK_SOULBURN_SEARING_PAIN, true, nullptr, aurEff);
+ target->CastSpell(target, SPELL_WARLOCK_SOULBURN_SEARING_PAIN, aurEff);
break;
case SPELL_WARLOCK_SEED_OF_CORRUPTION:
target->ToPlayer()->SetLastSoulburnSpell(spellInfo);
@@ -1760,7 +1760,7 @@ class spell_warl_shadowburn : public AuraScript
if (GetTargetApplication()->GetRemoveMode().HasFlag(AuraRemoveFlags::ByDeath))
if (caster->ToPlayer()->isHonorOrXPTarget(GetTarget()))
- caster->CastCustomSpell(SPELL_WARLOCK_SOUL_SHARD, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), caster, true, nullptr, aurEff);
+ caster->CastSpell(caster, SPELL_WARLOCK_SOUL_SHARD, CastSpellExtraArgs(aurEff).AddSpellBP0(aurEff->GetAmount()));
}
void Register() override
@@ -1791,7 +1791,7 @@ class spell_warl_burning_embers : public AuraScript
float coefficient = GetSpellInfo()->GetRank() * 0.7f;
int32 damageCap = (target->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_FIRE) * coefficient + GetSpellInfo()->Effects[EFFECT_1].CalcValue(target)) / maxTicks;
int32 bp = std::min(damageBp, damageCap);
- target->CastCustomSpell(SPELL_WARLOCK_BURNING_EMBERS_DAMAGE, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ target->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_BURNING_EMBERS_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
void Register() override
@@ -1845,7 +1845,7 @@ class spell_warl_jinx : public AuraScript
PreventDefaultAction();
uint8 targets = sSpellMgr->AssertSpellInfo(SPELL_WARLOCK_JINX_R1)->Effects[EFFECT_2].CalcValue();
uint32 spellId = GetSpellInfo()->GetRank() == 1 ? SPELL_WARLOCK_JINX_AOE_R1 : SPELL_WARLOCK_JINX_AOE_R2;
- GetTarget()->CastCustomSpell(spellId, SPELLVALUE_MAX_TARGETS, targets, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), spellId, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_MAX_TARGETS, targets));
}
void Register() override
@@ -1898,7 +1898,7 @@ class spell_warl_curse_of_weakness : public AuraScript
}
if (_debuffSpellId)
- caster->CastCustomSpell(_debuffSpellId, SPELLVALUE_BASE_POINT0, jinx->GetAmount(), target, true, nullptr);
+ caster->CastSpell(target, _debuffSpellId, CastSpellExtraArgs(true).AddSpellBP0(jinx->GetAmount()));
}
}
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 538554aa0a..a5e03ecfc7 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -109,7 +109,7 @@ class spell_warr_bloodthirst : public SpellScript
void HandleDummy(SpellEffIndex /*effIndex*/)
{
int32 damage = GetEffectValue();
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, nullptr, nullptr, true, nullptr);
+ GetCaster()->CastSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, { SPELLVALUE_BASE_POINT0, damage });
}
void Register() override
@@ -166,7 +166,7 @@ class spell_warr_charge : public SpellScript
if (!caster)
return;
- caster->CastCustomSpell(SPELL_WARRIOR_CHARGE_ENERGIZE, SPELLVALUE_BASE_POINT0, GetEffectValue(), caster, true);
+ caster->CastSpell(caster, SPELL_WARRIOR_CHARGE_ENERGIZE, { SPELLVALUE_BASE_POINT0, GetEffectValue() });
// Juggernaut crit bonus
if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT))
@@ -201,7 +201,7 @@ class spell_warr_colossus_smash : public SpellScript
{
if (Unit* caster = GetCaster())
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARRIOR, WARRIOR_ICON_ID_GLYPH_OF_COLOSSUS_SMASH, EFFECT_0))
- caster->CastSpell(GetHitUnit(), SPELL_WARRIOR_SUNDER_ARMOR, true, nullptr, aurEff);
+ caster->CastSpell(GetHitUnit(), SPELL_WARRIOR_SUNDER_ARMOR, aurEff);
}
void Register() override
@@ -232,7 +232,7 @@ class spell_warr_deep_wounds : public AuraScript
damage = damage / ticks;
if (Unit* target = eventInfo.GetProcTarget())
- player->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, 0, 0, true, nullptr, aurEff);
+ player->CastSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
@@ -349,7 +349,7 @@ class spell_warr_last_stand : public SpellScript
{
Unit* caster = GetCaster();
int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(GetEffectValue()));
- caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr);
+ caster->CastSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, { SPELLVALUE_BASE_POINT0, healthModSpellBasePoints0 });
}
void Register() override
@@ -400,8 +400,7 @@ class spell_warr_rallying_cry : public SpellScript
void HandleScript(SpellEffIndex /*effIndex*/)
{
int32 basePoints0 = int32(GetHitUnit()->CountPctFromMaxHealth(GetEffectValue()));
-
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, &basePoints0, nullptr, nullptr, true);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, { SPELLVALUE_BASE_POINT0, basePoints0 });
}
void Register() override
@@ -452,7 +451,7 @@ class spell_warr_retaliation : public AuraScript
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, nullptr, aurEff);
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, aurEff);
}
void Register() override
@@ -587,7 +586,7 @@ class spell_warr_second_wind_proc : public AuraScript
if (!spellId)
return;
- GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff);
+ GetTarget()->CastSpell(GetTarget(), spellId, aurEff);
}
@@ -659,12 +658,12 @@ class spell_warr_sweeping_strikes : public AuraScript
if (spellInfo && (spellInfo->Id == SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND || (spellInfo->Id == SPELL_WARRIOR_EXECUTE && !_procTarget->HasAuraState(AURA_STATE_HEALTHLESS_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 = eventInfo.GetDamageInfo()->GetDamage();
- GetTarget()->CastCustomSpell(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, nullptr, aurEff);
+ GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, CastSpellExtraArgs(aurEff).AddSpellBP0(damage));
}
}
}
@@ -766,8 +765,8 @@ class spell_warr_vigilance : public AuraScript
PreventDefaultAction();
int32 damage = std::min(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue()), CalculatePct(_procTarget->GetMaxHealth(), 10));
- GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, nullptr, aurEff);
- _procTarget->CastCustomSpell(_procTarget, SPELL_WARRIOR_VENGEANCE, &damage, &damage, &damage, true, nullptr, aurEff);
+ GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, aurEff);
+ _procTarget->CastSpell(_procTarget, SPELL_WARRIOR_VENGEANCE, CastSpellExtraArgs(aurEff).AddSpellBP0(damage).AddSpellMod(SPELLVALUE_BASE_POINT1, damage).AddSpellMod(SPELLVALUE_BASE_POINT2, damage));
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -830,7 +829,7 @@ class spell_warr_strikes_of_opportunity : public AuraScript
PreventDefaultAction();
if (Unit* caster = GetCaster())
if (Unit* target = eventInfo.GetActionTarget())
- caster->CastSpell(target, SPELL_WARRIOR_OPPORTUNITY_STRIKE, true, nullptr, aurEff);
+ caster->CastSpell(target, SPELL_WARRIOR_OPPORTUNITY_STRIKE, aurEff);
}
void Register() override
@@ -891,7 +890,7 @@ class spell_warr_shield_specialization : public AuraScript
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo((GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell)))
{
int32 bp = spell->Effects[EFFECT_0].CalcValue() * 4;
- target->CastCustomSpell(spell->Id, SPELLVALUE_BASE_POINT0, bp, nullptr, true, nullptr, aurEff);
+ target->CastSpell(nullptr, spell->Id, CastSpellExtraArgs(aurEff).AddSpellBP0(bp));
}
}
}
diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp
index 5f8b229818..36e5941c16 100644
--- a/src/server/scripts/World/mob_generic_creature.cpp
+++ b/src/server/scripts/World/mob_generic_creature.cpp
@@ -18,6 +18,7 @@
#include "ScriptMgr.h"
#include "PassiveAI.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
#include "SpellMgr.h"
class trigger_periodic : public CreatureScript
@@ -42,7 +43,7 @@ public:
if (timer <= diff)
{
if (spell)
- me->CastSpell(me, spell, true);
+ me->CastSpell(me, spell->Id, true);
timer = interval;
}
else
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 6aa49381af..8529eb85f0 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -2270,7 +2270,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->GetPositionX(), me->GetPositionY(), me->GetPositionZ() }, GetFireworkSpell(me->GetEntry()), true);
}
};
@@ -2973,7 +2973,7 @@ class npc_mage_orb : public CreatureScript
{
Position explPos = me->GetPosition();
float z = explPos.GetPositionZ() - me->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
- summoner->CastSpell(explPos.GetPositionX(), explPos.GetPositionY(), z, SPELL_FIRE_POWER_EXPLOSION, true);
+ summoner->CastSpell({ explPos.GetPositionX(), explPos.GetPositionY(), z }, SPELL_FIRE_POWER_EXPLOSION, true);
me->DespawnOrUnsummon();
}
break;
@@ -2984,7 +2984,7 @@ class npc_mage_orb : public CreatureScript
{
Position explPos = me->GetPosition();
float z = explPos.GetPositionZ() - me->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
- summoner->CastSpell(explPos.GetPositionX(), explPos.GetPositionY(), z, SPELL_FIRE_POWER_EXPLOSION, true);
+ summoner->CastSpell({ explPos.GetPositionX(), explPos.GetPositionY(), z }, SPELL_FIRE_POWER_EXPLOSION, true);
me->DespawnOrUnsummon();
}
break;