예제 #1
0
        /// <summary>
        /// 箱空け待機処理
        /// </summary>
        private void AWait()
        {
            while (Running)
            {
                SetMessage("箱やNPCが選択されるまで待機中");
                if (_FFACE.Menu.IsOpen)
                {
                    //フィールドチェック
                    if (_Settings.ExecField)
                    {
                        if (_FFACE.Target.Name == "Treasure Casket" &&
                            MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum1) || // ^どうする?$
                            MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum3))   //^どうする?(残り([0-9]*)回)$
                        {
                            SetMessage("箱空け実行中");
                            Boolean r = StartField();
                            if (!r)
                            {
                                break;
                            }
                        }
                    }
                    //Mumチェック
                    if (_Settings.ExecMum)
                    {
                        if (_FFACE.Player.Zone == Zone.Western_Adoulin &&
                            _FFACE.Target.Name == "Kerney" &&
                            _FFACE.Menu.IsOpen &&
                            (MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum1) || // ^どうする?$
                             MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum3) || //^どうする?(残り([0-9]*)回)$
                             MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum4)))  //^もう1度やりますか?(.*)$

                        {
                            Constant.MumStartRet r = StartMum();
                            if (r == Constant.MumStartRet.異常終了)
                            {
                                break;
                            }
                        }
                    }
                }
                System.Threading.Thread.Sleep(_Settings.BaseWait);
            }
            Exec(false);
        }
예제 #2
0
        /// <summary>
        /// キーナンバー99 箱空け処理
        /// </summary>
        /// <returns></returns>
        private Constant.MumStartRet StartMum()
        {
            FFACE.ChatTools.ChatLine cl = new FFACE.ChatTools.ChatLine();
            Constant.MumGameInfo     gi = _Constant.GetMumGameInfo(_Settings.MumGameId);
            Box box           = new Box(gi.Id);
            int boxOpenRemain = _Settings.MumTryCount;

            SetMessage("MUM箱空け実行中");
            while (Running)
            {
                //どうする?
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum1))
                {
                    box = new Box(gi.Id);
                    SetTextboxText(txtTargets, box.EnableNoLine);
                    switch (gi.Type)
                    {
                    case Constant.MumGameType.BAYLD:
                        if (!SetDialogOptionIndex(1, true))
                        {
                            return(Constant.MumStartRet.異常終了);
                        }
                        break;

                    case Constant.MumGameType.GIL:
                        if (!SetDialogOptionIndex(2, true))
                        {
                            return(Constant.MumStartRet.異常終了);
                        }
                        break;
                    }
                    if (!WaitOpenDialog(Constant.DialogStringMum2, false))
                    {
                        return(Constant.MumStartRet.異常終了);
                    }
                }
                //難易度を選択してください((.*):([0-9]*))
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum2))
                {
                    if (!SetDialogOptionIndex(gi.MenuIndex, true))
                    {
                        return(Constant.MumStartRet.異常終了);
                    }
                    if (!WaitOpenDialog(Constant.DialogStringMum3, false))
                    {
                        return(Constant.MumStartRet.異常終了);
                    }
                    box = new Box(gi.Id);
                }
                //どうする?(残り([0-9]*)回)
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum3))
                {
                    //残り回数取得
                    if (MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum3))
                    {
                        ArrayList al = MiscTools.GetRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum3);
                        box.TryRemainCnt = int.Parse(al[0].ToString());
                    }
                    //string[] r = getMatchDialogQuestionValue(Constant.DialogStringMum3);
                    //box.TryRemainCnt = int.Parse(r[1]);
                    //チャットバッファクリア
                    cl = _FFACE.Chat.GetNextLine(LineSettings.CleanAll);
                    //次の操作取得
                    BoxOperation bo = box.GetNextOperation();
                    if (bo.Operation == BoxOperationKind.INPUTNO)
                    {
                        SetMessage("箱操作:" + bo.InputNo.ToString() + "を入力");
                        if (!SetDialogOptionIndex(0, true))
                        {
                            return(Constant.MumStartRet.異常終了);                               //数字を入力するを選択
                        }
                        if (!_Settings.UseEnternity)
                        {
                            System.Threading.Thread.Sleep(_Settings.BaseWait);
                            _FFACE.Windower.SendKeyPress(KeyCode.EnterKey);
                        }
                        if (!InputNumber(bo.InputNo.ToString(), true))
                        {
                            return(Constant.MumStartRet.異常終了);                                          //数字を入力する
                        }
                    }
                    else if (bo.Operation == BoxOperationKind.GETHINTS)
                    {
                        SetMessage("箱操作:カギを調べる");
                        if (!SetDialogOptionIndex(1, true))
                        {
                            return(Constant.MumStartRet.異常終了);                               //カギを調べるを選択
                        }
                    }
                    //else if (bo.Operation == BoxOperationKind.FINISHED)
                    //{
                    //    return Constant.MumStartRet.正常終了;
                    //}
                    System.Threading.Thread.Sleep(_Settings.NumberInputWait);
                    setChatToBox(box);
                    SetTextboxText(txtTargets, box.EnableNoLine);

                    //箱空け完了かの判断
                    bo = box.GetNextOperation();
                    if (bo.Operation == BoxOperationKind.OPENSUCCESS ||
                        bo.Operation == BoxOperationKind.OPENFAILED)
                    {
                        //残り回数の判定
                        boxOpenRemain--;
                        if (_Settings.MumTryCount != 0)
                        {
                            if (boxOpenRemain > 0)
                            {
                                if (bo.Operation == BoxOperationKind.OPENSUCCESS)
                                {
                                    SetMessage("箱空け成功 残り回数:" + boxOpenRemain);
                                }
                                else
                                {
                                    SetMessage("箱空け失敗 残り回数:" + boxOpenRemain);
                                }
                            }
                        }
                    }
                }
                //もう1度やりますか?
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringMum4))
                {
                    //規定回数開けてたら終了
                    if (_Settings.MumTryCount != 0 &&
                        boxOpenRemain <= 0)
                    {
                        SetMessage("規定回数に達したので停止しました");
                        if (!SetDialogOptionIndex(0, true))
                        {
                            return(Constant.MumStartRet.異常終了);
                        }
                        return(Constant.MumStartRet.指定回数実行);
                    }
                    box = new Box(gi.Id);
                    SetTextboxText(txtTargets, box.EnableNoLine);
                    switch (gi.Type)
                    {
                    case Constant.MumGameType.BAYLD:
                        if (!SetDialogOptionIndex(1, true))
                        {
                            return(Constant.MumStartRet.異常終了);
                        }
                        break;

                    case Constant.MumGameType.GIL:
                        if (!SetDialogOptionIndex(2, true))
                        {
                            return(Constant.MumStartRet.異常終了);
                        }
                        break;
                    }
                    if (!WaitOpenDialog(Constant.DialogStringMum3, false))
                    {
                        return(Constant.MumStartRet.異常終了);
                    }
                }

                System.Threading.Thread.Sleep(_Settings.BaseWait);
            }
            return(Constant.MumStartRet.正常終了);
        }
예제 #3
0
        /// <summary>
        /// フィールド箱空け処理
        /// </summary>
        /// <returns>True:正常終了 False:異常終了</returns>
        private Boolean StartField()
        {
            FFACE.ChatTools.ChatLine cl = new FFACE.ChatTools.ChatLine();
            Constant.MumGameInfo     gi = _Constant.GetMumGameInfo(_Settings.MumGameId);
            Box box           = new Box(BoxTypeKind.Field);
            int boxOpenRemain = _Settings.MumTryCount;
            int targetId      = _FFACE.Target.ID;

            SetMessage("FOV・GOV箱空け実行中");
            while (Running)
            {
                //どうする?
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringField1))
                {
                    //開錠するを選択
                    if (!SetDialogOptionIndex(1, true))
                    {
                        return(false);
                    }
                    if (!WaitOpenDialog(Constant.DialogStringField2, false))
                    {
                        return(false);
                    }
                }
                //どうする?(残り([0-9]*)回)
                if (_FFACE.Menu.IsOpen && MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringField2))
                {
                    //残り回数取得
                    if (MiscTools.IsRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringField2))
                    {
                        ArrayList al = MiscTools.GetRegexString(_FFACE.Menu.DialogText.Question, Constant.DialogStringField2);
                        box.TryRemainCnt = int.Parse(al[0].ToString());
                    }
                    //string[] r = getMatchDialogQuestionValue(Constant.DialogStringMum3);
                    //box.TryRemainCnt = int.Parse(r[1]);
                    //チャットバッファクリア
                    cl = _FFACE.Chat.GetNextLine(LineSettings.CleanAll);
                    //次の操作取得
                    BoxOperation bo = box.GetNextOperation();
                    if (bo.Operation == BoxOperationKind.INPUTNO)
                    {
                        SetMessage("箱操作:" + bo.InputNo.ToString() + "を入力");
                        if (!SetDialogOptionIndex(1, true))
                        {
                            return(false);                               //数字を入力するを選択
                        }
                        if (!_Settings.UseEnternity)
                        {
                            System.Threading.Thread.Sleep(_Settings.BaseWait);
                            _FFACE.Windower.SendKeyPress(KeyCode.EnterKey);
                        }
                        if (!InputNumber(bo.InputNo.ToString(), true))
                        {
                            return(false);                                          //数字を入力する
                        }
                    }
                    else if (bo.Operation == BoxOperationKind.GETHINTS)
                    {
                        SetMessage("箱操作:カギを調べる");
                        if (!SetDialogOptionIndex(2, true))
                        {
                            return(false);                               //カギを調べるを選択
                        }
                    }
                    System.Threading.Thread.Sleep(_Settings.NumberInputWait);
                    setChatToBox(box);
                    SetTextboxText(txtTargets, box.EnableNoLine);

                    //箱空け完了かの判断
                    bo = box.GetNextOperation();
                    if (bo.Operation == BoxOperationKind.OPENSUCCESS)
                    {
                        SetMessage("箱開けに成功しました");
                        return(true);
                    }
                    else if (bo.Operation == BoxOperationKind.OPENFAILED)
                    {
                        SetMessage("箱開けに失敗しました");
                        return(true);
                    }
                    else
                    {
                        //箱をターゲットする
                        if (!SetTargetFromId(targetId))
                        {
                            return(false);
                        }
                        _FFACE.Windower.SendKeyPress(KeyCode.EnterKey);//ENTER
                        if (!WaitOpenDialog(Constant.DialogStringField1, true))
                        {
                            return(false);
                        }
                    }
                }
                System.Threading.Thread.Sleep(_Settings.BaseWait);
            }
            return(true);
        }
예제 #4
0
        /// <summary>
        /// 受け取ったチャット内容より
        /// </summary>
        /// <param name="iChat"></param>
        public void SetHints(ArrayList iChatArr)
        {
            ArrayList tmpArr = new ArrayList();
            ArrayList reg    = new ArrayList();

            for (int i = 0; i < iChatArr.Count; i++)
            {
                if (!MiscTools.IsRegexString(iChatArr[i].ToString(), BoxHintsStringArr))
                {
                    continue;
                }
                MiscTools.DebugMessage("指示文字列:" + iChatArr[i].ToString());
                for (int j = 0; j < EnableNo.Count; j++)
                {
                    //カギの数字は([0-9]*)より(大きい|小さい)ようだ……。
                    reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString1);
                    if (reg.Count > 0)
                    {
                        Hints.Add(iChatArr[i]);
                        if (reg[1].ToString().Equals("大きい"))
                        {
                            if (int.Parse(EnableNo[j].ToString()) > int.Parse(reg[0].ToString()))
                            {
                                tmpArr.Add(EnableNo[j]);
                            }
                        }
                        else if (reg[1].ToString().Equals("小さい"))
                        {
                            if (int.Parse(EnableNo[j].ToString()) < int.Parse(reg[0].ToString()))
                            {
                                tmpArr.Add(EnableNo[j]);
                            }
                        }
                    }
                    //カギの数字は([0-9]*)より大きく、([0-9]*)より小さいようだ……。
                    reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString2);
                    if (reg.Count > 0)
                    {
                        if (int.Parse(EnableNo[j].ToString()) > int.Parse(reg[0].ToString()) &&
                            int.Parse(EnableNo[j].ToString()) < int.Parse(reg[1].ToString()))
                        {
                            tmpArr.Add(EnableNo[j]);
                        }
                    }
                    //カギの数字の([0-9])桁目は([0-9])か([0-9])か([0-9])のどれかのようだ……。
                    reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString3);
                    if (reg.Count > 0)
                    {
                        int col = 0;
                        if (reg[0].Equals("1"))
                        {
                            col = 1;
                        }
                        else if (reg[0].Equals("2"))
                        {
                            col = 0;
                        }
                        if (EnableNo[j].ToString().Substring(col, 1) == reg[1].ToString() ||
                            EnableNo[j].ToString().Substring(col, 1) == reg[2].ToString() ||
                            EnableNo[j].ToString().Substring(col, 1) == reg[3].ToString())
                        {
                            tmpArr.Add(EnableNo[j]);
                        }
                    }
                    //カギの2桁の数字のどちらかは([0-9])のようだ……。
                    reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString4);
                    if (reg.Count > 0)
                    {
                        if (EnableNo[j].ToString().Substring(0, 1) == reg[0].ToString() ||
                            EnableNo[j].ToString().Substring(1, 1) == reg[0].ToString())
                        {
                            tmpArr.Add(EnableNo[j]);
                        }
                    }
                    //カギの数字の([0-9])桁目は(偶数|奇数)のようだ……。
                    reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString5);
                    if (reg.Count > 0)
                    {
                        int col = 0;
                        if (reg[0].Equals("1"))
                        {
                            col = 1;
                        }
                        else if (reg[0].Equals("2"))
                        {
                            col = 0;
                        }
                        if (reg[1].Equals("偶数") && (int.Parse(EnableNo[j].ToString().Substring(col, 1)) % 2 == 0))
                        {
                            tmpArr.Add(EnableNo[j]);
                        }
                        if (reg[1].Equals("奇数") && (int.Parse(EnableNo[j].ToString().Substring(col, 1)) % 2 == 1))
                        {
                            tmpArr.Add(EnableNo[j]);
                        }
                    }
                    //(.*)は、開錠に成功した!
                    if (MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString6).Count > 0)
                    {
                        isOpenSuccess = true;
                    }
                    //(.*)は、開錠に失敗した……。
                    if (MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString7).Count > 0)
                    {
                        isOpenFailed = true;
                    }
                }
                EnableNo     = tmpArr;
                EnableNoLine = getEnableNoLine();
                MiscTools.DebugMessage("指示文字列結果:" + EnableNoLine);
            }
        }