示例#1
0
    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);
            BonusModifiers = NumberCruncher.CalculateStatusModifiers(castable, intensity, xmlstatus.Effects.OnApply.StatModifiers, source, target);
        }
    }
示例#2
0
 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);
     }
 }