From ada3b0dc298d2e7330859466866f2bfa6250c94a Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Sun, 18 Feb 2018 20:58:48 +0900 Subject: [PATCH] =?utf8?q?NPC=E5=8F=8B=E8=BB=8D=E3=81=AE=E6=94=AF=E6=8F=B4?= =?utf8?q?=E6=94=BB=E6=92=83=E3=82=92=E6=88=A6=E9=97=98=E7=B5=90=E6=9E=9C?= =?utf8?q?=E3=81=AB=E5=8F=8D=E6=98=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer.Test/BattleTest.cs | 14 ++++++++++++++ KancolleSniffer.Test/logs | 2 +- KancolleSniffer/BattleInfo.cs | 16 ++++++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/KancolleSniffer.Test/BattleTest.cs b/KancolleSniffer.Test/BattleTest.cs index 75d66d2..1ca6168 100644 --- a/KancolleSniffer.Test/BattleTest.cs +++ b/KancolleSniffer.Test/BattleTest.cs @@ -68,5 +68,19 @@ namespace KancolleSniffer.Test _battleInfo.InspectBattleResult(JsonParser.Parse(logs[6])); PAssert.That(() => _shipInfo.GetShipStatuses(0)[3].NowHp == 12); } + + private dynamic Data(string json) => ((dynamic)JsonParser.Parse(json)).api_data; + + [TestMethod] + public void NpcFriendFleetAttack() + { + var logs = ReadAllLines("friendfleet_001"); + var battle = Data(logs[3]); + _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0])); + _battleInfo.InspectBattle(logs[1], logs[2], battle); + _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6])); + _battleInfo.InspectBattleResult(Data(logs[9])); + PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError); + } } } \ No newline at end of file diff --git a/KancolleSniffer.Test/logs b/KancolleSniffer.Test/logs index fec7ef9..de0f8ce 160000 --- a/KancolleSniffer.Test/logs +++ b/KancolleSniffer.Test/logs @@ -1 +1 @@ -Subproject commit fec7ef9ba5ccda7d066e18b16558a464678bb5de +Subproject commit de0f8ce6c20b42952d53bebde4535088edad2907 diff --git a/KancolleSniffer/BattleInfo.cs b/KancolleSniffer/BattleInfo.cs index 14e5035..e00ca7e 100644 --- a/KancolleSniffer/BattleInfo.cs +++ b/KancolleSniffer/BattleInfo.cs @@ -261,7 +261,8 @@ namespace KancolleSniffer ByTurn, Support, Aircraft, - AirBase + AirBase, + Friend } private class Phase @@ -294,6 +295,7 @@ namespace KancolleSniffer new Phase("support_info", CombatType.Support), new Phase("opening_taisen", CombatType.ByTurn), new Phase("opening_atack", CombatType.AtOnce), + new Phase("friendly_battle", CombatType.Friend), new Phase("hougeki", CombatType.ByTurn), new Phase("hougeki1", CombatType.ByTurn), new Phase("hougeki2", CombatType.ByTurn), @@ -327,6 +329,9 @@ namespace KancolleSniffer case CombatType.AirBase: CalcAirBaseAttackDamage(json[api]); break; + case CombatType.Friend: + CalcFriendAttackDamage(json[api]); + break; } } @@ -352,6 +357,11 @@ namespace KancolleSniffer } } + private void CalcFriendAttackDamage(dynamic json) + { + CalcDamageByTurn(json.api_hougeki, true); + } + private void AddAirBattleResult(dynamic json, string phaseName) { var stage1 = json.api_stage1; @@ -436,7 +446,7 @@ namespace KancolleSniffer guard[i].ApplyDamage(damage[i + 6]); } - private void CalcDamageByTurn(dynamic json) + private void CalcDamageByTurn(dynamic json, bool ignoreFriendDamage = false) { if (!(json.api_df_list() && json.api_df_list != null && json.api_damage() && json.api_damage != null && @@ -457,6 +467,8 @@ namespace KancolleSniffer var hit = new {t = targets[i][0], d = damages[i].Sum(d => d >= 0 ? d : 0)}; if (hit.t == -1) continue; + if (ignoreFriendDamage && eflags[i] == 1) + continue; records[eflags[i]][hit.t].ApplyDamage(hit.d); } } -- 2.11.0