Core/Scripts: Expose calculated spell value variance to scripts

Port From (https://github.com/TrinityCore/TrinityCore/commit/701532f9f033547a5fc2d0b594d04f6349cb441b)
This commit is contained in:
hondacrx
2022-07-16 19:31:17 -04:00
parent e521433e38
commit 8673a45f08
3 changed files with 29 additions and 7 deletions
+22
View File
@@ -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; }
+2 -2
View File
@@ -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
+5 -5
View File
@@ -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);