예제 #1
0
        void ResolveDamageAction(BattleTechniqueAction action)
        {
            if (action.ActionType == BattleTechniqueActionType.Revive)
            {
                foreach (BattleCharacter target in selectedTargets)
                {
                    int damage = action.Strength;
                    target.ChangeHP(damage, action.ActionType);
                    activeCharacters.Add(target);
                    inactiveCharacters.Remove(target);
                }
            }
            else
            {
                if (selectedTechniqueNameIsItem)
                {
                    foreach (BattleCharacter target in selectedTargets)
                    {
                        int damage = action.Strength;
                        target.ChangeHP(damage, action.ActionType);
                    }
                }
                else
                {
                    switch (action.ActionStatType)
                    {
                        case ActionStatType.Physical:
                            foreach (BattleCharacter target in selectedTargets)
                            {
                                int damage = CalculateActionDamage(TurnCharacter, action, target);
                                target.ChangeHP(damage, action.ActionType);
                            }
                            break;

                        case ActionStatType.Magical:
                            foreach (BattleCharacter target in selectedTargets)
                            {
                                int damage = CalculateActionDamage(TurnCharacter, action, target);
                                target.ChangeMP(damage, action.ActionType);
                            }
                            break;
                    }
                }
            }
        }
예제 #2
0
        int CalculateActionDamage(BattleCharacter attacker, BattleTechniqueAction action, BattleCharacter defender)
        {
            int damage = 1;

            switch (action.ActionType)
            {
                case BattleTechniqueActionType.Damage:
                    switch (action.ActionStatType)
                    {
                        case ActionStatType.Physical:
                            if (defender.CurrentAction == "Defend")
                            {
                                damage = attacker.CurrentATK + action.Strength - (defender.CurrentDEF * 2);
                            }
                            else
                            {
                                damage = attacker.CurrentATK + action.Strength - defender.CurrentDEF;
                            }
                            break;

                        case ActionStatType.Magical:
                            if (defender.CurrentAction == "Defend")
                            {
                                damage = attacker.CurrentMAG_ATK + action.Strength - (defender.CurrentMAG_DEF * 2);
                            }
                            else
                            {
                                damage = attacker.CurrentMAG_ATK + action.Strength - defender.CurrentMAG_DEF;
                            }
                            break;
                    }
                    break;
                case BattleTechniqueActionType.Healing:
                    switch (action.ActionStatType)
                    {
                        case ActionStatType.Physical:
                            damage = (attacker.CurrentMAG_ATK + action.Strength);
                            break;

                        case ActionStatType.Magical:
                            damage = (attacker.CurrentMAG_ATK + action.Strength) * (GameClass.Random.Next(7, 11) / 100);
                            break;
                    }
                    break;
            }

            if (damage < 0 || damage == 0)
            {
                damage = 1;
            }

            return damage;
        }