OSDN Git Service

編成指定のある出撃任務のカウンタを実装する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 16 Feb 2018 13:58:39 +0000 (22:58 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 20 Feb 2018 08:45:33 +0000 (17:45 +0900)
KancolleSniffer.Test/QuestInfoTest.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/QuestInfo.cs

index 08b2349..8002aa9 100644 (file)
@@ -213,7 +213,7 @@ namespace KancolleSniffer.Test
             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
             questInfo.InspectQuestList(CreateQuestList(new[] {211, 212, 213, 218, 220, 221}));\r
             // 補給艦1隻と空母2隻\r
-            battleInfo.InjectEnemyResultStatus(new[]\r
+            battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
                 new ShipStatus {NowHp = 0, MaxHp = 130, Spec = new ShipSpec {Id = 1558, ShipType = 15}},\r
                 new ShipStatus {NowHp = 0, MaxHp = 90, Spec = new ShipSpec {Id = 1543, ShipType = 8}},\r
@@ -243,7 +243,7 @@ namespace KancolleSniffer.Test
             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
             questInfo.InspectQuestList(CreateQuestList(new[] {228, 230}));\r
             // 潜水艦3\r
-            battleInfo.InjectEnemyResultStatus(new[]\r
+            battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
                 new ShipStatus {NowHp = 0, MaxHp = 27, Spec = new ShipSpec {Id = 1532, ShipType = 13}},\r
                 new ShipStatus {NowHp = 0, MaxHp = 19, Spec = new ShipSpec {Id = 1530, ShipType = 13}},\r
@@ -331,6 +331,204 @@ namespace KancolleSniffer.Test
                     .SequenceEqual(new[] {new {Id = 243, Now = 1}}));\r
         }\r
 \r
+        private ShipStatus ShipStatus(int shipType, int specId = 0) =>\r
+            new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType}};\r
+\r
+\r
+        /// <summary>\r
+        /// 249: 「第五戦隊」出撃せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_249()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {249}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(5, 319), ShipStatus(5, 192), ShipStatus(5, 194),\r
+                ShipStatus(5, 193), ShipStatus(6, 189), ShipStatus(6, 188)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 2,\r
+                api_mapinfo_no = 5,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 2,\r
+                api_mapinfo_no = 5,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+            questInfo.Quests[0].Count.Now = 0;\r
+\r
+            battleInfo.Result.Friend.Main[1].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "那智改二轟沈");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 257: 「水雷戦隊」南西へ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_257()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {257}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(3), ShipStatus(2), ShipStatus(2),\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 4,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 4,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+            questInfo.Quests[0].Count.Now = 0;\r
+\r
+            battleInfo.Result.Friend.Main[0].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡轟沈");\r
+            battleInfo.Result.Friend.Main[0].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
+            battleInfo.Result.Friend.Main[1].Spec.ShipType = 3;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "旗艦が駆逐");\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
+\r
+            battleInfo.Result.Friend.Main[2].Spec.ShipType = 3;\r
+            battleInfo.Result.Friend.Main[3].Spec.ShipType = 3;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡が4隻");\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
+            battleInfo.Result.Friend.Main[3].Spec.ShipType = 4;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "駆逐軽巡以外");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 257: 「水上打撃部隊」南方へ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_259()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {259}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(3, 183), ShipStatus(9, 276), ShipStatus(10, 411),\r
+                ShipStatus(10, 412), ShipStatus(5, 193), ShipStatus(5, 194)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 5,\r
+                api_mapinfo_no = 1,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 5,\r
+                api_mapinfo_no = 1,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+            questInfo.Quests[0].Count.Now = 0;\r
+\r
+            battleInfo.Result.Friend.Main[0].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡轟沈");\r
+            battleInfo.Result.Friend.Main[0].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[4].Spec = new ShipSpec {Id = 136, ShipType = 9};\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "戦艦4隻");\r
+            battleInfo.Result.Friend.Main[4].Spec = new ShipSpec {Id = 193, ShipType = 5};\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec = new ShipSpec {Id = 58, ShipType = 4};\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡なし");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 266: 「水上反撃部隊」突入せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_266()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {266}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(2), ShipStatus(5), ShipStatus(3),\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 2,\r
+                api_mapinfo_no = 5,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 2,\r
+                api_mapinfo_no = 5,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+\r
+            battleInfo.Result.Friend.Main[1].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
+            battleInfo.Result.Friend.Main[1].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
+            battleInfo.Result.Friend.Main[2].Spec.ShipType = 2;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "旗艦が軽巡");\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
+            battleInfo.Result.Friend.Main[2].Spec.ShipType = 3;\r
+\r
+            battleInfo.Result.Friend.Main[3].Spec.ShipType = 3;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "軽巡が2隻");\r
+        }\r
+\r
         /// <summary>\r
         /// 822: 沖ノ島海域迎撃戦\r
         /// 854: 戦果拡張任務!「Z作戦」前段作戦\r
@@ -382,6 +580,201 @@ namespace KancolleSniffer.Test
             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
         }\r
 \r
+        public void MapNext_861()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {861}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(8), ShipStatus(4), ShipStatus(2),\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 6,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 6,\r
+                api_event_id = 8\r
+            }));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+\r
+            battleInfo.Result.Friend.Main[1].NowHp = 0;\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 6,\r
+                api_event_id = 8\r
+            }));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
+            battleInfo.Result.Friend.Main[1].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[2].Spec.ShipType = 4;\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 1,\r
+                api_mapinfo_no = 6,\r
+                api_event_id = 8\r
+            }));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "補給・航戦が3隻");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 862: 前線の航空偵察を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_862()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {862}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(2), ShipStatus(3), ShipStatus(3),\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(16)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 6,\r
+                api_mapinfo_no = 3,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 6,\r
+                api_mapinfo_no = 3,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+\r
+            battleInfo.Result.Friend.Main[1].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
+            battleInfo.Result.Friend.Main[1].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[4].Spec.ShipType = 16;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "水母2隻");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 873: 北方海域警備を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_873()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {873}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(3), ShipStatus(2), ShipStatus(2),\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 3,\r
+                api_mapinfo_no = 1,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 3,\r
+                api_mapinfo_no = 1,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 1);\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 1, "軽巡なし");\r
+            battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
+\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 3,\r
+                api_mapinfo_no = 2,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 3,\r
+                api_mapinfo_no = 3,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 875: 精鋭「三一駆」、鉄底海域に突入せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_875()\r
+        {\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {875}));\r
+\r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(2, 543), ShipStatus(8, 360), ShipStatus(11, 545),\r
+                ShipStatus(18, 467), ShipStatus(11, 261), ShipStatus(2, 344)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 5,\r
+                api_mapinfo_no = 4,\r
+                api_event_id = 4\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            questInfo.InspectMapNext(Js(new\r
+            {\r
+                api_maparea_id = 5,\r
+                api_mapinfo_no = 4,\r
+                api_event_id = 5\r
+            }));\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
+\r
+            battleInfo.Result.Friend.Main[5].NowHp = 0;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "朝霜改轟沈");\r
+            battleInfo.Result.Friend.Main[5].NowHp = 1;\r
+\r
+            battleInfo.Result.Friend.Main[0].Spec.Id = 345;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "長波改二なし");\r
+            battleInfo.Result.Friend.Main[0].Spec.Id = 543;\r
+\r
+            battleInfo.Result.Friend.Main[5].Spec.Id = 345;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 2, "高波改");\r
+            battleInfo.Result.Friend.Main[5].Spec.Id = 359;\r
+            questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
+            PAssert.That(() => questInfo.Quests[0].Count.Now == 3, "沖波改");\r
+        }\r
+\r
         /// <summary>\r
         /// 302: 大規模演習\r
         /// 303: 「演習」で練度向上!\r
@@ -618,7 +1011,8 @@ namespace KancolleSniffer.Test
                     new QuestCount {Id = 214, NowArray = new[] {20, 7, 10, 8}},\r
                     new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}},\r
                     new QuestCount {Id = 426, NowArray = new[] {1, 1, 1, 1}},\r
-                    new QuestCount {Id = 428, NowArray = new[] {1, 1, 1}}\r
+                    new QuestCount {Id = 428, NowArray = new[] {1, 1, 1}},\r
+                    new QuestCount {Id = 873, NowArray = new[] {1, 1, 1}}\r
                 }\r
             };\r
             questInfo.LoadState(status);\r
@@ -636,6 +1030,9 @@ namespace KancolleSniffer.Test
             PAssert.That(() => q428.ToToolTip() == "対潜警戒任務1 海峡警備行動1 長時間対潜警戒1");\r
             q428.NowArray = new[] {0, 1, 0};\r
             PAssert.That(() => q428.ToToolTip() == "海峡警備行動1");\r
+            var q873 = status.QuestCountList[5];\r
+            PAssert.That(() => q873.ToString() == "3/3");\r
+            PAssert.That(() => q873.ToToolTip() == "3-1 3-2 3-3");\r
         }\r
     }\r
 }
\ No newline at end of file
index e00ca7e..ac8c483 100644 (file)
@@ -698,9 +698,13 @@ namespace KancolleSniffer
         /// <summary>\r
         /// テスト専用\r
         /// </summary>\r
-        public void InjectEnemyResultStatus(ShipStatus[] enemy, ShipStatus[] guard)\r
+        public void InjectResultStatus(ShipStatus[] main, ShipStatus[] guard, ShipStatus[] enemy, ShipStatus[] enemyGuard)\r
         {\r
-            Result = new BattleResult {Enemy = new BattleResult.Combined {Main = enemy, Guard = guard}};\r
+            Result = new BattleResult\r
+            {\r
+                Friend = new BattleResult.Combined { Main = main, Guard = guard},\r
+                Enemy = new BattleResult.Combined {Main = enemy, Guard = enemyGuard}\r
+            };\r
         }\r
     }\r
 }
\ No newline at end of file
index a73d536..82e72d9 100644 (file)
@@ -171,7 +171,7 @@ namespace KancolleSniffer
 \r
         public override string ToString()\r
         {\r
-            if (Id == 426 || Id == 854)\r
+            if (Id == 426 || Id == 854 || Id == 873)\r
                 return $"{NowArray.Count(n => n >= 1)}/{Spec.MaxArray.Length}";\r
             return NowArray != null\r
                 ? string.Join(" ", NowArray.Zip(Spec.MaxArray, (n, m) => $"{n}/{m}"))\r
@@ -195,6 +195,10 @@ namespace KancolleSniffer
                     return string.Join(" ",\r
                         new[] {"2-4", "6-1", "6-3", "6-4"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
                             .Where(s => !string.IsNullOrEmpty(s)));\r
+                case 873:\r
+                    return string.Join(" ",\r
+                        new[] {"3-1", "3-2", "3-3"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
+                            .Where(s => !string.IsNullOrEmpty(s)));\r
             }\r
             return "";\r
         }\r
@@ -234,12 +238,20 @@ namespace KancolleSniffer
             {241, new QuestSortie {Interval = Weekly, Max = 5, Rank = "B", Maps = new[] {33, 34, 35}, Material = new[] {0, 0, 3, 3}}}, // 241: 敵北方艦隊主力を撃滅せよ!\r
             {242, new QuestSortie {Interval = Weekly, Max = 1, Rank = "B", Maps = new[] {44}, Material = new[] {0, 1, 1, 0}}}, // 242: 敵東方中枢艦隊を撃破せよ!\r
             {243, new QuestSortie {Interval = Weekly, Max = 2, Rank = "S", Maps = new[] {52}, Material = new[] {0, 0, 2, 2}}}, // 243: 南方海域珊瑚諸島沖の制空権を握れ!\r
+            {249, new QuestSpec {Interval = Monthly, Max = 1, Material = new[] {0, 0, 5, 0}}}, // 249: 「第五戦隊」出撃せよ!\r
             {256, new QuestSortie {Interval = Monthly, Max = 3, Rank = "S", Maps = new[] {61}, Material = new[] {0, 0, 0, 0}}}, // 256: 「潜水艦隊」出撃せよ!\r
+            {257, new QuestSpec {Interval = Monthly, Max = 1, Material = new[] {0, 0, 0, 3}}}, // 257: 「水雷戦隊」南西へ!\r
+            {259, new QuestSpec {Interval = Monthly, Max = 1, Material = new[] {0, 3, 0, 4}}}, // 259: 「水上打撃部隊」南方へ!\r
             {261, new QuestSortie {Interval = Weekly, Max = 3, Rank = "A", Maps = new[] {15}, Material = new[] {0, 0, 0, 3}}}, // 261: 海上輸送路の安全確保に努めよ!\r
             {265, new QuestSortie {Interval = Monthly, Max = 10, Rank = "A", Maps = new[] {15}, Material = new[] {0, 0, 5, 3}}}, // 265: 海上護衛強化月間\r
+            {266, new QuestSpec {Interval = Monthly, Max = 1, Material = new[] {0, 0, 4, 2}}}, // 266: 「水上反撃部隊」突入せよ!\r
 \r
             {822, new QuestSortie {Interval = Quarterly, Max = 2, Rank = "S", Maps = new[] {24}, Material = new[] {0, 0, 0, 5}}}, // 822: 沖ノ島海域迎撃戦\r
             {854, new QuestSpec {Interval = Quarterly, MaxArray = new[] {1, 1, 1, 1}, Material = new[] {0, 0, 0, 4}}}, // 854: 戦果拡張任務!「Z作戦」前段作戦\r
+            {861, new QuestSpec {Interval = Quarterly, Max = 2, Material = new[] {0, 4, 0, 0}}}, // 861: 強行輸送艦隊、抜錨!\r
+            {862, new QuestSpec {Interval = Quarterly, Max = 2, Material = new[] {0, 0, 8, 4}}}, // 862: 前線の航空偵察を実施せよ!\r
+            {873, new QuestSpec {Interval = Quarterly, MaxArray = new[] {1, 1, 1}, Material = new[] {0, 0, 0, 0}}}, // 873: 北方海域警備を実施せよ!\r
+            {875, new QuestSpec {Interval = Quarterly, Max = 2, Material = new[] {0, 0, 0, 0}}}, // 875: 精鋭「三一駆」、鉄底海域に突入せよ!\r
 \r
             {303, new QuestPractice {Interval = Daily, Max = 3, Win = false, Material = new[] {1, 0, 0, 0}}}, // 303: 「演習」で練度向上!\r
             {304, new QuestPractice {Interval = Daily, Max = 5, Win = true, Material = new[] {0, 0, 1, 0}}}, // 304: 「演習」で他提督を圧倒せよ!\r
@@ -461,8 +473,9 @@ namespace KancolleSniffer
             NeedSave = true;\r
         }\r
 \r
-        private bool _boss;\r
+\r
         private int _map;\r
+        private bool _boss;\r
 \r
         public void InspectMapStart(dynamic json)\r
         {\r
@@ -475,6 +488,17 @@ namespace KancolleSniffer
         {\r
             _map = (int)json.api_maparea_id * 10 + (int)json.api_mapinfo_no;\r
             _boss = (int)json.api_event_id == 5;\r
+\r
+            if (_quests.TryGetValue(861, out var q861))\r
+            {\r
+                if (_map == 16 && (int)json.api_event_id == 8)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.ShipType)\r
+                        .ToArray();\r
+                    if (fleet.Count(s => s == 10 || s == 15) == 2)\r
+                        IncrementCount(q861.Count);\r
+                }\r
+            }\r
         }\r
 \r
         public void InspectBattleResult(dynamic json)\r
@@ -513,6 +537,59 @@ namespace KancolleSniffer
                     NeedSave = true;\r
                 }\r
             }\r
+            if (_quests.TryGetValue(249, out var q249))\r
+            {\r
+                if (_map == 25 && _boss && QuestSortie.CompareRank(rank, "S") == 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.Id)\r
+                        .ToArray();\r
+                    if (fleet.Intersect(new[] {62, 63, 64, 265, 266, 268, 319, 192, 194}).Count() == 3)\r
+                        IncrementCount(q249.Count);\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(257, out var q257))\r
+            {\r
+                if (_map == 14 && _boss && QuestSortie.CompareRank(rank, "S") == 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.ShipType)\r
+                        .ToArray();\r
+                    if (fleet[0] == 3 && fleet.Count(s => s == 3) <= 3 && fleet.All(s => s == 2 || s == 3))\r
+                        IncrementCount(q257.Count);\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(259, out var q259))\r
+            {\r
+                if (_map == 51 && _boss && QuestSortie.CompareRank(rank, "S") == 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec).ToArray();\r
+                    var senkan = new[]\r
+                    {\r
+                        131, 136, // 大和\r
+                        143, 148, 546, // 武蔵\r
+                        80, 275, 541, // 長門\r
+                        81, 276, // 陸奥\r
+                        26, 286, 411, // 扶桑\r
+                        27, 287, 412, // 山城\r
+                        77, 82, // 伊勢\r
+                        87, 88 // 日向\r
+                    };\r
+                    if (fleet.Select(s => s.Id).Intersect(senkan).Count() == 3 &&\r
+                        fleet.Count(s => s.ShipType == 3) > 0)\r
+                    {\r
+                        IncrementCount(q259.Count);\r
+                    }\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(266, out var q266))\r
+            {\r
+                if (_map == 25 && _boss && QuestSortie.CompareRank(rank, "S") == 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.ShipType)\r
+                        .ToArray();\r
+                    if (fleet[0] == 2 && fleet.OrderBy(x => x).SequenceEqual(new[] {2, 2, 2, 2, 3, 5}))\r
+                        IncrementCount(q266.Count);\r
+                }\r
+            }\r
             if (_quests.TryGetValue(854, out var opz) && _boss)\r
             {\r
                 var array = opz.Count.NowArray;\r
@@ -536,6 +613,47 @@ namespace KancolleSniffer
                         break;\r
                 }\r
             }\r
+            if (_quests.TryGetValue(862, out var q862))\r
+            {\r
+                if (_map == 63 && _boss && QuestSortie.CompareRank(rank, "A") <= 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.ShipType).ToArray();\r
+                    if (fleet.Count(s => s == 3) == 2 && fleet.Count(s => s == 16) == 1)\r
+                        IncrementCount(q862.Count);\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(873, out var q873))\r
+            {\r
+                if (_battleInfo.Result.Friend.Main.Count(s => s.NowHp > 0 && s.Spec.ShipType == 3) >= 1 &&\r
+                    _boss && QuestSortie.CompareRank(rank, "A") <= 0)\r
+                {\r
+                    var array = q873.Count.NowArray;\r
+                    switch (_map)\r
+                    {\r
+                        case 31:\r
+                            array[0]++;\r
+                            NeedSave = true;\r
+                            break;\r
+                        case 32:\r
+                            array[1]++;\r
+                            NeedSave = true;\r
+                            break;\r
+                        case 33:\r
+                            array[2]++;\r
+                            NeedSave = true;\r
+                            break;\r
+                    }\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(875, out var q875))\r
+            {\r
+                if (_map == 54 && _boss && QuestSortie.CompareRank(rank, "S") == 0)\r
+                {\r
+                    var fleet = _battleInfo.Result.Friend.Main.Where(s => s.NowHp > 0).Select(s => s.Spec.Id).ToArray();\r
+                    if (fleet.Contains(543) && fleet.Intersect(new []{344, 345, 359}).Any())\r
+                        IncrementCount(q875.Count);\r
+                }\r
+            }\r
         }\r
 \r
         public void InspectPracticeResult(dynamic json)\r