/// <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);
        }
Exemple #3
0
 /// <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));
        }
Exemple #6
0
        /// <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);
            }
        }