Exemplo n.º 1
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="iSettings"></param>
        public UpdateDBTool(Settings iSettings)
        {
            settings  = iSettings;
            fishDB    = new FishDB();
            historyDB = new FishHistoryDB(DUMMY_PLAYER_NAME, DateTime.Today);

            serverName = "http://" + settings.Global.UpdateDB.ServerName;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 履歴に追加
        /// </summary>
        /// <param name="iPlayername">プレイヤー名</param>
        /// <param name="iHistory">FishHistoryDBFishModel</param>
        /// <returns>True:成功</returns>
        public bool Add(string iPlayerName, DateTime iEarthDate, string iVanaDate, string iFishName, string iItemName)
        {
            HarakiriDBModel harakiriDB = getHarakiriDB();

            harakiriDB.Version = VERSION;
            if (harakiriDB.Fishes.Contains(new HarakiriDBFishModel(iFishName)))
            {
                HarakiriDBFishModel fish = harakiriDB.Fishes[harakiriDB.Fishes.IndexOf(new HarakiriDBFishModel(iFishName))];
                fish.Count++;
                if (iItemName != string.Empty)
                {
                    if (fish.Items.Contains(new HarakiriDBItemModel(iItemName)))
                    {
                        //Items更新
                        HarakiriDBItemModel item = fish.Items[fish.Items.IndexOf(new HarakiriDBItemModel(iItemName))];
                        item.Count++;
                    }
                    else
                    {
                        //Items追加
                        HarakiriDBItemModel item = new HarakiriDBItemModel();
                        item.ItemName = iItemName;
                        item.Count    = 1;
                        fish.Items.Add(item);
                    }
                }
            }
            else
            {
                //Fishes追加
                HarakiriDBFishModel fish = new HarakiriDBFishModel();
                fish.FishName = iFishName;
                fish.Count    = 1;
                if (iItemName != string.Empty)
                {
                    HarakiriDBItemModel item = new HarakiriDBItemModel();
                    item.ItemName = iItemName;
                    item.Count    = 1;
                    fish.Items.Add(item);
                }
                harakiriDB.Fishes.Add(fish);
            }
            //ソート
            harakiriDB.Fishes.Sort(HarakiriDBFishModel.SortTypeCount);
            for (int i = 0; i < harakiriDB.Fishes.Count; i++)
            {
                harakiriDB.Fishes[i].Items.Sort(HarakiriDBItemModel.SortTypeCount);
            }
            //履歴DBに保存
            FishHistoryDB historyDB = new FishHistoryDB(iPlayerName, iEarthDate);

            if (historyDB.AddHarakiri(iPlayerName, new FishHistoryDBHarakiriModel(iEarthDate.ToString("yyyy/MM/dd HH:mm:ss"), iVanaDate, iFishName, iItemName)))
            {
                //ハラキリDBに保存
                return(putHarakiriDB(harakiriDB));
            }
            return(false);
        }
Exemplo n.º 3
0
 /// <summary>
 /// 履歴に追加
 /// </summary>
 /// <param name="iPlayername">プレイヤー名</param>
 /// <param name="iHistory">FishHistoryDBFishModel</param>
 /// <returns>True:成功</returns>
 public bool Add(string iPlayerName, DateTime iEarthDate, string iVanaDate, string iFishName, string iItemName)
 {
     HarakiriDBModel harakiriDB = getHarakiriDB();
     harakiriDB.Version = VERSION;
     if (harakiriDB.Fishes.Contains(new HarakiriDBFishModel(iFishName)))
     {
         HarakiriDBFishModel fish = harakiriDB.Fishes[harakiriDB.Fishes.IndexOf(new HarakiriDBFishModel(iFishName))];
         fish.Count++;
         if (iItemName != string.Empty)
         {
             if (fish.Items.Contains(new HarakiriDBItemModel(iItemName)))
             {
                 //Items更新
                 HarakiriDBItemModel item = fish.Items[fish.Items.IndexOf(new HarakiriDBItemModel(iItemName))];
                 item.Count++;
             }
             else
             {
                 //Items追加
                 HarakiriDBItemModel item = new HarakiriDBItemModel();
                 item.ItemName = iItemName;
                 item.Count = 1;
                 fish.Items.Add(item);
             }
         }
     }
     else
     {
         //Fishes追加
         HarakiriDBFishModel fish = new HarakiriDBFishModel();
         fish.FishName = iFishName;
         fish.Count = 1;
         if (iItemName != string.Empty)
         {
             HarakiriDBItemModel item = new HarakiriDBItemModel();
             item.ItemName = iItemName;
             item.Count = 1;
             fish.Items.Add(item);
         }
         harakiriDB.Fishes.Add(fish);
     }
     //ソート
     harakiriDB.Fishes.Sort(HarakiriDBFishModel.SortTypeCount);
     for (int i = 0; i < harakiriDB.Fishes.Count; i++)
     {
         harakiriDB.Fishes[i].Items.Sort(HarakiriDBItemModel.SortTypeCount);
     }
     //履歴DBに保存
     FishHistoryDB historyDB = new FishHistoryDB(iPlayerName, iEarthDate, logger);
     if(historyDB.AddHarakiri(iPlayerName, new FishHistoryDBHarakiriModel(iEarthDate.ToString("yyyy/MM/dd HH:mm:ss"),iVanaDate,iFishName,iItemName)))
     {
         //ハラキリDBに保存
         return putHarakiriDB(harakiriDB);
     }
     return false;
 }
Exemplo n.º 4
0
        /// <summary>
        /// メインスレッド
        /// </summary>
        private void threadFishing()
        {
            bool firstTime = true;
            interrupt = new FishingInterrupt(false, false, false, false, false);
            noCatchCount = 0;
            lastRodName = string.Empty;
            lastBaitName = string.Empty;
            lastZoneName = string.Empty;
            chat.CurrentIndex = chat.MaxIndex;
            setFishingStatus(FishingStatusKind.Normal);
            FishHistoryDBFishModel fish = new FishHistoryDBFishModel();

            logger.Output(LogLevelKind.DEBUG, "釣りスレッド開始");
            setMessage("開始しました");

            //メニュー開いていたら閉じる
            if (!control.CloseDialog())
            {
                setRunningStatus(RunningStatusKind.Stop);
                setFishingStatus(FishingStatusKind.Error);
                setMessage("メニューが閉じられない");
                return;
            }

            //着替え
            setEquipGear();
            //魚リスト更新
            EventFished(FishResultStatusKind.Unknown);

            //釣りメインループ
            while (this.RunningStatus == RunningStatusKind.Running)
            {
                //日付が変わったら経過時間クリア
                if (DateTime.Now.Date != lastCastDate.Date)
                {
                    fishHistoryDB = new FishHistoryDB(this.PlayerName, this.EarthDateTime, logger);
                    FishHistoryDBModel history = fishHistoryDB.SelectDayly(this.PlayerName, this.EarthDateTime);
                    this.TimeElapsed = history.TimeElapsed;
                }
                lastCastDate = DateTime.Now.Date;
                //チャット処理
                FFACE.ChatTools.ChatLine cl = new FFACE.ChatTools.ChatLine();
                while (chat.GetNextChatLine(out cl))
                {
                    List<string> chatKbnArgs = new List<string>();
                    ChatKbnKind chatKbn = getChatKbnFromChatline(cl, out chatKbnArgs);
                    logger.Output(LogLevelKind.DEBUG, string.Format("Chat:{0} ChatKbn:{1}", cl.Text, chatKbn));
                }
                //敵からの攻撃感知
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (interrupt.EnemyAttack)
                {
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    setMessage("敵から攻撃されたので停止");
                    //コマンド実行
                    if (settings.Fishing.EnemyAttackCmd)
                    {
                        fface.Windower.SendString(settings.Fishing.EnemyAttackCmdLine);
                    }
                    break;
                }
                //チャット感知
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (interrupt.ChatReceive)
                {
                    if (settings.Fishing.ChatRestart)
                    {
                        setFishingStatus(FishingStatusKind.Wait);
                        double waitSec = (double)(settings.Fishing.ChatRestartMinute * 60);
                        DateTime restartTime = DateTime.Now.AddMinutes(settings.Fishing.ChatRestartMinute);
                        setMessage(string.Format("チャット感知:再始動待ち {0}(地球時間)まで待機", restartTime.ToString("HH:mm:ss")));
                        wait(waitSec, waitSec);
                        //チャットバッファをクリア
                        FFACE.ChatTools.ChatLine waitCl = new FFACE.ChatTools.ChatLine();
                        while (chat.GetNextChatLine(out waitCl))
                        {
                            Thread.Sleep(10);
                        }
                        //チャット受信フラグクリア
                        interrupt.ChatReceive = false;
                        setFishingStatus(FishingStatusKind.Normal);
                    }
                    else
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("チャットを感知したので停止");
                        break;
                    }
                }
                //入港警告感知
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.EntryPort)
                {
                    if (interrupt.ShipWarning)
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("入港するので停止");
                        break;
                    }
                }
                //エミネンスクリア
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.EminenceClear)
                {
                    if (interrupt.ClearEminence)
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("エミネンスをクリアしたので停止");
                        break;
                    }
                }
                //エリア切り替わり感知
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (this.lastZoneName.Length > 0 && this.lastZoneName != this.ZoneName)
                {
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    setMessage("エリアが切り替わったので停止");
                    break;
                }
                //釣果数
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.MaxCatch)
                {
                    if (this.fishHistoryDB.CatchCount >= settings.Fishing.MaxCatchCount)
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("本日の釣果数が規定値になったので停止");
                        break;
                    }
                }
                //釣果無し
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.MaxNoCatch)
                {
                    if (noCatchCount >= settings.Fishing.MaxNoCatchCount)
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("連続釣果無しが規定値になったので停止");
                        break;
                    }
                }
                //釣りスキル
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.MaxSkill)
                {
                    if (this.FishingSkill >= settings.Fishing.MaxSkillValue)
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("釣りスキルが規定値になったので停止");
                        break;
                    }
                }
                //スニーク
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (settings.Fishing.SneakFishing && settings.UseCancel)
                {
                    if (interrupt.SneakWarning || !control.IsBuff(StatusEffect.Sneak))
                    {
                        setMessage("スニークをかけます");
                        castSneak();
                        interrupt.SneakWarning = false;
                    }
                }
                //鞄1
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (this.InventoryCount >= this.InventoryMax)
                {
                    if (!putFish())
                    {
                        if (settings.Fishing.InventoryFullCmd)
                        {
                            fface.Windower.SendString(settings.Fishing.InventoryFullCmdLine);
                        }
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("鞄がいっぱいなので停止");
                        break;
                    }
                }
                //竿
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (this.RodName == string.Empty)
                {
                    if (!string.IsNullOrEmpty(lastRodName) &&
                        !control.IsExistItem(lastRodName, FFACETools.InventoryType.Inventory) &&
                        !control.IsExistItem(lastRodName, FFACETools.InventoryType.Wardrobe))
                    {
                        //予備の竿を鞄へ移動
                        if (!getRodBaitItem(lastRodName))
                        {
                            //竿の修理
                            if (settings.Fishing.RepairRod && settings.UseItemizer)
                            {
                                if (!repairRod(lastRodName))
                                {
                                    setRunningStatus(RunningStatusKind.Stop);
                                    setFishingStatus(FishingStatusKind.Error);
                                    break;
                                }
                                Thread.Sleep(2000);
                            }
                        }
                    }
                    if (!setRod(lastRodName))
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Error);
                        setMessage("釣り竿を装備していないので停止");
                        //コマンド実行
                        if (settings.Fishing.NoBaitNoRodCmd)
                        {
                            fface.Windower.SendString(settings.Fishing.NoBaitNoRodCmdLine);
                        }
                        break;
                    }
                }
                //エサ
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (this.BaitName == string.Empty)
                {
                    if (!string.IsNullOrEmpty(lastBaitName) &&
                        !control.IsExistItem(lastBaitName, FFACETools.InventoryType.Inventory) &&
                        !control.IsExistItem(lastBaitName, FFACETools.InventoryType.Wardrobe))
                    {
                        getRodBaitItem(lastBaitName);
                    }
                    if (!setBait(lastBaitName))
                    {
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Error);
                        setMessage("エサを装備していないので停止");
                        //コマンド実行
                        if (settings.Fishing.NoBaitNoRodCmd)
                        {
                            fface.Windower.SendString(settings.Fishing.NoBaitNoRodCmdLine);
                        }
                        break;
                    }
                }
                //鞄2
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (this.InventoryCount >= this.InventoryMax)
                {
                    if (!putFish())
                    {
                        if (settings.Fishing.InventoryFullCmd)
                        {
                            fface.Windower.SendString(settings.Fishing.InventoryFullCmdLine);
                        }
                        setRunningStatus(RunningStatusKind.Stop);
                        setFishingStatus(FishingStatusKind.Normal);
                        setMessage("鞄がいっぱいなので停止");
                        break;
                    }
                }
                //エンチャントアイテム使用
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (!useEnchantedItem())
                {
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    setMessage("エンチャントアイテムが使用できなかったので停止");
                    break;
                }
                //食事
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (!useFood())
                {
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    setMessage("食事アイテムが使用できなかったので停止");
                    break;
                }
                //ヴァナ時間
                if (this.RunningStatus != RunningStatusKind.Running) break;
                while (settings.Fishing.VanaTime &&
                       this.RunningStatus == RunningStatusKind.Running &&
                       !isHourInRange(this.VanaDateTime, settings.Fishing.VanaTimeFrom, settings.Fishing.VanaTimeTo))
                {
                    setFishingStatus(FishingStatusKind.Wait);
                    setMessage(string.Format("{0}時(ヴァナ時間)になるまで待機中", settings.Fishing.VanaTimeFrom));
                    Thread.Sleep(settings.Global.WaitBase);
                }
                setFishingStatus(FishingStatusKind.Normal);
                //地球時間
                if (this.RunningStatus != RunningStatusKind.Running) break;
                while (settings.Fishing.EarthTime &&
                       this.RunningStatus == RunningStatusKind.Running &&
                       !isHourInRange(this.EarthDateTime, settings.Fishing.EarthTimeFrom, settings.Fishing.EarthTimeTo))
                {
                    setFishingStatus(FishingStatusKind.Wait);
                    setMessage(string.Format("{0}時(地球時間)になるまで待機中", settings.Fishing.EarthTimeFrom));
                    Thread.Sleep(settings.Global.WaitBase);
                }
                setFishingStatus(FishingStatusKind.Normal);
                //リキャスト時間待機(初回は判定しない)
                if (!firstTime && settings.Fishing.RecastTime)
                {
                    wait(settings.Fishing.RecastTimeMin, settings.Fishing.RecastTimeMax, "リキャスト待機中:{0:0.0}s");
                }
                //メニュー開いていたら閉じる
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (!control.CloseDialog())
                {
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    setMessage("メニューが閉じられない");
                    break;
                }

                //魚を釣る
                if (this.RunningStatus != RunningStatusKind.Running) break;
                if (!FishingOnce(out fish))
                {
                    //エラー発生時処理
                    setRunningStatus(RunningStatusKind.Stop);
                    setFishingStatus(FishingStatusKind.Error);
                    break;
                }

                firstTime = false;
                Thread.Sleep(settings.Global.WaitBase);
            }
            logger.Output(LogLevelKind.DEBUG, "釣りスレッド終了");
        }
Exemplo n.º 5
0
 /// <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;
 }
Exemplo n.º 6
0
 /// <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);
 }