OSDN Git Service

クウォータリーの一部の任務のカウンタを実装する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 15 Feb 2018 12:51:03 +0000 (21:51 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 15 Feb 2018 12:51:03 +0000 (21:51 +0900)
KancolleSniffer.Test/QuestInfoTest.cs
KancolleSniffer/QuestInfo.cs

index 12122f9..cf3a211 100644 (file)
@@ -500,6 +500,72 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 426: 海上通商航路の警戒を厳とせよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_426()\r
+        {\r
+            var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(Js(new\r
+            {\r
+                api_list = new[]\r
+                {\r
+                    new {api_no = 426, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
+                }\r
+            }));\r
+\r
+            questInfo.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 3}},\r
+                    new {api_id = 3, api_mission = new[] {2, 4}},\r
+                    new {api_id = 4, api_mission = new[] {2, 5}},\r
+                }));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() =>\r
+                questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
+            questInfo.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 10}},\r
+                }));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() =>\r
+                questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 428: 近海に侵入する敵潜を制圧せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_428()\r
+        {\r
+            var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(Js(new\r
+            {\r
+                api_list = new[]\r
+                {\r
+                    new {api_no = 428, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
+                }\r
+            }));\r
+\r
+            questInfo.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 101}},\r
+                    new {api_id = 4, api_mission = new[] {2, 102}},\r
+                }));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() =>\r
+                questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 503: 艦隊大整備!\r
         /// 504: 艦隊酒保祭り!\r
         /// </summary>\r
@@ -564,6 +630,7 @@ namespace KancolleSniffer.Test
         /// <summary>\r
         /// 613: 資源の再利用\r
         /// 638: 対空機銃量産\r
+        /// 663: 新型艤装の継続研究\r
         /// 673: 装備開発力の整備\r
         /// 674: 工廠環境の整備\r
         /// 675: 運用装備の統合整備\r
@@ -571,10 +638,10 @@ namespace KancolleSniffer.Test
         /// 677: 継戦支援能力の整備\r
         /// </summary>\r
         [TestMethod]\r
-        public void DestroyItem_613_638_673_674_675_676_677()\r
+        public void DestroyItem_613_638_663_673_674_675_676_677()\r
         {\r
             var itemInfo = new ItemInfo();\r
-            var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 7};\r
+            var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 8};\r
 \r
             itemInfo.InjectItemSpec(new[]\r
             {\r
@@ -595,6 +662,7 @@ namespace KancolleSniffer.Test
                 {\r
                     new {api_no = 613, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
                     new {api_no = 638, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
+                    new {api_no = 663, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
                     new {api_no = 673, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
                     new {api_no = 674, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
                     new {api_no = 675, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
@@ -604,16 +672,16 @@ namespace KancolleSniffer.Test
             }));\r
             questInfo.InspectDestroyItem("api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9&api%5Fverno=1", null);\r
             PAssert.That(() =>\r
-                questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(4).SequenceEqual(new[]\r
+                questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(5).SequenceEqual(new[]\r
                 {\r
-                    new {Id = 613, Now = 1}, new {Id = 638, Now = 1},\r
+                    new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 663, Now = 1},\r
                     new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
                 }));\r
-            var q675 = questInfo.Quests[4];\r
+            var q675 = questInfo.Quests[5];\r
             PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
-            var q676 = questInfo.Quests[5];\r
+            var q676 = questInfo.Quests[6];\r
             PAssert.That(() => q676.Id == 676 && q676.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
-            var q677 = questInfo.Quests[6];\r
+            var q677 = questInfo.Quests[7];\r
             PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
         }\r
 \r
@@ -653,7 +721,9 @@ namespace KancolleSniffer.Test
                 {\r
                     new QuestCount {Id = 211, Now = 2},\r
                     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 = 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
                 }\r
             };\r
             questInfo.LoadState(status);\r
@@ -664,6 +734,13 @@ namespace KancolleSniffer.Test
             PAssert.That(() => z.ToToolTip() == "2-4 6-1 6-3 6-4");\r
             z.NowArray = new[] {0, 0, 0, 0};\r
             PAssert.That(() => z.ToToolTip() == "");\r
+            var q426 = status.QuestCountList[3];\r
+            PAssert.That(() => q426.ToString() == "4/4");\r
+            PAssert.That(() => q426.ToToolTip() == "警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務");\r
+            var q428 = status.QuestCountList[4];\r
+            PAssert.That(() => q428.ToToolTip() == "対潜警戒任務1 海峡警備行動1 長時間対潜警戒1");\r
+            q428.NowArray = new[] {0, 1, 0};\r
+            PAssert.That(() => q428.ToToolTip() == "海峡警備行動1");\r
         }\r
     }\r
 }
\ No newline at end of file
index d59b61b..9fc458e 100644 (file)
@@ -160,7 +160,7 @@ namespace KancolleSniffer
 \r
         public override string ToString()\r
         {\r
-            if (Id == 854)\r
+            if (Id == 426 || Id == 854)\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
@@ -169,11 +169,22 @@ namespace KancolleSniffer
 \r
         public string ToToolTip()\r
         {\r
-            return Id != 854\r
-                ? ""\r
-                : 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
+            switch (Id)\r
+            {\r
+                case 426:\r
+                    return string.Join(" ",\r
+                        new[] {"警備任務", "対潜警戒任務", "海上護衛任務", "強硬偵察任務"}.Zip(NowArray, (mission, n) => n >= 1 ? mission : "")\r
+                            .Where(s => !string.IsNullOrEmpty(s)));\r
+                case 428:\r
+                    return string.Join(" ",\r
+                        new[] {"対潜警戒任務", "海峡警備行動", "長時間対潜警戒"}.Zip(NowArray, (mission, n) => n >= 1 ? mission + n : "")\r
+                            .Where(s => !string.IsNullOrEmpty(s)));\r
+                case 854:\r
+                    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
+            }\r
+            return "";\r
         }\r
 \r
         public bool Cleared => NowArray?.Zip(Spec.MaxArray, (n, m) => n >= m).All(x => x) ?? Now >= Spec.Max;\r
@@ -229,6 +240,8 @@ namespace KancolleSniffer
             {410, new QuestMission {Interval = Weekly, Max = 1, Ids = new[] {37, 38}}}, // 410: 南方への輸送作戦を成功させよ!\r
             {411, new QuestMission {Interval = Weekly, Max = 6, Shift = 1, Ids = new[] {37, 38}}}, // 411: 南方への鼠輸送を継続実施せよ!\r
             {424, new QuestMission {Interval = Monthly, Max = 4, Shift = 1, Ids = new[] {5}}}, // 424: 輸送船団護衛を強化せよ!\r
+            {426, new QuestSpec {Interval = Quarterly, MaxArray = new[] {1, 1, 1, 1}}}, // 426: 海上通商航路の警戒を厳とせよ!\r
+            {428, new QuestSpec {Interval = Quarterly, MaxArray = new[] {2, 2, 2}}}, // 428: 近海に侵入する敵潜を制圧せよ!\r
 \r
             {503, new QuestSpec {Interval = Daily, Max = 5}}, // 503: 艦隊大整備!\r
             {504, new QuestSpec {Interval = Daily, Max = 15}}, // 504: 艦隊酒保祭り!\r
@@ -242,6 +255,7 @@ namespace KancolleSniffer
 \r
             {613, new QuestSpec {Interval = Weekly, Max = 24}}, // 613: 資源の再利用\r
             {638, new QuestDestroyItem {Interval = Weekly, Max = 6, Items = new[] {21}}}, // 638: 対空機銃量産\r
+            {663, new QuestDestroyItem {Interval = Quarterly, Max = 10, Items = new[] {3}} }, // 663: 新型艤装の継続研究\r
             {673, new QuestDestroyItem {Interval = Daily, Max = 4, Items = new[] {1}, Shift = 1}}, // 673: 装備開発力の整備\r
             {674, new QuestDestroyItem {Interval = Daily, Max = 3, Items = new[] {21}, Shift = 2}}, // 674: 工廠環境の整備\r
             {675, new QuestSpec {Interval = Quarterly, MaxArray = new[] {6, 4}}}, // 675: 運用装備の統合整備\r
@@ -535,14 +549,50 @@ namespace KancolleSniffer
             var deck = int.Parse(values["api_deck_id"]);\r
             if ((int)json.api_clear_result == 0)\r
                 return;\r
+            var mid = _missionId[deck - 1];\r
             foreach (var quest in _quests.Values)\r
             {\r
                 var count = quest.Count;\r
                 if (!(count.Spec is QuestMission mission))\r
                     continue;\r
-                if (mission.Check(_missionId[deck - 1]))\r
+                if (mission.Check(mid))\r
                     IncrementCount(count);\r
             }\r
+            if (_quests.TryGetValue(426, out var q426))\r
+            {\r
+                var count = q426.Count;\r
+                switch (mid)\r
+                {\r
+                    case 3:\r
+                        count.NowArray[0]++;\r
+                        break;\r
+                    case 4:\r
+                        count.NowArray[1]++;\r
+                        break;\r
+                    case 5:\r
+                        count.NowArray[2]++;\r
+                        break;\r
+                    case 10:\r
+                        count.NowArray[3]++;\r
+                        break;\r
+                }\r
+            }\r
+            if (_quests.TryGetValue(428, out var q428))\r
+            {\r
+                var count = q428.Count;\r
+                switch (mid)\r
+                {\r
+                    case 4:\r
+                        count.NowArray[0]++;\r
+                        break;\r
+                    case 101:\r
+                        count.NowArray[1]++;\r
+                        break;\r
+                    case 102:\r
+                        count.NowArray[2]++;\r
+                        break;\r
+                }\r
+            }\r
         }\r
 \r
         private void IncrementCount(QuestCount count)\r