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); }