示例#1
0
        // Damage dealing function that works with either monster or character
        public int DealtDamage(BattleTile attacker)
        {
            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Damage Calculation Begins"));
            // Roll 20 for attack type.
            Random rng  = new Random();
            int    roll = 1 + rng.Next(20);

            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Rolled: " + roll));

            // Applies to hit Rule
            if (ToHit > 0)
            {
                roll = ToHit;
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("ToHit Applied: " + ToHit));
            }

            // Applies Miss at roll/ToHit 1 Rule
            if (Miss1 && roll == 1)
            {
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Missed"));
                DamageStatus = "Miss";
                return(0);
                // Applies Critical Miss at 1 rule
            }
            else if (CriticalMiss1 && roll == 1)
            {
                DamageStatus = "Critical Miss";
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Miss"));
                return(0);
            }

            // Applies Hit at roll/ToHit 20 Rule
            bool hit           = false;
            bool criticalHit   = false;
            bool focusedAttack = false;

            if (Hit20 && roll == 20)
            {
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Hit20"));
                DamageStatus = "Hit";
                hit          = true;

                // Applies critical hit rule at 20
            }
            else if (Critical20 && roll == 20)
            {
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Hit"));
                DamageStatus = "Critical Hit";
                criticalHit  = true;

                // Applies focused attack rule
            }
            else if (BattleSystemViewModel.Instance.FocusedAttack && BattleSystemViewModel.Instance.UseFocusedAttack)
            {
                if (attacker.Type == "Character" && attacker.Hero.UnequipAllItems().Count > 0)
                {
                    BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Focused Attack Applied"));
                    DamageStatus  = "Focused Attack";
                    FocusedAttack = true;
                }
            }

            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Attacker Attack: " + attacker.GetAttack()));
            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Attacker Level: " + attacker.GetLevel()));
            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Target Defense: " + GetDefense()));
            BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Target Level: " + GetLevel()));
            // Hit Designation
            if (roll + attacker.GetLevel() + attacker.GetAttack() > GetDefense() + GetLevel() || hit || criticalHit || focusedAttack)
            {
                int damage = 0;
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Hit Success"));
                // Level Damage
                int lvlDamage = (int)(attacker.GetLevel() * .25) + 1;
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Level Damage: " + lvlDamage));
                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Weapon Damage: " + attacker.GetDamage()));
                // Applies Disable RNG Rule
                if (DisableRNG)
                {
                    damage = attacker.GetDamage() + lvlDamage + attacker.GetAttack();
                    BattleSystemViewModel.Instance.AddTxt(new StringWrapper("RNG Disabled damage: " + damage));
                }

                // RNG enabled rule
                else
                {
                    Random weaponDamage = new Random();
                    damage = (1 + weaponDamage.Next(attacker.GetDamage() + attacker.GetAttack())) + lvlDamage;
                    BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Resulting Damage: " + damage));
                }

                // Critical hit doubles the damage dealt
                if (criticalHit)
                {
                    damage = 2 * damage;
                    BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Applied damage: " + damage));
                }

                // Focused attack deals 10 times the damage dealt
                if (focusedAttack)
                {
                    damage = 10 * damage;
                    BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Focus Attack Applied damage: " + damage));
                }

                // Update life bar of this Combatant
                UpdateLifeBar(damage);

                BattleSystemViewModel.Instance.AddTxt(new StringWrapper("End Damage"));
                // Return damage delt for recording
                return(damage);
            }
            // Missed
            return(0);
        }