/// <summary> /// 指定された文字列がチャットに表示されるまで待機 /// </summary> /// <param name="iRegexString">検索文字列</param> /// <param name="iWithEnter">True:エンターキーを連打する</param> /// <returns>True:見つかった False:見つからなかった</returns> public bool WaitChat(ChatTool iChatTool, string iRegexString, int iStartChatIndex, bool iWithEnter) { logger.Trace("RegexString={0} StartChatIndex={1} WithEnter={1}", iRegexString, iStartChatIndex, iWithEnter); List <EliteAPI.ChatEntry> arrChatLine; int currChatIndex = iStartChatIndex; for (int i = 0; (i < this.MaxLoopCount); i++) { arrChatLine = iChatTool.GetChatLine(currChatIndex); foreach (var cl in arrChatLine) { //チャットの判定 if (MiscTool.IsRegexString(cl.Text, iRegexString)) { return(true); } } if (!this.UseEnternity && iWithEnter) { if (api.Target.GetTargetInfo().TargetIndex != 0) { api.ThirdParty.KeyPress(Keys.RETURN);///Enter } } System.Threading.Thread.Sleep(this.ChatWait); } logger.Warn("タイムアウトしました"); return(false); }
/// <summary> /// 実行中のプラグイン名を取得する /// </summary> /// <returns>プラグイン名</returns> public List <string> GetPlugin() { if (api.Player.LoginStatus != (int)LoginStatus.LoggedIn) { return(new List <string>()); } chat.Reset(); api.ThirdParty.SendString("//plugin_list"); List <string> ret = new List <string>(); var cl = new EliteAPI.ChatEntry(); for (int i = 0; i < this.MaxLoopCount && !MiscTool.IsRegexString(cl.Text, REGEX_PLUGIN_END); i++) { while (chat.GetNextChatLine(out cl)) { if (MiscTool.IsRegexString(cl.Text, REGEX_PLUGIN)) { List <string> reg = MiscTool.GetRegexString(cl.Text, REGEX_PLUGIN); string[] work = reg[0].Split(','); ret.Add(work[work.Count() - 1]); } else if (MiscTool.IsRegexString(cl.Text, REGEX_PLUGIN_END)) { break; } } Thread.Sleep(this.BaseWait); } return(ret); }
/// <summary> /// チャットからタイムスタンプを削除 /// タイムスタンプの表示形式が[HH:MM]の場合、EliteAPIでタイムスタンプをクリアしてくれない /// </summary> /// <param name="iText"></param> /// <returns></returns> private string RemoveTimeStamp(string iText) { if (MiscTool.IsRegexString(iText, REGEX_TIMESTAMP_HHMM)) { var reg = MiscTool.GetRegexString(iText, REGEX_TIMESTAMP_HHMM); return(reg[2]); } else { return(iText); } }
/// <summary> /// 実行中のアドオン名を取得する /// </summary> /// <returns>アドオン名</returns> public List <string> GetAddon() { if (api.Player.LoginStatus != (int)LoginStatus.LoggedIn) { return(new List <string>()); } chat.Reset(); api.ThirdParty.SendString("//lua list"); Thread.Sleep(this.BaseWait); api.ThirdParty.SendString("/echo " + REGEX_ADDON_END); List <string> ret = new List <string>(); var cl = new EliteAPI.ChatEntry(); bool startFlg = false; for (int i = 0; i < this.MaxLoopCount && !MiscTool.IsRegexString(cl.Text, REGEX_ADDON_END); i++) { while (chat.GetNextChatLine(out cl)) { if (!startFlg) { if (MiscTool.IsRegexString(cl.Text, REGEX_ADDON_START)) { startFlg = true; } } else { if (MiscTool.IsRegexString(cl.Text, REGEX_ADDON_END)) { break; } else if (MiscTool.IsRegexString(cl.Text, REGEX_ADDON)) { List <string> reg = MiscTool.GetRegexString(cl.Text, REGEX_ADDON); ret.Add(reg[0].Trim()); } } } Thread.Sleep(this.BaseWait); } return(ret); }
/// <summary> /// Itemizerで鞄のアイテムを移動する /// </summary> /// <param name="iItemName">アイテム名</param> /// <param name="iInventoryType">倉庫タイプ</param> /// <returns>成功した場合Trueを返す</returns> public bool PutItemizer(string iItemName, StorageContainer iInventoryType) { //移動元に指定のアイテムが存在するかチェック if (!IsExistItem(iItemName, StorageContainer.Inventory)) { return(false); } //移動先に空きがあるかチェック if (!IsInventoryFree(iInventoryType)) { return(false); } //Itemizer実行 string scriptName = string.Format("{0}_{1}", MiscTool.GetAppAssemblyName(), api.Player.Name); //string cmd = string.Format("input /puts \"{0}\" {1}", iItemName, iInventoryType.ToString()); //return ExecScript(cmd, scriptName); string cmd = string.Format("windower.send_command(\"input //puts {0} {1}\")", iItemName, iInventoryType.ToString().ToLower()); return(ExecLua(cmd, scriptName)); }
/// <summary> /// バッファの更新 /// </summary> private void updateChatLine() { if (api == null || api.Player.LoginStatus != (int)LoginStatus.LoggedIn) { return; } EliteAPI.ChatEntry cl; EliteAPI.ChatEntry buff = null; while ((cl = api.Chat.GetNextChatLine()) != null) { //タイムスタンプを削除 cl.Text = RemoveTimeStamp(cl.Text); if (buff == null) { buff = cl; continue; } if (buff.Index1 == cl.Index1 || MiscTool.IsRegexString(cl.Text, REGEX_EMINENCE2)) { buff.Text += cl.Text; } else { AddChatLines(buff); buff = cl; } } if (buff != null) { AddChatLines(buff); } if (chatLines.Count > MAX_CHATLINE_INDEX) { chatLines.RemoveRange(0, chatLines.Count - MAX_CHATLINE_INDEX); } }