OSDN Git Service

バージョン12.2の準備
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Sniffer.cs
index 28dc70d..4f9f5fa 100644 (file)
@@ -23,7 +23,6 @@ namespace KancolleSniffer
 {\r
     public class Sniffer\r
     {\r
-        private bool _start;\r
         private readonly ItemMaster _itemMaster = new ItemMaster();\r
         private readonly ItemInventory _itemInventory = new ItemInventory();\r
         private readonly ItemInfo _itemInfo;\r
@@ -32,6 +31,8 @@ namespace KancolleSniffer
         private readonly ShipInfo _shipInfo;\r
         private readonly MaterialInfo _materialInfo = new MaterialInfo();\r
         private readonly QuestInfo _questInfo;\r
+        private readonly QuestCounter _questCounter;\r
+        private readonly QuestCountList _questCountList = new QuestCountList();\r
         private readonly MissionInfo _missionInfo = new MissionInfo();\r
         private readonly ConditionTimer _conditionTimer;\r
         private readonly DockInfo _dockInfo;\r
@@ -41,7 +42,7 @@ namespace KancolleSniffer
         private readonly Logger _logger;\r
         private readonly ExMapInfo _exMapInfo = new ExMapInfo();\r
         private readonly MiscTextInfo _miscTextInfo;\r
-        private readonly BaseAirCorps _baseAirCorps;\r
+        private readonly AirBase _airBase;\r
         private readonly PresetDeck _presetDeck = new PresetDeck();\r
         private readonly CellInfo _cellInfo = new CellInfo();\r
         private readonly Status _status = new Status();\r
@@ -72,7 +73,7 @@ namespace KancolleSniffer
         public enum Update\r
         {\r
             None = 0,\r
-            Error = 1 << 0,\r
+            Error = 1,\r
             Start = 1 << 1,\r
             Item = 1 << 2,\r
             Ship = 1 << 3,\r
@@ -85,18 +86,21 @@ namespace KancolleSniffer
             All = (1 << 10) - 1\r
         }\r
 \r
-        public Sniffer(bool start = false)\r
+        public bool Started { get; private set; }\r
+\r
+        public Sniffer(bool started = false)\r
         {\r
-            _start = start;\r
+            Started = started;\r
             _itemInfo = new ItemInfo(_itemMaster, _itemInventory);\r
             _shipInfo = new ShipInfo(_shipMaster, _shipInventory, _itemInventory);\r
             _conditionTimer = new ConditionTimer(_shipInfo);\r
             _dockInfo = new DockInfo(_shipInventory, _materialInfo);\r
             _akashiTimer = new AkashiTimer(_shipInfo, _dockInfo, _presetDeck);\r
-            _battleInfo = new BattleInfo(_shipInfo, _itemInfo);\r
+            _airBase = new AirBase(_itemInfo);\r
+            _battleInfo = new BattleInfo(_shipInfo, _itemInfo, _airBase);\r
             _logger = new Logger(_shipInfo, _itemInfo, _battleInfo);\r
-            _questInfo = new QuestInfo(_itemInfo, _battleInfo);\r
-            _baseAirCorps = new BaseAirCorps(_itemInfo);\r
+            _questInfo = new QuestInfo(_questCountList);\r
+            _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);\r
             _miscTextInfo = new MiscTextInfo(_shipInfo, _itemInfo);\r
             _haveState = new List<IHaveState> {_achievement, _materialInfo, _conditionTimer, _exMapInfo, _questInfo};\r
             AdditionalData = new AdditionalData();\r
@@ -105,7 +109,7 @@ namespace KancolleSniffer
         public AdditionalData AdditionalData\r
         {\r
             get => _additionalData;\r
-            set\r
+            private set\r
             {\r
                 _additionalData = value;\r
                 _itemMaster.AdditionalData = value;\r
@@ -144,16 +148,18 @@ namespace KancolleSniffer
             {\r
                 return ApiStart(data);\r
             }\r
-            if (!_start)\r
+            if (!Started)\r
                 return Update.None;\r
 \r
             if (url.EndsWith("api_port/port"))\r
-                return ApiPort(url, data);\r
+                return ApiPort(data);\r
             if (url.Contains("member"))\r
-                return ApiMember(url, json);\r
+                return ApiMember(url, request,json);\r
             if (url.Contains("kousyou"))\r
                 return ApiKousyou(url, request, data);\r
-            if (url.Contains("battle") || url.Contains("sortie"))\r
+            if (url.Contains("practice"))\r
+                return ApiPractice(url, request, data);\r
+            if (IsBattleAPI(url))\r
                 return ApiBattle(url, request, data);\r
             if (url.Contains("hensei"))\r
                 return ApiHensei(url, request, data);\r
@@ -161,9 +167,18 @@ namespace KancolleSniffer
                 return ApiKaisou(url, request, data);\r
             if (url.Contains("air_corps"))\r
                 return ApiAirCorps(url, request, data);\r
+            if (url.Contains("map"))\r
+                return ApiMap(url, request, data);\r
             return ApiOthers(url, request, data);\r
         }\r
 \r
+        private static bool IsBattleAPI(string url)\r
+        {\r
+            return url.Contains("api_req_sortie/") ||\r
+                   url.Contains("api_req_battle_midnight/") ||\r
+                   url.Contains("api_req_combined_battle/");\r
+        }\r
+\r
         private Update ApiStart(dynamic data)\r
         {\r
             _shipInfo.InspectMaster(data);\r
@@ -172,8 +187,10 @@ namespace KancolleSniffer
             _itemInfo.InspectMaster(data);\r
             _exMapInfo.ResetIfNeeded();\r
             _miscTextInfo.InspectMaster(data);\r
+            _logger.InspectMapInfoMaster(data.api_mst_mapinfo);\r
             SetMapDictionary(data.api_mst_mapinfo);\r
-            _start = true;\r
+            _questCountList.SetMissionNames(data.api_mst_mission);\r
+            Started = true;\r
             return Update.Start;\r
         }\r
 \r
@@ -183,30 +200,28 @@ namespace KancolleSniffer
                 MapDictionary[map.api_name] = $"{map.api_maparea_id}-{map.api_no}";\r
         }\r
 \r
-        private Update ApiPort(string url, dynamic data)\r
+        public interface IPort\r
+        {\r
+            void Port();\r
+        }\r
+\r
+        private Update ApiPort(dynamic data)\r
         {\r
             _itemInfo.InspectBasic(data.api_basic);\r
             _materialInfo.InspectMaterialPort(data.api_material);\r
             _logger.InspectBasic(data.api_basic);\r
             _logger.InspectMaterial(data.api_material);\r
-            _shipInfo.InspectShip(url, data);\r
-            _shipInfo.ClearBadlyDamagedShips();\r
-            _conditionTimer.CalcRegainTime();\r
+            _shipInfo.Port(data);\r
             _missionInfo.InspectDeck(data.api_deck_port);\r
-            _questInfo.InspectDeck(data.api_deck_port);\r
+            _questCounter.InspectDeck(data.api_deck_port);\r
             _dockInfo.InspectNDock(data.api_ndock);\r
-            _akashiTimer.Port();\r
             _achievement.InspectBasic(data.api_basic);\r
-            if (data.api_parallel_quest_count()) // 昔のログにはないので\r
-                _questInfo.AcceptMax = (int)data.api_parallel_quest_count;\r
             if (data.api_event_object())\r
-                _baseAirCorps.InspectEventObject(data.api_event_object);\r
+                _airBase.InspectEventObject(data.api_event_object);\r
             if (data.api_plane_info())\r
-                _baseAirCorps.InspectPlaneInfo(data.api_plane_info);\r
-            _battleInfo.CleanupResult();\r
-            _battleInfo.BattleState = BattleState.None;\r
-            _miscTextInfo.Port();\r
-            _cellInfo.Port();\r
+                _airBase.InspectPlaneInfo(data.api_plane_info);\r
+            foreach (var receiver in new IPort[]{_conditionTimer, _akashiTimer, _battleInfo, _miscTextInfo, _cellInfo})\r
+                receiver.Port();\r
             SaveState();\r
             RepeatingTimerController?.Resume();\r
             foreach (var s in new[] {"遠征終了", "入渠終了", "疲労回復", "泊地修理", "大破警告"})\r
@@ -214,13 +229,15 @@ namespace KancolleSniffer
             return Update.All;\r
         }\r
 \r
-        private Update ApiMember(string url, dynamic json)\r
+        private Update ApiMember(string url, string request, dynamic json)\r
         {\r
             var data = json.api_data() ? json.api_data : new object();\r
 \r
             if (url.EndsWith("api_get_member/require_info"))\r
             {\r
                 _itemInfo.InspectSlotItem(data.api_slot_item, true);\r
+                if (data.api_useitem())\r
+                    _itemInfo.InspectUseItem(data.api_useitem);\r
                 _dockInfo.InspectKDock(data.api_kdock);\r
                 return Update.None;\r
             }\r
@@ -235,6 +252,13 @@ namespace KancolleSniffer
                 _itemInfo.InspectSlotItem(data, true);\r
                 return Update.Item;\r
             }\r
+            if (url.EndsWith("api_get_member/useitem"))\r
+            {\r
+                if (data == null)\r
+                    return Update.None;\r
+                _itemInfo.InspectUseItem(data);\r
+                return Update.Item;\r
+            }\r
             if (url.EndsWith("api_get_member/kdock"))\r
             {\r
                 _dockInfo.InspectKDock(data);\r
@@ -251,7 +275,7 @@ namespace KancolleSniffer
             }\r
             if (url.EndsWith("api_get_member/questlist"))\r
             {\r
-                _questInfo.InspectQuestList(data);\r
+                _questInfo.InspectQuestList(request, data);\r
                 return Update.QuestList;\r
             }\r
             if (url.EndsWith("api_get_member/deck"))\r
@@ -259,7 +283,7 @@ namespace KancolleSniffer
                 _shipInfo.InspectDeck(data);\r
                 _missionInfo.InspectDeck(data);\r
                 _akashiTimer.CheckFleet();\r
-                _questInfo.InspectDeck(data);\r
+                _questCounter.InspectDeck(data);\r
                 return Update.Mission | Update.Timer;\r
             }\r
             if (url.EndsWith("api_get_member/ship2"))\r
@@ -268,14 +292,14 @@ namespace KancolleSniffer
                 _shipInfo.InspectShip(url, json);\r
                 _akashiTimer.CheckFleet();\r
                 _battleInfo.BattleState = BattleState.None;\r
-                return Update.Item | Update.Ship | Update.Battle;\r
+                return Update.Item | Update.Ship;\r
             }\r
             if (url.EndsWith("api_get_member/ship_deck"))\r
             {\r
                 _shipInfo.InspectShip(url, data);\r
                 _akashiTimer.CheckFleet();\r
                 _battleInfo.BattleState = BattleState.None;\r
-                return Update.Ship | Update.Battle | Update.Item;\r
+                return Update.Ship | Update.Item;\r
             }\r
             if (url.EndsWith("api_get_member/ship3"))\r
             {\r
@@ -294,7 +318,7 @@ namespace KancolleSniffer
                 _exMapInfo.InspectMapInfo(data);\r
                 _miscTextInfo.InspectMapInfo(data);\r
                 if (data.api_air_base())\r
-                    _baseAirCorps.Inspect(data.api_air_base);\r
+                    _airBase.Inspect(data.api_air_base);\r
                 return Update.Item;\r
             }\r
             if (url.EndsWith("api_req_member/get_practice_enemyinfo"))\r
@@ -309,7 +333,7 @@ namespace KancolleSniffer
             }\r
             if (url.EndsWith("api_get_member/base_air_corps"))\r
             {\r
-                _baseAirCorps.Inspect(data);\r
+                _airBase.Inspect(data);\r
                 return Update.Ship;\r
             }\r
             return Update.None;\r
@@ -322,7 +346,7 @@ namespace KancolleSniffer
                 _itemInfo.InspectCreateItem(data);\r
                 _materialInfo.InspectCreateIem(data);\r
                 _logger.InspectCreateItem(request, data);\r
-                _questInfo.CountCreateItem();\r
+                _questCounter.InspectCreateItem(request);\r
                 return Update.Item | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kousyou/getship"))\r
@@ -336,17 +360,17 @@ namespace KancolleSniffer
             }\r
             if (url.EndsWith("api_req_kousyou/destroyship"))\r
             {\r
-                _shipInfo.InspectDestroyShip(request, data);\r
+                _shipInfo.InspectDestroyShip(request);\r
                 _materialInfo.InspectDestroyShip(data);\r
                 _conditionTimer.CheckCond();\r
                 _akashiTimer.CheckFleet();\r
-                _questInfo.InspectDestroyShip(request);\r
+                _questCounter.InspectDestroyShip(request);\r
                 return Update.Item | Update.Ship | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kousyou/destroyitem2"))\r
             {\r
-                _questInfo.InspectDestroyItem(request, data); // 本当に削除される前\r
-                _itemInfo.InspectDestroyItem(request, data);\r
+                _questCounter.InspectDestroyItem(request); // 本当に削除される前\r
+                _itemInfo.InspectDestroyItem(request);\r
                 _materialInfo.InspectDestroyItem(data);\r
                 return Update.Item | Update.QuestList;\r
             }\r
@@ -356,13 +380,13 @@ namespace KancolleSniffer
                 _logger.InspectRemodelSlot(request, data); // 資材の差が必要なので_materialInfoより前\r
                 _itemInfo.InspectRemodelSlot(data);\r
                 _materialInfo.InspectRemodelSlot(data);\r
-                _questInfo.CountRemodelSlot();\r
+                _questCounter.CountRemodelSlot();\r
                 return Update.Item | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kousyou/createship"))\r
             {\r
                 _logger.InspectCreateShip(request);\r
-                _questInfo.CountCreateShip();\r
+                _questCounter.CountCreateShip();\r
                 return Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kousyou/createship_speedchange"))\r
@@ -373,77 +397,51 @@ namespace KancolleSniffer
             return Update.None;\r
         }\r
 \r
-        private Update ApiBattle(string url, string request, dynamic data)\r
+        private Update ApiPractice(string url, string request, dynamic data)\r
         {\r
-            if (IsNormalBattleAPI(url) || IsCombinedBattleAPI(url))\r
+            if (url.EndsWith("api_req_practice/battle_result"))\r
             {\r
-                _shipInfo.ClearBadlyDamagedShips();\r
-                RepeatingTimerController?.Stop("大破警告");\r
-                _battleInfo.InspectBattle(url, request, data);\r
-                _logger.InspectBattle(data);\r
-                _cellInfo.StartBattle();\r
-                return Update.Ship | Update.Battle;\r
+                _battleInfo.InspectPracticeResult(data);\r
+                _questCounter.InspectPracticeResult(data);\r
+                return Update.Ship | Update.QuestList;\r
+            }\r
+            if (url.EndsWith("api_req_practice/battle"))\r
+            {\r
+                _shipInfo.StartPractice(request);\r
+                _questCounter.StartPractice(request);\r
+                _cellInfo.StartPractice();\r
+                _conditionTimer.InvalidateCond();\r
+                RepeatingTimerController?.Suspend();\r
             }\r
             if (url.EndsWith("api_req_practice/battle") || url.EndsWith("api_req_practice/midnight_battle"))\r
             {\r
-                if (url.EndsWith("/battle"))\r
-                {\r
-                    _shipInfo.StartPractice(request);\r
-                    _questInfo.StartPractice(request);\r
-                    _cellInfo.StartPractice();\r
-                    _conditionTimer.InvalidateCond();\r
-                    RepeatingTimerController?.Suspend();\r
-                }\r
                 _battleInfo.InspectBattle(url, request, data);\r
                 return Update.Ship | Update.Battle | Update.Timer;\r
             }\r
-            if (url.EndsWith("api_req_sortie/battleresult") || url.EndsWith("api_req_combined_battle/battleresult"))\r
+            return Update.None;\r
+        }\r
+\r
+        private Update ApiBattle(string url, string request, dynamic data)\r
+        {\r
+            if (url.EndsWith("/battleresult"))\r
             {\r
                 _battleInfo.InspectBattleResult(data);\r
                 _exMapInfo.InspectBattleResult(data);\r
                 _logger.InspectBattleResult(data);\r
-                _questInfo.InspectBattleResult(data);\r
+                _questCounter.InspectBattleResult(data);\r
                 _miscTextInfo.InspectBattleResult(data);\r
                 return Update.Ship | Update.QuestList;\r
             }\r
-            if (url.EndsWith("api_req_practice/battle_result"))\r
-            {\r
-                _battleInfo.InspectPracticeResult(data);\r
-                _questInfo.InspectPracticeResult(data);\r
-                return Update.Ship | Update.QuestList;\r
-            }\r
             if (url.EndsWith("/goback_port"))\r
             {\r
                 _battleInfo.CauseEscape();\r
                 return Update.Ship;\r
             }\r
-            _battleInfo.BattleState = BattleState.Unknown;\r
-            return Update.None;\r
-        }\r
-\r
-        private bool IsNormalBattleAPI(string url)\r
-        {\r
-            return url.EndsWith("api_req_sortie/battle") ||\r
-                   url.EndsWith("api_req_sortie/airbattle") ||\r
-                   url.EndsWith("api_req_sortie/ld_airbattle") ||\r
-                   url.EndsWith("api_req_sortie/ld_shooting") ||\r
-                   url.EndsWith("api_req_battle_midnight/battle") ||\r
-                   url.EndsWith("api_req_battle_midnight/sp_midnight");\r
-        }\r
-\r
-        private bool IsCombinedBattleAPI(string url)\r
-        {\r
-            return url.EndsWith("api_req_combined_battle/battle") ||\r
-                   url.EndsWith("api_req_combined_battle/airbattle") ||\r
-                   url.EndsWith("api_req_combined_battle/ld_airbattle") ||\r
-                   url.EndsWith("api_req_combined_battle/battle_water") ||\r
-                   url.EndsWith("api_req_combined_battle/midnight_battle") ||\r
-                   url.EndsWith("api_req_combined_battle/sp_midnight") ||\r
-                   url.EndsWith("api_req_combined_battle/ec_battle") ||\r
-                   url.EndsWith("api_req_combined_battle/ec_midnight_battle") ||\r
-                   url.EndsWith("api_req_combined_battle/ec_night_to_day") ||\r
-                   url.EndsWith("api_req_combined_battle/each_battle") ||\r
-                   url.EndsWith("api_req_combined_battle/each_battle_water");\r
+            _shipInfo.ClearBadlyDamagedShips();\r
+            RepeatingTimerController?.Stop("大破警告");\r
+            _battleInfo.InspectBattle(url, request, data);\r
+            _cellInfo.StartBattle();\r
+            return Update.Ship | Update.Battle;\r
         }\r
 \r
         private Update ApiHensei(string url, string request, dynamic data)\r
@@ -485,12 +483,12 @@ namespace KancolleSniffer
                 _shipInfo.InspectPowerUp(request, data);\r
                 _conditionTimer.CheckCond();\r
                 _akashiTimer.CheckFleet();\r
-                _questInfo.InspectPowerUp(data);\r
+                _questCounter.InspectPowerUp(data);\r
                 return Update.Item | Update.Ship | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kaisou/slot_exchange_index"))\r
             {\r
-                _shipInfo.InspectSlotExchange(request, data);\r
+                _shipInfo.InspectSlotExchange(data);\r
                 return Update.Ship;\r
             }\r
             if (url.EndsWith("api_req_kaisou/slot_deprive"))\r
@@ -511,23 +509,56 @@ namespace KancolleSniffer
             if (url.EndsWith("api_req_air_corps/supply"))\r
             {\r
                 _materialInfo.InspectAirCorpsSupply(data);\r
-                _baseAirCorps.InspectSupply(request, data);\r
+                _airBase.InspectSupply(request, data);\r
                 return Update.Item;\r
             }\r
             if (url.EndsWith("api_req_air_corps/set_plane"))\r
             {\r
                 _materialInfo.InspectAirCorpsSetPlane(data);\r
-                _baseAirCorps.InspectSetPlane(request, data);\r
+                _airBase.InspectSetPlane(request, data);\r
                 return Update.Item | Update.Ship;\r
             }\r
             if (url.EndsWith("api_req_air_corps/set_action"))\r
             {\r
-                _baseAirCorps.InspectSetAction(request);\r
+                _airBase.InspectSetAction(request);\r
                 return Update.Ship;\r
             }\r
             if (url.EndsWith("api_req_air_corps/expand_base"))\r
             {\r
-                _baseAirCorps.InspectExpandBase(request, data);\r
+                _airBase.InspectExpandBase(request, data);\r
+                return Update.Ship;\r
+            }\r
+            return Update.None;\r
+        }\r
+\r
+        private Update ApiMap(string url, string request, dynamic data)\r
+        {\r
+            if (url.EndsWith("api_req_map/start"))\r
+            {\r
+                _shipInfo.InspectMapStart(request); // 出撃中判定が必要なので_conditionTimerより前\r
+                _conditionTimer.InvalidateCond();\r
+                _exMapInfo.InspectMapStart(data);\r
+                _battleInfo.InspectMapStart(data);\r
+                _logger.InspectMapStart(data);\r
+                _miscTextInfo.InspectMapStart(data);\r
+                _questCounter.InspectMapStart(data);\r
+                _cellInfo.InspectMapStart(data);\r
+                RepeatingTimerController?.Suspend("大破警告");\r
+                return Update.Timer | Update.Ship | Update.Cell;\r
+            }\r
+            if (url.EndsWith("api_req_map/next"))\r
+            {\r
+                _exMapInfo.InspectMapNext(data);\r
+                _battleInfo.InspectMapNext(data);\r
+                _logger.InspectMapNext(data);\r
+                _questCounter.InspectMapNext(data);\r
+                _miscTextInfo.InspectMapNext(data);\r
+                _cellInfo.InspectMapNext(data);\r
+                return Update.Battle;\r
+            }\r
+            if (url.EndsWith("api_req_map/anchorage_repair"))\r
+            {\r
+                _shipInfo.InspectAnchorageRepair(data);\r
                 return Update.Ship;\r
             }\r
             return Update.None;\r
@@ -539,7 +570,7 @@ namespace KancolleSniffer
             {\r
                 _shipInfo.InspectCharge(data);\r
                 _materialInfo.InspectCharge(data);\r
-                _questInfo.CountCharge();\r
+                _questCounter.CountCharge();\r
                 return Update.Item | Update.Ship | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_nyukyo/start"))\r
@@ -547,7 +578,7 @@ namespace KancolleSniffer
                 _dockInfo.InspectNyukyo(request);\r
                 _conditionTimer.CheckCond();\r
                 _akashiTimer.CheckFleet();\r
-                _questInfo.CountNyukyo();\r
+                _questCounter.CountNyukyo();\r
                 var ndock = HttpUtility.ParseQueryString(request)["api_ndock_id"];\r
                 if (ndock != null && int.TryParse(ndock, out int id))\r
                     RepeatingTimerController?.Stop("入渠終了", id - 1);\r
@@ -559,29 +590,6 @@ namespace KancolleSniffer
                 _conditionTimer.CheckCond();\r
                 return Update.NDock | Update.Timer | Update.Item | Update.Ship;\r
             }\r
-            if (url.EndsWith("api_req_map/start"))\r
-            {\r
-                _shipInfo.InspectMapStart(request); // 出撃中判定が必要なので_conditionTimerより前\r
-                _conditionTimer.InvalidateCond();\r
-                _exMapInfo.InspectMapStart(data);\r
-                _battleInfo.InspectMapStart(data);\r
-                _logger.InspectMapStart(data);\r
-                _miscTextInfo.InspectMapStart(data);\r
-                _questInfo.InspectMapStart(data);\r
-                _cellInfo.InspectMapStart(data);\r
-                RepeatingTimerController?.Suspend("大破警告");\r
-                return Update.Timer | Update.Ship | Update.Cell;\r
-            }\r
-            if (url.EndsWith("api_req_map/next"))\r
-            {\r
-                _exMapInfo.InspectMapNext(data);\r
-                _battleInfo.InspectMapNext(data);\r
-                _logger.InspectMapNext(data);\r
-                _questInfo.InspectMapNext(data);\r
-                _miscTextInfo.InspectMapNext(data);\r
-                _cellInfo.InspectMapNext(data);\r
-                return Update.Cell;\r
-            }\r
             if (url.EndsWith("api_req_mission/start"))\r
             {\r
                 var deck = HttpUtility.ParseQueryString(request)["api_deck_id"];\r
@@ -593,7 +601,7 @@ namespace KancolleSniffer
             {\r
                 _materialInfo.InspectMissionResult(data);\r
                 _logger.InspectMissionResult(data);\r
-                _questInfo.InspectMissionResult(request, data);\r
+                _questCounter.InspectMissionResult(request, data);\r
                 return Update.Item;\r
             }\r
             if (url.EndsWith("api_req_quest/stop"))\r
@@ -616,8 +624,6 @@ namespace KancolleSniffer
 \r
         public AlarmCounter ItemCounter => _itemInfo.Counter;\r
 \r
-        public ItemInfo Item => _itemInfo;\r
-\r
         public MaterialInfo Material => _materialInfo;\r
 \r
         public QuestStatus[] Quests => _questInfo.Quests;\r
@@ -625,18 +631,18 @@ namespace KancolleSniffer
         public void GetQuestNotifications(out string[] notify, out string[] stop) =>\r
             _questInfo.GetNotifications(out notify, out stop);\r
 \r
-        public void ClearQuests() => _questInfo.ClearQuests();\r
-\r
         public NameAndTimer[] Missions => _missionInfo.Missions;\r
 \r
         public DateTime GetConditionTimer(int fleet) => _conditionTimer.GetTimer(fleet);\r
 \r
-        public int[] GetConditionNotice(DateTime prev, DateTime now) => _conditionTimer.GetNotice(prev, now);\r
+        public int[] GetConditionNotice(TimeStep step) => _conditionTimer.GetNotice(step);\r
 \r
         public AlarmCounter ShipCounter => _shipInfo.Counter;\r
 \r
         public IReadOnlyList<Fleet> Fleets => _shipInfo.Fleets;\r
 \r
+        public int InSortie => _shipInfo.InSortie;\r
+\r
         public ShipInfo.ShipStatusPair[] BattleResultStatusDiff => _shipInfo.BattleResultDiff;\r
 \r
         public bool IsBattleResultError => _shipInfo.IsBattleResultError || _battleInfo.DisplayedResultRank.IsError;\r
@@ -651,13 +657,18 @@ namespace KancolleSniffer
 \r
         public string[] BadlyDamagedShips => _shipInfo.BadlyDamagedShips;\r
 \r
+        public bool WarnBadDamageWithDameCon\r
+        {\r
+            set => _shipInfo.WarnBadDamageWithDameCon = value;\r
+        }\r
+\r
         public ItemStatus[] ItemList\r
         {\r
             get\r
             {\r
                 _itemInfo.ClearHolder();\r
                 _shipInfo.SetItemHolder();\r
-                _baseAirCorps.SetItemHolder();\r
+                _airBase.SetItemHolder();\r
                 return _itemInfo.ItemList;\r
             }\r
         }\r
@@ -672,7 +683,7 @@ namespace KancolleSniffer
 \r
         public string MiscText => _miscTextInfo.Text;\r
 \r
-        public BaseAirCorps.BaseInfo[] BaseAirCorps => _baseAirCorps.AllAirCorps;\r
+        public AirBase.BaseInfo[] AirBase => _airBase.AllBase;\r
 \r
         public CellInfo CellInfo => _cellInfo;\r
 \r
@@ -681,11 +692,6 @@ namespace KancolleSniffer
             _logger.SetWriter(writer, nowFunc);\r
         }\r
 \r
-        public void SkipMaster()\r
-        {\r
-            _start = true;\r
-        }\r
-\r
         public void EnableLog(LogType type)\r
         {\r
             _logger.EnableLog(type);\r