Core/Spells: Define all spell modifier types and implement ProcCooldown mod and PeriodicHealingAndDamage for melee periodic damage
Port From (https://github.com/TrinityCore/TrinityCore/commit/6585666e6e34ade0333e4c23876acdf847d169c0)
This commit is contained in:
@@ -68,7 +68,7 @@ namespace Game.Spells
|
||||
|
||||
Player modOwner = caster.GetSpellModOwner();
|
||||
if (modOwner != null)
|
||||
modOwner.ApplySpellMod(info, SpellModOp.StackAmount, ref m_spellValue.AuraStackAmount, this);
|
||||
modOwner.ApplySpellMod(info, SpellModOp.Doses, ref m_spellValue.AuraStackAmount, this);
|
||||
|
||||
if (!originalCasterGUID.IsEmpty())
|
||||
m_originalCasterGUID = originalCasterGUID;
|
||||
@@ -1089,7 +1089,7 @@ namespace Game.Spells
|
||||
int maxTargets = effect.ChainTargets;
|
||||
Player modOwner = m_caster.GetSpellModOwner();
|
||||
if (modOwner)
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.JumpTargets, ref maxTargets, this);
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.ChainTargets, ref maxTargets, this);
|
||||
|
||||
if (maxTargets > 1)
|
||||
{
|
||||
@@ -1411,7 +1411,7 @@ namespace Game.Spells
|
||||
|
||||
Player modOwner = m_caster.GetSpellModOwner();
|
||||
if (modOwner)
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.JumpDistance, ref jumpRadius, this);
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.ChainJumpDistance, ref jumpRadius, this);
|
||||
|
||||
// chain lightning/heal spells and similar - allow to jump at larger distance and go out of los
|
||||
bool isBouncingFar = (m_spellInfo.HasAttribute(SpellAttr4.AreaTargetChain)
|
||||
@@ -4210,7 +4210,7 @@ namespace Game.Spells
|
||||
//lower spell cost on fail (by talent aura)
|
||||
Player modOwner = m_caster.ToPlayer().GetSpellModOwner();
|
||||
if (modOwner)
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.SpellCostRefundOnFail, ref cost.Amount);
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.PowerCostOnMiss, ref cost.Amount);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -6434,7 +6434,7 @@ namespace Game.Spells
|
||||
//check pushback reduce
|
||||
int delaytime = 500; // spellcasting delay is normally 500ms
|
||||
int delayReduce = 100; // must be initialized to 100 for percent modifiers
|
||||
m_caster.ToPlayer().ApplySpellMod(m_spellInfo, SpellModOp.NotLoseCastingTime, ref delayReduce, this);
|
||||
m_caster.ToPlayer().ApplySpellMod(m_spellInfo, SpellModOp.ResistPushback, ref delayReduce, this);
|
||||
delayReduce += m_caster.GetTotalAuraModifier(AuraType.ReducePushback) - 100;
|
||||
if (delayReduce >= 100)
|
||||
return;
|
||||
@@ -6469,7 +6469,7 @@ namespace Game.Spells
|
||||
//check pushback reduce
|
||||
int delaytime = MathFunctions.CalculatePct(m_spellInfo.GetDuration(), 25); // channeling delay is normally 25% of its time per hit
|
||||
int delayReduce = 100; // must be initialized to 100 for percent modifiers
|
||||
m_caster.ToPlayer().ApplySpellMod(m_spellInfo, SpellModOp.NotLoseCastingTime, ref delayReduce, this);
|
||||
m_caster.ToPlayer().ApplySpellMod(m_spellInfo, SpellModOp.ResistPushback, ref delayReduce, this);
|
||||
delayReduce += m_caster.GetTotalAuraModifier(AuraType.ReducePushback) - 100;
|
||||
if (delayReduce >= 100)
|
||||
return;
|
||||
@@ -7236,7 +7236,7 @@ namespace Game.Spells
|
||||
// gcd modifier auras are applied only to own spells and only players have such mods
|
||||
Player modOwner = m_caster.GetSpellModOwner();
|
||||
if (modOwner)
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.GlobalCooldown, ref gcd, this);
|
||||
modOwner.ApplySpellMod(m_spellInfo, SpellModOp.StartCooldown, ref gcd, this);
|
||||
|
||||
bool isMeleeOrRangedSpell = m_spellInfo.DmgClass == SpellDmgClass.Melee || m_spellInfo.DmgClass == SpellDmgClass.Ranged ||
|
||||
m_spellInfo.HasAttribute(SpellAttr0.ReqAmmo) || m_spellInfo.HasAttribute(SpellAttr0.Ability);
|
||||
@@ -7724,7 +7724,7 @@ namespace Game.Spells
|
||||
{
|
||||
public SpellModifier(Aura _ownerAura)
|
||||
{
|
||||
op = SpellModOp.Damage;
|
||||
op = SpellModOp.HealingAndDamage;
|
||||
type = SpellModType.Flat;
|
||||
value = 0;
|
||||
mask = new FlagArray128();
|
||||
|
||||
Reference in New Issue
Block a user