Exemple #1
0
        /// <summary>
        /// Controls battle based on current stance.
        /// </summary>
        /// <param name="Stance"></param>
        public void SetStanceModifier(Ifight attacker, Ifight defender)
        {
            ItemWeapon attackerWeapon = attacker.EquippedWeapon as ItemWeapon;
            ItemArmor  attackerArmor  = attacker.EquippedArmor as ItemArmor;
            ItemArmor  defenderArmor  = defender.EquippedArmor as ItemArmor;

            double damage = 0;
            int    healthModifier;

            switch (Stance)
            {
            case BattleStance.ATTACK:
                if (attackerWeapon.WeaponDamageType == defenderArmor.ArmorResistanceType)
                {
                    damage = Math.Round(attackerWeapon.WeaponDamageAmount * defenderArmor.ArmorResistModifier);
                }
                else
                {
                    damage = attackerWeapon.WeaponDamageAmount;
                }
                break;

            case BattleStance.DEFEND:
                damage = 0;
                break;

            case BattleStance.FLEE:
                //GameViewModel.OnPlayerFlee();
                damage = 0;
                break;

            default:
                break;
            }

            NPC defenderHealth = defender as NPC;

            healthModifier = (int)damage;

            defenderHealth.Health = defenderHealth.Health - healthModifier;
            // Temporary: To be moved to a method in the Fighter NPC
            switch (healthModifier)
            {
            case 0:
                defender.Stance = BattleStance.ATTACK;
                break;

            case 35:
                defender.Stance = BattleStance.DEFEND;
                break;

            case 50:
                defender.Stance = BattleStance.FLEE;
                break;

            default:
                break;
            }
        }
Exemple #2
0
        /// <summary>
        /// Controls battle based on current stance.
        /// </summary>
        /// <param name="Stance"></param>
        public void SetStanceModifier(Ifight attacker, Ifight defender)
        {
            ItemWeapon attackerWeapon = attacker.EquippedWeapon as ItemWeapon;
            ItemArmor  attackerArmor  = attacker.EquippedArmor as ItemArmor;
            ItemArmor  defenderArmor  = attacker.EquippedArmor as ItemArmor;

            double damage = 0;
            int    healthModifier;

            switch (Stance)
            {
            case BattleStance.ATTACK:
                if (attackerWeapon.WeaponDamageType == defenderArmor.ArmorResistanceType)
                {
                    damage = Math.Round(attackerWeapon.WeaponDamageAmount * defenderArmor.ArmorResistModifier);
                }
                else
                {
                    damage = attackerWeapon.WeaponDamageAmount;
                }
                break;

            case BattleStance.DEFEND:
                damage = 0;
                break;

            case BattleStance.FLEE:
                damage = 0;
                break;

            default:
                break;
            }

            Player defenderHealth = defender as Player;

            healthModifier = (int)damage;

            defenderHealth.Health = -healthModifier;
        }
Exemple #3
0
        /// <summary>
        /// Method that controls combat:
        /// </summary>
        public void OnPlayerFight()
        {
            if (_currentNPC != null && _currentNPC is Ifight)
            {
                Ifight combatNPC = _currentNPC as Ifight;
                if (combatNPC.Stance == Character.BattleStance.NOFIGHT)
                {
                    CombatLog += "What are you doing? That one is a friend! Ease up a bit..." + "\n";
                }
                else
                {
                    switch (Player.Stance)
                    {
                    case Character.BattleStance.NOFIGHT:
                        break;

                    case Character.BattleStance.ATTACK:
                        CombatLog += $"You attack with your {Player.EquippedWeapon.ItemName}" + "\n";
                        break;

                    case Character.BattleStance.DEFEND:
                        CombatLog += $"You attempt to brace yourself agaisnt the foe with your {Player.EquippedArmor.ItemName} to protect you." + "\n";
                        break;

                    case Character.BattleStance.FLEE:
                        PlayerFlee();
                        break;

                    case Character.BattleStance.AUTOFIGHT:
                        break;

                    default:
                        break;
                    }
                    if (_player.Stance != Character.BattleStance.FLEE)
                    {
                        _player.SetStanceModifier(_player, combatNPC);
                        _currentNPC.Health = combatNPC.Health;

                        CheckIfNPCDie();

                        if (combatNPC != null)
                        {
                            BattleRounds++;
                            if (combatNPC is Monger && BattleRounds == 2)
                            {
                                combatNPC.Stance = Character.BattleStance.FLEE;
                                BattleRounds     = 0;
                            }
                            switch (combatNPC.Stance)
                            {
                            case Character.BattleStance.NOFIGHT:
                                break;

                            case Character.BattleStance.ATTACK:
                                CombatLog += $"Your foe attacks you with their {combatNPC.EquippedWeapon.ItemName}" + "\n";
                                break;

                            case Character.BattleStance.DEFEND:
                                CombatLog += $"Your foe leverages their {combatNPC.EquippedArmor.ItemName} in attempt to deflects some of your attack." + "\n";
                                break;

                            case Character.BattleStance.FLEE:
                                NPCFlee();
                                break;

                            case Character.BattleStance.AUTOFIGHT:
                                break;

                            default:
                                break;
                            }
                            if (combatNPC != null)
                            {
                                combatNPC.SetStanceModifier(combatNPC, _player);
                            }
                            _player.CheckPlayerHealthByCombat();
                        }
                    }
                }
            }
        }