OSDN Git Service

護衛退避時に勝利判定がずれるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 6 Aug 2020 05:41:44 +0000 (14:41 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 30 Aug 2020 05:58:23 +0000 (14:58 +0900)
KancolleSniffer.Test/BattleBriefTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/Model/BattleInfo.cs

index 5ba2219..cef792b 100644 (file)
@@ -187,5 +187,19 @@ namespace KancolleSniffer.Test
             _battleInfo.InspectBattleResult(Data(logs[6]));\r
             PAssert.That(() => _shipInfo.Fleets[1].Ships[5].NowHp == 6);\r
         }\r
+\r
+        /// <summary>\r
+        /// 護衛退避艦がいるときに勝利判定がずれる\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void WrongResultRankWithEscapedShip()\r
+        {\r
+            var logs = ReadAllLines("escape_rank_001");\r
+            var battle = Data(logs[3]);\r
+            InjectShips(battle, JsonObject.Parse(logs[0]));\r
+            _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
+            _battleInfo.InspectBattleResult(Data(logs[6]));\r
+            PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
+        }\r
     }\r
 }
\ No newline at end of file
index 2d59f11..dcf8162 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 2d59f116a8a35c2e56492511b8c2ae20d8815a69
+Subproject commit dcf81623022b0d4f7f3949ee4a2eff1abb0e638e
index 8b67422..7665018 100644 (file)
@@ -180,6 +180,25 @@ namespace KancolleSniffer.Model
             _guard = json.api_f_nowhps_combined()\r
                 ? Record.Setup(_shipInfo.Fleets[1].ActualShips, practice)\r
                 : new Record[0];\r
+            SetEscapedFlag(json);\r
+        }\r
+\r
+        /// <summary>\r
+        /// EscapedはShipStatusにあるがBattleBriefTestの用のログにはShipStatusがないので、\r
+        /// ここで戦闘用のAPIを元に設定する。\r
+        /// </summary>\r
+        private void SetEscapedFlag(dynamic json)\r
+        {\r
+            if (json.api_escape_idx())\r
+            {\r
+                foreach (int idx in json.api_escape_idx)\r
+                    _friend[idx - 1].Escaped = true;\r
+            }\r
+            if (json.api_escape_idx_combined())\r
+            {\r
+                foreach (int idx in json.api_escape_idx_combined)\r
+                    _guard[idx - 1].Escaped = true;\r
+            }\r
         }\r
 \r
         private void SetupEnemyDamageRecord(dynamic json, bool practice)\r
@@ -696,7 +715,7 @@ namespace KancolleSniffer.Model
             private bool _practice;\r
             public ShipStatus SnapShot => (ShipStatus)_status.Clone();\r
             public int NowHp => _status.NowHp;\r
-            public bool Escaped => _status.Escaped;\r
+            public bool Escaped { get; set; }\r
             public ShipStatus.Damage DamageLevel => _status.DamageLevel;\r
             public string Name => _status.Name;\r
             public int StartHp { get; private set; }\r
@@ -817,11 +836,10 @@ namespace KancolleSniffer.Model
 \r
             public ResultRankParams(Record[] records)\r
             {\r
-                var staying = records.Where(r => !r.Escaped).ToArray();\r
                 Count = records.Length;\r
-                Sunk = staying.Count(r => r.NowHp == 0);\r
-                Gauge = staying.Sum(r => r.StartHp - r.NowHp);\r
-                GaugeRate = (int)((double)Gauge / records.Sum(r => r.StartHp) * 100);\r
+                Sunk = records.Count(r => r.NowHp == 0);\r
+                Gauge = records.Sum(r => r.StartHp - r.NowHp);\r
+                GaugeRate = (int)((double)Gauge / records.Sum(r => r.Escaped ? 0 : r.StartHp) * 100);\r
             }\r
         }\r
 \r