mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-27 04:12:40 +01:00
Core/Spells: Pass cast item level to triggered spells
* Fixes value on trinkets like Ignition Mage's Fuse
This commit is contained in:
@@ -565,8 +565,7 @@ void Spell::EffectTriggerSpell()
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STUN);
|
||||
|
||||
// Cast Lesser Invisibility
|
||||
unitTarget->CastSpell(unitTarget, 7870, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
unitTarget->CastSpell(unitTarget, 7870, this);
|
||||
return;
|
||||
}
|
||||
// Brittle Armor - (need add max stack of 24575 Brittle Armor)
|
||||
@@ -578,8 +577,7 @@ void Spell::EffectTriggerSpell()
|
||||
return;
|
||||
|
||||
for (uint32 j = 0; j < spell->StackAmount; ++j)
|
||||
m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(unitTarget, spell->Id, this);
|
||||
return;
|
||||
}
|
||||
// Mercurial Shield - (need add max stack of 26464 Mercurial Shield)
|
||||
@@ -591,8 +589,7 @@ void Spell::EffectTriggerSpell()
|
||||
return;
|
||||
|
||||
for (uint32 j = 0; j < spell->StackAmount; ++j)
|
||||
m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(unitTarget, spell->Id, this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -644,7 +641,7 @@ void Spell::EffectTriggerSpell()
|
||||
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCaster(m_originalCasterGUID);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
// 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)
|
||||
@@ -701,7 +698,7 @@ void Spell::EffectTriggerMissileSpell()
|
||||
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCaster(m_originalCasterGUID);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
// 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)
|
||||
@@ -748,7 +745,7 @@ void Spell::EffectForceCast()
|
||||
{
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCaster(m_originalCasterGUID);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
unitTarget->CastSpell(unitTarget, spellInfo->Id, args);
|
||||
return;
|
||||
@@ -761,12 +758,12 @@ void Spell::EffectForceCast()
|
||||
case 72298: // Malleable Goo Summon
|
||||
unitTarget->CastSpell(unitTarget, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCaster(m_originalCasterGUID)
|
||||
.SetOriginalCastId(m_castId));
|
||||
.SetTriggeringSpell(this));
|
||||
return;
|
||||
}
|
||||
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
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);
|
||||
@@ -797,7 +794,7 @@ void Spell::EffectTriggerRitualOfSummoning()
|
||||
finish();
|
||||
|
||||
m_caster->CastSpell(nullptr, spellInfo->Id, CastSpellExtraArgs()
|
||||
.SetOriginalCastId(m_castId));
|
||||
.SetTriggeringSpell(this));
|
||||
}
|
||||
|
||||
void Spell::CalculateJumpSpeeds(SpellEffectInfo const* effInfo, float dist, float& speedXY, float& speedZ)
|
||||
@@ -2025,7 +2022,7 @@ void Spell::EffectSummonType()
|
||||
}
|
||||
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
|
||||
// if we have small value, it indicates seat position
|
||||
if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS)
|
||||
@@ -3042,8 +3039,7 @@ void Spell::EffectScriptEffect()
|
||||
return;
|
||||
|
||||
// Shadow Flame
|
||||
m_caster->CastSpell(unitTarget, 22682, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(unitTarget, 22682, this);
|
||||
return;
|
||||
}
|
||||
// Mug Transformation
|
||||
@@ -3074,8 +3070,7 @@ 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, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(m_caster, 42518, this);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@@ -3087,8 +3082,7 @@ 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, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
unitTarget->CastSpell(unitTarget, 46394, this);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -3100,8 +3094,7 @@ void Spell::EffectScriptEffect()
|
||||
|
||||
float radius = effectInfo->CalcRadius();
|
||||
for (uint8 i = 0; i < 15; ++i)
|
||||
m_caster->CastSpell(m_caster->GetRandomPoint(*destTarget, radius), 54522, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(m_caster->GetRandomPoint(*destTarget, radius), 54522, this);
|
||||
break;
|
||||
}
|
||||
case 52173: // Coyote Spirit Despawn
|
||||
@@ -3140,10 +3133,9 @@ 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, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
unitCaster->CastSpell(parent, 62496, this);
|
||||
unitTarget->CastSpell(parent, damage, CastSpellExtraArgs()
|
||||
.SetOriginalCastId(m_castId)); // DIFFICULTY_NONE, so effect always valid
|
||||
.SetTriggeringSpell(this)); // DIFFICULTY_NONE, so effect always valid
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3493,8 +3485,7 @@ void Spell::EffectApplyGlyph()
|
||||
player->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeGlyph);
|
||||
|
||||
if (GlyphPropertiesEntry const* glyphProperties = sGlyphPropertiesStore.LookupEntry(glyphId))
|
||||
player->CastSpell(player, glyphProperties->SpellID, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
player->CastSpell(player, glyphProperties->SpellID, this);
|
||||
|
||||
WorldPackets::Talent::ActiveGlyphs activeGlyphs;
|
||||
activeGlyphs.Glyphs.emplace_back(m_misc.SpellId, uint16(glyphId));
|
||||
@@ -3580,7 +3571,7 @@ void Spell::EffectInebriate()
|
||||
currentDrunk = 100;
|
||||
if (rand_chance() < 25.0f)
|
||||
player->CastSpell(player, 67468, CastSpellExtraArgs()
|
||||
.SetOriginalCastId(m_castId)); // Drunken Vomit
|
||||
.SetTriggeringSpell(this)); // Drunken Vomit
|
||||
}
|
||||
else
|
||||
currentDrunk += drunkMod;
|
||||
@@ -3626,7 +3617,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.SetTriggeringSpell(this);
|
||||
args.AddSpellMod(SPELLVALUE_BASE_POINT0, pct);
|
||||
m_caster->CastSpell(pet, effectInfo->TriggerSpell, args);
|
||||
}
|
||||
@@ -4014,7 +4005,7 @@ void Spell::EffectCharge()
|
||||
if (effectInfo->TriggerSpell)
|
||||
m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCaster(m_originalCasterGUID)
|
||||
.SetOriginalCastId(m_castId));
|
||||
.SetTriggeringSpell(this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4045,7 +4036,7 @@ void Spell::EffectChargeDest()
|
||||
if (effectInfo->TriggerSpell)
|
||||
m_caster->CastSpell(*destTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCaster(m_originalCasterGUID)
|
||||
.SetOriginalCastId(m_castId));
|
||||
.SetTriggeringSpell(this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4384,7 +4375,7 @@ void Spell::EffectDestroyAllTotems()
|
||||
if (mana)
|
||||
{
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SetOriginalCastId(m_castId);
|
||||
args.SetTriggeringSpell(this);
|
||||
args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana);
|
||||
unitCaster->CastSpell(unitCaster, 39104, args);
|
||||
}
|
||||
@@ -5263,8 +5254,7 @@ void Spell::EffectSummonRaFFriend()
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER || !unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCastId(m_castId));
|
||||
m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, this);
|
||||
}
|
||||
|
||||
void Spell::EffectUnlockGuildVaultTab()
|
||||
|
||||
Reference in New Issue
Block a user