OSDN Git Service

勝利判定に誤りがある場合にエラーを表示する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 25 Nov 2017 07:31:50 +0000 (16:31 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 28 Nov 2017 14:43:21 +0000 (23:43 +0900)
KancolleSniffer/BattleInfo.cs
KancolleSniffer/MainForm.cs

index 40315a8..d9c4ab3 100644 (file)
@@ -65,6 +65,7 @@ namespace KancolleSniffer
         public EnemyFighterPower EnemyFighterPower { get; private set; }\r
         public int AirControlLevel { get; private set; }\r
         public BattleResultRank ResultRank { get; private set; }\r
+        public List<char> WrongResultRank { get; set; } = new List<char>(2);\r
         public ShipStatus[] EnemyResultStatus { get; private set; }\r
         public ShipStatus[] EnemyGuardResultStatus { get; private set; }\r
         public bool EnemyIsCombined => EnemyGuardResultStatus.Length > 0;\r
@@ -466,8 +467,26 @@ namespace KancolleSniffer
         {\r
             BattleState = BattleState.Result;\r
             ShowResult(!_lastCell);\r
+            VerifyResultRank(json);\r
             CleanupResult();\r
             SetEscapeShips(json);\r
+\r
+        }\r
+\r
+        private void VerifyResultRank(dynamic json)\r
+        {\r
+            if (_friend == null)\r
+                return;\r
+            WrongResultRank.Clear();\r
+            if (!json.api_win_rank())\r
+                return;\r
+            var assumed = "PSABCDE"[(int)ResultRank];\r
+            if (assumed == 'P')\r
+                assumed = 'S';\r
+            var actual = ((string)json.api_win_rank)[0];\r
+            if (assumed == actual)\r
+                return;\r
+            WrongResultRank.AddRange(new[] {assumed, actual});\r
         }\r
 \r
         public void InspectPracticeResult(dynamic json)\r
index e8b8640..da2f723 100644 (file)
@@ -110,9 +110,10 @@ namespace KancolleSniffer
             try\r
             {\r
                 UpdateInfo(_sniffer.Sniff(url, request, JsonParser.Parse(response)));\r
-                CheckBattleResult();\r
                 SaveBattleApi(url, request, response);\r
+                CheckBattleResult();\r
             }\r
+\r
             catch (RuntimeBinderException e)\r
             {\r
                 if (_errorDialog.ShowDialog(this,\r
@@ -136,24 +137,25 @@ namespace KancolleSniffer
 \r
         private void CheckBattleResult()\r
         {\r
-            if (_sniffer.WrongBattleResult.Count > 0)\r
-            {\r
-                if (_errorDialog.ShowDialog(this,\r
-                        "戦闘結果の計算に誤りがあります。",\r
-                        GenerateBattleErrorLog()) == DialogResult.Abort)\r
-                    Application.Exit();\r
-                _sniffer.WrongBattleResult.Clear();\r
-            }\r
+            if (_sniffer.Battle.WrongResultRank.Count == 0 && _sniffer.WrongBattleResult.Count == 0)\r
+                return;\r
+            if (_errorDialog.ShowDialog(this,\r
+                    "戦闘結果の計算に誤りがあります。",\r
+                    GenerateBattleErrorLog()) == DialogResult.Abort)\r
+                Application.Exit();\r
+            _sniffer.Battle.WrongResultRank.Clear();\r
+            _sniffer.WrongBattleResult.Clear();\r
         }\r
 \r
+        private BattleState _prevBattleState = BattleState.None;\r
+\r
         private void SaveBattleApi(string url, string request, string response)\r
         {\r
+            if (_prevBattleState == BattleState.None)\r
+                _battleApiLog.Clear();\r
             if (_sniffer.Battle.BattleState != BattleState.None)\r
-            {\r
                 _battleApiLog.Add(new[] {url, request, response});\r
-                return;\r
-            }\r
-            _battleApiLog.Clear();\r
+            _prevBattleState = _sniffer.Battle.BattleState;\r
         }\r
 \r
         private string GenerateBattleErrorLog()\r
@@ -162,11 +164,14 @@ namespace KancolleSniffer
                 RemoveSensitiveInformation(ref logs[1], ref logs[2]);\r
             var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
             var api = string.Join("\r\n", _battleApiLog.Select(logs => string.Join("\r\n", logs)));\r
-            var status = string.Join(" ",\r
-                from pair in _sniffer.WrongBattleResult\r
-                let assumed = pair.Assumed\r
-                let actual = pair.Actual\r
-                select $"[{assumed.Fleet}-{assumed.DeckIndex}] {assumed.Id}: {assumed.NowHp}->{actual.NowHp}");\r
+            var ranks = _sniffer.Battle.WrongResultRank;\r
+            var status = ranks.Count > 0\r
+                ? $"{ranks[0]}->{ranks[1]}"\r
+                : string.Join(" ",\r
+                    from pair in _sniffer.WrongBattleResult\r
+                    let assumed = pair.Assumed\r
+                    let actual = pair.Actual\r
+                    select $"[{assumed.Fleet}-{assumed.DeckIndex}] {assumed.Id}: {assumed.NowHp}->{actual.NowHp}");\r
             return $"{DateTime.Now:g} {version}\r\n{api}\r\n{status}";\r
         }\r
 \r
@@ -194,7 +199,6 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-\r
         private string UnescapeString(string s)\r
         {\r
             try\r