예제 #1
0
        private async Task GetEggAsync(CancellationToken ctx, IController c)
        {
            // 初期位置(ハシノマはらっぱ)から育て屋さんのところまで移動
            await c.PushButtonAsync(ctx, Button.Plus, 1000);

            c.TiltStick(ctx, Stick.LSTICK, -0.1f, 1.0f);
            await ControllerUtil.DelayAsync(ctx, 2000);

            c.TiltStick(ctx, Stick.LSTICK, -0.7f, 0.1f);
            await ControllerUtil.DelayAsync(ctx, 1000);

            c.TiltStick(ctx, Stick.LSTICK, 0.0f, 0.0f);

            // 育て屋さんから卵をもらう
            await c.PushButtonNAsync(ctx, Button.A, 1500, 2);

            await c.PushButtonAsync(ctx, Button.A, 3000);

            await c.PushButtonNAsync(ctx, Button.B, 500, 8);

            c.TiltStick(ctx, Stick.LSTICK, 0.3f, -1.0f);
            await ControllerUtil.DelayAsync(ctx, 1500);

            c.TiltStick(ctx, Stick.LSTICK, 0.0f, 0.0f);
            await c.PushButtonAsync(ctx, Button.Plus, 1000);
        }
예제 #2
0
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            if (!int.TryParse(Arguments[0].Value, out int duration))
            {
                throw new Exception(string.Format("invalid format: {0} must be integer", Arguments[1].Name));
            }

            await c.PushButtonNAsync(ctx, Button.A, 500, 10);

            while (!ctx.IsCancellationRequested)
            {
                // レイドバトル後もしばらく続くAボタン連打の後の画面から、
                // 巣穴の前の最初のポジションに戻す
                await c.PushButtonNAsync(ctx, Button.B, 1000, 4);

                await ControllerUtil.DelayAsync(ctx, 1000);

                await c.PushButtonNAsync(ctx, Button.A, 1000, 2);

                await c.PushButtonNAsync(ctx, Button.B, 1000, 3);

                // 巣穴の前からひとりレイドを始め、レイドポケモンを倒し、捕まえる
                await c.PushButtonAsync(ctx, Button.A, 1500);

                await c.PushHatAsync(ctx, HatState.Down, 500);

                // レイドバトル中はA連打
                var endAt = DateTime.Now.AddSeconds(duration);
                while (!ctx.IsCancellationRequested && DateTime.Now < endAt)
                {
                    await c.PushButtonAsync(ctx, Button.A, 500);
                }
            }
        }
예제 #3
0
        private async Task RunAroundAsync(CancellationToken ctx, IController c, int time)
        {
            // 野生ポケモンとのエンカウントを避けるため初期位置から少し移動する
            c.TiltStick(ctx, Stick.LSTICK, 1.0f, 0.0f);
            await ControllerUtil.DelayAsync(ctx, 600);

            c.TiltStick(ctx, Stick.LSTICK, 1.0f, 1.0f);
            c.TiltStick(ctx, Stick.RSTICK, -1.0f, -1.0f);
            await ControllerUtil.DelayAsync(ctx, time);

            c.TiltStick(ctx, Stick.LSTICK, 0.0f, 0.0f);
            c.TiltStick(ctx, Stick.RSTICK, 0.0f, 0.0f);
        }
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            while (!ctx.IsCancellationRequested)
            {
                await c.PushButtonNAsync(ctx, Button.A, 100, 20);

                await c.PushButtonNAsync(ctx, Button.B, 100, 40);

                await Common.Forward1Day(ctx, c, true);

                await ControllerUtil.DelayAsync(ctx, 1000);
            }
        }
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            await c.PushButtonAsync(ctx, Button.Home, 1000);

            await c.PushButtonAsync(ctx, Button.X, 1000);

            await c.PushButtonNAsync(ctx, Button.A, 1000, 38);

            await ControllerUtil.DelayAsync(ctx, 30000);

            // 戦闘開始
            await c.PushButtonAsync(ctx, Button.X, 1000);

            await c.PushHatNAsync(ctx, HatState.Right, 150, 3);

            await c.PushButtonAsync(ctx, Button.A, 1000); // マスターボール

            await c.PushButtonNAsync(ctx, Button.A, 1000, 58);

            // キヅナのタヅナ使用
            await c.PushButtonAsync(ctx, Button.X, 1000);

            await c.PushHatNAsync(ctx, HatState.Right, 150, 2);

            await c.PushButtonAsync(ctx, Button.A, 2000);

            await c.PushHatNAsync(ctx, HatState.Left, 150, 1);

            await c.PushHatNAsync(ctx, HatState.Up, 150, 1);

            await c.PushButtonNAsync(ctx, Button.A, 300, 2);

            await c.PushHatNAsync(ctx, HatState.Up, 150, 1);

            await c.PushButtonNAsync(ctx, Button.A, 200, 1);

            await c.PushButtonNAsync(ctx, Button.B, 1000, 15);

            // 確認
            await c.PushButtonAsync(ctx, Button.X, 1000);

            await c.PushHatNAsync(ctx, HatState.Left, 150, 1);

            await c.PushButtonAsync(ctx, Button.A, 2000);

            await c.PushButtonAsync(ctx, Button.R, 2000);

            await c.PushHatNAsync(ctx, HatState.Left, 150, 1);

            await c.PushHatNAsync(ctx, HatState.Down, 150, 2);
        }
예제 #6
0
        private async Task MoveIntoIntialPositionAsync(CancellationToken ctx, IController c, bool first)
        {
            await c.PushButtonAsync(ctx, Button.X, 1000);

            if (first)
            {
                await c.PushHatTAsync(ctx, HatState.Up | HatState.Left, 1000, 100);
            }
            await c.PushButtonAsync(ctx, Button.A, 2500);

            await c.PushButtonNAsync(ctx, Button.A, 1500, 2);

            await ControllerUtil.DelayAsync(ctx, 2000);
        }
예제 #7
0
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            if (!DateTime.TryParseExact(Arguments[0].Value, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out DateTime clock))
            {
                throw new Exception(string.Format("invalid format: {0} must be yyyy-MM-dd", Arguments[0].Name));
            }
            if (!int.TryParse(Arguments[1].Value, out int days))
            {
                throw new Exception(string.Format("invalid format: {0} must be integer", Arguments[1].Name));
            }

            await c.PushButtonAsync(ctx, Button.A, 500);

            await c.PushHatTAsync(ctx, HatState.Right, 1500, 100);

            await c.PushButtonAsync(ctx, Button.A, 500);

            for (int i = days - 1; i >= 0 && !ctx.IsCancellationRequested; i--)
            {
                await c.PushButtonAsync(ctx, Button.A, 500);

                await c.PushHatNAsync(ctx, HatState.Left, 100, 3);

                await ControllerUtil.DelayAsync(ctx, 200);

                await c.PushHatAsync(ctx, HatState.Up, 100);

                await c.PushHatTAsync(ctx, HatState.Right, 1000, 0);

                await c.PushButtonAsync(ctx, Button.A, 500);

                if (!ctx.IsCancellationRequested)
                {
                    var nextDay = new DateTime(clock.Year, clock.Month, clock.Day).AddDays(1);
                    if (nextDay.Month != clock.Month)
                    {
                        nextDay = nextDay.AddMonths(-1);
                        i++;
                    }
                    clock = nextDay;

                    Arguments[0].Value = clock.ToString("yyyy-MM-dd");
                    Arguments[1].Value = i.ToString();
                }
            }
        }
예제 #8
0
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            while (!ctx.IsCancellationRequested)
            {
                // ロトミ起動 > IDくじ
                await c.PushButtonNAsync(ctx, Button.A, 500, 2);

                await ControllerUtil.DelayAsync(ctx, 500);

                await c.PushHatAsync(ctx, HatState.Down, 150);

                await c.PushButtonNAsync(ctx, Button.A, 100, 20);

                await c.PushButtonNAsync(ctx, Button.B, 100, 80);

                await Common.Forward1Day(ctx, c, true);

                await ControllerUtil.DelayAsync(ctx, 1000);
            }
        }
예제 #9
0
 public async Task CallAsync(CancellationToken ctx, IController controller)
 {
     Debug.Write("sample: " + string.Join(",", arguments.Select(a => a.Value)));
     await ControllerUtil.DelayAsync(ctx, 100);
 }
예제 #10
0
        public static async Task ForwardDays(CancellationToken ctx, IController c, int days, Func <CountDate, bool> onChangeDate = null)
        {
            // ホーム画面 > 設定
            await c.PushButtonAsync(ctx, Button.Home, 1000);

            await c.PushHatAsync(ctx, HatState.Down, 100);

            await c.PushHatNAsync(ctx, HatState.Right, 100, 4);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 1000);

            // 設定 > 本体 > 日付と時刻
            await c.PushHatTAsync(ctx, HatState.Down, 2000, 0);

            await c.PushHatAsync(ctx, HatState.Right, 100);

            await c.PushHatNAsync(ctx, HatState.Down, 100, 4);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 700);

            // 日付と時刻 > 現在の日付と時刻
            await c.PushHatNAsync(ctx, HatState.Down, 100, 2);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 500);

            await c.PushHatNAsync(ctx, HatState.Right, 100, 2);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushHatAsync(ctx, HatState.Up, 100);

            await c.PushHatTAsync(ctx, HatState.Right, 1000, 0);

            await c.PushButtonAsync(ctx, Button.A, 500);

            bool theLastDay = false;

            if (onChangeDate != null && !ctx.IsCancellationRequested)
            {
                theLastDay = onChangeDate(CountDateImpl);
            }
            // 月末の可能性を考慮して二日進める
            if (theLastDay && days < 2)
            {
                days = 2;
            }

            for (int i = 0; i < days - 1; i++)
            {
                await c.PushButtonAsync(ctx, Button.A, 500);

                await c.PushHatNAsync(ctx, HatState.Left, 100, 3);

                await ControllerUtil.DelayAsync(ctx, 200);

                await c.PushHatAsync(ctx, HatState.Up, 100);

                await c.PushHatTAsync(ctx, HatState.Right, 1000, 0);

                await c.PushButtonAsync(ctx, Button.A, 500);

                if (onChangeDate != null && !ctx.IsCancellationRequested)
                {
                    onChangeDate(CountDateImpl);
                }
            }

            // ホーム画面 > ゲーム画面
            await c.PushButtonAsync(ctx, Button.Home, 1000);

            await c.PushButtonAsync(ctx, Button.A, 500);
        }
예제 #11
0
        public static async Task Forward1Day(CancellationToken ctx, IController c, bool twice, Func <CountDate, bool> onChangeDate = null)
        {
            // ホーム画面 > 設定
            await c.PushButtonAsync(ctx, Button.Home, 1000);

            await c.PushHatAsync(ctx, HatState.Down, 100);

            await c.PushHatNAsync(ctx, HatState.Right, 100, 4);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 1000);

            // 設定 > 本体 > 日付と時刻
            await c.PushHatTAsync(ctx, HatState.Down, 2000, 0);

            await c.PushHatAsync(ctx, HatState.Right, 100);

            await c.PushHatNAsync(ctx, HatState.Down, 100, 4);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 700);

            // 日付と時刻 > 現在の日付と時刻
            await c.PushHatNAsync(ctx, HatState.Down, 100, 2);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushButtonAsync(ctx, Button.A, 500);

            await c.PushHatNAsync(ctx, HatState.Right, 100, 2);

            await ControllerUtil.DelayAsync(ctx, 200);

            await c.PushHatAsync(ctx, HatState.Up, 100);

            await c.PushHatTAsync(ctx, HatState.Right, 1000, 0);

            await c.PushButtonAsync(ctx, Button.A, 500);

            bool twice2 = false;

            if (onChangeDate != null && !ctx.IsCancellationRequested)
            {
                twice2 = onChangeDate(CountDateImpl);
            }

            if (twice || twice2)
            {
                // 月末の可能性を考慮して二日進める
                await c.PushButtonAsync(ctx, Button.A, 500);

                await c.PushHatNAsync(ctx, HatState.Left, 100, 3);

                await ControllerUtil.DelayAsync(ctx, 200);

                await c.PushHatAsync(ctx, HatState.Up, 100);

                await c.PushHatTAsync(ctx, HatState.Right, 1000, 0);

                await c.PushButtonAsync(ctx, Button.A, 500);

                if (onChangeDate != null && !ctx.IsCancellationRequested)
                {
                    onChangeDate(CountDateImpl);
                }
            }

            // ホーム画面 > ゲーム画面
            await c.PushButtonAsync(ctx, Button.Home, 1000);

            await c.PushButtonAsync(ctx, Button.A, 500);
        }
예제 #12
0
        public async Task CallAsync(CancellationToken ctx, IController c)
        {
            if (!DateTime.TryParseExact(Arguments[0].Value, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out DateTime clock))
            {
                throw new Exception(string.Format("invalid format: {0} must be yyyy-MM-dd", Arguments[0].Name));
            }
            if (!int.TryParse(Arguments[1].Value, out int days))
            {
                throw new Exception(string.Format("invalid format: {0} must be integer", Arguments[1].Name));
            }
            if (!bool.TryParse(Arguments[2].Value, out bool reset))
            {
                throw new Exception(string.Format("invalid format: {0} must be boolean", Arguments[2].Name));
            }

            if (reset)
            {
                await c.PushButtonAsync(ctx, Button.Home, 1000);

                await c.PushButtonAsync(ctx, Button.X, 1000);

                await c.PushButtonNAsync(ctx, Button.A, 1000, 35);
            }

            await c.PushButtonNAsync(ctx, Button.B, 1000, 4);

            if (reset)
            {
                await ControllerUtil.DelayAsync(ctx, 1000);

                await c.PushButtonNAsync(ctx, Button.A, 1000, 2);

                await c.PushButtonNAsync(ctx, Button.B, 1000, 3);
            }


            for (int i = days - 1; i >= 0 && !ctx.IsCancellationRequested; i--)
            {
                // ワット回収
                await c.PushButtonAsync(ctx, Button.A, 1000);

                await c.PushButtonAsync(ctx, Button.B, 2000);

                await c.PushButtonAsync(ctx, Button.A, 1000);

                // 募集開始
                await c.PushButtonAsync(ctx, Button.A, 3000);

                await Common.Forward1Day(ctx, c, false, (countDate) =>
                {
                    var counted = countDate(clock, out DateTime next);

                    clock = next;
                    if (!ctx.IsCancellationRequested)
                    {
                        if (!counted)
                        {
                            i++;
                        }
                        Arguments[0].Value = clock.ToString("yyyy-MM-dd");
                    }
                    return(false);
                });

                // レイド募集中止
                await c.PushButtonAsync(ctx, Button.B, 1000);

                await c.PushButtonAsync(ctx, Button.A, 4000);
            }

            // ポケモンを確認する
            await c.PushButtonAsync(ctx, Button.A, 1000);

            await c.PushButtonAsync(ctx, Button.B, 2000);

            await c.PushButtonAsync(ctx, Button.A, 1000);
        }