diff --git a/Source/Game/Scripting/SpellScript.cs b/Source/Game/Scripting/SpellScript.cs index 31fd13676..a0322b091 100644 --- a/Source/Game/Scripting/SpellScript.cs +++ b/Source/Game/Scripting/SpellScript.cs @@ -914,6 +914,28 @@ namespace Game.Scripting m_spell.damage = value; } + public float GetEffectVariance() + { + if (!IsInEffectHook()) + { + Log.outError(LogFilter.Scripts, $"Script: `{m_scriptName}` Spell: `{m_scriptSpellId}`: function SpellScript::GetEffectVariance was called, but function has no effect in current hook!"); + return 0.0f; + } + + return m_spell.variance; + } + + public void SetEffectVariance(float variance) + { + if (!IsInEffectHook()) + { + Log.outError(LogFilter.Scripts, $"Script: `{m_scriptName}` Spell: `{m_scriptSpellId}`: function SpellScript::SetEffectVariance was called, but function has no effect in current hook!"); + return; + } + + m_spell.variance = variance; + } + // returns: cast item if present. public Item GetCastItem() { return m_spell.m_CastItem; } diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index 8a688e820..c2da5b1bd 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -4587,7 +4587,7 @@ namespace Game.Spells destTarget = m_destTargets[spellEffectInfo.EffectIndex].Position; effectInfo = spellEffectInfo; - damage = CalculateDamage(spellEffectInfo, unitTarget, out _variance); + damage = CalculateDamage(spellEffectInfo, unitTarget, out variance); bool preventDefault = CallScriptEffectHandlers(spellEffectInfo.EffectIndex, mode); @@ -8001,7 +8001,7 @@ namespace Game.Spells public WorldLocation destTarget; public int damage; public SpellMissInfo targetMissInfo; - float _variance; + public float variance; SpellEffectHandleMode effectHandleMode; public SpellEffectInfo effectInfo; // used in effects handlers diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 64384dde5..4f0cf0a23 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -168,7 +168,7 @@ namespace Game.Spells if (unitCaster != null && apply_direct_bonus) { uint bonus = unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo); - damage = (int)(bonus + (bonus * _variance)); + damage = (int)(bonus + (bonus * variance)); damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect); } @@ -688,7 +688,7 @@ namespace Game.Spells if (unitCaster != null) { uint bonus = unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo); - damage = (int)(bonus + (bonus * _variance)); + damage = (int)(bonus + (bonus * variance)); damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect); } @@ -810,7 +810,7 @@ namespace Game.Spells else { uint bonus = unitCaster.SpellHealingBonusDone(unitTarget, m_spellInfo, (uint)addhealth, DamageEffectType.Heal, effectInfo); - addhealth = (int)(bonus + (uint)(bonus * _variance)); + addhealth = (int)(bonus + (uint)(bonus * variance)); } addhealth = (int)unitTarget.SpellHealingBonusTaken(unitCaster, m_spellInfo, (uint)addhealth, DamageEffectType.Heal); @@ -856,7 +856,7 @@ namespace Game.Spells if (unitCaster) heal = unitCaster.SpellHealingBonusDone(unitTarget, m_spellInfo, heal, DamageEffectType.Heal, effectInfo); - heal += (uint)(heal * _variance); + heal += (uint)(heal * variance); if (unitCaster) heal = unitTarget.SpellHealingBonusTaken(unitCaster, m_spellInfo, heal, DamageEffectType.Heal); @@ -877,7 +877,7 @@ namespace Game.Spells if (unitCaster != null) unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo); - damage = (int)(bonus + (bonus * _variance)); + damage = (int)(bonus + (bonus * variance)); if (unitCaster != null) damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect);