public int Id { get; set; }\r
public int Category { get; set; }\r
public string Name { get; set; }\r
+\r
+ [XmlIgnore]\r
public QuestCount Count { get; set; }\r
+\r
public int Progress { get; set; }\r
+\r
+ [XmlIgnore]\r
public Color Color { get; set; }\r
}\r
\r
public override string ToString()\r
{\r
if (Id == 854)\r
- return $"{NowArray.Count(n => n == 1)}/{Spec.MaxArray.Length}";\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
: $"{Now}/{Spec.Max}";\r
return Id != 854\r
? ""\r
: string.Join(" ",\r
- new[] {"2-4", "6-1", "6-3", "6-4"}.Zip(NowArray, (map, flag) => flag == 1 ? map : "")\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
\r
switch (state)\r
{\r
case 1:\r
- _quests.Remove(id);\r
+ if (_quests.Remove(id))\r
+ NeedSave = true;\r
break;\r
case 3:\r
progress = 100;\r
goto case 2;\r
case 2:\r
- var count = _countList.GetCount(id);\r
- if (count.AdjustCount(progress))\r
- NeedSave = true;\r
- _quests[id] = new QuestStatus\r
- {\r
- Id = id,\r
- Category = cat,\r
- Name = name,\r
- Count = count,\r
- Progress = progress,\r
- Color = cat <= _color.Length ? _color[cat - 1] : Control.DefaultBackColor\r
- };\r
+ AddQuest(id, cat, name, progress, true);\r
break;\r
}\r
}\r
}\r
}\r
\r
+ private void AddQuest(int id, int category, string name, int progress, bool adjustCount)\r
+ {\r
+ var count = _countList.GetCount(id);\r
+ if (adjustCount)\r
+ count.AdjustCount(progress);\r
+ _quests[id] = new QuestStatus\r
+ {\r
+ Id = id,\r
+ Category = category,\r
+ Name = name,\r
+ Count = count,\r
+ Progress = progress,\r
+ Color = category <= _color.Length ? _color[category - 1] : Control.DefaultBackColor\r
+ };\r
+ NeedSave = true;\r
+ }\r
+\r
+ public void ClearQuests()\r
+ {\r
+ _quests.Clear();\r
+ }\r
+\r
private void ResetQuests()\r
{\r
var now = _nowFunc();\r
if (_lastReset < quarterly && quarterly <= now)\r
_countList.Remove(QuestInterval.Quarterly);\r
_lastReset = now;\r
+ NeedSave = true;\r
}\r
\r
private bool _boss;\r
{\r
var values = HttpUtility.ParseQueryString(request);\r
_quests.Remove(int.Parse(values["api_quest_id"]));\r
+ NeedSave = true;\r
}\r
\r
public void InspectClearItemGet(string request)\r
public void SaveState(Status status)\r
{\r
status.QuestLastReset = _lastReset;\r
- if (_countList == null)\r
- return;\r
- status.QuestCountList = _countList.CountList.ToArray();\r
+ if (_quests != null)\r
+ status.QuestList = _quests.Values.ToArray();\r
+ if (_countList != null)\r
+ status.QuestCountList = _countList.CountList.ToArray();\r
}\r
\r
public void LoadState(Status status)\r
{\r
- _countList.CountList = status.QuestCountList;\r
_lastReset = status.QuestLastReset;\r
+ if (status.QuestCountList != null)\r
+ _countList.CountList = status.QuestCountList;\r
+ if (status.QuestList != null)\r
+ {\r
+ _quests.Clear();\r
+ foreach (var q in status.QuestList)\r
+ AddQuest(q.Id, q.Category, q.Name, q.Progress, false);\r
+ }\r
}\r
}\r
}
\ No newline at end of file