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