OSDN Git Service

「伊良湖の支援」と「主力艦上戦闘機の更新」のカウンタを実装する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 21 Mar 2018 14:05:01 +0000 (23:05 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 23 Mar 2018 13:43:14 +0000 (22:43 +0900)
KancolleSniffer.Test/QuestInfoTest.cs
KancolleSniffer/QuestInfo.cs

index 24a9496..e2862b8 100644 (file)
@@ -804,13 +804,19 @@ namespace KancolleSniffer.Test
         /// 303: 「演習」で練度向上!\r
         /// 304: 「演習」で他提督を圧倒せよ!\r
         /// 311: 精鋭艦隊演習\r
+        /// 318: 給糧艦「伊良湖」の支援\r
         /// </summary>\r
         [TestMethod]\r
-        public void PracticeResult_303_304_302_311()\r
+        public void PracticeResult_303_304_302_311_318()\r
         {\r
-            var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311}));\r
+            var battleInfo = new BattleInfo(null, null);\r
+            var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311, 318}));\r
 \r
+            battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus(2, 543), ShipStatus(3, 488)\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
             questInfo.InspectPracticeResult(Js(new {api_win_rank = "C"}));\r
             questInfo.InspectPracticeResult(Js(new {api_win_rank = "A"}));\r
             PAssert.That(() =>\r
@@ -818,8 +824,15 @@ namespace KancolleSniffer.Test
                     .SequenceEqual(new[]\r
                     {\r
                         new {Id = 302, Now = 1}, new {Id = 303, Now = 2}, new {Id = 304, Now = 1},\r
-                        new {Id = 311, Now = 1}\r
+                        new {Id = 311, Now = 1}, new {Id = 318, Now = 0}\r
                     }));\r
+            // 318\r
+            battleInfo.Result.Friend.Main[0] = ShipStatus(3, 200);\r
+            questInfo.InspectPracticeResult(Js(new {api_win_rank = "A"}));\r
+            PAssert.That(() => questInfo.Quests[4].Count.Now == 1);\r
+            questInfo.Quests[4].Count.Now = 3;\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {318}));\r
+            PAssert.That(() => questInfo.Quests[4].Count.Now == 3, "進捗調節しない");\r
         }\r
 \r
         /// <summary>\r
@@ -961,12 +974,13 @@ namespace KancolleSniffer.Test
         /// 675: 運用装備の統合整備\r
         /// 676: 装備開発力の集中整備\r
         /// 677: 継戦支援能力の整備\r
+        /// 678: 主力艦上戦闘機の更新\r
         /// </summary>\r
         [TestMethod]\r
-        public void DestroyItem_613_638_663_673_674_675_676_677()\r
+        public void DestroyItem_613_638_663_673_674_675_676_677_678()\r
         {\r
             var itemInfo = new ItemInfo();\r
-            var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 8};\r
+            var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 9};\r
 \r
             itemInfo.InjectItemSpec(new[]\r
             {\r
@@ -978,11 +992,13 @@ namespace KancolleSniffer.Test
                 new ItemSpec {Id = 75, Name = "ドラム缶(輸送用)", Type = 30},\r
                 new ItemSpec {Id = 7, Name = "35.6cm連装砲", Type = 3},\r
                 new ItemSpec {Id = 25, Name = "零式水上偵察機", Type = 10},\r
-                new ItemSpec {Id = 13, Name = "61cm三連装魚雷", Type = 5}\r
+                new ItemSpec {Id = 13, Name = "61cm三連装魚雷", Type = 5},\r
+                new ItemSpec {Id = 20, Name = "零式艦戦21型", Type = 6}\r
             });\r
-            itemInfo.InjectItems(new[] {1, 37, 19, 4, 11, 75, 7, 25, 13});\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {613, 638, 663, 673, 674, 675, 676, 677}));\r
-            questInfo.InspectDestroyItem("api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9&api%5Fverno=1", null);\r
+            itemInfo.InjectItems(new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20});\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {613, 638, 663, 673, 674, 675, 676, 677, 678}));\r
+            questInfo.InspectDestroyItem(\r
+                "api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10&api%5Fverno=1", null);\r
             PAssert.That(() =>\r
                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(5).SequenceEqual(new[]\r
                 {\r
@@ -990,11 +1006,13 @@ namespace KancolleSniffer.Test
                     new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
                 }));\r
             var q675 = questInfo.Quests[5];\r
-            PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
+            PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {2, 1}));\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[7];\r
             PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+            var q678 = questInfo.Quests[8];\r
+            PAssert.That(() => q678.Id == 678 && q678.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
         }\r
 \r
         /// <summary>\r
@@ -1016,7 +1034,7 @@ namespace KancolleSniffer.Test
         public void NotImplemented()\r
         {\r
             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {318}));\r
+            questInfo.InspectQuestList(CreateQuestList(new[] {679}));\r
             PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);\r
         }\r
 \r
@@ -1081,7 +1099,7 @@ namespace KancolleSniffer.Test
                 },\r
                 QuestCountList = new[]\r
                 {\r
-                    new QuestCount{Id = 854,NowArray = new []{1,0,1,0}}\r
+                    new QuestCount {Id = 854, NowArray = new[] {1, 0, 1, 0}}\r
                 }\r
             };\r
             questInfo.LoadState(status);\r
index 7b3ed40..4a11841 100644 (file)
@@ -259,6 +259,7 @@ namespace KancolleSniffer
             {304, new QuestPractice {Interval = Daily, Max = 5, Win = true, Material = new[] {0, 0, 1, 0}}}, // 304: 「演習」で他提督を圧倒せよ!\r
             {302, new QuestPractice {Interval = Weekly, Max = 20, Win = true, Material = new[] {0, 0, 2, 1}}}, // 302: 大規模演習\r
             {311, new QuestPractice {Interval = Daily, Max = 7, Win = true, Material = new[] {0, 2, 0, 0}}}, // 311: 精鋭艦隊演習\r
+            {318, new QuestSpec {Interval = Daily, Max = 3, Material = new[] {0, 2, 2, 0}, AdjustCount = false}}, // 318: 給糧艦「伊良湖」の支援\r
 \r
             {402, new QuestMission {Interval = Daily, Max = 3, Material = new[] {0, 0, 1, 0}}}, // 402: 「遠征」を3回成功させよう!\r
             {403, new QuestMission {Interval = Daily, Max = 10, Material = new[] {0, 0, 0, 0}}}, // 403: 「遠征」を10回成功させよう!\r
@@ -287,6 +288,7 @@ namespace KancolleSniffer
             {675, new QuestSpec {Interval = Quarterly, MaxArray = new[] {6, 4}, Material = new[] {0, 0, 0, 0}}}, // 675: 運用装備の統合整備\r
             {676, new QuestSpec {Interval = Weekly, MaxArray = new[] {3, 3, 1}, Material = new[] {0, 1, 7, 0}}}, // 676: 装備開発力の集中整備\r
             {677, new QuestSpec {Interval = Weekly, MaxArray = new[] {4, 2, 3}, Material = new[] {0, 5, 0, 0}}}, // 677: 継戦支援能力の整備\r
+            {678, new QuestSpec {Interval = Quarterly, MaxArray = new[] {3, 5}, Material = new[] {0, 0, 8, 0}}}, // 678: 主力艦上戦闘機の更新\r
 \r
             {702, new QuestPowerup {Interval = Daily, Max = 2, Material = new[] {0, 1, 0, 0}}}, // 702: 艦の「近代化改修」を実施せよ!\r
             {703, new QuestPowerup {Interval = Weekly, Max = 15, Material = new[] {1, 0, 2, 0}}} // 703: 「近代化改修」を進め、戦備を整えよ!\r
@@ -668,6 +670,14 @@ namespace KancolleSniffer
                 if (practice.Check(json.api_win_rank))\r
                     IncrementCount(count);\r
             }\r
+            if (_quests.TryGetValue(318, out var q318))\r
+            {\r
+                if (QuestSortie.CompareRank(json.api_win_rank, "B") <= 0 &&\r
+                    _battleInfo.Result.Friend.Main.Count(s => s.Spec.ShipType == 3) >= 2)\r
+                {\r
+                    IncrementCount(q318.Count);\r
+                }\r
+            }\r
         }\r
 \r
         private readonly int[] _missionId = new int[ShipInfo.FleetCount];\r
@@ -783,33 +793,39 @@ namespace KancolleSniffer
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
             var items = values["api_slotitem_ids"].Split(',')\r
-                .Select(id => _itemInfo.GetStatus(int.Parse(id)).Spec.Type).ToArray();\r
+                .Select(id => _itemInfo.GetStatus(int.Parse(id)).Spec).ToArray();\r
             IncrementCount(613); // 613: 資源の再利用\r
             foreach (var quest in _quests.Values)\r
             {\r
                 var count = quest.Count;\r
                 if (!(count.Spec is QuestDestroyItem destroy))\r
                     continue;\r
-                AddCount(count, items.Count(destroy.Check));\r
+                AddCount(count, items.Count(spec => destroy.Check(spec.Type)));\r
             }\r
             if (_quests.TryGetValue(675, out var q675))\r
             {\r
-                q675.Count.NowArray[0] += items.Count(id => id == 6);\r
-                q675.Count.NowArray[1] += items.Count(id => id == 21);\r
+                q675.Count.NowArray[0] += items.Count(spec => spec.Type == 6);\r
+                q675.Count.NowArray[1] += items.Count(spec => spec.Type == 21);\r
                 NeedSave = true;\r
             }\r
             if (_quests.TryGetValue(676, out var q676))\r
             {\r
-                q676.Count.NowArray[0] += items.Count(id => id == 2);\r
-                q676.Count.NowArray[1] += items.Count(id => id == 4);\r
-                q676.Count.NowArray[2] += items.Count(id => id == 30);\r
+                q676.Count.NowArray[0] += items.Count(spec => spec.Type == 2);\r
+                q676.Count.NowArray[1] += items.Count(spec => spec.Type == 4);\r
+                q676.Count.NowArray[2] += items.Count(spec => spec.Type == 30);\r
                 NeedSave = true;\r
             }\r
             if (_quests.TryGetValue(677, out var q677))\r
             {\r
-                q677.Count.NowArray[0] += items.Count(id => id == 3);\r
-                q677.Count.NowArray[1] += items.Count(id => id == 10);\r
-                q677.Count.NowArray[2] += items.Count(id => id == 5);\r
+                q677.Count.NowArray[0] += items.Count(spec => spec.Type == 3);\r
+                q677.Count.NowArray[1] += items.Count(spec => spec.Type == 10);\r
+                q677.Count.NowArray[2] += items.Count(spec => spec.Type == 5);\r
+                NeedSave = true;\r
+            }\r
+            if (_quests.TryGetValue(678, out var q678))\r
+            {\r
+                q678.Count.NowArray[0] += items.Count(spec => spec.Id == 19);\r
+                q678.Count.NowArray[1] += items.Count(spec => spec.Id == 20);\r
                 NeedSave = true;\r
             }\r
         }\r