public float GetRndMagicDamage(Skill skill, float baseMin, float baseMax)
{
var rnd = RandomProvider.Get();
// Base damage
float min = baseMin;
float max = baseMax;
// Bonus
var factor = rnd.Between(skill.RankData.FactorMin, skill.RankData.FactorMax);
var totalMagicAttack = this.MagicAttack + this.MagicAttackMod;
var wandBonus = 0f;
var chargeMultiplier = 0f;
if (skill.Info.Id == SkillId.Icebolt && this.RightHand != null && this.RightHand.HasTag("/ice_wand/"))
wandBonus = 5;
else if (skill.Info.Id == SkillId.Firebolt && this.RightHand != null && this.RightHand.HasTag("/fire_wand/"))
wandBonus = 5;
else if (skill.Info.Id == SkillId.Lightningbolt && this.RightHand != null && this.RightHand.HasTag("/lightning_wand/"))
wandBonus = 3.5f;
if (skill.Info.Id == SkillId.Firebolt || skill.Info.Id == SkillId.IceSpear || skill.Info.Id == SkillId.HailStorm)
chargeMultiplier = skill.Stacks;
var bonusDamage = (float)Math.Floor(wandBonus * (1 + chargeMultiplier)) + (factor * totalMagicAttack);
min += bonusDamage;
max += bonusDamage;
// Random balance multiplier
var multiplier = this.GetRndMagicBalance() / 100f;
if (min > max)
min = max;
return (min + (max - min) * multiplier);
}