Beispiel #1
0
        public static async Task Attack(CombatInstance main)
        {
            var other = GetOppositeInstance(main);

            var user = GetUserOfInstance(main);

            switch (main.CombatPhase)
            {
            case 1 when other.CombatPhase == 1:
                main.CombatPhase++;
                await MessageHandler.AttackEnteredText(main.Location, user);

                break;

            case 2 when other.CombatPhase == 1:
                await MessageHandler.AttackAlreadyEntered(main.Location, user);

                break;

            case 1 when other.CombatPhase == 2:
            {
                main.CombatPhase += 2;
                other.CombatPhase++;
                //3- Pre-Attack phase (activate any abilities that trigger before attacks)

                main.CombatPhase++;
                other.CombatPhase++;
                //4- Attacks register. Calculate whether it hit, damage, bonus effects of attacks
                if (main.ActiveMon.CurStats[4] > main.EnemyMon.CurStats[4])
                {
                    await ApplyMoves(main, true);
                }
                else if (main.ActiveMon.CurStats[4] < main.EnemyMon.CurStats[4])
                {
                    await ApplyMoves(other, true);
                }
                else
                {
                    var rand = RandomGen.Gen.Next(2);
                    if (rand == 0)
                    {
                        await ApplyMoves(main, true);
                    }
                    else if (rand == 1)
                    {
                        await ApplyMoves(other, true);
                    }
                }

                break;
            }

            default:
                await MessageHandler.AttackInvalid(main.Location, GetUserOfInstance(main));

                break;
            }
        }
Beispiel #2
0
        public static async Task ParseMoveSelection(UserAccount user, int movenum)
        {
            var inst = GetInstance(user.Char.CombatId);

            if (inst.CombatPhase != 2)
            {
                await MessageHandler.AttackInvalid(inst.Location, user);
            }
            else
            {
                var monnum = user.Char.MoveScreenNum;
                user.Char.ActiveMons[monnum].SelectedMove = user.Char.ActiveMons[monnum].ActiveMoves[movenum];
                await MessageHandler.SendDM(user.UserId, $"Selected **{user.Char.ActiveMons[monnum].SelectedMove.Name}**!");

                List <BasicMon> targets = user.Char.ActiveMons[monnum].SelectedMove.DetermineValidTargets(inst, user.Char.ActiveMons[monnum]);
                if (user.Char.ActiveMons[monnum].SelectedMove.DoesMoveRequireTargetingMenu(targets))
                {
                    await MessageHandler.TargetingScreen(user.UserId);
                }
                else
                {
                    user.Char.ActiveMons[monnum].SelectedMove.Targets = targets;

                    user.Char.MoveScreenNum++;
                    if (user.Char.MoveScreenNum > inst.GetTeam(user).MultiNum - 1)
                    {
                        user.Char.MoveScreenNum = 0;
                    }
                    else
                    {
                        if (user.Char.ActiveMons[monnum].BufferedMove == null)
                        {
                            await MessageHandler.MoveScreenNew(user.UserId);
                        }
                        else
                        {
                            user.Char.MoveScreenNum++;
                            if (user.Char.MoveScreenNum > inst.GetTeam(user).MultiNum - 1)
                            {
                                user.Char.MoveScreenNum = 0;
                            }
                            else
                            {
                                await MessageHandler.MoveScreenNew(user.UserId);
                            }
                        }
                    }
                }
                await inst.ResolvePhase();
            }
        }