From 75af8087512b2fa1ecc8458f36dc79069545afdb Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Thu, 6 Aug 2020 14:41:44 +0900 Subject: [PATCH] =?utf8?q?=E8=AD=B7=E8=A1=9B=E9=80=80=E9=81=BF=E6=99=82?= =?utf8?q?=E3=81=AB=E5=8B=9D=E5=88=A9=E5=88=A4=E5=AE=9A=E3=81=8C=E3=81=9A?= =?utf8?q?=E3=82=8C=E3=82=8B=E3=81=AE=E3=82=92=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer.Test/BattleBriefTest.cs | 14 ++++++++++++++ KancolleSniffer.Test/logs | 2 +- KancolleSniffer/Model/BattleInfo.cs | 28 +++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/KancolleSniffer.Test/BattleBriefTest.cs b/KancolleSniffer.Test/BattleBriefTest.cs index 5ba2219..cef792b 100644 --- a/KancolleSniffer.Test/BattleBriefTest.cs +++ b/KancolleSniffer.Test/BattleBriefTest.cs @@ -187,5 +187,19 @@ namespace KancolleSniffer.Test _battleInfo.InspectBattleResult(Data(logs[6])); PAssert.That(() => _shipInfo.Fleets[1].Ships[5].NowHp == 6); } + + /// + /// 護衛退避艦がいるときに勝利判定がずれる + /// + [TestMethod] + public void WrongResultRankWithEscapedShip() + { + var logs = ReadAllLines("escape_rank_001"); + var battle = Data(logs[3]); + InjectShips(battle, JsonObject.Parse(logs[0])); + _battleInfo.InspectBattle(logs[1], logs[2], battle); + _battleInfo.InspectBattleResult(Data(logs[6])); + PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError); + } } } \ No newline at end of file diff --git a/KancolleSniffer.Test/logs b/KancolleSniffer.Test/logs index 2d59f11..dcf8162 160000 --- a/KancolleSniffer.Test/logs +++ b/KancolleSniffer.Test/logs @@ -1 +1 @@ -Subproject commit 2d59f116a8a35c2e56492511b8c2ae20d8815a69 +Subproject commit dcf81623022b0d4f7f3949ee4a2eff1abb0e638e diff --git a/KancolleSniffer/Model/BattleInfo.cs b/KancolleSniffer/Model/BattleInfo.cs index 8b67422..7665018 100644 --- a/KancolleSniffer/Model/BattleInfo.cs +++ b/KancolleSniffer/Model/BattleInfo.cs @@ -180,6 +180,25 @@ namespace KancolleSniffer.Model _guard = json.api_f_nowhps_combined() ? Record.Setup(_shipInfo.Fleets[1].ActualShips, practice) : new Record[0]; + SetEscapedFlag(json); + } + + /// + /// EscapedはShipStatusにあるがBattleBriefTestの用のログにはShipStatusがないので、 + /// ここで戦闘用のAPIを元に設定する。 + /// + private void SetEscapedFlag(dynamic json) + { + if (json.api_escape_idx()) + { + foreach (int idx in json.api_escape_idx) + _friend[idx - 1].Escaped = true; + } + if (json.api_escape_idx_combined()) + { + foreach (int idx in json.api_escape_idx_combined) + _guard[idx - 1].Escaped = true; + } } private void SetupEnemyDamageRecord(dynamic json, bool practice) @@ -696,7 +715,7 @@ namespace KancolleSniffer.Model private bool _practice; public ShipStatus SnapShot => (ShipStatus)_status.Clone(); public int NowHp => _status.NowHp; - public bool Escaped => _status.Escaped; + public bool Escaped { get; set; } public ShipStatus.Damage DamageLevel => _status.DamageLevel; public string Name => _status.Name; public int StartHp { get; private set; } @@ -817,11 +836,10 @@ namespace KancolleSniffer.Model public ResultRankParams(Record[] records) { - var staying = records.Where(r => !r.Escaped).ToArray(); Count = records.Length; - Sunk = staying.Count(r => r.NowHp == 0); - Gauge = staying.Sum(r => r.StartHp - r.NowHp); - GaugeRate = (int)((double)Gauge / records.Sum(r => r.StartHp) * 100); + Sunk = records.Count(r => r.NowHp == 0); + Gauge = records.Sum(r => r.StartHp - r.NowHp); + GaugeRate = (int)((double)Gauge / records.Sum(r => r.Escaped ? 0 : r.StartHp) * 100); } } -- 2.11.0