Core/Spells: Split TRIGGERED_IGNORE_POWER_AND_REAGENT_COST into separate POWER and REAGENT flags
Port From (https://github.com/TrinityCore/TrinityCore/commit/151a50d2aa6e10efe7fc14e0bd22aaef9effa859)
This commit is contained in:
@@ -1579,13 +1579,13 @@ namespace Framework.Constants
|
|||||||
None = 0x0, //! Not Triggered
|
None = 0x0, //! Not Triggered
|
||||||
IgnoreGCD = 0x01, //! Will Ignore Gcd
|
IgnoreGCD = 0x01, //! Will Ignore Gcd
|
||||||
IgnoreSpellAndCategoryCD = 0x02, //! Will Ignore Spell And Category Cooldowns
|
IgnoreSpellAndCategoryCD = 0x02, //! Will Ignore Spell And Category Cooldowns
|
||||||
IgnorePowerAndReagentCost = 0x04, //! Will Ignore Power And Reagent Cost
|
IgnorePowerCost = 0x04, //! Will Ignore Power Cost
|
||||||
IgnoreCastItem = 0x08, //! Will Not Take Away Cast Item Or Update Related Achievement Criteria
|
IgnoreCastItem = 0x08, //! Will Not Take Away Cast Item Or Update Related Achievement Criteria
|
||||||
IgnoreAuraScaling = 0x10, //! Will Ignore Aura Scaling
|
IgnoreAuraScaling = 0x10, //! Will Ignore Aura Scaling
|
||||||
IgnoreCastInProgress = 0x20, //! Will Not Check If A Current Cast Is In Progress
|
IgnoreCastInProgress = 0x20, //! Will Not Check If A Current Cast Is In Progress
|
||||||
IgnoreCastTime = 0x40, //! Will always be instantly cast
|
IgnoreCastTime = 0x40, //! Will always be instantly cast
|
||||||
CastDirectly = 0x80, //! In Spell.Prepare, Will Be Cast Directly Without Setting Containers For Executed Spell
|
CastDirectly = 0x80, //! In Spell.Prepare, Will Be Cast Directly Without Setting Containers For Executed Spell
|
||||||
// reuse = 0x100, //
|
IgnoreReagentCost = 0x04, //! Will Ignore Reagent Cost
|
||||||
IgnoreSetFacing = 0x200, //! Will Not Adjust Facing To Target (If Any)
|
IgnoreSetFacing = 0x200, //! Will Not Adjust Facing To Target (If Any)
|
||||||
IgnoreShapeshift = 0x400, //! Will Ignore Shapeshift Checks
|
IgnoreShapeshift = 0x400, //! Will Ignore Shapeshift Checks
|
||||||
// reuse = 0x800, //
|
// reuse = 0x800, //
|
||||||
|
|||||||
@@ -957,9 +957,9 @@ namespace Game.Entities
|
|||||||
if (info != null)
|
if (info != null)
|
||||||
{
|
{
|
||||||
if (auraEffect.GetSpellInfo().HasAttribute(SpellAttr8.IgnoreSpellcastOverrideCost))
|
if (auraEffect.GetSpellInfo().HasAttribute(SpellAttr8.IgnoreSpellcastOverrideCost))
|
||||||
triggerFlag |= TriggerCastFlags.IgnorePowerAndReagentCost;
|
triggerFlag |= TriggerCastFlags.IgnorePowerCost;
|
||||||
else
|
else
|
||||||
triggerFlag &= ~TriggerCastFlags.IgnorePowerAndReagentCost;
|
triggerFlag &= ~TriggerCastFlags.IgnorePowerCost;
|
||||||
|
|
||||||
if (auraEffect.GetSpellInfo().HasAttribute(SpellAttr11.IgnoreSpellcastOverrideShapeshiftRequirements))
|
if (auraEffect.GetSpellInfo().HasAttribute(SpellAttr11.IgnoreSpellcastOverrideShapeshiftRequirements))
|
||||||
triggerFlag |= TriggerCastFlags.IgnoreShapeshift;
|
triggerFlag |= TriggerCastFlags.IgnoreShapeshift;
|
||||||
|
|||||||
+10
-10
@@ -3002,12 +3002,12 @@ namespace Game.Spells
|
|||||||
}
|
}
|
||||||
|
|
||||||
Item targetItem = m_targets.GetItemTarget();
|
Item targetItem = m_targets.GetItemTarget();
|
||||||
if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerAndReagentCost))
|
// Powers have to be taken before SendSpellGo
|
||||||
{
|
if (!_triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnorePowerCost))
|
||||||
// Powers have to be taken before SendSpellGo
|
|
||||||
TakePower();
|
TakePower();
|
||||||
TakeReagents(); // we must remove reagents before HandleEffects to allow place crafted item in same slot
|
|
||||||
}
|
if (!_triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnoreReagentCost))
|
||||||
|
TakeReagents(); // we must remove reagents before HandleEffects to allow place crafted item in same slot
|
||||||
else if (targetItem != null)
|
else if (targetItem != null)
|
||||||
{
|
{
|
||||||
// Not own traded item (in trader trade slot) req. reagents including triggered spell case
|
// Not own traded item (in trader trade slot) req. reagents including triggered spell case
|
||||||
@@ -4044,11 +4044,11 @@ namespace Game.Spells
|
|||||||
if (m_spellInfo.HasAttribute(SpellAttr0.UsesRangedSlot) || m_spellInfo.HasAttribute(SpellAttr10.UsesRangedSlotCosmeticOnly) || m_spellInfo.HasAttribute(SpellCustomAttributes.NeedsAmmoData))
|
if (m_spellInfo.HasAttribute(SpellAttr0.UsesRangedSlot) || m_spellInfo.HasAttribute(SpellAttr10.UsesRangedSlotCosmeticOnly) || m_spellInfo.HasAttribute(SpellCustomAttributes.NeedsAmmoData))
|
||||||
castFlags |= SpellCastFlags.Projectile; // arrows/bullets visual
|
castFlags |= SpellCastFlags.Projectile; // arrows/bullets visual
|
||||||
|
|
||||||
if ((m_caster.IsTypeId(TypeId.Player) || (m_caster.IsTypeId(TypeId.Unit) && m_caster.ToCreature().IsPet())) && m_powerCost.Any(cost => cost.Power != PowerType.Health))
|
if ((m_caster.IsPlayer() || (m_caster.IsTypeId(TypeId.Unit) && m_caster.ToCreature().IsPet())) && m_powerCost.Any(cost => cost.Power != PowerType.Health))
|
||||||
castFlags |= SpellCastFlags.PowerLeftSelf;
|
castFlags |= SpellCastFlags.PowerLeftSelf;
|
||||||
|
|
||||||
if (m_caster.IsTypeId(TypeId.Player) && m_caster.ToPlayer().GetClass() == Class.Deathknight &&
|
if (m_caster.IsPlayer() && m_caster.ToPlayer().GetClass() == Class.Deathknight &&
|
||||||
HasPowerTypeCost(PowerType.Runes) && !_triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnorePowerAndReagentCost))
|
HasPowerTypeCost(PowerType.Runes) && !_triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnorePowerCost))
|
||||||
{
|
{
|
||||||
castFlags |= SpellCastFlags.NoGCD; // same as in SMSG_SPELL_START
|
castFlags |= SpellCastFlags.NoGCD; // same as in SMSG_SPELL_START
|
||||||
castFlags |= SpellCastFlags.RuneList; // rune cooldowns list
|
castFlags |= SpellCastFlags.RuneList; // rune cooldowns list
|
||||||
@@ -5369,7 +5369,7 @@ namespace Game.Spells
|
|||||||
if (castResult != SpellCastResult.SpellCastOk)
|
if (castResult != SpellCastResult.SpellCastOk)
|
||||||
return castResult;
|
return castResult;
|
||||||
|
|
||||||
if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerAndReagentCost))
|
if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerCost))
|
||||||
{
|
{
|
||||||
castResult = CheckPower();
|
castResult = CheckPower();
|
||||||
if (castResult != SpellCastResult.SpellCastOk)
|
if (castResult != SpellCastResult.SpellCastOk)
|
||||||
@@ -6772,7 +6772,7 @@ namespace Game.Spells
|
|||||||
// do not take reagents for these item casts
|
// do not take reagents for these item casts
|
||||||
if (!(m_CastItem != null && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost)))
|
if (!(m_CastItem != null && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost)))
|
||||||
{
|
{
|
||||||
bool checkReagents = !Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerAndReagentCost) && !player.CanNoReagentCast(m_spellInfo);
|
bool checkReagents = !Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnoreReagentCost) && !player.CanNoReagentCast(m_spellInfo);
|
||||||
// Not own traded item (in trader trade slot) requires reagents even if triggered spell
|
// Not own traded item (in trader trade slot) requires reagents even if triggered spell
|
||||||
if (!checkReagents)
|
if (!checkReagents)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ namespace Scripts.DragonIsles.AzureVault.Leymor
|
|||||||
if (instance.GetData(DataTypes.LeymorIntroDone) != 0)
|
if (instance.GetData(DataTypes.LeymorIntroDone) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
me.SetUnitFlag(UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc);
|
me.SetImmuneToAll(true);
|
||||||
DoCastSelf(SpellIds.Stasis);
|
DoCastSelf(SpellIds.Stasis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ namespace Scripts.DragonIsles.AzureVault.Leymor
|
|||||||
_scheduler.Schedule(TimeSpan.FromSeconds(1), _ =>
|
_scheduler.Schedule(TimeSpan.FromSeconds(1), _ =>
|
||||||
{
|
{
|
||||||
me.RemoveAurasDueToSpell(SpellIds.Stasis);
|
me.RemoveAurasDueToSpell(SpellIds.Stasis);
|
||||||
me.RemoveUnitFlag(UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc);
|
me.SetImmuneToAll(false);
|
||||||
DoCastSelf(SpellIds.ArcaneEruption);
|
DoCastSelf(SpellIds.ArcaneEruption);
|
||||||
Talk(MiscConst.SayAnnounceAwaken);
|
Talk(MiscConst.SayAnnounceAwaken);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ namespace Scripts.Events.Brewfest
|
|||||||
PreventHitDefaultEffect(effIndex);
|
PreventHitDefaultEffect(effIndex);
|
||||||
// All this spells trigger a spell that requires reagents; if the
|
// All this spells trigger a spell that requires reagents; if the
|
||||||
// triggered spell is cast as "triggered", reagents are not consumed
|
// triggered spell is cast as "triggered", reagents are not consumed
|
||||||
GetHitUnit().CastSpell(null, GetEffectInfo().TriggerSpell, TriggerCastFlags.FullMask & ~TriggerCastFlags.IgnorePowerAndReagentCost);
|
GetHitUnit().CastSpell(null, GetEffectInfo().TriggerSpell, TriggerCastFlags.FullMask & ~TriggerCastFlags.IgnoreReagentCost);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Register()
|
public override void Register()
|
||||||
|
|||||||
@@ -1241,7 +1241,7 @@ namespace Scripts.Spells.Druid
|
|||||||
if (targetList.Empty())
|
if (targetList.Empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rejuvCaster.CastSpell(targetList.SelectRandom(), SpellIds.Rejuvenation, TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnorePowerAndReagentCost | TriggerCastFlags.IgnoreCastInProgress);
|
rejuvCaster.CastSpell(targetList.SelectRandom(), SpellIds.Rejuvenation, TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnorePowerCost | TriggerCastFlags.IgnoreCastInProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Register()
|
public override void Register()
|
||||||
|
|||||||
@@ -2730,7 +2730,7 @@ namespace Scripts.Spells.Priest
|
|||||||
Unit target = ObjAccessor.GetUnit(caster, _raptureTarget);
|
Unit target = ObjAccessor.GetUnit(caster, _raptureTarget);
|
||||||
if (target != null)
|
if (target != null)
|
||||||
caster.CastSpell(target, SpellIds.PowerWordShield,
|
caster.CastSpell(target, SpellIds.PowerWordShield,
|
||||||
new CastSpellExtraArgs(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnorePowerAndReagentCost | TriggerCastFlags.IgnoreCastInProgress)
|
new CastSpellExtraArgs(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnorePowerCost | TriggerCastFlags.IgnoreCastInProgress)
|
||||||
.SetTriggeringSpell(GetSpell()));
|
.SetTriggeringSpell(GetSpell()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3466,7 +3466,7 @@ namespace Scripts.Spells.Priest
|
|||||||
{
|
{
|
||||||
GetCaster().CastSpell(GetHitUnit(), SpellIds.VampiricTouch, new CastSpellExtraArgs()
|
GetCaster().CastSpell(GetHitUnit(), SpellIds.VampiricTouch, new CastSpellExtraArgs()
|
||||||
.SetTriggeringSpell(GetSpell())
|
.SetTriggeringSpell(GetSpell())
|
||||||
.SetTriggerFlags(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnoreSpellAndCategoryCD | TriggerCastFlags.IgnorePowerAndReagentCost | TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.IgnoreCastTime | TriggerCastFlags.DontReportCastError));
|
.SetTriggerFlags(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnoreSpellAndCategoryCD | TriggerCastFlags.IgnorePowerCost | TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.IgnoreCastTime | TriggerCastFlags.DontReportCastError));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Register()
|
public override void Register()
|
||||||
|
|||||||
Reference in New Issue
Block a user