}\r
\r
[TestMethod]\r
- public void ResetQuest()\r
+ public void ResetQuestCount()\r
{\r
var queue = new Queue<DateTime>(new[]\r
{\r
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
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