public override List <MoveResult> ApplyMove(CombatInstance2 inst, BasicMon owner, List <BasicMon> targets) { ResetResult(); AddResult(); var player = inst.GetPlayer(owner); var chara = player.Char; //Fail logic if (SelfMoveFailLogic(owner) || !chara.HasUsableMon()) { Result[TargetNum].Fail = true; Result[TargetNum].Hit = false; } //Hit logic else { CurrentPP--; var mon = chara.FirstUsableMon(new List <BasicMon> { owner }); Result[TargetNum].Swapout = mon; Result[TargetNum].Messages.Add($"**{owner.Nickname}** teleports away and {player.Mention} sends out **{mon.Nickname}**!"); foreach (BasicMon m in inst.GetAllMons()) { if (m.SelectedMove != null) { for (int i = 0; i < m.SelectedMove.Targets.Count; i++) { if (m.SelectedMove.Targets[i] == owner) { m.SelectedMove.Targets[i] = mon; } } for (int i = 0; i < m.SelectedMove.ValidTargets.Count; i++) { if (m.SelectedMove.ValidTargets[i] == owner) { m.SelectedMove.ValidTargets[i] = mon; } } } } } return(Result); }
public List <BasicMon> DetermineValidTargets(CombatInstance2 inst, BasicMon owner) { List <BasicMon> targets = new List <BasicMon>(); switch (TargetType) { case "None": return(targets); case "Self": targets.Add(owner); return(targets); case "SingleEnemy": case "AllEnemies": foreach (Team t in inst.Teams) { if (!t.Members.Contains(inst.GetPlayer(owner))) { foreach (UserAccount u in t.Members) { foreach (BasicMon mon in u.Char.ActiveMons) { if (!mon.Fainted && mon != null) { targets.Add(mon); } } } } } return(targets); case "SingleAlly": case "AllAllies": foreach (Team t in inst.Teams) { if (t.Members.Contains(inst.GetPlayer(owner))) { foreach (UserAccount u in t.Members) { foreach (BasicMon mon in u.Char.ActiveMons) { if (!mon.Fainted && mon != null) { targets.Add(mon); } } } } } return(targets); case "All": case "SingleAll": foreach (Team t in inst.Teams) { foreach (UserAccount u in t.Members) { foreach (BasicMon mon in u.Char.ActiveMons) { if (!mon.Fainted && mon != null && mon != owner) { targets.Add(mon); } } } } return(targets); default: Console.WriteLine($"The move {Name} has an unkown TargetType."); break; } ValidTargets = targets; return(targets); }