OSDN Git Service

NPC友軍の支援攻撃を戦闘結果に反映する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 18 Feb 2018 11:58:48 +0000 (20:58 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 18 Feb 2018 11:58:48 +0000 (20:58 +0900)
KancolleSniffer.Test/BattleTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/BattleInfo.cs

index 75d66d2..1ca6168 100644 (file)
@@ -68,5 +68,19 @@ namespace KancolleSniffer.Test
             _battleInfo.InspectBattleResult(JsonParser.Parse(logs[6]));\r
             PAssert.That(() => _shipInfo.GetShipStatuses(0)[3].NowHp == 12);\r
         }\r
+\r
+        private dynamic Data(string json) => ((dynamic)JsonParser.Parse(json)).api_data;\r
+\r
+        [TestMethod]\r
+        public void NpcFriendFleetAttack()\r
+        {\r
+            var logs = ReadAllLines("friendfleet_001");\r
+            var battle = Data(logs[3]);\r
+            _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
+            _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
+            _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6]));\r
+            _battleInfo.InspectBattleResult(Data(logs[9]));\r
+            PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
+        }\r
     }\r
 }
\ No newline at end of file
index fec7ef9..de0f8ce 160000 (submodule)
@@ -1 +1 @@
-Subproject commit fec7ef9ba5ccda7d066e18b16558a464678bb5de
+Subproject commit de0f8ce6c20b42952d53bebde4535088edad2907
index 14e5035..e00ca7e 100644 (file)
@@ -261,7 +261,8 @@ namespace KancolleSniffer
             ByTurn,\r
             Support,\r
             Aircraft,\r
-            AirBase\r
+            AirBase,\r
+            Friend\r
         }\r
 \r
         private class Phase\r
@@ -294,6 +295,7 @@ namespace KancolleSniffer
                 new Phase("support_info", CombatType.Support),\r
                 new Phase("opening_taisen", CombatType.ByTurn),\r
                 new Phase("opening_atack", CombatType.AtOnce),\r
+                new Phase("friendly_battle", CombatType.Friend),\r
                 new Phase("hougeki", CombatType.ByTurn),\r
                 new Phase("hougeki1", CombatType.ByTurn),\r
                 new Phase("hougeki2", CombatType.ByTurn),\r
@@ -327,6 +329,9 @@ namespace KancolleSniffer
                 case CombatType.AirBase:\r
                     CalcAirBaseAttackDamage(json[api]);\r
                     break;\r
+                case CombatType.Friend:\r
+                    CalcFriendAttackDamage(json[api]);\r
+                    break;\r
             }\r
         }\r
 \r
@@ -352,6 +357,11 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        private void CalcFriendAttackDamage(dynamic json)\r
+        {\r
+            CalcDamageByTurn(json.api_hougeki, true);\r
+        }\r
+\r
         private void AddAirBattleResult(dynamic json, string phaseName)\r
         {\r
             var stage1 = json.api_stage1;\r
@@ -436,7 +446,7 @@ namespace KancolleSniffer
                 guard[i].ApplyDamage(damage[i + 6]);\r
         }\r
 \r
-        private void CalcDamageByTurn(dynamic json)\r
+        private void CalcDamageByTurn(dynamic json, bool ignoreFriendDamage = false)\r
         {\r
             if (!(json.api_df_list() && json.api_df_list != null &&\r
                   json.api_damage() && json.api_damage != null &&\r
@@ -457,6 +467,8 @@ namespace KancolleSniffer
                 var hit = new {t = targets[i][0], d = damages[i].Sum(d => d >= 0 ? d : 0)};\r
                 if (hit.t == -1)\r
                     continue;\r
+                if (ignoreFriendDamage && eflags[i] == 1)\r
+                    continue;\r
                 records[eflags[i]][hit.t].ApplyDamage(hit.d);\r
             }\r
         }\r