Core/Spells: SPELL_AURA_48 implementation
Port From (https://github.com/TrinityCore/TrinityCore/commit/37178ff311af95c4a2035a38839b5e8a9afe2af5)
This commit is contained in:
@@ -2678,6 +2678,15 @@ namespace Game.Entities
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasAuraTypeWithTriggerSpell(AuraType auratype, uint triggerSpell)
|
||||||
|
{
|
||||||
|
foreach (var aura in GetAuraEffectsByType(auratype))
|
||||||
|
if (aura.GetSpellEffectInfo().TriggerSpell == triggerSpell)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasNegativeAuraWithInterruptFlag(SpellAuraInterruptFlags flag, ObjectGuid guid = default)
|
public bool HasNegativeAuraWithInterruptFlag(SpellAuraInterruptFlags flag, ObjectGuid guid = default)
|
||||||
{
|
{
|
||||||
if (!HasInterruptFlag(flag))
|
if (!HasInterruptFlag(flag))
|
||||||
|
|||||||
@@ -677,13 +677,30 @@ namespace Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// do not cast not learned spells
|
|
||||||
if (!caster.HasSpell(spellInfo.Id) || spellInfo.IsPassive())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SpellCastTargets targets = new(caster, petCastSpell.Cast);
|
SpellCastTargets targets = new(caster, petCastSpell.Cast);
|
||||||
|
|
||||||
Spell spell = new(caster, spellInfo, TriggerCastFlags.None);
|
TriggerCastFlags triggerCastFlags = TriggerCastFlags.None;
|
||||||
|
|
||||||
|
if (spellInfo.IsPassive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// cast only learned spells
|
||||||
|
if (!caster.HasSpell(spellInfo.Id))
|
||||||
|
{
|
||||||
|
bool allow = false;
|
||||||
|
|
||||||
|
// allow casting of spells triggered by clientside periodic trigger auras
|
||||||
|
if (caster.HasAuraTypeWithTriggerSpell(AuraType.PeriodicTriggerSpellFromClient, spellInfo.Id))
|
||||||
|
{
|
||||||
|
allow = true;
|
||||||
|
triggerCastFlags = TriggerCastFlags.FullMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allow)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Spell spell = new(caster, spellInfo, triggerCastFlags);
|
||||||
spell.m_fromClient = true;
|
spell.m_fromClient = true;
|
||||||
spell.m_misc.Data0 = petCastSpell.Cast.Misc[0];
|
spell.m_misc.Data0 = petCastSpell.Cast.Misc[0];
|
||||||
spell.m_misc.Data1 = petCastSpell.Cast.Misc[1];
|
spell.m_misc.Data1 = petCastSpell.Cast.Misc[1];
|
||||||
|
|||||||
@@ -314,15 +314,12 @@ namespace Game
|
|||||||
if (go.GetSpellForLock(caster.ToPlayer()) == spellInfo)
|
if (go.GetSpellForLock(caster.ToPlayer()) == spellInfo)
|
||||||
allow = true;
|
allow = true;
|
||||||
|
|
||||||
// TODO: Preparation for #23204
|
|
||||||
// allow casting of spells triggered by clientside periodic trigger auras
|
// allow casting of spells triggered by clientside periodic trigger auras
|
||||||
/*
|
if (caster.HasAuraTypeWithTriggerSpell(AuraType.PeriodicTriggerSpellFromClient, spellInfo.Id))
|
||||||
if (caster->HasAuraTypeWithTriggerSpell(SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT, spellId))
|
|
||||||
{
|
{
|
||||||
allow = true;
|
allow = true;
|
||||||
triggerFlag = TRIGGERED_FULL_MASK;
|
triggerFlag = TriggerCastFlags.FullMask;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
if (!allow)
|
if (!allow)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -188,6 +188,7 @@ namespace Game.Spells
|
|||||||
case AuraType.PeriodicHeal:
|
case AuraType.PeriodicHeal:
|
||||||
case AuraType.ObsModHealth:
|
case AuraType.ObsModHealth:
|
||||||
case AuraType.PeriodicTriggerSpell:
|
case AuraType.PeriodicTriggerSpell:
|
||||||
|
case AuraType.PeriodicTriggerSpellFromClient:
|
||||||
case AuraType.PeriodicEnergize:
|
case AuraType.PeriodicEnergize:
|
||||||
case AuraType.PeriodicLeech:
|
case AuraType.PeriodicLeech:
|
||||||
case AuraType.PeriodicHealthFunnel:
|
case AuraType.PeriodicHealthFunnel:
|
||||||
@@ -520,6 +521,9 @@ namespace Game.Spells
|
|||||||
case AuraType.PeriodicTriggerSpell:
|
case AuraType.PeriodicTriggerSpell:
|
||||||
HandlePeriodicTriggerSpellAuraTick(target, caster);
|
HandlePeriodicTriggerSpellAuraTick(target, caster);
|
||||||
break;
|
break;
|
||||||
|
case AuraType.PeriodicTriggerSpellFromClient:
|
||||||
|
// Don't actually do anything - client will trigger casts of these spells by itself
|
||||||
|
break;
|
||||||
case AuraType.PeriodicTriggerSpellWithValue:
|
case AuraType.PeriodicTriggerSpellWithValue:
|
||||||
HandlePeriodicTriggerSpellWithValueAuraTick(target, caster);
|
HandlePeriodicTriggerSpellWithValueAuraTick(target, caster);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -2705,7 +2705,7 @@ namespace Game.Spells
|
|||||||
case AuraType.PeriodicHeal:
|
case AuraType.PeriodicHeal:
|
||||||
case AuraType.ObsModHealth:
|
case AuraType.ObsModHealth:
|
||||||
case AuraType.ObsModPower:
|
case AuraType.ObsModPower:
|
||||||
case AuraType.Unk48:
|
case AuraType.PeriodicTriggerSpellFromClient:
|
||||||
case AuraType.PowerBurn:
|
case AuraType.PowerBurn:
|
||||||
case AuraType.PeriodicLeech:
|
case AuraType.PeriodicLeech:
|
||||||
case AuraType.PeriodicManaLeech:
|
case AuraType.PeriodicManaLeech:
|
||||||
@@ -3530,6 +3530,7 @@ namespace Game.Spells
|
|||||||
case AuraType.AddTargetTrigger:
|
case AuraType.AddTargetTrigger:
|
||||||
return true;
|
return true;
|
||||||
case AuraType.PeriodicTriggerSpellWithValue:
|
case AuraType.PeriodicTriggerSpellWithValue:
|
||||||
|
case AuraType.PeriodicTriggerSpellFromClient:
|
||||||
case AuraType.PeriodicTriggerSpell:
|
case AuraType.PeriodicTriggerSpell:
|
||||||
if (!_isPositiveTarget(effect))
|
if (!_isPositiveTarget(effect))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2935,6 +2935,7 @@ namespace Game.Entities
|
|||||||
switch (spellEffectInfo.ApplyAuraName)
|
switch (spellEffectInfo.ApplyAuraName)
|
||||||
{
|
{
|
||||||
case AuraType.PeriodicTriggerSpell:
|
case AuraType.PeriodicTriggerSpell:
|
||||||
|
case AuraType.PeriodicTriggerSpellFromClient:
|
||||||
case AuraType.PeriodicTriggerSpellWithValue:
|
case AuraType.PeriodicTriggerSpellWithValue:
|
||||||
SpellInfo triggerSpell = Global.SpellMgr.GetSpellInfo(spellEffectInfo.TriggerSpell, Difficulty.None);
|
SpellInfo triggerSpell = Global.SpellMgr.GetSpellInfo(spellEffectInfo.TriggerSpell, Difficulty.None);
|
||||||
if (triggerSpell != null)
|
if (triggerSpell != null)
|
||||||
@@ -3257,7 +3258,8 @@ namespace Game.Entities
|
|||||||
43109, // Throw Torch
|
43109, // Throw Torch
|
||||||
58552, // Return to Orgrimmar
|
58552, // Return to Orgrimmar
|
||||||
58533, // Return to Stormwind
|
58533, // Return to Stormwind
|
||||||
21855 // Challenge Flag
|
21855, // Challenge Flag
|
||||||
|
51122 // Fierce Lightning Stike
|
||||||
}, spellInfo =>
|
}, spellInfo =>
|
||||||
{
|
{
|
||||||
spellInfo.MaxAffectedTargets = 1;
|
spellInfo.MaxAffectedTargets = 1;
|
||||||
@@ -3578,6 +3580,14 @@ namespace Game.Entities
|
|||||||
spellInfo.RangeEntry = CliDB.SpellRangeStorage.LookupByKey(13); // 50000yd
|
spellInfo.RangeEntry = CliDB.SpellRangeStorage.LookupByKey(13); // 50000yd
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ApplySpellFix(new[] {
|
||||||
|
44327, // Trained Rock Falcon/Hawk Hunting
|
||||||
|
44408 // Trained Rock Falcon/Hawk Hunting
|
||||||
|
}, spellInfo =>
|
||||||
|
{
|
||||||
|
spellInfo.Speed = 0.0f;
|
||||||
|
});
|
||||||
|
|
||||||
// Summon Corpse Scarabs
|
// Summon Corpse Scarabs
|
||||||
ApplySpellFix(new[] { 28864, 29105 }, spellInfo =>
|
ApplySpellFix(new[] { 28864, 29105 }, spellInfo =>
|
||||||
{
|
{
|
||||||
@@ -3917,6 +3927,13 @@ namespace Game.Entities
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Mutated Transformation (Professor Putricide)
|
||||||
|
ApplySpellFix(new[] { 70402 }, spellInfo =>
|
||||||
|
{
|
||||||
|
// Resistance is calculated inside of SpellScript
|
||||||
|
spellInfo.AttributesEx4 |= SpellAttr4.IgnoreResistances;
|
||||||
|
});
|
||||||
|
|
||||||
// Empowered Flare (Blood Prince Council)
|
// Empowered Flare (Blood Prince Council)
|
||||||
ApplySpellFix(new[] { 71708 }, spellInfo =>
|
ApplySpellFix(new[] { 71708 }, spellInfo =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user