Ejemplo n.º 1
0
        public static void Calculate(float bonusDamage, Race attacker, Race[] targets)
        {
            var stat = attacker.GetModule <StatModule> ();

            foreach (var target in targets)
            {
                var targetStat = target.GetModule <StatModule> ();
                var isHit      = AccuracyCalculator.IsHit(stat.attackRating, targetStat.attackRating);
                isHit = !isHit?AccuracyCalculator.MakeSureHit(attacker) : isHit;

                if (isHit)
                {
                    var isCritHit = AccuracyCalculator.IsCriticalHit(attacker, stat.criticalRating);
                    isCritHit = !isCritHit?AccuracyCalculator.MakeSureCritical(attacker) : isCritHit;

                    // optional Damage
                    var outputDamage = AttackPowerCalculator.TakeDamage(bonusDamage, targetStat.magicResist, isCritHit);
                    AccuracyCalculator.HandleCriticalDamage(ref outputDamage, attacker, target);
                    AttackPowerCalculator.HandleDamage(ref outputDamage, attacker, target);
                    target.GetModule <HealthPowerModule> (x => x.SubtractHp(outputDamage));
                }
                else
                {
                    var isCritHit = AccuracyCalculator.IsCriticalHit(attacker, stat.criticalRating);
                    var damage    = AttackPowerCalculator.TakeDamage(bonusDamage, targetStat.physicalDefend, isCritHit);
                    Affect.GetSubAffects <IMissingHandler>(target, handler => handler.HandleMissing(damage, attacker));
                }
            }
        }
Ejemplo n.º 2
0
        public float GetStat(string name)
        {
            var val = .0f;

            Affect.GetSubAffects <GearAffect> (_race, x => {
                var fi = x.GetType().GetField(name);
                if (fi != null)
                {
                    var v = fi.GetValue(x);
                    val  += (float)System.Convert.ChangeType(v, typeof(float));
                }
            });
            return(val);
        }
Ejemplo n.º 3
0
        public static bool IsCriticalHit(Race who, float attackerCHC)
        {
            var addition   = 0f;
            var percentCHC = attackerCHC * 100f;

            Affect.GetSubAffects <IAdditionalCriticalHitChange> (who, x => {
                addition += x.additionalCriticalHitChange;
            });
            addition  *= 100f;
            percentCHC = Mathf.Min(percentCHC + addition, 100f);

            var chcProbability = Probability.Initialize(new bool[] { false, true }, new float[] {
                100f - percentCHC,
                percentCHC
            });
            var chcResult = Probability.GetValueInProbability(chcProbability);

            return(chcResult);
        }