aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp141
1 files changed, 97 insertions, 44 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index d44352c5cd1..b0157c23d0b 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -622,7 +622,8 @@ void Spell::EffectTriggerSpell()
unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STUN);
// Cast Lesser Invisibility
- unitTarget->CastSpell(unitTarget, 7870, true);
+ unitTarget->CastSpell(unitTarget, 7870, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
// Brittle Armor - (need add max stack of 24575 Brittle Armor)
@@ -634,7 +635,8 @@ void Spell::EffectTriggerSpell()
return;
for (uint32 j = 0; j < spell->StackAmount; ++j)
- m_caster->CastSpell(unitTarget, spell->Id, true);
+ m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
// Mercurial Shield - (need add max stack of 26464 Mercurial Shield)
@@ -646,7 +648,8 @@ void Spell::EffectTriggerSpell()
return;
for (uint32 j = 0; j < spell->StackAmount; ++j)
- m_caster->CastSpell(unitTarget, spell->Id, true);
+ m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
}
@@ -688,6 +691,7 @@ void Spell::EffectTriggerSpell()
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
args.SetOriginalCaster(m_originalCasterGUID);
+ args.SetOriginalCastId(m_castId);
// set basepoints for trigger with value effect
if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE)
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
@@ -736,6 +740,7 @@ void Spell::EffectTriggerMissileSpell()
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
args.SetOriginalCaster(m_originalCasterGUID);
+ args.SetOriginalCastId(m_castId);
// set basepoints for trigger with value effect
if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE)
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
@@ -777,6 +782,7 @@ void Spell::EffectForceCast()
{
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
args.SetOriginalCaster(m_originalCasterGUID);
+ args.SetOriginalCastId(m_castId);
args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
unitTarget->CastSpell(unitTarget, spellInfo->Id, args);
return;
@@ -788,11 +794,13 @@ void Spell::EffectForceCast()
{
case 72298: // Malleable Goo Summon
unitTarget->CastSpell(unitTarget, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCaster(m_originalCasterGUID));
+ .SetOriginalCaster(m_originalCasterGUID)
+ .SetOriginalCastId(m_castId));
return;
}
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCastId(m_castId);
if (effectInfo->Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE)
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
@@ -816,7 +824,8 @@ void Spell::EffectTriggerRitualOfSummoning()
finish();
- m_caster->CastSpell(nullptr, spellInfo->Id, false);
+ m_caster->CastSpell(nullptr, spellInfo->Id, CastSpellExtraArgs()
+ .SetOriginalCastId(m_castId));
}
inline void CalculateJumpSpeeds(SpellEffectInfo const* effInfo, float dist, float& speedXY, float& speedZ)
@@ -925,9 +934,11 @@ void Spell::EffectTeleportUnits()
if (r >= 70) // 7/12 success
{
if (r < 100) // 4/12 evil twin
- m_caster->CastSpell(m_caster, 23445, true);
+ m_caster->CastSpell(m_caster, 23445, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
else // 1/12 fire
- m_caster->CastSpell(m_caster, 23449, true);
+ m_caster->CastSpell(m_caster, 23449, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
}
return;
}
@@ -941,36 +952,44 @@ void Spell::EffectTeleportUnits()
{
case 1:
// soul split - evil
- m_caster->CastSpell(m_caster, 36900, true);
+ m_caster->CastSpell(m_caster, 36900, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 2:
// soul split - good
- m_caster->CastSpell(m_caster, 36901, true);
+ m_caster->CastSpell(m_caster, 36901, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 3:
// Increase the size
- m_caster->CastSpell(m_caster, 36895, true);
+ m_caster->CastSpell(m_caster, 36895, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 4:
// Decrease the size
- m_caster->CastSpell(m_caster, 36893, true);
+ m_caster->CastSpell(m_caster, 36893, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 5:
// Transform
{
if (m_caster->ToPlayer()->GetTeam() == ALLIANCE)
- m_caster->CastSpell(m_caster, 36897, true);
+ m_caster->CastSpell(m_caster, 36897, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
else
- m_caster->CastSpell(m_caster, 36899, true);
+ m_caster->CastSpell(m_caster, 36899, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
case 6:
// chicken
- m_caster->CastSpell(m_caster, 36940, true);
+ m_caster->CastSpell(m_caster, 36940, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 7:
// evil twin
- m_caster->CastSpell(m_caster, 23445, true);
+ m_caster->CastSpell(m_caster, 23445, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
}
@@ -986,23 +1005,28 @@ void Spell::EffectTeleportUnits()
{
case 1:
// soul split - evil
- m_caster->CastSpell(m_caster, 36900, true);
+ m_caster->CastSpell(m_caster, 36900, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 2:
// soul split - good
- m_caster->CastSpell(m_caster, 36901, true);
+ m_caster->CastSpell(m_caster, 36901, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 3:
// Increase the size
- m_caster->CastSpell(m_caster, 36895, true);
+ m_caster->CastSpell(m_caster, 36895, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
case 4:
// Transform
{
if (m_caster->ToPlayer()->GetTeam() == ALLIANCE)
- m_caster->CastSpell(m_caster, 36897, true);
+ m_caster->CastSpell(m_caster, 36897, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
else
- m_caster->CastSpell(m_caster, 36899, true);
+ m_caster->CastSpell(m_caster, 36899, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
}
@@ -2056,6 +2080,7 @@ void Spell::EffectSummonType()
}
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCastId(m_castId);
// if we have small value, it indicates seat position
if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS)
@@ -3015,7 +3040,8 @@ void Spell::EffectScriptEffect()
return;
uint32 const spell_id = roll_chance_i(20) ? 8854 : 8855;
- m_caster->CastSpell(m_caster, spell_id, true);
+ m_caster->CastSpell(m_caster, spell_id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
// Brittle Armor - need remove one 24575 Brittle Armor aura
@@ -3049,7 +3075,8 @@ void Spell::EffectScriptEffect()
return;
// Shadow Flame
- m_caster->CastSpell(unitTarget, 22682, true);
+ m_caster->CastSpell(unitTarget, 22682, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
// Mirren's Drinking Hat
@@ -3116,7 +3143,8 @@ void Spell::EffectScriptEffect()
if (m_caster->ToPlayer()->GetItemByPos(bag, slot)->GetCount() == 1) m_caster->ToPlayer()->RemoveItem(bag, slot, true);
else m_caster->ToPlayer()->GetItemByPos(bag, slot)->SetCount(m_caster->ToPlayer()->GetItemByPos(bag, slot)->GetCount()-1);
// Spell 42518 (Braufest - Gratisprobe des Braufest herstellen)
- m_caster->CastSpell(m_caster, 42518, true);
+ m_caster->CastSpell(m_caster, 42518, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
break;
@@ -3128,7 +3156,8 @@ void Spell::EffectScriptEffect()
//Workaround for Range ... should be global for every ScriptEffect
float radius = effectInfo->CalcRadius();
if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->GetDistance(m_caster) >= radius && !unitTarget->HasAura(46394) && unitTarget != m_caster)
- unitTarget->CastSpell(unitTarget, 46394, true);
+ unitTarget->CastSpell(unitTarget, 46394, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
@@ -3146,7 +3175,8 @@ void Spell::EffectScriptEffect()
case 2: spellId = 46738; break;
case 3: spellId = 46736; break;
}
- unitTarget->CastSpell(unitTarget, spellId, true);
+ unitTarget->CastSpell(unitTarget, spellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
// 5,000 Gold
@@ -3190,7 +3220,8 @@ void Spell::EffectScriptEffect()
default: return;
}
- unitTarget->CastSpell(unitTarget, iTmpSpellId, true);
+ unitTarget->CastSpell(unitTarget, iTmpSpellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
Creature* npc = unitTarget->ToCreature();
npc->LoadEquipment();
return;
@@ -3203,9 +3234,11 @@ void Spell::EffectScriptEffect()
if (!unitTarget)
return;
if (unitTarget->HasAura(51845))
- unitTarget->CastSpell(m_caster, 51856, true);
+ unitTarget->CastSpell(m_caster, 51856, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
else
- m_caster->CastSpell(unitTarget, 51855, true);
+ m_caster->CastSpell(unitTarget, 51855, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
// Summon Ghouls On Scarlet Crusade
@@ -3219,7 +3252,8 @@ void Spell::EffectScriptEffect()
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, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
}
break;
}
@@ -3230,11 +3264,13 @@ void Spell::EffectScriptEffect()
return;
case 52479: // Gift of the Harvester
if (unitTarget && unitCaster)
- unitCaster->CastSpell(unitTarget, urand(0, 1) ? damage : 52505, true);
+ unitCaster->CastSpell(unitTarget, urand(0, 1) ? damage : 52505, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
case 53110: // Devour Humanoid
if (unitTarget)
- unitTarget->CastSpell(m_caster, damage, true);
+ unitTarget->CastSpell(m_caster, damage, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
case 57347: // Retrieving (Wintergrasp RP-GG pickup spell)
{
@@ -3266,7 +3302,8 @@ void Spell::EffectScriptEffect()
uint32 questID = m_spellInfo->GetEffect(EFFECT_1).CalcValue();
if (unitTarget->ToPlayer()->GetQuestStatus(questID) == QUEST_STATUS_COMPLETE)
- unitTarget->CastSpell(unitTarget, spellID, true);
+ unitTarget->CastSpell(unitTarget, spellID, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
@@ -3278,10 +3315,12 @@ void Spell::EffectScriptEffect()
// return from top
if (unitTarget->ToPlayer()->GetAreaId() == 4637)
- unitTarget->CastSpell(unitTarget, 59316, true);
+ unitTarget->CastSpell(unitTarget, 59316, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
// teleport atop
else
- unitTarget->CastSpell(unitTarget, 59314, true);
+ unitTarget->CastSpell(unitTarget, 59314, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
return;
}
@@ -3297,8 +3336,10 @@ void Spell::EffectScriptEffect()
if (Unit* parent = seat->GetVehicleBase())
{
/// @todo a hack, range = 11, should after some time cast, otherwise too far
- unitCaster->CastSpell(parent, 62496, true);
- unitTarget->CastSpell(parent, damage); // DIFFICULTY_NONE, so effect always valid
+ unitCaster->CastSpell(parent, 62496, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
+ unitTarget->CastSpell(parent, damage, CastSpellExtraArgs()
+ .SetOriginalCastId(m_castId)); // DIFFICULTY_NONE, so effect always valid
}
}
}
@@ -3328,7 +3369,8 @@ void Spell::EffectScriptEffect()
if (Aura* chargesAura = m_caster->ToCreature()->GetAura(59907))
{
m_caster->CastSpell(unitTarget, spell_heal, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCaster(m_caster->ToCreature()->ToTempSummon()->GetSummonerGUID()));
+ .SetOriginalCaster(m_caster->ToCreature()->ToTempSummon()->GetSummonerGUID())
+ .SetOriginalCastId(m_castId));
if (chargesAura->ModCharges(-1))
m_caster->ToCreature()->ToTempSummon()->UnSummon();
}
@@ -3357,6 +3399,7 @@ void Spell::EffectScriptEffect()
if (totem && totem->IsTotem())
{
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCastId(m_castId);
args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
m_caster->CastSpell(totem, 55277, args);
}
@@ -3389,8 +3432,10 @@ void Spell::EffectScriptEffect()
45683 // Polymorph
};
- m_caster->CastSpell(m_caster, spellPlayer[urand(0, 4)], true);
- unitTarget->CastSpell(unitTarget, spellTarget[urand(0, 4)], true);
+ m_caster->CastSpell(m_caster, spellPlayer[urand(0, 4)], CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
+ unitTarget->CastSpell(unitTarget, spellTarget[urand(0, 4)], CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
break;
}
}
@@ -3630,7 +3675,8 @@ void Spell::EffectApplyGlyph()
glyphs.push_back(glyphId);
if (GlyphPropertiesEntry const* glyphProperties = sGlyphPropertiesStore.LookupEntry(glyphId))
- player->CastSpell(player, glyphProperties->SpellID, true);
+ player->CastSpell(player, glyphProperties->SpellID, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
WorldPackets::Talent::ActiveGlyphs activeGlyphs;
activeGlyphs.Glyphs.emplace_back(m_misc.SpellId, uint16(glyphId));
@@ -3715,7 +3761,8 @@ void Spell::EffectInebriate()
{
currentDrunk = 100;
if (rand_chance() < 25.0f)
- player->CastSpell(player, 67468, false); // Drunken Vomit
+ player->CastSpell(player, 67468, CastSpellExtraArgs()
+ .SetOriginalCastId(m_castId)); // Drunken Vomit
}
else
currentDrunk += drunkMod;
@@ -3761,6 +3808,7 @@ void Spell::EffectFeedPet()
/// @todo fix crash when a spell has two effects, both pointed at the same item target
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCastId(m_castId);
args.AddSpellMod(SPELLVALUE_BASE_POINT0, pct);
m_caster->CastSpell(pet, effectInfo->TriggerSpell, args);
}
@@ -4136,7 +4184,8 @@ void Spell::EffectCharge()
if (effectInfo->TriggerSpell)
m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCaster(m_originalCasterGUID));
+ .SetOriginalCaster(m_originalCasterGUID)
+ .SetOriginalCastId(m_castId));
}
}
@@ -4165,7 +4214,8 @@ void Spell::EffectChargeDest()
{
if (effectInfo->TriggerSpell)
m_caster->CastSpell(*destTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCaster(m_originalCasterGUID));
+ .SetOriginalCaster(m_originalCasterGUID)
+ .SetOriginalCastId(m_castId));
}
}
@@ -4456,6 +4506,7 @@ void Spell::EffectDestroyAllTotems()
if (mana)
{
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCastId(m_castId);
args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana);
unitCaster->CastSpell(unitCaster, 39104, args);
}
@@ -5248,6 +5299,7 @@ void Spell::EffectCastButtons()
CastSpellExtraArgs args;
args.TriggerFlags = TriggerCastFlags(TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR);
+ args.OriginalCastId = m_castId;
args.CastDifficulty = GetCastDifficulty();
m_caster->CastSpell(m_caster, spellInfo->Id, args);
}
@@ -5325,7 +5377,8 @@ void Spell::EffectSummonRaFFriend()
if (m_caster->GetTypeId() != TYPEID_PLAYER || !unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, true);
+ m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ .SetOriginalCastId(m_castId));
}
void Spell::EffectUnlockGuildVaultTab()