예제 #1
0
        public override Job CreateJob()
        {
            var job = JobGenerator.CreateJobMoveAndClickMouse(_jobGenerator.Form, Globals.CloseServerConnectFail, true);

            job.AddSubJob(new JobWaitTime(_jobGenerator.Form, 750));
            return(job);
        }
예제 #2
0
        public override Job CreateJob()
        {
            var job = JobGenerator.CreateJobMoveAndClickMouse(_jobGenerator.Form, Globals.KeepGoingInStopPage, true);

            job.AddSubJob(new JobWaitTime(_jobGenerator.Form, 750));
            return(job);
        }
예제 #3
0
        public override Job CreateJob()
        {
            var job = JobGenerator.CreateJobMoveAndClickMouse(_jobGenerator.Form, Globals.OutFromTraverseDeadPage, true);

            job.AddSubJob(new JobWaitTime(_jobGenerator.Form, 750));
            return(job);
        }
예제 #4
0
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Mail, Globals.MailPage));
            });

            ActionSequenceTree fromMail =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMail]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.RecvAllInMailPage));
                AddSubJob(new JobWaitTime(_form, 500, true));

                AddSubJob(new JobMovePage(_form, Globals.MailPage, Globals.OutFromMailPage, Globals.MainPage));
            });


            fromMain.Completed         = fromMail;
            fromMain.ActionOnCompleted = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.MailPage] = fromMail;
        }
예제 #5
0
        public override Job CreateJob()
        {
            var job1 = JobGenerator.CreateJobMoveAndClickMouse(_jobGenerator.Form, Globals.DontSeeInOneFlus, true);

            job1.AddSubJob(new JobWaitTime(_jobGenerator.Form, 750));

            var job2 = JobGenerator.CreateJobMoveAndClickMouse(_jobGenerator.Form, Globals.ExitOneFlusAdvertise, true);

            job2.AddSubJob(new JobWaitTime(_jobGenerator.Form, 750));

            job1.AddSubJob(job2);

            return(job1);
        }
예제 #6
0
        public override State Process()
        {
            ActivateIfInActive();

            var    endTime = DateTime.Now;
            double elapsed = (endTime - _startTime).TotalMilliseconds;

            if (elapsed > 300000 && _subJobs.Count > 0)
            {
                string term = "[JobMovePage] have no action for too long time!!!! remove self  time : " + endTime + "\n";

                return(_status = State.Failed);
            }

            if (!_waitFinished)
            {
                var status = ProcessSubJobs();

                if (status == State.Completed)
                {
                    _waitFinished = true;
                }

                return(_status = State.Active);
            }
            else
            {
                var pageName = _form.CurrentPageName;

                Console.WriteLine("[" + pageName + "] " + Type + " from : \"" + _from + "\"   clickUI : \"" + _ui + "\"   to : " + _debugToPageString);

                if (Check(pageName))
                {
                    return(_status = State.Completed);
                }

                if (_subJobs.Count == 0 && pageName == _from)
                {
                    AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, _ui, true));
                    AddSubJob(new JobWaitTime(_form, _clickDelay));
                }

                ProcessSubJobs();

                return(_status = State.Active);
            }
        }
예제 #7
0
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromLogin =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromLogin]");
                // #fix - to page
                AddSubJob(new JobMovePage(_form, Globals.LoginPage, _signInWith, Globals.FacebookPage));

                if (_signInWith == Globals.Facebook)
                {
                    AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.FacebookPage }));
                }
                else if (_signInWith == Globals.Google)
                {
                    //AddSubJob(new JobCheckCurrentPage(_form, new string[] { Globals.GooglePage }));
                }
                else if (_signInWith == Globals.Guest)
                {
                    //AddSubJob(new JobCheckCurrentPage(_form, new string[] { Globals.FacebookPage }));
                }
            });

            ActionSequenceTree fromFacebookLogin =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromFacebookLogin]");

                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.EmailInFacebook, true));
                AddSubJob(new JobWaitTime(_form, 1000));

                AddSubJob(new JobPressKeyboard(_form, _email));
                AddSubJob(new JobWaitTime(_form, 500));

                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.PasswordInFacebook, true));
                AddSubJob(new JobWaitTime(_form, 1000));

                AddSubJob(new JobPressKeyboard(_form, _password));
                AddSubJob(new JobWaitTime(_form, 500));

                AddSubJob(new JobMovePage(_form, Globals.FacebookPage, Globals.LoginInFacebook, Globals.FacebookConfirmPage, 2000, 2000));

                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.FacebookConfirmPage }));
            });

            ActionSequenceTree fromFacebookConfirm =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromFacebookConfirm]");
                AddSubJob(new JobMovePage(_form, Globals.FacebookConfirmPage, Globals.YesInFacebook, Globals.StartGamePage));

                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.StartGamePage }));
            });


            ActionSequenceTree fromStartGame =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromStartGame]");
                AddSubJob(new JobMovePage(_form, Globals.StartGamePage, Globals.ClickOnStartGamePage, Globals.CharacterSelectPage));
            });

            ActionSequenceTree fromCharacterSelect =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromCharacterSelect]");
                AddSubJob(new JobMovePage(_form, Globals.CharacterSelectPage, Globals.StartGameInSelectPage, Globals.NotifyPage));
            });

            ActionSequenceTree closeNotifyPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[closeNotifyPage]");
                AddSubJob(new JobMovePage(_form, Globals.NotifyPage, Globals.CloseNotify, Globals.MainPage));
            });

            fromLogin.Completed           = fromFacebookLogin;
            fromFacebookLogin.Completed   = fromFacebookConfirm;
            fromFacebookConfirm.Completed = fromStartGame;
            fromStartGame.Completed       = fromCharacterSelect;
            fromCharacterSelect.Completed = closeNotifyPage;

            _currentAction = fromLogin;

            // make repair map
            _repairMap[Globals.LoginPage]           = fromLogin;
            _repairMap[Globals.FacebookPage]        = fromFacebookLogin;
            _repairMap[Globals.FacebookConfirmPage] = fromFacebookConfirm;
            _repairMap[Globals.StartGamePage]       = fromStartGame;
            _repairMap[Globals.CharacterSelectPage] = fromCharacterSelect;
        }
예제 #8
0
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromTrial =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromTrial]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Trial, Globals.TrialPage));
                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.TrialPage }));
            });

            ActionSequenceTree findBeforeDrag =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[findBeforeDrag]");

                string what = "";
                if (_todo.TryGetValue(_currentState, out what))
                {
                    AddSubJob(new JobTryFindSubImage(_form, what));
                }
            });

            ActionSequenceTree click =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[click]");
                OpenCvSharp.Rect rect = (OpenCvSharp.Rect)BlackBoard.Instance.Read(BlackBoard.UIRectBlackBoardID, this);
                var pos = Utils.RectToPos(rect.X + 50, rect.Y + 100, rect.Width, rect.Height);
                AddSubJob(new JobMoveAndClickMouse(_form, pos));
            });


            ActionSequenceTree drag =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[drag]");
                AddSubJob(new JobWaitTime(_form, 1500));
                Drag(_form, this, new System.Drawing.Point(0, 0));
                AddSubJob(new JobWaitTime(_form, 1000));
                Drag(_form, this, new System.Drawing.Point(-100, 0));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree findAfterDrag =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[findAfterDrag]");

                string what = "";
                if (_todo.TryGetValue(_currentState, out what))
                {
                    AddSubJob(new JobTryFindSubImage(_form, what));
                }
            });


            ActionSequenceTree fromTrialStage =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[fromTrialStage]");
                AddSubJob(new JobWaitTime(_form, 1500));
                Drag(_form, this, new System.Drawing.Point(0, 0));
                AddSubJob(new JobWaitTime(_form, 1000));
                Drag(_form, this, new System.Drawing.Point(-100, 0));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree getCurrentPage =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[getCurrentPage]");
                AddSubJob(new JobWaitTime(_form, 3000));
                _currentPage = _form.CurrentPageName;
            });


            ActionSequenceTree start =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[start]  current page : " + _currentPage);

                string ui;
                if (_clickUI.TryGetValue(_currentPage, out ui))
                {
                    AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, ui, true));
                    AddSubJob(new JobWaitTime(_form, 1000));
                    AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, ui, true));
                    AddSubJob(new JobWaitTime(_form, 1000));
                }
            });

            ActionSequenceTree checkNoPageMove =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkCurrentPage]");
                AddSubJob(new JobCheckPage(_form, _currentPage, 5000));
            });


            ActionSequenceTree fromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromResult]");

                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ToTrialFromTrialResult, true));
                AddSubJob(new JobWaitTime(_form, 1000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ToTrialFromTrialResult, true));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree checkCurrentPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkCurrentPage]");
                AddSubJob(new JobCheckPage(_form, Globals.TrialPage, 8000));
            });

            ActionSequenceTree backToTrial =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToTrial]");

                AddSubJob(new JobMovePage(_form, _currentPage, Globals.BackInTrialLevelPages, Globals.TrialPage));
            });

            ActionSequenceTree checkCurrentState =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkCurrentState]");
                AddSubJob(new JobCheckCondition(_form, () => { return(_currentState == TrialState.Finished); }));
            });

            ActionSequenceTree exitTrial =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitTrial]");
                AddSubJob(new JobMovePage(_form, Globals.TrialPage, Globals.BackInTrial, Globals.MainPage));
            });

            fromTrial.Completed = checkCurrentState;

            checkCurrentState.Completed = exitTrial;
            checkCurrentState.Failed    = findBeforeDrag;

            findBeforeDrag.Completed     = click;
            findBeforeDrag.Failed        = drag;
            drag.Completed               = findAfterDrag;
            findAfterDrag.Completed      = click;
            findAfterDrag.Failed         = fromTrial;
            findAfterDrag.ActionOnFailed = () => { UpdateTrialState(); };

            click.Completed          = fromTrialStage;
            fromTrialStage.Completed = getCurrentPage;
            getCurrentPage.Completed = start;
            start.Completed          = checkNoPageMove;

            // not started
            checkNoPageMove.Completed = backToTrial;
            checkNoPageMove.Failed    = fromResult;

            fromResult.Completed = checkCurrentPage;

            checkCurrentPage.Completed    = fromTrial;
            checkCurrentPage.Failed       = backToTrial;
            backToTrial.Completed         = fromTrial;
            backToTrial.ActionOnCompleted = () => { UpdateTrialState(); };



            exitTrial.ActionOnCompleted = () =>
            {
                if (_currentState == TrialState.Finished)
                {
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    _returnState = State.Completed;
                }
                else
                {
                    Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
                    Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
                    Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
                    _returnState = State.Failed;
                }
            };

            _currentAction = fromTrial;

            // make repair map
            _repairMap[Globals.TrialPage]            = fromTrial;
            _repairMap[Globals.TrialSweepAwayPage]   = fromTrialStage;
            _repairMap[Globals.TrialMansFightPage]   = fromTrialStage;
            _repairMap[Globals.TrialWomansFightPage] = fromTrialStage;
            _repairMap[Globals.TrialTwoDevilPage]    = fromTrialStage;
            //_repairMap[Globals.TrialBattleGodPage] = fromTrialStage;
            _repairMap[Globals.TrialStormEyePage] = fromTrialStage;
            _repairMap[Globals.TrialBloodyPage]   = fromTrialStage;
            _repairMap[Globals.TrialResultPage]   = fromResult;
        }
예제 #9
0
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Cowork, Globals.CoworkPage));
                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.CoworkPage }));
                AddSubJob(new JobMovePage(_form, Globals.CoworkPage, Globals.Raid, Globals.RaidPage));
            });

            ActionSequenceTree moveBoss =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[moveBoss]");
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.Demian, true));
                AddSubJob(new JobWaitTime(_form, 2000));
            });



            ActionSequenceTree drag =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[drag]");
                OpenCvSharp.Rect left;
                bool leftFlag =
                    _form.AllUIRects.TryGetValue(Globals.RaidDragLeftPos, out left);

                OpenCvSharp.Rect right;
                bool rightFlag =
                    _form.AllUIRects.TryGetValue(Globals.RaidDragRightPos, out right);

                if (leftFlag && rightFlag)
                {
                    var start = Utils.RectToPos(right.X, right.Y, right.Width, right.Height);
                    var end   = Utils.RectToPos(left.X, left.Y, left.Width, left.Height);
                    AddSubJob(new JobDrag(_form, start, end));
                }
            });


            ActionSequenceTree clickLevel =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[clickLevel]");
                AddSubJob(new JobWaitTime(_form, 1000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, _level, true));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree fromRaid =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromRaid]");
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.RaidAward, true));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree checkAwardPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkAwardPage]");

                AddSubJob(new JobCheckPage(_form, Globals.RaidRepeatAwardPage));
            });

            // if checkAwardPage completed
            ActionSequenceTree exitAwardPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitAwardPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.RaidRepeatAwardPage,
                        Globals.OutFromRepeatAward, Globals.RaidPage));
            });

            ActionSequenceTree clickStart =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[clickStart]");
                AddSubJob(new JobMovePage(_form, Globals.RaidPage, Globals.StartRaid, new string[] { Globals.RaidRestrictedPage, Globals.UnknownPage }));
            });

            ActionSequenceTree checkRaidRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkRaidRestricted]");
                AddSubJob(new JobCheckPage(_form, Globals.RaidRestrictedPage));
            });

            // if checkRaidRestricted completed
            ActionSequenceTree exitRaidRestrictedPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitRaidRestrictedPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.RaidRestrictedPage,
                        Globals.NoInRaidRestrictedPage, Globals.RaidPage));
            });

            ActionSequenceTree exitRaidPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitRaidPage]");
                AddSubJob(new JobMovePage(_form, Globals.RaidPage, Globals.BackInRaid, Globals.MainPage));
            });

            ActionSequenceTree fromStarted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromStarted]");
                AddSubJob(
                    new JobCheckUntilMeetPage(
                        _form, new string[] { Globals.RaidResultPage }));
            });

            ActionSequenceTree fromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromResult]");
                AddSubJob(new JobMovePage(_form, Globals.RaidResultPage, Globals.ToMainFromRaidResult, Globals.MainPage));
            });

            fromMain.Completed = moveBoss;

            moveBoss.Completed   = drag;
            drag.Completed       = clickLevel;
            clickLevel.Completed = fromRaid;

            fromRaid.Completed               = checkAwardPage;
            checkAwardPage.Completed         = exitAwardPage;
            checkAwardPage.Failed            = clickStart;
            exitAwardPage.Completed          = clickStart;
            clickStart.Completed             = checkRaidRestricted;
            checkRaidRestricted.Completed    = exitRaidRestrictedPage;
            checkRaidRestricted.Failed       = fromStarted;
            exitRaidRestrictedPage.Completed = exitRaidPage;
            fromStarted.Completed            = fromResult;
            fromResult.ActionOnCompleted     = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.CoworkPage]          = fromMain;
            _repairMap[Globals.RaidPage]            = moveBoss;
            _repairMap[Globals.RaidRepeatAwardPage] = exitAwardPage;
            _repairMap[Globals.RaidRestrictedPage]  = exitRaidRestrictedPage;
            _repairMap[Globals.RaidResultPage]      = fromResult;
        }
예제 #10
0
        protected override void MakeActionSequenceTree()
        {
            // make action sequence tree

            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Menu, Globals.MenuPage));
            });

            ActionSequenceTree checkMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkMenu]");
                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.MenuPage }));
            });

            ActionSequenceTree fromMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMenu]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.MenuToQuest));
                AddSubJob(new JobWaitTime(_form, 500, true));
            });

            ActionSequenceTree afterClickQuest =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[afterClickQuest]");
                AddSubJob(new JobTryFindSubImage(_form, Globals.QuestUISetImg));
            });

            ActionSequenceTree fromWeekQuest =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromWeekQuest]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.MenuToWeekQuest, Globals.WeekQuestPage));
            });

            ActionSequenceTree checkCleared =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[checkCleared]");
                AddSubJob(new JobTryFindSubImage(_form, Globals.MissionCompletedImg));
            });

            ActionSequenceTree getAward =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[getAward]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.MissionCompleted, true));
                AddSubJob(new JobWaitTime(_form, 500, true));
            });

            ActionSequenceTree checkMission =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[checkMission]");
                AddSubJob(new JobWaitTime(_form, 750, true));
                AddSubJob(new JobTryFindSubImage(_form, Globals.GetMissionImg, 5, 500));
                AddSubJob(new JobWaitTime(_form, 750, true));
            });

            ActionSequenceTree getMission =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[getMission]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.GetMission, true));
                AddSubJob(new JobWaitTime(_form, 500, true));
            });

            ActionSequenceTree backToMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToMenu]");
                AddSubJob(new JobMovePage(_form, Globals.WeekQuestPage, Globals.BackInWeekQuest, Globals.MenuPage));
            });

            ActionSequenceTree backToMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToMain]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.BackInMenu, Globals.MainPage));
            });


            fromMain.Completed         = checkMenu;
            checkMenu.Completed        = fromMenu;
            fromMenu.Completed         = afterClickQuest;
            afterClickQuest.Completed  = fromWeekQuest;
            afterClickQuest.Failed     = backToMain;
            fromWeekQuest.Completed    = checkCleared;
            checkCleared.Completed     = getAward;
            checkCleared.Failed        = checkMission;
            getAward.Completed         = checkMission;
            getAward.ActionOnCompleted = () => { _returnState = State.Completed; };
            checkMission.Completed     = getMission;
            checkMission.Failed        = backToMenu;
            getMission.Completed       = backToMenu;
            backToMenu.Completed       = backToMain;

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.MenuPage]      = fromMenu;
            _repairMap[Globals.WeekQuestPage] = fromWeekQuest;
        }
        protected override void MakeActionSequenceTree()
        {
            // make action sequence tree

            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Menu, Globals.MenuPage));
            });

            ActionSequenceTree fromMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMenu]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.MenuToForge, Globals.ForgePage));
            });


            ActionSequenceTree fromForge =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromForge]");
                AddSubJob(new JobMovePage(_form, Globals.ForgePage, Globals.ToAbrasive, Globals.ForgeAbrasivePage));
            });


            ActionSequenceTree checkTakeAbrasive =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[checkTakeAbrasive]");
                AddSubJob(new JobTryFindSubImage(_form, Globals.TakeAbrasiveImg));
            });

            ActionSequenceTree takeAbrasive =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[takeAbrasive]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.TakeAbrasive, true));
                AddSubJob(new JobWaitTime(_form, 500, true));
            });

            ActionSequenceTree checkMakeAbrasive =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[checkMakeAbrasive]");
                AddSubJob(new JobWaitTime(_form, 750, true));
                AddSubJob(new JobTryFindSubImage(_form, Globals.MakeAbrasiveImg, 5, 500));
                AddSubJob(new JobWaitTime(_form, 750, true));
            });

            ActionSequenceTree makeAbrasive =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[makeAbrasive]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.TakeAbrasive, true));
                AddSubJob(new JobWaitTime(_form, 500, true));
            });

            ActionSequenceTree backToForge =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToForge]");
                AddSubJob(new JobMovePage(_form, Globals.ForgeAbrasivePage, Globals.BackInForgeAbrasive, Globals.ForgePage));
            });

            ActionSequenceTree backToMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToMenu]");
                AddSubJob(new JobMovePage(_form, Globals.ForgePage, Globals.BackInForge, Globals.MenuPage));
            });

            ActionSequenceTree backToMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[backToMain]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.BackInMenu, Globals.MainPage));
            });

            // on repair
            ActionSequenceTree exitForgeAbrasiveGem =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitForgeAbrasiveGem]");
                AddSubJob(new JobMovePage(_form, Globals.ForgeAbrasiveGemPage, Globals.NoInForgeAbrasiveGemPage, Globals.ForgeAbrasivePage));
            });

            ActionSequenceTree exitForgeAbrasiveRestrict =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitForgeAbrasiveRestrict]");
                AddSubJob(new JobMovePage(_form, Globals.ForgeAbrasiveRestrictedPage, Globals.NoInForgeAbrasiveRestrictedPage, Globals.ForgeAbrasivePage));
            });

            fromMain.Completed                  = fromMenu;
            fromMenu.Completed                  = fromForge;
            fromForge.Completed                 = checkTakeAbrasive;
            checkTakeAbrasive.Completed         = takeAbrasive;
            checkTakeAbrasive.ActionOnCompleted = () => { _returnState = State.Completed; };
            checkTakeAbrasive.Failed            = checkMakeAbrasive;
            takeAbrasive.Completed              = checkMakeAbrasive;
            checkMakeAbrasive.Completed         = makeAbrasive;
            checkMakeAbrasive.Failed            = backToForge;
            makeAbrasive.Completed              = backToForge;
            backToForge.Completed               = backToMenu;
            backToMenu.Completed                = backToMain;

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.MenuPage]                    = fromMenu;
            _repairMap[Globals.ForgePage]                   = fromForge;
            _repairMap[Globals.ForgeAbrasivePage]           = checkTakeAbrasive;
            _repairMap[Globals.ForgeAbrasiveGemPage]        = exitForgeAbrasiveGem;
            _repairMap[Globals.ForgeAbrasiveRestrictedPage] = exitForgeAbrasiveRestrict;
        }
예제 #12
0
        protected override void MakeActionSequenceTree()
        {
            // make action sequence tree

            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Menu, Globals.MenuPage));
            });

            ActionSequenceTree fromMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMenu]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.MenuToGuild, Globals.GuildPage));
            });


            ActionSequenceTree fromGuild =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromGuild]");
            });

            ActionSequenceTree checkFishingPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkFishingPage]");
                AddSubJob(new JobCheckPage(_form, Globals.FishingPage, 750));
            });

            ActionSequenceTree checkBreakAway =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkBreakAway]");
                AddSubJob(new JobCheckCondition(_form, () => { return(_drag2Cnt > 25); }));
            });

            ActionSequenceTree exitFishingByBreakAway =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitFishingByBreakAway]");
                AddSubJob(new JobMovePage(_form, _form.CurrentPageName, Globals.ToMainPageFromFishing, Globals.MainPage));
            });

            ActionSequenceTree checkCondition =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkCondition]");
                AddSubJob(new JobCheckCondition(_form, () => { return(_drag1Cnt > 10); }));
            });


            ActionSequenceTree drag1 =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[drag1]");

                if (_form.CurrentPageName != Globals.FishingPage)
                {
                    DragJoystick(_form, this, new System.Drawing.Point(-50, 40));
                    _drag1Cnt++;
                }
            });

            ActionSequenceTree drag2 =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[drag2]");
                if (_form.CurrentPageName != Globals.FishingPage)
                {
                    if (_drag2Cnt == 0)
                    {
                        DragJoystick(_form, this, new System.Drawing.Point(15, -60));
                    }
                    else
                    {
                        DragJoystick(_form, this, new System.Drawing.Point(-50, -60));
                    }
                    _drag2Cnt++;
                }
            });

            ActionSequenceTree goToFishing =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[goToFishing]");

                AddSubJob(new JobMovePage(_form, Globals.FishingPage, Globals.GoToFishing, Globals.FishingInPage));
            });

            ActionSequenceTree readyToFish =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[readyToFish]");

                _fishingStartTime = DateTime.Now;

                AddSubJob(new JobWaitTime(_form, 1000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, _bait, true));

                AddSubJob(new JobWaitTime(_form, 1000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.GetList, true));

                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree findForCheckNotFishing =
                new ActionSequenceTree(
                    () =>
            {
                Console.WriteLine("[findForCheckNotFishing]");
                AddSubJob(new JobTryFindSubImage(_form, Globals.StartFishingImg));
            });

            ActionSequenceTree clickToStartFishing =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[clickToStartFishing]");

                AddSubJob(new JobWaitTime(_form, 1000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.StartFishing, true));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree checkFinish =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkFinish] fishingElapsed : " + _fishingElapsed + "  drag2Cnt : " + _drag2Cnt);
                AddSubJob(new JobCheckCondition(_form, () => { return(_fishingElapsed > _fishingTime); }));
            });

            ActionSequenceTree exitFishing =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitFishing]");
                AddSubJob(new JobMovePage(_form, Globals.FishingInPage, Globals.StopFishing, Globals.FishingFinishPage));
                AddSubJob(new JobMovePage(_form, Globals.FishingFinishPage, Globals.YesInFishingFinishPage, Globals.FishingPage));
                AddSubJob(new JobMovePage(_form, Globals.FishingPage, Globals.ToMainPageFromFishing, Globals.MainPage));
            });


            fromMain.Completed  = fromMenu;
            fromMenu.Completed  = fromGuild;
            fromGuild.Completed = checkBreakAway;

            checkBreakAway.Completed         = exitFishingByBreakAway;
            exitFishingByBreakAway.Completed = null;

            checkBreakAway.Failed = checkFishingPage;



            checkFishingPage.Completed = goToFishing;
            checkFishingPage.Failed    = checkCondition;
            checkCondition.Completed   = drag2;
            checkCondition.Failed      = drag1;
            drag1.Completed            = checkBreakAway;
            drag2.Completed            = checkBreakAway;

            goToFishing.Completed = readyToFish;
            readyToFish.Completed = findForCheckNotFishing;

            findForCheckNotFishing.Completed = clickToStartFishing;
            clickToStartFishing.Completed    = findForCheckNotFishing;
            findForCheckNotFishing.Failed    = checkFinish;

            checkFinish.Failed            = checkFinish;
            checkFinish.Completed         = exitFishing;
            exitFishing.Completed         = null;
            exitFishing.ActionOnCompleted = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            //_repairMap[Globals.TraversePage] = fromTraverse;
            //_repairMap[Globals.WeekDungeonPage] = fromWeek;
            //_repairMap[Globals.WeekDungeonResultPage] = fromResult;
        }
        protected override void MakeActionSequenceTree()
        {
            // make action sequence tree

            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Traverse, Globals.TraversePage));
            });

            ActionSequenceTree fromTraverse =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromTraverse]");
                AddSubJob(new JobMovePage(_form, Globals.TraversePage, Globals.GoldDungeon, Globals.GoldDungeonPage));
            });


            ActionSequenceTree fromGold =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromGold]");

                OpenCvSharp.Rect left;
                bool leftFlag =
                    _form.AllUIRects.TryGetValue(Globals.GoldDragLeftPos, out left);

                OpenCvSharp.Rect right;
                bool rightFlag =
                    _form.AllUIRects.TryGetValue(Globals.GoldDragRightPos, out right);

                if (leftFlag && rightFlag)
                {
                    var start = Utils.RectToPos(right.X, right.Y, right.Width, right.Height);
                    var end   = Utils.RectToPos(left.X, left.Y, left.Width, left.Height);
                    AddSubJob(new JobDrag(_form, start, end));
                }


                AddSubJob(new JobWaitTime(_form, 2000));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.GLevel5, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.GLevel5, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.GLevel5, true));
                AddSubJob(new JobWaitTime(_form, 750));
            });

            ActionSequenceTree checkGoldDungeonPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkGoldDungeonPage]");
                AddSubJob(new JobCheckPage(_form, Globals.GoldDungeonPage));
            });

            ActionSequenceTree exitGoldDungeonPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitGoldDungeonPage]");
                AddSubJob(new JobMovePage(_form, Globals.GoldDungeonPage, Globals.BackInGoldDungeon, Globals.MainPage));
            });

            ActionSequenceTree fromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromResult]");
                AddSubJob(new JobMovePage(_form, Globals.GoldDungeonResultPage, Globals.ToMainFromGoldResult, Globals.MainPage));
            });


            fromMain.Completed     = fromTraverse;
            fromTraverse.Completed = fromGold;
            fromGold.Completed     = checkGoldDungeonPage;

            checkGoldDungeonPage.Completed        = exitGoldDungeonPage;
            exitGoldDungeonPage.ActionOnCompleted = () => { _status = State.Failed; };

            checkGoldDungeonPage.Failed  = fromResult;
            fromResult.ActionOnCompleted = () => { _status = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.TraversePage]          = fromTraverse;
            _repairMap[Globals.GoldDungeonPage]       = fromGold;
            _repairMap[Globals.GoldDungeonResultPage] = fromResult;
        }
예제 #14
0
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Cowork, Globals.CoworkPage));
                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.CoworkPage }));
                AddSubJob(new JobMovePage(_form, Globals.CoworkPage, Globals.Party, Globals.PartyPage));
            });



            ActionSequenceTree dragForFindLevel =
                new ActionSequenceTree(
                    () =>
            {
                OpenCvSharp.Rect left;
                bool leftFlag =
                    _form.AllUIRects.TryGetValue(Globals.RaidDragLeftPos, out left);

                OpenCvSharp.Rect right;
                bool rightFlag =
                    _form.AllUIRects.TryGetValue(Globals.RaidDragRightPos, out right);

                if (leftFlag && rightFlag)
                {
                    if (_level == Globals.PLevel1 || _level == Globals.PLevel2)
                    {
                        var start = Utils.RectToPos(left.X, left.Y, left.Width, left.Height);
                        var end   = Utils.RectToPos(right.X, right.Y, right.Width, right.Height);
                        AddSubJob(new JobDrag(_form, start, end));
                    }
                    else
                    {
                        var start = Utils.RectToPos(right.X, right.Y, right.Width, right.Height);
                        var end   = Utils.RectToPos(left.X, left.Y, left.Width, left.Height);
                        AddSubJob(new JobDrag(_form, start, end));
                    }
                }
            });

            ActionSequenceTree findLevel =
                new ActionSequenceTree(
                    () =>
            {
                AddSubJob(new JobTryFindSubImage(_form, _level));
            });

            ActionSequenceTree clickLevel =
                new ActionSequenceTree(
                    () =>
            {
                OpenCvSharp.Rect rect = (OpenCvSharp.Rect)BlackBoard.Instance.Read(BlackBoard.UIRectBlackBoardID, this);
                var pos = Utils.RectToPos(rect.X, rect.Y, rect.Width, rect.Height);
                AddSubJob(new JobMoveAndClickMouse(_form, pos));
            });



            ActionSequenceTree fromParty =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromParty]");

                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.PartyAward, true));
                AddSubJob(new JobWaitTime(_form, 1000));
            });

            ActionSequenceTree checkAwardPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkAwardPage]");

                AddSubJob(new JobCheckPage(_form, Globals.PartyRepeatAwardPage));
            });

            // if checkAwardPage completed
            ActionSequenceTree exitAwardPage =
                new ActionSequenceTree(() =>
            {
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.PartyRepeatAwardPage,
                        Globals.OutFromRepeatAward, Globals.PartyPage));
            });

            ActionSequenceTree clickStart =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[clickStart]");
                AddSubJob(new JobMovePage(_form, Globals.PartyPage, Globals.StartParty, new string[] { Globals.PartyRestrictedPage, Globals.UnknownPage }));
            });

            ActionSequenceTree checkPartyRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkPartyRestricted]");
                AddSubJob(new JobCheckPage(_form, Globals.PartyRestrictedPage));
            });

            // if checkPartyRestricted completed
            ActionSequenceTree exitPartyRestrictedPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitPartyRestrictedPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.PartyRestrictedPage,
                        Globals.NoInPartyRestrictedPage, Globals.PartyPage));
            });

            ActionSequenceTree exitPartyPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitPartyPage]");
                AddSubJob(new JobMovePage(_form, Globals.PartyPage, Globals.BackInParty, Globals.MainPage));
            });

            ActionSequenceTree fromStarted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromStarted]");
                AddSubJob(
                    new JobCheckUntilMeetPage(
                        _form, new string[] { Globals.PartyResultPage }));
            });

            ActionSequenceTree fromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromResult]");
                AddSubJob(new JobMovePage(_form, Globals.PartyResultPage, Globals.ToMainFromPartyResult, Globals.MainPage));
            });

            if (_form.SkipPartyLevelSelect)
            {
                fromMain.Completed = fromParty;
            }
            else
            {
                fromMain.Completed         = dragForFindLevel;
                dragForFindLevel.Completed = findLevel;
                findLevel.Completed        = clickLevel;
                clickLevel.Completed       = fromParty;
            }

            fromParty.Completed               = checkAwardPage;
            checkAwardPage.Completed          = exitAwardPage;
            checkAwardPage.Failed             = clickStart;
            exitAwardPage.Completed           = clickStart;
            clickStart.Completed              = checkPartyRestricted;
            checkPartyRestricted.Completed    = exitPartyRestrictedPage;
            checkPartyRestricted.Failed       = fromStarted;
            exitPartyRestrictedPage.Completed = exitPartyPage;
            fromStarted.Completed             = fromResult;
            fromResult.ActionOnCompleted      = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.CoworkPage]           = fromMain;
            _repairMap[Globals.PartyPage]            = fromParty;
            _repairMap[Globals.PartyRepeatAwardPage] = exitAwardPage;
            _repairMap[Globals.PartyRestrictedPage]  = exitPartyRestrictedPage;
            _repairMap[Globals.PartyResultPage]      = fromResult;
        }
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Fight, Globals.FightPage));
            });

            ActionSequenceTree fromFight =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromFight]");
                AddSubJob(new JobMovePage(_form, Globals.FightPage, Globals.ToCompeteBattle, Globals.CompeteBattlePage));
            });

            ActionSequenceTree fromCompete =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromCompete]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.RewardCompeteBattle));
                AddSubJob(new JobWaitTime(_form, 1000, true));

                AddSubJob(new JobCheckPage(_form, Globals.CompeteBattleRewardPage));
            });

            ActionSequenceTree exitReward =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitReward]");
                AddSubJob(new JobMovePage(_form, Globals.CompeteBattleRewardPage, Globals.ToCompeteBattleFromReward, Globals.CompeteBattlePage));
            });

            ActionSequenceTree rewardRanking =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[rewardRanking]");
                AddSubJob(new JobWaitTime(_form, 500, true));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.RewardRankingCompeteBattle));

                AddSubJob(new JobWaitTime(_form, 1000, true));
                AddSubJob(new JobCheckPage(_form, Globals.CompeteBattleRewardRankingPage));
            });

            ActionSequenceTree exitRewardRanking =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitRewardRanking]");
                AddSubJob(new JobMovePage(_form, Globals.CompeteBattleRewardRankingPage, Globals.ToCompeteBattleFromRewardRanking, Globals.CompeteBattlePage));
            });

            ActionSequenceTree startCompete =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[startCompete]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.CompeteBattlePage,
                        Globals.StartCompeteBattle2,
                        new string[] { Globals.CompeteBattleRestrictedPage, Globals.UnknownPage }));
            });

            ActionSequenceTree checkRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkRestricted]");
                AddSubJob(new JobWaitTime(_form, 1500, true));
                AddSubJob(new JobCheckPage(_form, Globals.CompeteBattleRestrictedPage));
            });

            ActionSequenceTree exitRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitRaidRestrictedPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.CompeteBattleRestrictedPage,
                        Globals.NoInCompeteBattleRestrictedPage, Globals.CompeteBattlePage));
            });

            ActionSequenceTree exitCompeteBattle =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitCompeteBattle]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.CompeteBattlePage,
                        Globals.ToMainFromCompeteBattle, Globals.MainPage));
            });


            ActionSequenceTree fromStarted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromStarted]");
                AddSubJob(
                    new JobCheckUntilMeetPage(
                        _form, new string[] { Globals.CompeteBattleResultPage }));
            });

            ActionSequenceTree fromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromResult]");
                AddSubJob(new JobMovePage(_form, Globals.CompeteBattleResultPage, Globals.ToMainFromCompeteBattleResult, Globals.MainPage));
            });

            fromMain.Completed               = fromFight;
            fromFight.Completed              = fromCompete;
            fromCompete.Completed            = exitReward;
            exitReward.Completed             = rewardRanking;
            fromCompete.Failed               = rewardRanking;
            rewardRanking.Completed          = exitRewardRanking;
            rewardRanking.Failed             = startCompete;
            exitRewardRanking.Completed      = startCompete;
            startCompete.Completed           = checkRestricted;
            checkRestricted.Completed        = exitRestricted;
            checkRestricted.Failed           = fromStarted;
            exitRestricted.Completed         = exitCompeteBattle;
            exitCompeteBattle.ActionOnFailed = () => { _returnState = State.Failed; };
            fromStarted.Completed            = fromResult;
            fromResult.ActionOnCompleted     = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.FightPage]                   = fromFight;
            _repairMap[Globals.CompeteBattlePage]           = fromCompete;
            _repairMap[Globals.CompeteBattleRewardPage]     = exitReward;
            _repairMap[Globals.CompeteBattleResultPage]     = fromResult;
            _repairMap[Globals.CompeteBattleRestrictedPage] = exitRestricted;
        }
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");
                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Menu, Globals.MenuPage));
            });

            ActionSequenceTree fromMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMenu]");
                AddSubJob(new JobMovePage(_form, Globals.MenuPage, Globals.MenuToItem, Globals.ItemPage));
            });

            ActionSequenceTree fromItem =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromItem]");

                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot2, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot2, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot2, true));
                AddSubJob(new JobWaitTime(_form, 750));
            });

            ActionSequenceTree selectItem =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[selectItem]");
                if (_upgradeState != UpgradeState.Finished)
                {
                    var item = _upgradeItemOnState[_upgradeState];
                    AddSubJob(new JobMovePage(_form, Globals.ItemPage, item, Globals.ItemDetailPage));
                }
            });


            ActionSequenceTree fromItemDetail =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromItemDetail]");
                AddSubJob(new JobMovePage(_form, Globals.ItemDetailPage, Globals.ToUpgrade, Globals.ItemUpgradePage));
                AddSubJob(new JobWaitTime(_form, 750));
            });


            // upgrade
            ActionSequenceTree findItem =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[findItem]");
                AddSubJob(new JobTryFindOneOfSubImages(_form, _itemRanks));
            });

            ActionSequenceTree clickItem =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[clickItem]");
                OpenCvSharp.Rect rect = (OpenCvSharp.Rect)BlackBoard.Instance.Read(BlackBoard.UIRectBlackBoardID, this);

                int addX = 10;
                int addY = 20;

                var pos = Utils.RectToPos(rect.X + addX, rect.Y + addY, rect.Width, rect.Height);

                AddSubJob(new JobMoveAndClickMouse(_form, pos));
                AddSubJob(new JobWaitTime(_form, 500));
            });

            ActionSequenceTree upgrade =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[upgrade]");
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.StartUpgrade, true));
                AddSubJob(new JobWaitTime(_form, 500));
                AddSubJob(new JobCheckPage(_form, Globals.ItemUpgradeResultPage, 5000));
            });

            ActionSequenceTree checkLockPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkLockPage]");
                AddSubJob(new JobWaitTime(_form, 500));
                AddSubJob(new JobCheckPage(_form, Globals.ItemLockPage, 5000));
            });


            ActionSequenceTree exitResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitResult]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.ItemUpgradeResultPage,
                        Globals.OutFromUpgradeResult, Globals.ItemUpgradePage));
            });


            // exit
            ActionSequenceTree exitItemUpgrade =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitItemUpgrade]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.ItemUpgradePage,
                        Globals.BackInUpgradePage, Globals.ItemPage));
            });

            ActionSequenceTree checkUpgradeState =
                new ActionSequenceTree(() =>
            {
                AddSubJob(new JobCheckCondition(_form, () => { return(_upgradeState == UpgradeState.Finished); }));
            });

            ActionSequenceTree exitItemPage =
                new ActionSequenceTree(() =>
            {
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot1, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot1, true));
                AddSubJob(new JobWaitTime(_form, 750));
                AddSubJob(JobGenerator.CreateJobMoveAndClickMouse(_form, Globals.ItemSlot1, true));
                AddSubJob(new JobWaitTime(_form, 750));

                Console.WriteLine("[exitItemPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.ItemPage,
                        Globals.BackInItemPage, Globals.MenuPage));
            });

            ActionSequenceTree exitMenu =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitMenu]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.MenuPage,
                        Globals.BackInMenu, Globals.MainPage));
            });

            // if repair
            ActionSequenceTree exitLockPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitLockPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.ItemLockPage,
                        Globals.NoInItemLockPage, Globals.ItemUpgradePage));
            });

            ActionSequenceTree exitGetVisualPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitGetVisualPage]");
                AddSubJob(
                    new JobMovePage(
                        _form,
                        Globals.ItemGetVisualPage,
                        Globals.ExitItemGetVisual, Globals.ItemDetailPage));
            });


            fromMain.Completed       = fromMenu;
            fromMenu.Completed       = fromItem;
            fromItem.Completed       = selectItem;
            selectItem.Completed     = fromItemDetail;
            fromItemDetail.Completed = findItem;


            // upgrade
            findItem.Completed         = clickItem;
            findItem.ActionOnCompleted = () =>
            {
                _form.ItemUpgradeCnt = _form.ItemUpgradeCnt + 1;
                _nothingToUpgrade    = false;
            };

            clickItem.Completed     = upgrade;
            upgrade.Completed       = exitResult;
            upgrade.Failed          = checkLockPage;
            checkLockPage.Completed = exitLockPage;
            exitLockPage.Completed  = exitItemUpgrade;
            checkLockPage.Failed    = findItem;
            exitResult.Completed    = findItem;

            findItem.Failed = exitItemUpgrade;

            exitItemUpgrade.Completed         = checkUpgradeState;
            exitItemUpgrade.ActionOnCompleted = () =>
            {
                UpdateUpgradeState();
            };

            checkUpgradeState.Completed = exitItemPage;
            checkUpgradeState.Failed    = selectItem;

            exitItemPage.Completed     = exitMenu;
            exitMenu.ActionOnCompleted = () =>
            {
                if (_nothingToUpgrade)
                {
                    _returnState = State.Failed;
                }
                else
                {
                    _returnState = State.Completed;
                }
            };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.MenuPage]              = fromMenu;
            _repairMap[Globals.ItemPage]              = fromItem;
            _repairMap[Globals.ItemDetailPage]        = fromItemDetail;
            _repairMap[Globals.ItemUpgradePage]       = findItem;
            _repairMap[Globals.ItemLockPage]          = exitLockPage;
            _repairMap[Globals.ItemUpgradeResultPage] = exitResult;
            _repairMap[Globals.ItemGetVisualPage]     = exitGetVisualPage;
        }
        protected override void MakeActionSequenceTree()
        {
            ActionSequenceTree fromMain =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromMain]");

                AddSubJob(new JobMovePage(_form, Globals.MainPage, Globals.Traverse, Globals.TraversePage));
                AddSubJob(new JobCheckUntilMeetPage(_form, new string[] { Globals.TraversePage }));
            });

            ActionSequenceTree fromTraverse =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromTraverse]");
                AddSubJob(new JobMovePage(_form, Globals.TraversePage, Globals.TraverseDungeon, Globals.TraverseDungeonPage));
            });

            ActionSequenceTree checkForTraverseDungeonBlankPage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkForBlankTraversePage]");
                AddSubJob(new JobCheckPage(_form, Globals.TraverseDungeonBlankPage));
            });

            ActionSequenceTree moveLeft =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[moveLeft]");
                new JobMovePage(_form, Globals.TraverseDungeonBlankPage, Globals.LeftInTraverse, Globals.TraverseDungeonPage);
            });

            ActionSequenceTree selectLevel =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[selectLevel]");
                AddSubJob(new JobMovePage(_form, Globals.TraverseDungeonPage, _level, Globals.TraverseStagePage));
            });

            ActionSequenceTree fromTraverseStage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromTraverseStage]");
                AddSubJob(new JobMovePage(_form, Globals.TraverseStagePage, Globals.StartTraverse, new string[] { Globals.TraverseRestrictedPage, Globals.UnknownPage }));
            });

            ActionSequenceTree checkTraverseRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[checkTraverseRestricted]");
                AddSubJob(new JobCheckPage(_form, Globals.TraverseRestrictedPage));
            });

            ActionSequenceTree exitTraverseRestricted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitTraverseRestricted]");
                AddSubJob(new JobMovePage(_form, Globals.TraverseRestrictedPage, Globals.NoInTraverseRestrictedPage, Globals.TraverseStagePage));
            });

            ActionSequenceTree exitTraverseStage =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitTraverseStage]");
                AddSubJob(new JobMovePage(_form, Globals.TraverseStagePage, Globals.BackInTraverseStage, Globals.TraverseDungeonPage));
            });

            ActionSequenceTree exitTraverseDungeon =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[exitTraverseDungeon]");
                AddSubJob(new JobMovePage(_form, Globals.TraverseDungeonPage, Globals.BackInTraverseDungeon, Globals.MainPage));
            });

            ActionSequenceTree fromStarted =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[fromStarted]");
                AddSubJob(new JobCheckUntilMeetPage(
                              _form,
                              new string[] { Globals.TraverseResultPage }));
            });

            ActionSequenceTree checkClearCnt =
                new ActionSequenceTree(() =>
            {
                AddSubJob(new JobCheckCondition(_form, () => { return(_clearCnt >= _clearWaves); }));
            });


            ActionSequenceTree retry =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[retry]");

                AddSubJob(new JobMovePage(
                              _form,
                              Globals.TraverseResultPage,
                              Globals.RetryInTraverseResultPage,
                              Globals.TraverseStagePage));
            });

            ActionSequenceTree toMainFromResult =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[toMainFromResult]");

                AddSubJob(new JobMovePage(
                              _form,
                              Globals.TraverseResultPage,
                              Globals.ToMainFromTraverseResultPage,
                              Globals.MainPage));
            });

            ActionSequenceTree outFromInGameStop =
                new ActionSequenceTree(() =>
            {
                Console.WriteLine("[outFromInGameStop]");

                var job = JobGenerator.CreateJobMoveAndClickMouse(
                    _form, Globals.KeepGoingInStopPage, true);
                job.AddSubJob(new JobWaitTime(_form, 750));

                AddSubJob(job);
            });


            fromMain.Completed     = fromTraverse;
            fromTraverse.Completed = checkForTraverseDungeonBlankPage;
            checkForTraverseDungeonBlankPage.Completed = moveLeft;
            checkForTraverseDungeonBlankPage.Failed    = selectLevel;
            moveLeft.Completed                = selectLevel;
            selectLevel.Completed             = fromTraverseStage;
            fromTraverseStage.Completed       = checkTraverseRestricted;
            checkTraverseRestricted.Completed = exitTraverseRestricted;
            exitTraverseRestricted.Completed  = exitTraverseStage;
            exitTraverseStage.Completed       = exitTraverseDungeon;
            checkTraverseRestricted.Failed    = fromStarted;
            fromStarted.Completed             = checkClearCnt;

            checkClearCnt.Completed         = toMainFromResult;
            checkClearCnt.Failed            = retry;
            checkClearCnt.ActionOnCompleted = () => { _clearCnt++; _form.TraverseClearedCnt = _form.TraverseClearedCnt + 1; };
            checkClearCnt.ActionOnFailed    = () => { _clearCnt++; _form.TraverseClearedCnt = _form.TraverseClearedCnt + 1; };

            retry.Completed = fromTraverseStage;
            toMainFromResult.ActionOnCompleted = () => { _returnState = State.Completed; };

            _currentAction = fromMain;

            // make repair map
            _repairMap[Globals.TraversePage]             = fromTraverse;
            _repairMap[Globals.TraverseDungeonPage]      = checkForTraverseDungeonBlankPage;
            _repairMap[Globals.TraverseDungeonBlankPage] = checkForTraverseDungeonBlankPage;
            _repairMap[Globals.TraverseStagePage]        = fromTraverseStage;
            _repairMap[Globals.TraverseRestrictedPage]   = checkTraverseRestricted;
            _repairMap[Globals.TraverseResultPage]       = checkClearCnt;

            //_repairMap[Globals.UnknownPage] = outFromInGameStop;
        }