OSDN Git Service

旗艦大破でダメコンを使ったときの処理に問題があるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 7 Jan 2018 07:00:46 +0000 (16:00 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 7 Jan 2018 07:17:35 +0000 (16:17 +0900)
旗艦大破でダメコンを使って進軍したときに、戦闘をせずに母港に帰投しても
進軍にダメコンが使われたことを覚えていて、次の出撃で発動させてしまう。

KancolleSniffer.Test/BattleTest.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/Sniffer.cs

index 446b0c1..75d66d2 100644 (file)
@@ -49,7 +49,7 @@ namespace KancolleSniffer.Test
             var items = JsonParser.Parse("[[[],[],[],[],[43]]]");\r
             dynamic battle = JsonParser.Parse(logs[2]);\r
             _shipInfo.InjectShips(battle, items);\r
-            _battleInfo.InspectBattle(battle, logs[0]);\r
+            _battleInfo.InspectBattle(logs[0], logs[1], battle);\r
             dynamic result = JsonParser.Parse(logs[5]);\r
             _battleInfo.InspectBattleResult(result);\r
             PAssert.That(() => _shipInfo.GetShipStatuses(2)[4].NowHp == 31);\r
@@ -64,7 +64,7 @@ namespace KancolleSniffer.Test
             var logs = ReadAllLines("midnight_002");\r
             var battle = JsonParser.Parse(logs[3]);\r
             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
-            _battleInfo.InspectBattle(battle, logs[1]);\r
+            _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
             _battleInfo.InspectBattleResult(JsonParser.Parse(logs[6]));\r
             PAssert.That(() => _shipInfo.GetShipStatuses(0)[3].NowHp == 12);\r
         }\r
index 9422db5..7164dff 100644 (file)
@@ -58,7 +58,6 @@ namespace KancolleSniffer
         private int[] _enemyStartHp;\r
         private int[] _enemyGuardStartHp;\r
         private readonly List<int> _escapingShips = new List<int>();\r
-        private int _flagshipRecoveryType;\r
         private bool _lastCell;\r
 \r
         public BattleState BattleState { get; set; }\r
@@ -85,12 +84,12 @@ namespace KancolleSniffer
             _itemInfo = itemInfo;\r
         }\r
 \r
-        public void InspectBattle(dynamic json, string url)\r
+        public void InspectBattle(string url, string request, dynamic json)\r
         {\r
             Formation = FormationName(json);\r
             AirControlLevel = CheckAirControlLevel(json);\r
             ShowResult(false); // 昼戦の結果を夜戦のときに表示する\r
-            SetupResult(json);\r
+            SetupResult(request, json);\r
             EnemyFighterPower = CalcEnemyFighterPower(json);\r
             BattleState = IsNightBattle(json) ? BattleState.Night : BattleState.Day;\r
             CalcDamage(json);\r
@@ -104,14 +103,6 @@ namespace KancolleSniffer
             _enemyGuardHp = _enemyGuardHp.Select(hp => hp < 0 ? 0 : hp).ToArray();\r
         }\r
 \r
-        public void InspectMapNext(string request)\r
-        {\r
-            var type = HttpUtility.ParseQueryString(request)["api_recovery_type"];\r
-            if (type == null)\r
-                return;\r
-            _flagshipRecoveryType = int.Parse(type);\r
-        }\r
-\r
         private bool IsNightBattle(dynamic json) => json.api_hougeki();\r
 \r
         public static int DeckId(dynamic json)\r
@@ -141,14 +132,14 @@ namespace KancolleSniffer
             return "";\r
         }\r
 \r
-        private void SetupResult(dynamic json)\r
+        private void SetupResult(string request, dynamic json)\r
         {\r
             if (_friend != null)\r
                 return;\r
             _shipInfo.SaveBattleStartStatus();\r
             _fleet = DeckId(json);\r
             var fstats = _shipInfo.GetShipStatuses(_fleet);\r
-            FlagshipRecovery(fstats[0]);\r
+            FlagshipRecovery(request, fstats[0]);\r
             _friend = Record.Setup(fstats);\r
             _enemyHp = (int[])json.api_e_nowhps;\r
             _enemyStartHp = (int[])_enemyHp.Clone();\r
@@ -172,9 +163,10 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void FlagshipRecovery(ShipStatus flagship)\r
+        private void FlagshipRecovery(string request, ShipStatus flagship)\r
         {\r
-            switch (_flagshipRecoveryType)\r
+            var type = int.Parse(HttpUtility.ParseQueryString(request)["api_recovery_type"] ?? "0");\r
+            switch (type)\r
             {\r
                 case 0:\r
                     return;\r
@@ -187,9 +179,8 @@ namespace KancolleSniffer
                     ConsumeSlotItem(flagship, 43); // 女神\r
                     break;\r
             }\r
-            if (_flagshipRecoveryType != 0)\r
+            if (type != 0)\r
                 _shipInfo.SetBadlyDamagedShips();\r
-            _flagshipRecoveryType = 0;\r
         }\r
 \r
         private static void ConsumeSlotItem(ShipStatus ship, int id)\r
index 610b6ae..047b7d1 100644 (file)
@@ -306,7 +306,7 @@ namespace KancolleSniffer
         {\r
             if (IsNormalBattleAPI(url) || IsCombinedBattleAPI(url))\r
             {\r
-                _battleInfo.InspectBattle(data, url);\r
+                _battleInfo.InspectBattle(url, request, data);\r
                 _logger.InspectBattle(data);\r
                 return Update.Ship | Update.Battle;\r
             }\r
@@ -318,7 +318,7 @@ namespace KancolleSniffer
                     _conditionTimer.InvalidateCond();\r
                     _miscTextInfo.ClearFlag = true;\r
                 }\r
-                _battleInfo.InspectBattle(data, url);\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
@@ -443,7 +443,6 @@ namespace KancolleSniffer
             }\r
             if (url.EndsWith("api_req_map/next"))\r
             {\r
-                _battleInfo.InspectMapNext(request);\r
                 _exMapInfo.InspectMapNext(data);\r
                 _battleInfo.InspectMapNext(data);\r
                 _logger.InspectMapNext(data);\r