diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 141 |
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() |