OSDN Git Service

朝5時にデイリー以外の消さなくてもいい任務が消えるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 21 May 2018 12:31:16 +0000 (21:31 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 21 May 2018 12:31:16 +0000 (21:31 +0900)
KancolleSniffer.Test/QuestInfoTest.cs
KancolleSniffer/QuestInfo.cs

index 4989ee2..2504031 100644 (file)
@@ -115,7 +115,7 @@ namespace KancolleSniffer.Test
         }\r
 \r
         [TestMethod]\r
-        public void ResetQuest()\r
+        public void ResetQuestCount()\r
         {\r
             var queue = new Queue<DateTime>(new[]\r
             {\r
@@ -148,6 +148,36 @@ namespace KancolleSniffer.Test
             PAssert.That(() => status.QuestCountList.Length == 0); // クォータリーが消える\r
         }\r
 \r
+        [TestMethod]\r
+        public void ResetQuestList()\r
+        {\r
+            var queue = new Queue<DateTime>(new[]\r
+            {\r
+                new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),\r
+                new DateTime(2017, 12, 1, 5, 0, 0)\r
+            });\r
+            var questInfo = new QuestInfo(null, null, () => queue.Dequeue());\r
+            var status = new Status\r
+            {\r
+                QuestList = new[]\r
+                {\r
+                    new QuestStatus{Id = 201, Category = 2}, new QuestStatus{Id = 213, Category = 2},\r
+                    new QuestStatus{Id = 265, Category = 2}, new QuestStatus{Id = 822, Category = 8}\r
+                },\r
+                QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)\r
+            };\r
+            questInfo.LoadState(status);\r
+            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
+            questInfo.SaveState(status);\r
+            PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new []{213, 822}));  // デイリーとマンスリーが消える\r
+            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
+            questInfo.SaveState(status);\r
+            PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new []{822}));  // ウィークリーが消える\r
+            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
+            questInfo.SaveState(status);\r
+            PAssert.That(() => status.QuestList.Length == 0); // クォータリーが消える\r
+        }\r
+\r
         private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
 \r
         private object CreateQuestList(int[] ids) => Js(new\r
index fe9f7bf..9808a6f 100644 (file)
@@ -487,22 +487,36 @@ namespace KancolleSniffer
             var daily = now.Date.AddHours(5);\r
             if (!(_lastReset < daily && daily <= now))\r
                 return;\r
-            _quests.Clear(); // 前日に未消化のデイリーを消す。\r
+            RemoveQuest(QuestInterval.Daily);\r
             _countList.Remove(QuestInterval.Daily);\r
             var weekly = now.Date.AddDays(-((6 + (int)now.DayOfWeek) % 7)).AddHours(5);\r
             if (_lastReset < weekly && weekly <= now)\r
+            {\r
+                RemoveQuest(QuestInterval.Weekly);\r
                 _countList.Remove(QuestInterval.Weekly);\r
+            }\r
             var monthly = new DateTime(now.Year, now.Month, 1, 5, 0, 0);\r
             if (_lastReset < monthly && monthly <= now)\r
+            {\r
+                RemoveQuest(QuestInterval.Monthly);\r
                 _countList.Remove(QuestInterval.Monthly);\r
+            }\r
             var season = now.Month / 3;\r
             var quarterly = new DateTime(now.Year - (season == 0 ? 1 : 0), (season == 0 ? 12 : season * 3), 1, 5, 0, 0);\r
             if (_lastReset < quarterly && quarterly <= now)\r
+            {\r
+                RemoveQuest(QuestInterval.Quarterly);\r
                 _countList.Remove(QuestInterval.Quarterly);\r
+            }\r
             _lastReset = now;\r
             NeedSave = true;\r
         }\r
 \r
+        private void RemoveQuest(QuestInterval interval)\r
+        {\r
+            foreach (var id in (from kv in _quests where kv.Value.Count.Spec.Interval == interval select kv.Key).ToArray())\r
+                _quests.Remove(id);\r
+        }\r
 \r
         private int _map;\r
         private bool _boss;\r