Core/Scripts: Expose calculated spell value variance to scripts
Port From (https://github.com/TrinityCore/TrinityCore/commit/701532f9f033547a5fc2d0b594d04f6349cb441b)
This commit is contained in:
@@ -914,6 +914,28 @@ namespace Game.Scripting
|
|||||||
m_spell.damage = value;
|
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.
|
// returns: cast item if present.
|
||||||
public Item GetCastItem() { return m_spell.m_CastItem; }
|
public Item GetCastItem() { return m_spell.m_CastItem; }
|
||||||
|
|
||||||
|
|||||||
@@ -4587,7 +4587,7 @@ namespace Game.Spells
|
|||||||
destTarget = m_destTargets[spellEffectInfo.EffectIndex].Position;
|
destTarget = m_destTargets[spellEffectInfo.EffectIndex].Position;
|
||||||
effectInfo = spellEffectInfo;
|
effectInfo = spellEffectInfo;
|
||||||
|
|
||||||
damage = CalculateDamage(spellEffectInfo, unitTarget, out _variance);
|
damage = CalculateDamage(spellEffectInfo, unitTarget, out variance);
|
||||||
|
|
||||||
bool preventDefault = CallScriptEffectHandlers(spellEffectInfo.EffectIndex, mode);
|
bool preventDefault = CallScriptEffectHandlers(spellEffectInfo.EffectIndex, mode);
|
||||||
|
|
||||||
@@ -8001,7 +8001,7 @@ namespace Game.Spells
|
|||||||
public WorldLocation destTarget;
|
public WorldLocation destTarget;
|
||||||
public int damage;
|
public int damage;
|
||||||
public SpellMissInfo targetMissInfo;
|
public SpellMissInfo targetMissInfo;
|
||||||
float _variance;
|
public float variance;
|
||||||
SpellEffectHandleMode effectHandleMode;
|
SpellEffectHandleMode effectHandleMode;
|
||||||
public SpellEffectInfo effectInfo;
|
public SpellEffectInfo effectInfo;
|
||||||
// used in effects handlers
|
// used in effects handlers
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ namespace Game.Spells
|
|||||||
if (unitCaster != null && apply_direct_bonus)
|
if (unitCaster != null && apply_direct_bonus)
|
||||||
{
|
{
|
||||||
uint bonus = unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo);
|
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);
|
damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -688,7 +688,7 @@ namespace Game.Spells
|
|||||||
if (unitCaster != null)
|
if (unitCaster != null)
|
||||||
{
|
{
|
||||||
uint bonus = unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo);
|
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);
|
damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -810,7 +810,7 @@ namespace Game.Spells
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint bonus = unitCaster.SpellHealingBonusDone(unitTarget, m_spellInfo, (uint)addhealth, DamageEffectType.Heal, effectInfo);
|
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);
|
addhealth = (int)unitTarget.SpellHealingBonusTaken(unitCaster, m_spellInfo, (uint)addhealth, DamageEffectType.Heal);
|
||||||
@@ -856,7 +856,7 @@ namespace Game.Spells
|
|||||||
if (unitCaster)
|
if (unitCaster)
|
||||||
heal = unitCaster.SpellHealingBonusDone(unitTarget, m_spellInfo, heal, DamageEffectType.Heal, effectInfo);
|
heal = unitCaster.SpellHealingBonusDone(unitTarget, m_spellInfo, heal, DamageEffectType.Heal, effectInfo);
|
||||||
|
|
||||||
heal += (uint)(heal * _variance);
|
heal += (uint)(heal * variance);
|
||||||
if (unitCaster)
|
if (unitCaster)
|
||||||
heal = unitTarget.SpellHealingBonusTaken(unitCaster, m_spellInfo, heal, DamageEffectType.Heal);
|
heal = unitTarget.SpellHealingBonusTaken(unitCaster, m_spellInfo, heal, DamageEffectType.Heal);
|
||||||
|
|
||||||
@@ -877,7 +877,7 @@ namespace Game.Spells
|
|||||||
if (unitCaster != null)
|
if (unitCaster != null)
|
||||||
unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo);
|
unitCaster.SpellDamageBonusDone(unitTarget, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect, effectInfo);
|
||||||
|
|
||||||
damage = (int)(bonus + (bonus * _variance));
|
damage = (int)(bonus + (bonus * variance));
|
||||||
|
|
||||||
if (unitCaster != null)
|
if (unitCaster != null)
|
||||||
damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect);
|
damage = (int)unitTarget.SpellDamageBonusTaken(unitCaster, m_spellInfo, (uint)damage, DamageEffectType.SpellDirect);
|
||||||
|
|||||||
Reference in New Issue
Block a user