• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修订版230f955774daf88ce397a9dcb4659ab38e182dec (tree)
时间2020-08-30 14:58:22
作者Kazuhiro Fujieda <fujieda@user...>
CommiterKazuhiro Fujieda

Log Message

questlistがすべての任務を返す仕様変更に対応する

更改概述

差异

--- a/KancolleSniffer.Test/QuestCounterTest.cs
+++ b/KancolleSniffer.Test/QuestCounterTest.cs
@@ -238,10 +238,15 @@ namespace KancolleSniffer.Test
238238
239239 private QuestCount InjectQuest(int id)
240240 {
241- _questInfo.InspectQuestList(CreateQuestList(new[] {id}));
241+ InjectQuestList(new[] {id});
242242 return _questInfo.Quests[0].Count;
243243 }
244244
245+ private void InjectQuestList(int[] ids)
246+ {
247+ _questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));
248+ }
249+
245250 private void InjectMapStart(int map, int eventId)
246251 {
247252 _questCounter.InspectMapStart(CreateMap(map, eventId));
@@ -304,7 +309,7 @@ namespace KancolleSniffer.Test
304309 {
305310 _battleInfo = new BattleInfo(null, null, null);
306311 _itemInfo = new ItemInfo(new ItemMaster(), new ItemInventory());
307- _questInfo = new QuestInfo(() => new DateTime(2015, 1, 1)) {AcceptMax = 10};
312+ _questInfo = new QuestInfo(() => new DateTime(2015, 1, 1));
308313 _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);
309314 }
310315
@@ -317,7 +322,7 @@ namespace KancolleSniffer.Test
317322 [TestMethod]
318323 public void BattleResult_201_216_210_214()
319324 {
320- _questInfo.InspectQuestList(CreateQuestList(new[] {201, 216, 210, 214}));
325+ InjectQuestList(new[] {201, 216, 210, 214});
321326
322327 InjectMapStart(11, 4);
323328 var counts = _questInfo.Quests.Select(q => q.Count).ToArray();
@@ -361,7 +366,7 @@ namespace KancolleSniffer.Test
361366 [TestMethod]
362367 public void BattleResult_211_212_213_218_220_221()
363368 {
364- _questInfo.InspectQuestList(CreateQuestList(new[] {211, 212, 213, 218, 220, 221}));
369+ InjectQuestList(new[] {211, 212, 213, 218, 220, 221});
365370 // 補給艦1隻と空母2隻
366371 _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]
367372 {
@@ -389,7 +394,7 @@ namespace KancolleSniffer.Test
389394 [TestMethod]
390395 public void BattleResult_228_230()
391396 {
392- _questInfo.InspectQuestList(CreateQuestList(new[] {228, 230}));
397+ InjectQuestList(new[] {228, 230});
393398 // 潜水艦3
394399 _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]
395400 {
@@ -721,7 +726,7 @@ namespace KancolleSniffer.Test
721726 [TestMethod]
722727 public void BattleResult_822_854()
723728 {
724- _questInfo.InspectQuestList(CreateQuestList(new[] {822, 854}));
729+ InjectQuestList(new[] {822, 854});
725730 var c822 = _questInfo.Quests[0].Count;
726731 var c854 = _questInfo.Quests[1].Count;
727732
@@ -1320,7 +1325,7 @@ namespace KancolleSniffer.Test
13201325 [TestMethod]
13211326 public void BattleResult_280_854()
13221327 {
1323- _questInfo.InspectQuestList(CreateQuestList(new[] {280, 854}));
1328+ InjectQuestList(new[] {280, 854});
13241329
13251330 _battleInfo.InjectResultStatus(
13261331 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],
@@ -1337,7 +1342,7 @@ namespace KancolleSniffer.Test
13371342 [TestMethod]
13381343 public void BattleResult_888_893()
13391344 {
1340- _questInfo.InspectQuestList(CreateQuestList(new[] {888, 893}));
1345+ InjectQuestList(new[] {888, 893});
13411346
13421347 _battleInfo.InjectResultStatus(
13431348 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],
@@ -1358,7 +1363,7 @@ namespace KancolleSniffer.Test
13581363 [TestMethod]
13591364 public void PracticeResult_303_304_302_311_315()
13601365 {
1361- _questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311, 315}));
1366+ InjectQuestList(new[] {302, 303, 304, 311, 315});
13621367
13631368 _battleInfo.InjectResultStatus(new[]
13641369 {
@@ -1401,7 +1406,7 @@ namespace KancolleSniffer.Test
14011406 Assert.AreEqual(1, count.Now);
14021407
14031408 count.Now = 2;
1404- _questInfo.InspectQuestList(CreateQuestList(new[] {318}));
1409+ InjectQuestList(new[] {318});
14051410 Assert.AreEqual(2, count.Now, "進捗調節しない");
14061411 }
14071412
@@ -1535,7 +1540,7 @@ namespace KancolleSniffer.Test
15351540 [TestMethod]
15361541 public void MissionResult_402_403_404_410_411()
15371542 {
1538- _questInfo.InspectQuestList(CreateQuestList(new[] {402, 403, 404, 410, 411}));
1543+ InjectQuestList(new[] {402, 403, 404, 410, 411});
15391544
15401545 _questCounter.InspectDeck(Js(
15411546 new[]
@@ -1672,7 +1677,7 @@ namespace KancolleSniffer.Test
16721677 [TestMethod]
16731678 public void PowerUp_503_504()
16741679 {
1675- _questInfo.InspectQuestList(CreateQuestList(new[] {503, 504}));
1680+ InjectQuestList(new[] {503, 504});
16761681
16771682 _questCounter.CountNyukyo();
16781683 _questCounter.CountCharge();
@@ -1692,7 +1697,7 @@ namespace KancolleSniffer.Test
16921697 [TestMethod]
16931698 public void Kousyou_605_606_607_608_609_619()
16941699 {
1695- _questInfo.InspectQuestList(CreateQuestList(new[] {605, 606, 607, 608, 609, 619}));
1700+ InjectQuestList(new[] {605, 606, 607, 608, 609, 619});
16961701
16971702 _questCounter.InspectCreateItem(
16981703 "api_verno=1&api_item1=10&api_item2=10&api_item3=30&api_item4=10&api_multiple_flag=0");
@@ -1752,8 +1757,7 @@ namespace KancolleSniffer.Test
17521757 var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31, 35, 23, 16, 3, 121};
17531758 _itemInfo.InjectItems(items);
17541759 var questList = new[] {613, 638, 643, 645, 653, 663, 673, 674, 675, 676, 677, 678, 680, 686, 688};
1755- _questInfo.AcceptMax = questList.Length;
1756- _questInfo.InspectQuestList(CreateQuestList(questList));
1760+ InjectQuestList(questList);
17571761 _questCounter.InspectDestroyItem(
17581762 $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1", null);
17591763 var scalar = new[]
@@ -1789,7 +1793,7 @@ namespace KancolleSniffer.Test
17891793 [TestMethod]
17901794 public void PowerUp_702_703()
17911795 {
1792- _questInfo.InspectQuestList(CreateQuestList(new[] {702, 703}));
1796+ InjectQuestList(new[] {702, 703});
17931797 _questCounter.InspectPowerUp(Js(new {api_powerup_flag = 1}));
17941798 PAssert.That(() =>
17951799 _questInfo.Quests.Select(q => new {q.Id, q.Count.Now})
--- a/KancolleSniffer.Test/QuestInfoTest.cs
+++ b/KancolleSniffer.Test/QuestInfoTest.cs
@@ -59,42 +59,12 @@ namespace KancolleSniffer.Test
5959
6060 private void CheckQuestCountList(QuestInfo questInfo, Status status, int[] quests)
6161 {
62- questInfo.InspectQuestList(CreateQuestList(new[] {201}));
62+ InspectQuestList(questInfo, new[] {201});
6363 questInfo.SaveState(status);
6464 PAssert.That(() => status.QuestCountList.Select(qc => qc.Id).SequenceEqual(quests));
6565 }
6666
6767 [TestMethod]
68- public void ResetQuestList()
69- {
70- var queue = new Queue<DateTime>(new[]
71- {
72- new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),
73- new DateTime(2017, 12, 1, 5, 0, 0)
74- });
75- var questInfo = new QuestInfo(() => queue.Dequeue());
76- var status = new Status
77- {
78- QuestList = new[]
79- {
80- new QuestStatus {Id = 201, Category = 2}, new QuestStatus {Id = 213, Category = 2},
81- new QuestStatus {Id = 265, Category = 2}, new QuestStatus {Id = 822, Category = 8}
82- },
83- QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)
84- };
85- questInfo.LoadState(status);
86- questInfo.InspectQuestList(CreateQuestList(new int[0]));
87- questInfo.SaveState(status);
88- PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new[] {213, 822})); // デイリーとマンスリーが消える
89- questInfo.InspectQuestList(CreateQuestList(new int[0]));
90- questInfo.SaveState(status);
91- PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new[] {822})); // ウィークリーが消える
92- questInfo.InspectQuestList(CreateQuestList(new int[0]));
93- questInfo.SaveState(status);
94- PAssert.That(() => status.QuestList.Length == 0); // クォータリーが消える
95- }
96-
97- [TestMethod]
9868 public void ResetFrom0To5OClock()
9969 {
10070 var queue = new Queue<DateTime>(new[]
@@ -108,7 +78,7 @@ namespace KancolleSniffer.Test
10878 QuestLastReset = new DateTime(2019, 1, 20, 5, 16, 22)
10979 };
11080 questInfo.LoadState(status);
111- questInfo.InspectQuestList(CreateQuestList(new[] {201}));
81+ InspectQuestList(questInfo, new[] {201});
11282 questInfo.SaveState(status);
11383 PAssert.That(() => status.QuestCountList.Length == 0);
11484 }
@@ -127,13 +97,21 @@ namespace KancolleSniffer.Test
12797 QuestLastReset = new DateTime(2019, 1, 27, 5, 0, 0)
12898 };
12999 questInfo.LoadState(status);
130- questInfo.InspectQuestList( // 2019-1-27 10:00
131- CreateQuestList(new[] {237})); // 【節分拡張任務】南方海域 艦隊決戦
100+ InspectQuestList(questInfo, // 2019-1-27 10:00
101+ new[] {237}); // 【節分拡張任務】南方海域 艦隊決戦
132102 PAssert.That(() => questInfo.Quests[0].Id == 237);
133- questInfo.InspectQuestList(CreateQuestList(new[] {201})); // 2019-1-28 05:00
103+ InspectQuestList(questInfo, new[] {201}); // 2019-1-28 05:00
134104 PAssert.That(() => questInfo.Quests[0].Id == 201);
135105 }
136106
107+ [TestMethod]
108+ public void NotImplemented()
109+ {
110+ var questInfo = new QuestInfo(() => new DateTime(2015, 1, 1));
111+ InspectQuestList(questInfo, new[] {679});
112+ PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);
113+ }
114+
137115 private JsonObject Js(object obj) => new JsonObject(obj);
138116
139117 private object CreateQuestList(int[] ids) => Js(new
@@ -156,14 +134,12 @@ namespace KancolleSniffer.Test
156134 };
157135 }
158136
159- [TestMethod]
160- public void NotImplemented()
137+ private void InspectQuestList(QuestInfo questInfo, int[] ids)
161138 {
162- var questInfo = new QuestInfo(() => new DateTime(2015, 1, 1));
163- questInfo.InspectQuestList(CreateQuestList(new[] {679}));
164- PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);
139+ questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));
165140 }
166141
142+
167143 /// <summary>
168144 /// 状態をロードするときに獲得資材に特殊資材のリストを追加しない
169145 /// </summary>
@@ -192,35 +168,5 @@ namespace KancolleSniffer.Test
192168 questInfo.LoadState(status);
193169 PAssert.That(() => questInfo.Quests[0].Material.Length == 8);
194170 }
195-
196- /// <summary>
197- /// 任務を受領したときにNeedSaveを設定する
198- /// </summary>
199- [TestMethod]
200- public void SetNeedSaveOnStartQuest()
201- {
202- var questInfo = new QuestInfo(() => new DateTime(2019, 1, 1));
203- // _lastResetが未設定だと必ずResetQuestsが動いてNeedSaveがtrueになる
204- questInfo.LoadState(new Status {QuestLastReset = new DateTime(2019, 1, 1)});
205- questInfo.InspectQuestList(Js(
206- new
207- {
208- api_list = new[]
209- {
210- CreateQuest(213, 1),
211- CreateQuest(214, 1)
212- }
213- }));
214- Assert.IsFalse(questInfo.NeedSave);
215- questInfo.InspectQuestList(Js(new
216- {
217- api_list = new[]
218- {
219- CreateQuest(213, 1),
220- CreateQuest(214, 2)
221- }
222- }));
223- Assert.IsTrue(questInfo.NeedSave);
224- }
225171 }
226172 }
\ No newline at end of file
--- a/KancolleSniffer/MainForm.Designer.cs
+++ b/KancolleSniffer/MainForm.Designer.cs
@@ -55,7 +55,6 @@ namespace KancolleSniffer
5555 this.labelMaterialCaption = new System.Windows.Forms.Label();
5656 this.label31 = new System.Windows.Forms.Label();
5757 this.labelAkashiRepair = new System.Windows.Forms.Label();
58- this.labelClearQuest = new System.Windows.Forms.Label();
5958 this.dropDownButtonRepairList = new KancolleSniffer.View.DropDownButton();
6059 this.labelQuestCount = new System.Windows.Forms.Label();
6160 this.kdockPanel = new KancolleSniffer.View.KDockPanel();
@@ -149,19 +148,6 @@ namespace KancolleSniffer
149148 this.labelAkashiRepair.TabIndex = 54;
150149 this.labelAkashiRepair.Text = "修理";
151150 //
152- // labelClearQuest
153- //
154- this.labelClearQuest.AutoSize = true;
155- this.labelClearQuest.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
156- this.labelClearQuest.Location = new System.Drawing.Point(49, 340);
157- this.labelClearQuest.Name = "labelClearQuest";
158- this.labelClearQuest.Size = new System.Drawing.Size(15, 14);
159- this.labelClearQuest.TabIndex = 55;
160- this.labelClearQuest.Text = "↺";
161- this.labelClearQuest.Click += new System.EventHandler(this.labelClearQuest_Click);
162- this.labelClearQuest.MouseDown += new System.Windows.Forms.MouseEventHandler(this.labelClearQuest_MouseDown);
163- this.labelClearQuest.MouseUp += new System.Windows.Forms.MouseEventHandler(this.labelClearQuest_MouseUp);
164- //
165151 // dropDownButtonRepairList
166152 //
167153 this.dropDownButtonRepairList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -273,7 +259,6 @@ namespace KancolleSniffer
273259 this.Controls.Add(this.missionPanel);
274260 this.Controls.Add(this.labelQuestCount);
275261 this.Controls.Add(this.questPanel);
276- this.Controls.Add(this.labelClearQuest);
277262 this.Controls.Add(this.labelAkashiRepair);
278263 this.Controls.Add(this.labelAkashiRepairTimer);
279264 this.Controls.Add(this.dropDownButtonRepairList);
@@ -305,7 +290,6 @@ namespace KancolleSniffer
305290 private System.Windows.Forms.Label labelAkashiRepairTimer;
306291 private System.Windows.Forms.Label labelAkashiRepair;
307292 private RepairListForMain panelRepairList;
308- private System.Windows.Forms.Label labelClearQuest;
309293 private QuestPanel questPanel;
310294 private System.Windows.Forms.Label labelQuestCount;
311295 private MissionPanel missionPanel;
--- a/KancolleSniffer/MainForm.cs
+++ b/KancolleSniffer/MainForm.cs
@@ -428,21 +428,5 @@ namespace KancolleSniffer
428428 panelRepairList.Visible = false;
429429 dropDownButtonRepairList.BackColor = DefaultBackColor;
430430 }
431-
432- private void labelClearQuest_Click(object sender, EventArgs e)
433- {
434- Sniffer.ClearQuests();
435- UpdateQuestList();
436- }
437-
438- private void labelClearQuest_MouseDown(object sender, MouseEventArgs e)
439- {
440- labelClearQuest.BackColor = CustomColors.ActiveButtonColor;
441- }
442-
443- private void labelClearQuest_MouseUp(object sender, MouseEventArgs e)
444- {
445- labelClearQuest.BackColor = DefaultBackColor;
446- }
447431 }
448432 }
\ No newline at end of file
--- a/KancolleSniffer/Model/QuestInfo.cs
+++ b/KancolleSniffer/Model/QuestInfo.cs
@@ -26,7 +26,6 @@ namespace KancolleSniffer.Model
2626 {
2727 public int Id { get; set; }
2828 public int Category { get; set; }
29- public QuestInterval Interval { get; set; }
3029 public string Name { get; set; }
3130 public string Detail { get; set; }
3231 public int[] Material { get; set; }
@@ -70,7 +69,6 @@ namespace KancolleSniffer.Model
7069
7170 public class QuestInfo : IHaveState
7271 {
73- private readonly SortedDictionary<int, QuestStatus> _quests = new SortedDictionary<int, QuestStatus>();
7472 private readonly QuestCountList _countList = new QuestCountList();
7573 private readonly Func<DateTime> _nowFunc = () => DateTime.Now;
7674 private DateTime _now;
@@ -84,11 +82,9 @@ namespace KancolleSniffer.Model
8482 Color.FromArgb(200, 148, 231), Color.FromArgb(232, 57, 41), Color.FromArgb(232, 57, 41)
8583 };
8684
87- public int AcceptMax { get; set; } = 5;
85+ public SortedDictionary<int, QuestStatus> QuestDictionary { get; } = new SortedDictionary<int, QuestStatus>();
8886
89- public SortedDictionary<int, QuestStatus> QuestDictionary => _quests;
90-
91- public QuestStatus[] Quests => _quests.Values.ToArray();
87+ public QuestStatus[] Quests => QuestDictionary.Values.ToArray();
9288
9389 public QuestInfo(Func<DateTime> nowFunc = null)
9490 {
@@ -98,7 +94,7 @@ namespace KancolleSniffer.Model
9894
9995 public void GetNotifications(out string[] notify, out string[] stop)
10096 {
101- var cleared = _quests.Values.Where(q => q.Count.Cleared).ToArray();
97+ var cleared = QuestDictionary.Values.Where(q => q.Count.Cleared).ToArray();
10298 notify = cleared.Except(_clearedQuest, new QuestComparer()).Select(q => q.Name).ToArray();
10399 stop = _clearedQuest.Except(cleared, new QuestComparer()).Select(q => q.Name).ToArray();
104100 _clearedQuest = cleared;
@@ -117,84 +113,61 @@ namespace KancolleSniffer.Model
117113 }
118114 }
119115
120- private readonly QuestInterval[] _intervals =
121- {
122- QuestInterval.Daily, QuestInterval.Weekly, QuestInterval.Monthly,
123- QuestInterval.Other, QuestInterval.Quarterly, QuestInterval.Yearly2
124- };
125-
126116 private readonly int[] _progress = {0, 50, 80};
127117
128- public void InspectQuestList(dynamic json)
118+ public void InspectQuestList(string request, dynamic json)
129119 {
130- ResetQuests();
120+ ResetCounts();
121+ var values = HttpUtility.ParseQueryString(request);
122+ if (values["api_tab_id"] == "0")
123+ QuestDictionary.Clear();
131124 if (json.api_list == null)
132125 return;
133- for (var i = 0; i < 2; i++)
126+ foreach (var entry in json.api_list)
134127 {
135- foreach (var entry in json.api_list)
128+ if (entry is double) // -1の場合がある。
129+ continue;
130+ var quest = new QuestStatus
131+ {
132+ Id = (int)entry.api_no,
133+ Category = (int)entry.api_category,
134+ Progress = _progress[(int)entry.api_progress_flag],
135+ Name = (string)entry.api_title,
136+ Detail = ((string)entry.api_detail).Replace("<br>", "\r\n"),
137+ Material = (int[])entry.api_get_material
138+ };
139+ var state = (int)entry.api_state;
140+ switch (state)
136141 {
137- if (entry is double) // -1の場合がある。
138- continue;
139- var quest = new QuestStatus
140- {
141- Id = (int)entry.api_no,
142- Category = (int)entry.api_category,
143- Progress = _progress[(int)entry.api_progress_flag],
144- Interval = _intervals[(int)entry.api_type - 1],
145- Name = (string)entry.api_title,
146- Detail = ((string)entry.api_detail).Replace("<br>", "\r\n"),
147- Material = (int[])entry.api_get_material
148- };
149- var state = (int)entry.api_state;
150- switch (state)
151- {
152- case 1:
153- if (_quests.Remove(quest.Id))
154- NeedSave = true;
155- break;
156- case 3:
157- quest.Progress = 100;
158- goto case 2;
159- case 2:
160- SetProcessedQuest(quest);
161- break;
162- }
142+ case 3:
143+ quest.Progress = 100;
144+ goto case 2;
145+ case 2:
146+ AdjustQuest(quest);
147+ SetQuest(quest);
148+ break;
163149 }
164- if (_quests.Count <= AcceptMax)
165- break;
166- /*
167- * ほかのPCで任務を達成した場合、任務が消えずに受領した任務の数がAcceptMaxを超えることがある。
168- * その場合はいったん任務をクリアして、現在のページの任務だけを登録し直す。
169- */
170- _quests.Clear();
171150 }
172151 }
173152
174- private void SetProcessedQuest(QuestStatus quest)
153+ private void AdjustQuest(QuestStatus quest)
175154 {
176- var count = _countList.GetCount(quest.Id);
177- if (count.AdjustCount(quest.Progress))
155+ quest.Count = _countList.GetCount(quest.Id);
156+ if (quest.Count.AdjustCount(quest.Progress))
178157 NeedSave = true;
179- quest.Material = quest.Material.Concat(count.Spec.Material).ToArray();
180- if (!_quests.ContainsKey(quest.Id))
158+ quest.Material = quest.Material.Concat(quest.Count.Spec.Material).ToArray();
159+ if (!QuestDictionary.ContainsKey(quest.Id))
181160 NeedSave = true;
182- SetQuest(quest);
183161 }
184162
185163 private void SetQuest(QuestStatus quest)
186164 {
187165 quest.Count = _countList.GetCount(quest.Id);
188166 quest.Color = quest.Category <= _color.Length ? _color[quest.Category - 1] : Control.DefaultBackColor;
189- _quests[quest.Id] = quest;
167+ QuestDictionary[quest.Id] = quest;
190168 }
191169
192- public void ClearQuests()
193- {
194- _quests.Clear();
195- }
196-
197- private void ResetQuests()
170+ private void ResetCounts()
198171 {
199172 _now = _nowFunc();
200173 if (!CrossBoundary(QuestInterval.Daily))
@@ -203,7 +176,6 @@ namespace KancolleSniffer.Model
203176 {
204177 if (!CrossBoundary(interval))
205178 continue;
206- RemoveQuest(interval);
207179 _countList.Remove(interval);
208180 }
209181 _lastReset = _now;
@@ -240,27 +212,10 @@ namespace KancolleSniffer.Model
240212 return _lastReset < boundary && boundary <= _now;
241213 }
242214
243- private void RemoveQuest(QuestInterval interval)
244- {
245- foreach (var id in
246- (from kv in _quests
247- where MatchInterval(kv.Value, interval)
248- select kv.Key).ToArray())
249- _quests.Remove(id);
250- }
251-
252- private bool MatchInterval(QuestStatus quest, QuestInterval interval)
253- {
254- var i = quest.Count.Spec.Interval;
255- return i == QuestInterval.Other // 定期任務の定義がない
256- ? quest.Interval == interval
257- : i == interval;
258- }
259-
260215 public void InspectStop(string request)
261216 {
262217 var values = HttpUtility.ParseQueryString(request);
263- _quests.Remove(int.Parse(values["api_quest_id"]));
218+ QuestDictionary.Remove(int.Parse(values["api_quest_id"]));
264219 NeedSave = true;
265220 }
266221
@@ -269,7 +224,7 @@ namespace KancolleSniffer.Model
269224 var values = HttpUtility.ParseQueryString(request);
270225 var id = int.Parse(values["api_quest_id"]);
271226 _countList.Remove(id);
272- _quests.Remove(id);
227+ QuestDictionary.Remove(id);
273228 NeedSave = true;
274229 }
275230
@@ -279,8 +234,8 @@ namespace KancolleSniffer.Model
279234 {
280235 NeedSave = false;
281236 status.QuestLastReset = _lastReset;
282- if (_quests != null)
283- status.QuestList = _quests.Values.ToArray();
237+ if (QuestDictionary != null)
238+ status.QuestList = QuestDictionary.Values.ToArray();
284239 if (_countList != null)
285240 status.QuestCountList = _countList.NonZeroCountList.ToArray();
286241 }
@@ -292,7 +247,7 @@ namespace KancolleSniffer.Model
292247 _countList.SetCountList(status.QuestCountList);
293248 if (status.QuestList != null)
294249 {
295- _quests.Clear();
250+ QuestDictionary.Clear();
296251 foreach (var quest in status.QuestList)
297252 SetQuest(quest);
298253 }
--- a/KancolleSniffer/Sniffer.cs
+++ b/KancolleSniffer/Sniffer.cs
@@ -152,7 +152,7 @@ namespace KancolleSniffer
152152 if (url.EndsWith("api_port/port"))
153153 return ApiPort(data);
154154 if (url.Contains("member"))
155- return ApiMember(url, json);
155+ return ApiMember(url, request,json);
156156 if (url.Contains("kousyou"))
157157 return ApiKousyou(url, request, data);
158158 if (url.Contains("practice"))
@@ -213,8 +213,6 @@ namespace KancolleSniffer
213213 _questCounter.InspectDeck(data.api_deck_port);
214214 _dockInfo.InspectNDock(data.api_ndock);
215215 _achievement.InspectBasic(data.api_basic);
216- if (data.api_parallel_quest_count()) // 昔のログにはないので
217- _questInfo.AcceptMax = (int)data.api_parallel_quest_count;
218216 if (data.api_event_object())
219217 _airBase.InspectEventObject(data.api_event_object);
220218 if (data.api_plane_info())
@@ -228,7 +226,7 @@ namespace KancolleSniffer
228226 return Update.All;
229227 }
230228
231- private Update ApiMember(string url, dynamic json)
229+ private Update ApiMember(string url, string request, dynamic json)
232230 {
233231 var data = json.api_data() ? json.api_data : new object();
234232
@@ -274,7 +272,7 @@ namespace KancolleSniffer
274272 }
275273 if (url.EndsWith("api_get_member/questlist"))
276274 {
277- _questInfo.InspectQuestList(data);
275+ _questInfo.InspectQuestList(request, data);
278276 return Update.QuestList;
279277 }
280278 if (url.EndsWith("api_get_member/deck"))
@@ -632,8 +630,6 @@ namespace KancolleSniffer
632630 public void GetQuestNotifications(out string[] notify, out string[] stop) =>
633631 _questInfo.GetNotifications(out notify, out stop);
634632
635- public void ClearQuests() => _questInfo.ClearQuests();
636-
637633 public NameAndTimer[] Missions => _missionInfo.Missions;
638634
639635 public DateTime GetConditionTimer(int fleet) => _conditionTimer.GetTimer(fleet);