mirror of
https://github.com/ACEmulator/ACE
synced 2026-08-17 12:26:06 -04:00
* add support for FoeType * add support for Tolerance.Target and possible Tolerance.Monster ? * upgraded Tolerance handling * add limited support for negative damage * fix null exception from DnF testing
64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using System;
|
|
|
|
using ACE.Entity.Enum.Properties;
|
|
using ACE.Server.WorldObjects;
|
|
|
|
namespace ACE.Server.Entity
|
|
{
|
|
public class BaseDamageMod
|
|
{
|
|
public BaseDamage BaseDamage;
|
|
|
|
public float DamageBonus = 0.0f; // blood drinker
|
|
public float DamageMod = 1.0f; // for missile launchers (+113% yumis = 2.13)
|
|
public float VarianceMod = 1.0f;
|
|
|
|
public int ElementalBonus = 0;
|
|
|
|
public float MaxDamage
|
|
{
|
|
get
|
|
{
|
|
var maxDamage = (BaseDamage.MaxDamage + DamageBonus + ElementalBonus) * DamageMod;
|
|
|
|
if (BaseDamage.MaxDamage >= 0)
|
|
maxDamage = Math.Max(0, maxDamage);
|
|
else
|
|
maxDamage = Math.Min(0, maxDamage);
|
|
|
|
return maxDamage;
|
|
}
|
|
}
|
|
|
|
public float MinDamage => MaxDamage * (1.0f - BaseDamage.Variance * VarianceMod);
|
|
|
|
public Range Range => new Range(MinDamage, MaxDamage);
|
|
|
|
public BaseDamageMod(BaseDamage baseDamage)
|
|
{
|
|
BaseDamage = baseDamage;
|
|
}
|
|
|
|
public BaseDamageMod(BaseDamage baseDamage, Creature wielder, WorldObject weapon)
|
|
{
|
|
BaseDamage = baseDamage;
|
|
|
|
if (weapon == null)
|
|
return;
|
|
|
|
DamageBonus += weapon.EnchantmentManager.GetDamageBonus();
|
|
VarianceMod *= weapon.EnchantmentManager.GetVarianceMod();
|
|
|
|
DamageMod = (float)(weapon.GetProperty(PropertyFloat.DamageMod) ?? 1.0f) + weapon.EnchantmentManager.GetDamageMod();
|
|
|
|
if (weapon.IsEnchantable)
|
|
{
|
|
// factor in wielder auras for enchantable weapons
|
|
DamageBonus += wielder.EnchantmentManager.GetDamageBonus();
|
|
VarianceMod *= wielder.EnchantmentManager.GetVarianceMod();
|
|
|
|
DamageMod += wielder.EnchantmentManager.GetDamageMod();
|
|
}
|
|
}
|
|
}
|
|
}
|