OSDN Git Service

受領中の任務の合計が矛盾したときに任務の一覧をリセットする
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 11 Apr 2015 05:05:07 +0000 (14:05 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 11 Apr 2015 05:25:03 +0000 (14:25 +0900)
KancolleSniffer/QuestInfo.cs

index 5aaa2f9..c5a9ea5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
+// Copyright (C) 2013, 2015 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
 // \r
 // This program is part of KancolleSniffer.\r
 //\r
@@ -25,6 +25,7 @@ namespace KancolleSniffer
     {\r
         private DateTime _lastCreared;\r
         private readonly SortedDictionary<int, NameAndProgress> _quests = new SortedDictionary<int, NameAndProgress>();\r
+        private const int QuestCount = 5;\r
 \r
         public void Inspect(dynamic json)\r
         {\r
@@ -36,37 +37,47 @@ namespace KancolleSniffer
             }\r
             if (json.api_list == null)\r
                 return;\r
-            foreach (var entry in json.api_list)\r
+            for (var i = 0; i < 2; i++)\r
             {\r
-                if (entry is double) // -1の場合がある。\r
-                    continue;\r
-\r
-                var id = (int)entry.api_no;\r
-                var state = (int)entry.api_state;\r
-                var progress = (int)entry.api_progress_flag;\r
-                var name = (string)entry.api_title;\r
-\r
-                switch (progress)\r
-                {\r
-                    case 0:\r
-                        break;\r
-                    case 1:\r
-                        progress = 50;\r
-                        break;\r
-                    case 2:\r
-                        progress = 80;\r
-                        break;\r
-                }\r
-                switch (state)\r
+                foreach (var entry in json.api_list)\r
                 {\r
-                    case 2:\r
-                        _quests[id] = new NameAndProgress {Name = name, Progress = progress};\r
-                        break;\r
-                    case 1:\r
-                    case 3:\r
-                        _quests.Remove(id);\r
+                    if (entry is double) // -1の場合がある。\r
                         continue;\r
+\r
+                    var id = (int)entry.api_no;\r
+                    var state = (int)entry.api_state;\r
+                    var progress = (int)entry.api_progress_flag;\r
+                    var name = (string)entry.api_title;\r
+\r
+                    switch (progress)\r
+                    {\r
+                        case 0:\r
+                            break;\r
+                        case 1:\r
+                            progress = 50;\r
+                            break;\r
+                        case 2:\r
+                            progress = 80;\r
+                            break;\r
+                    }\r
+                    switch (state)\r
+                    {\r
+                        case 2:\r
+                            _quests[id] = new NameAndProgress {Name = name, Progress = progress};\r
+                            break;\r
+                        case 1:\r
+                        case 3:\r
+                            _quests.Remove(id);\r
+                            continue;\r
+                    }\r
                 }\r
+                if (_quests.Count <= QuestCount)\r
+                    break;\r
+                /*\r
+                 * ほかのPCで任務を達成した場合、任務が消えずに受領した任務の数が_questCountを超えることがある。\r
+                 * その場合はいったん任務をクリアして、現在のページの任務だけを登録し直す。\r
+                 */\r
+                _quests.Clear();\r
             }\r
         }\r
 \r