CombatResult NPCSetUp(NPC self, CharacterMotherClass[] allies, CharacterMotherClass[] enemies, Random rng, CombatResult.Team t) { int state = self.HealthStatus(out string r, false); if (state > -1) { int[] info = NPCCombat.MobAI(self, allies, enemies); CombatResult cresult = new CombatResult(self, self.abilities[info[0]], rng, this, t) { target = info[1] + "," + info[2] }; return(cresult); } CombatResult cr = new CombatResult(self, null, rng, this, t); if (state > -2 && state < 2) { if (self.ConsumeHealing()) { cr.action = CombatResult.Action.Consume; } } return(cr); }
internal Combat(NPC[] mobs, params CharacterMotherClass[] players) { // Random rng = new Random(); playerParty = new CombatResult[players.Length]; for (int i = 0; i < players.Length; i++) { if (players[i] is Player player) { playerParty[i] = new CombatResult(players[i], player.GetAbility(player.duel.abilityName, true), rng, this, CombatResult.Team.P); } else if (players[i] is NPC follower) { playerParty[i] = NPCSetUp(follower, players, mobs, rng, CombatResult.Team.P); } } // mobParty = new CombatResult[mobs.Length]; for (int i = 0; i < mobs.Length; i++) { mobParty[i] = NPCSetUp(mobs[i], mobs, players, rng, CombatResult.Team.M); } }
internal static CombatResult GetTargetCR(CombatResult caster, CombatResult[] friends, CombatResult[] foes) { if (caster.abilityUsed == null) { return(caster); } CombatResult[] selection = null; if (caster.target == "Default") { switch (caster.abilityUsed.type) { case Ability.AType.Martial: case Ability.AType.Elemental: case Ability.AType.Tactical: case Ability.AType.Enchantment: foreach (var foe in foes) { if (foe.character.health > 0) { return(foe); } } return(foes[0]); case Ability.AType.Defensive: return(caster); } } switch (caster.target[0]) { case '0': selection = foes; break; case '1': selection = friends; break; } int index = Verify.MinMax(int.Parse(caster.target[2].ToString()), selection.Length - 1); return(selection[index]); }