/// <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); }
/// <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.正常終了); }
/// <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); }
/// <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); } }