예제 #1
0
        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);
        }
예제 #2
0
        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);
        }