OSDN Git Service

対象マップを複数回攻略するとZ作戦のカウンタがくるうのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / QuestInfo.cs
index 18a959b..4515ced 100644 (file)
@@ -27,8 +27,13 @@ namespace KancolleSniffer
         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
@@ -156,7 +161,7 @@ namespace KancolleSniffer
         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
@@ -167,7 +172,7 @@ namespace KancolleSniffer
             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
@@ -358,24 +363,14 @@ namespace KancolleSniffer
                     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
@@ -389,6 +384,28 @@ namespace KancolleSniffer
             }\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
@@ -408,6 +425,7 @@ namespace KancolleSniffer
             if (_lastReset < quarterly && quarterly <= now)\r
                 _countList.Remove(QuestInterval.Quarterly);\r
             _lastReset = now;\r
+            NeedSave = true;\r
         }\r
 \r
         private bool _boss;\r
@@ -624,6 +642,7 @@ namespace KancolleSniffer
         {\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
@@ -640,15 +659,23 @@ namespace KancolleSniffer
         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