public static void ApplyModifierToFloat(DamageTypeValues modifier, HitData.DamageType dmgType, ref float damage) { var resist = modifier.GetByType(dmgType); if (resist != 0) { damage -= damage * (resist / 100f); } }
public static void ApplyModifierToHit(DamageTypeValues modifier, ref HitData hit) { ApplyModifierToFloat(modifier, HitData.DamageType.Blunt, ref hit.m_damage.m_blunt); ApplyModifierToFloat(modifier, HitData.DamageType.Pierce, ref hit.m_damage.m_pierce); ApplyModifierToFloat(modifier, HitData.DamageType.Slash, ref hit.m_damage.m_slash); ApplyModifierToFloat(modifier, HitData.DamageType.Fire, ref hit.m_damage.m_fire); ApplyModifierToFloat(modifier, HitData.DamageType.Frost, ref hit.m_damage.m_frost); ApplyModifierToFloat(modifier, HitData.DamageType.Lightning, ref hit.m_damage.m_lightning); ApplyModifierToFloat(modifier, HitData.DamageType.Poison, ref hit.m_damage.m_poison); ApplyModifierToFloat(modifier, HitData.DamageType.Spirit, ref hit.m_damage.m_spirit); }
public void UpdateCaster() { if (caster == null) { return; } var dmg = caster.GetCurrentWeapon().GetDamage(); casterWeaponDmg = dmg.GetTotalElementalDamage() + dmg.GetTotalPhysicalDamage(); casterPowerMods = caster.ExtendedCharacter(false)?.runicPowerModifier ?? new DamageTypeValues(); }
public void ModifyPower(ref DamageTypeValues mod) { if (data.effect == null) { return; } foreach (HitData.DamageType dmgType in dmgTypes) { var power = GetPower(dmgType); mod.AddByType(dmgType, power); } }
public void ModifyResist(ref DamageTypeValues mod) { if (data.effect == null) { return; } foreach (HitData.DamageType dmgType in dmgTypes) { var resist = GetResist(dmgType); var expose = GetExpose(); mod.AddByType(dmgType, resist - expose); } }
public void AppendPower(ref DamageTypeValues power) // TODO: stop using this, use ModifyPower { if (data.effect == null) { return; } // MULTIPLIERS foreach (HitData.DamageType dmgType in dmgTypes) { var value = GetPower(dmgType); if (value != 0) { power.AddByType(dmgType, value); } } }
public float GetSkilledTypedValue(DamageTypeValues source, HitData.DamageType dmgType, float skillMultiplier, float weaponMultiplier, float?capValue = null) { float skill = GetSkill(); var value = source.GetByType(dmgType) / 100f; if (value == 0) { return(0); } // each skill level increases damage by x var skilled = value * skillMultiplier * skill; // each skill level increases damage by +x% of weapon damage var weapon = casterWeaponDmg * skill * weaponMultiplier / 100f; // getting the total base value var total = skilled + weapon; // checking for cap values if (capValue != null && total > capValue) { total = (float)capValue; } // returning a rounded value return(total); }