public CreatureStatus(Xml.Status xmlstatus, Creature target, Xml.Castable castable = null, Creature source = null, int duration = -1, int tickFrequency = -1, double intensity = 1.0) { Target = target; XmlStatus = xmlstatus; Start = DateTime.Now; Target = target; Source = source; Duration = duration == -1 ? xmlstatus.Duration : duration; Tick = tickFrequency == -1 ? xmlstatus.Tick : tickFrequency; Intensity = intensity; // Calculate damage/heal effects. Note that a castable MUST be passed here for a status // to have damage effects as the castable itself has fields we need to access // (intensity, etc) in order to do damage calculations. if (castable != null) { var start = CalculateNumericEffects(castable, xmlstatus.Effects.OnApply, source); var tick = CalculateNumericEffects(castable, xmlstatus.Effects.OnTick, source); var end = CalculateNumericEffects(castable, xmlstatus.Effects.OnRemove, source); var expire = CalculateNumericEffects(castable, xmlstatus.Effects.OnExpire, source); OnStartEffect = new SimpleStatusEffect(start.Heal, start.Damage); OnTickEffect = new SimpleStatusEffect(tick.Heal, tick.Damage); OnRemoveEffect = new SimpleStatusEffect(end.Heal, end.Damage); OnExpireEffect = new SimpleStatusEffect(expire.Heal, expire.Damage); } }
private void ProcessNumericEffects(SimpleStatusEffect effect) { if (effect == null) { return; } if (effect.Damage != null && effect.Damage.Amount != 0) { Target.Damage(effect.Damage.Amount, effect.Damage.Element, effect.Damage.Type, effect.Damage.Flags, Source); } if (effect.Heal != 0) { Target.Heal(effect.Heal, Source); } }
private void ProcessNumericEffects(SimpleStatusEffect effect) { }