/// <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> public FFACEControl(PolTool iPOL, ChatTool iChat, LoggerTool iLogger) { this.pol = iPOL; this.fface = iPOL.FFACE; this.chat = iChat; this.logger = iLogger; this.MaxLoopCount = DEFAULT_MAX_LOOP_COUNT; this.UseEnternity = DEFAULT_USE_ENTERNITY; this.BaseWait = DEFAULT_BASE_WAIT; this.ChatWait = DEFAULT_CHAT_WAIT; }
/// <summary> /// コンストラクタ /// </summary> public EliteAPIControl(PolTool iPOL, ResourceTool iResource, ChatTool iChat) { this.pol = iPOL; this.api = iPOL.EliteAPI; this.chat = iChat; this.resource = iResource; this.MaxLoopCount = DEFAULT_MAX_LOOP_COUNT; this.UseEnternity = DEFAULT_USE_ENTERNITY; this.BaseWait = DEFAULT_BASE_WAIT; this.ChatWait = DEFAULT_CHAT_WAIT; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="iFFACE"></param> /// <param name="iChat"></param> /// <param name="iSettings"></param> /// <param name="iLogger"></param> public HarakiriTool(PolTool iPol, ChatTool iChat, Settings iSettings, LoggerTool iLogger) { pol = iPol; fface = iPol.FFACE; chat = iChat; settings = iSettings; logger = iLogger; fishDB = new FishDB(logger); harakiriDB = new HarakiriDB(logger); control = new FFACEControl(pol, chat, logger); control.MaxLoopCount = Constants.MAX_LOOP_COUNT; control.UseEnternity = settings.UseEnternity; control.BaseWait = settings.Global.WaitBase; control.ChatWait = settings.Global.WaitChat; this.RunningStatus = RunningStatusKind.Stop; this.HarakiriStatus = HarakiriStatusKind.Normal; }
/// <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.Output(LogLevelKind.INFO, "WaitChat", string.Format("RegexString={0} StartChatIndex={1} WithEnter={1}", iRegexString, iStartChatIndex, iWithEnter)); List<FFACE.ChatTools.ChatLine> arrChatLine; int currChatIndex = iStartChatIndex; for (int i = 0; (i < this.MaxLoopCount); i++) { arrChatLine = iChatTool.GetChatLine(currChatIndex); foreach (FFACE.ChatTools.ChatLine cl in arrChatLine) { //チャットの判定 if (MiscTool.IsRegexString(cl.Text, iRegexString)) { return true; } } if (!this.UseEnternity && iWithEnter) { if (this.fface.Target.ID != 0) this.fface.Windower.SendKeyPress(KeyCode.EnterKey);///Enter } System.Threading.Thread.Sleep(this.ChatWait); } logger.Output(LogLevelKind.WARN, "WaitChat", "タイムアウトしました"); return false; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="iFFACE"></param> /// <param name="iChat"></param> /// <param name="iSettings"></param> /// <param name="iLogger"></param> public FishingTool(PolTool iPol, ChatTool iChat, Settings iSettings, LoggerTool iLogger) { pol = iPol; pol.ChangeStatus += new PolTool.ChangeStatusEventHandler(this.PolTool_ChangeStatus); fface = iPol.FFACE; chat = iChat; settings = iSettings; logger = iLogger; FishDB = new FishDB(logger); fishHistoryDB = new FishHistoryDB(this.PlayerName,this.EarthDateTime, logger); FishHistoryDBModel history = fishHistoryDB.SelectDayly(this.PlayerName, this.EarthDateTime); this.TimeElapsed = history.TimeElapsed; control = new FFACEControl(pol, chat, logger); control.MaxLoopCount = Constants.MAX_LOOP_COUNT; control.UseEnternity = settings.UseEnternity; control.BaseWait = settings.Global.WaitBase; control.ChatWait = settings.Global.WaitChat; this.RunningStatus = RunningStatusKind.Stop; this.FishingStatus = FishingStatusKind.Normal; }
/// <summary> /// ChatTool ReceivedCommandイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChatTool_ReceivedCommand(object sender, ChatTool.ReceivedCommandEventArgs e) { List<string> cmd = e.Command; if (cmd.Count > 0) { switch (cmd[0]) { case "start": Console.WriteLine(cmd[0]); if(!fishingFlg) startFishing(); break; case "stop": Console.WriteLine(cmd[0]); if (fishingFlg) stopFishing(true); break; } } }
/// <summary> /// アンロード処理 /// </summary> private void unload() { //設定保存 saveSettings(); logger.Output(LogLevelKind.DEBUG, "設定保存終了"); //メインスレッド停止 if (thFishing != null && thFishing.IsAlive) thFishing.Abort(); thFishing = null; logger.Output(LogLevelKind.DEBUG, "メインスレッド停止"); //DB更新スレッド停止 if (thUpdateDB != null && thUpdateDB.IsAlive) thUpdateDB.Abort(); //監視スレッド停止 if (thMonitor != null && thMonitor.IsAlive) thMonitor.Abort(); thMonitor = null; logger.Output(LogLevelKind.DEBUG, "監視スレッド停止"); //FFACEControl停止 control = null; //HarakiriTool停止 if (harakiri != null) harakiri.SystemAbort(); harakiri = null; logger.Output(LogLevelKind.DEBUG, "HarakiriTool停止"); //FishingTool停止 if (fishing != null) fishing.SystemAbort(); fishing = null; logger.Output(LogLevelKind.DEBUG, "FishingTool停止"); //ChatTool停止 if (chat != null) chat.SystemAbort(); chat = null; logger.Output(LogLevelKind.DEBUG, "ChatTool停止"); logger.Output(string.Format("===== {0} {1} 終了=====", MiscTool.GetAppAssemblyName(), MiscTool.GetAppVersion())); }
/// <summary> /// コンストラクタ処理部 /// </summary> /// <param name="iPol"></param> private void constructor(PolTool iPol) { //PolTool初期設定 pol = iPol; pol.ChangeStatus += new PolTool.ChangeStatusEventHandler(this.PolTool_ChangeStatus); //FFACE初期設定 fface = iPol.FFACE; //LoggerTool初期設定 logger = new LoggerTool(MiscTool.GetAppAssemblyName(), pol.FFACE.Player.Name); logger.Enable = args.LoggerEnable; logger.OutputLogLevel = args.LoggerLogLevel; logger.EnableVarDump = args.LoggerVarDumpEnable; logger.Output(LogLevelKind.INFO, string.Format("===== {0} {1} =====", MiscTool.GetAppAssemblyName(), MiscTool.GetAppVersion())); logger.Output(LogLevelKind.INFO, string.Format("デバッグログ:{0} ログレベル:{1} 変数出力:{2}", args.LoggerEnable, args.LoggerLogLevel, args.LoggerVarDumpEnable)); logger.Output(LogLevelKind.INFO, string.Format("プロセス({0})にアタッチしました", pol.ProcessID)); //Settings初期設定 settings = new Settings(iPol.FFACE.Player.Name); //ChatTool初期設定 chat = new ChatTool(iPol.FFACE); chat.ReceivedCommand += new ChatTool.ReceivedCommandEventHandler(this.ChatTool_ReceivedCommand); logger.Output(LogLevelKind.DEBUG, "ChatTool起動"); //FishingTool初期設定 fishing = new FishingTool(iPol, chat, settings, logger); fishing.Fished += new FishingTool.FishedEventHandler(this.FishingTool_Fished); fishing.ChangeMessage += new FishingTool.ChangeMessageEventHandler(this.FishingTool_ChangeMessage); fishing.ChangeStatus += new FishingTool.ChangeStatusEventHandler(this.FishingTool_ChangeStatus); fishing.CaughtFishesUpdate += new FishingTool.CaughtFishesUpdateEventHandler(this.FishingTool_CaughtFishesUpdate); logger.Output(LogLevelKind.DEBUG, "FishingTool起動"); //HarakiriTool初期設定 harakiri = new HarakiriTool(iPol, chat, settings, logger); harakiri.HarakiriOnce += new HarakiriTool.HarakiriOnceEventHandler(this.HarakiriTool_HarakiriOnce); harakiri.ChangeMessage += new HarakiriTool.ChangeMessageEventHandler(this.HarakiriTool_ChangeMessage); harakiri.ChangeStatus += new HarakiriTool.ChangeStatusEventHandler(this.HarakiriTool_ChangeStatus); logger.Output(LogLevelKind.DEBUG, "HarakiriTool起動"); //FFACEControl初期設定 control = new FFACEControl(pol, chat, logger); control.MaxLoopCount = Constants.MAX_LOOP_COUNT; control.UseEnternity = settings.UseEnternity; control.BaseWait = settings.Global.WaitBase; control.ChatWait = settings.Global.WaitChat; logger.Output(LogLevelKind.DEBUG, "FFACEControl起動"); //監視スレッド起動 thMonitor = new Thread(threadMonitor); thMonitor.Start(); logger.Output(LogLevelKind.DEBUG, "監視スレッド起動"); //DB fishDB = new FishDB(logger); fishHistoryDB = new FishHistoryDB(fishing.PlayerName, fishing.EarthDateTime, logger); harakiriDB = new HarakiriDB(logger); //古いデータをコンバート converter(); //DB更新 updatedb = new UpdateDBTool(settings, logger); updatedb.ReceiveMessage += new UpdateDBTool.ReceiveMessageEventHandler(this.UpdateDBTool_ReceiveMessage); updatedb.NewerVersion += new UpdateDBTool.NewerVersionEventHandler(this.UpdateDBTool_NewerVersion); }