Example #1
0
        private bool HandleSpecific(EffectContext context, out decimal value)
        {
            if (context.Equals(StaticEffectContext.CriticalDamage))
            {
                var criticalDamage = SafeReadStaticEffect(StaticEffectContext.CriticalDamage) ?? 0;
                var attack         = SafeReadStaticEffect(StaticEffectContext.Attack) ?? 0;

                value = (int)(criticalDamage + attack * .8m);
                return(true);
            }

            if (context.Equals(StaticEffectContext.Hp))
            {
                var hp     = SafeReadStaticEffect(StaticEffectContext.Hp) ?? 0;
                var hpRate = SafeReadStaticEffect(StaticEffectContext.HpRate) ?? 0;
                var baseHp = _character.Get() !.BaseEffect.First(x => x.Context.Equals(StaticEffectContext.Hp)).Value;

                value = (int)(hp + baseHp * hpRate);
                return(true);
            }

            if (context.Equals(StaticEffectContext.HpRate))
            {
                throw new ApplicationInvalidOperationException(StaticEffectContext.Hp);
            }

            // It should process by equipment itself
            if (context.Equals(StaticEffectContext.WeaponAttack) ||
                context.Equals(StaticEffectContext.WeaponAttackRate) ||
                context.Equals(StaticEffectContext.GearDefense) ||
                context.Equals(StaticEffectContext.GearDefenseRate))
            {
                Console.WriteLine($"WARN: Context {context} not handle correctly");
                value = 0;
                throw new InvalidOperationException();
            }

            value = 0;
            return(false);
        }