new ItemSpec {Id = 28, Name = "22号水上電探", Type = 12},\r
new ItemSpec {Id = 31, Name = "32号水上電探", Type = 13}\r
});\r
- itemInfo.InjectItems(new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31});\r
- questInfo.InspectQuestList(CreateQuestList(new[] {613, 638, 663, 673, 674, 675, 676, 677, 678, 680}));\r
+ var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31};\r
+ itemInfo.InjectItems(items);\r
+ questInfo.InspectQuestList(CreateQuestList(new[]\r
+ {613, 638, 663, 673, 674, 675, 676, 677, 678, 680}));\r
questInfo.InspectDestroyItem(\r
- "api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12&api%5Fverno=1", null);\r
- PAssert.That(() =>\r
- questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(5).SequenceEqual(new[]\r
- {\r
- new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 663, Now = 1},\r
- new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
- }));\r
- var q675 = questInfo.Quests[5];\r
- PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {2, 1}));\r
- var q676 = questInfo.Quests[6];\r
- PAssert.That(() => q676.Id == 676 && q676.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
- var q677 = questInfo.Quests[7];\r
- PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
- var q678 = questInfo.Quests[8];\r
- PAssert.That(() => q678.Id == 678 && q678.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
- var q680 = questInfo.Quests[9];\r
- PAssert.That(() => q680.Id == 680 && q680.Count.NowArray.SequenceEqual(new[] {1, 2}));\r
+ $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1", null);\r
+ var scalar = new[]\r
+ {\r
+ new {Id = 613, Now = 1}, new {Id = 638, Now = 1},\r
+ new {Id = 663, Now = 1}, new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
+ };\r
+ foreach (var e in scalar)\r
+ {\r
+ var c = Array.Find(questInfo.Quests, q => q.Id == e.Id).Count;\r
+ PAssert.That(() => c.Id == e.Id && c.Now == e.Now, $"{c.Id}");\r
+ }\r
+ var array = new[]\r
+ {\r
+ new {Id = 675, NowArray = new[] {2, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
+ new {Id = 677, NowArray = new[] {1, 1, 1}}, new {Id = 678, NowArray = new[] {1, 1}},\r
+ new {Id = 680, NowArray = new[] {1, 2}}\r
+ };\r
+ foreach (var e in array)\r
+ {\r
+ var c = Array.Find(questInfo.Quests, q => q.Id == e.Id).Count;\r
+ PAssert.That(() => c.Id == e.Id && c.NowArray.SequenceEqual(e.NowArray), $"{c.Id}");\r
+ }\r
}\r
\r
/// <summary>\r
\r
public class QuestDestroyItem : QuestSpec\r
{\r
- public int[] Items { get; set; }\r
- public bool Check(int id) => Items == null || Items.Contains(id);\r
+ public int[] Types { get; set; }\r
+ public int[] Ids { get; set; }\r
+\r
+ public bool Count(QuestCount count, ItemSpec[] specs)\r
+ {\r
+ if (count.NowArray == null)\r
+ {\r
+ var num = specs.Count(spec => Types?.Contains(spec.Type) ?? (Ids?.Contains(spec.Id) ?? true));\r
+ count.Now += num;\r
+ return num > 0;\r
+ }\r
+ if (Types == null && Ids == null)\r
+ return false;\r
+ var result = false;\r
+ for (var i = 0; i < count.NowArray.Length; i++)\r
+ {\r
+ var num = specs.Count(spec => Types != null ? Types[i] == spec.Type : Ids[i] == spec.Id);\r
+ count.NowArray[i] += num;\r
+ if (num > 0)\r
+ result = true;\r
+ }\r
+ return result;\r
+ }\r
}\r
\r
public class QuestPowerup : QuestSpec\r
{619, new QuestSpec {Interval = Daily, Max = 1, Material = new[] {0, 0, 0, 1}}}, // 619: 装備の改修強化\r
\r
{613, new QuestSpec {Interval = Weekly, Max = 24, Material = new[] {0, 0, 0, 0}}}, // 613: 資源の再利用\r
- {638, new QuestDestroyItem {Interval = Weekly, Max = 6, Items = new[] {21}, Material = new[] {0, 0, 2, 1}}}, // 638: 対空機銃量産\r
- {663, new QuestDestroyItem {Interval = Quarterly, Max = 10, Items = new[] {3}, Material = new[] {0, 0, 3, 0}}}, // 663: 新型艤装の継続研究\r
- {673, new QuestDestroyItem {Interval = Daily, Max = 4, Items = new[] {1}, Shift = 1, Material = new[] {0, 0, 1, 0}}}, // 673: 装備開発力の整備\r
- {674, new QuestDestroyItem {Interval = Daily, Max = 3, Items = new[] {21}, Shift = 2, Material = new[] {0, 1, 1, 0}}}, // 674: 工廠環境の整備\r
- {675, new QuestSpec {Interval = Quarterly, MaxArray = new[] {6, 4}, Material = new[] {0, 0, 0, 0}}}, // 675: 運用装備の統合整備\r
- {676, new QuestSpec {Interval = Weekly, MaxArray = new[] {3, 3, 1}, Material = new[] {0, 1, 7, 0}}}, // 676: 装備開発力の集中整備\r
- {677, new QuestSpec {Interval = Weekly, MaxArray = new[] {4, 2, 3}, Material = new[] {0, 5, 0, 0}}}, // 677: 継戦支援能力の整備\r
- {678, new QuestSpec {Interval = Quarterly, MaxArray = new[] {3, 5}, Material = new[] {0, 0, 8, 0}}}, // 678: 主力艦上戦闘機の更新\r
+ {638, new QuestDestroyItem {Interval = Weekly, Max = 6, Types = new[] {21}, Material = new[] {0, 0, 2, 1}}}, // 638: 対空機銃量産\r
+ {663, new QuestDestroyItem {Interval = Quarterly, Max = 10, Types = new[] {3}, Material = new[] {0, 0, 3, 0}}}, // 663: 新型艤装の継続研究\r
+ {673, new QuestDestroyItem {Interval = Daily, Max = 4, Types = new[] {1}, Shift = 1, Material = new[] {0, 0, 1, 0}}}, // 673: 装備開発力の整備\r
+ {674, new QuestDestroyItem {Interval = Daily, Max = 3, Types = new[] {21}, Shift = 2, Material = new[] {0, 1, 1, 0}}}, // 674: 工廠環境の整備\r
+ {675, new QuestDestroyItem {Interval = Quarterly, MaxArray = new[] {6, 4}, Types = new[] {6, 21}, Material = new[] {0, 0, 0, 0}}}, // 675: 運用装備の統合整備\r
+ {676, new QuestDestroyItem {Interval = Weekly, MaxArray = new[] {3, 3, 1}, Types = new[] {2, 4, 30}, Material = new[] {0, 1, 7, 0}}}, // 676: 装備開発力の集中整備\r
+ {677, new QuestDestroyItem {Interval = Weekly, MaxArray = new[] {4, 2, 3}, Types = new[] {3, 10, 5}, Material = new[] {0, 5, 0, 0}}}, // 677: 継戦支援能力の整備\r
+ {678, new QuestDestroyItem {Interval = Quarterly, MaxArray = new[] {3, 5}, Ids = new[] {19, 20}, Material = new[] {0, 0, 8, 0}}}, // 678: 主力艦上戦闘機の更新\r
{680, new QuestSpec {Interval = Quarterly, MaxArray = new[] {4, 4}, Material = new[] {0, 0, 6, 0}}}, // 680: 対空兵装の整備拡充\r
\r
{702, new QuestPowerup {Interval = Daily, Max = 2, Material = new[] {0, 1, 0, 0}}}, // 702: 艦の「近代化改修」を実施せよ!\r
var count = quest.Count;\r
if (!(count.Spec is QuestDestroyItem destroy))\r
continue;\r
- AddCount(count, items.Count(spec => destroy.Check(spec.Type)));\r
- }\r
- if (_quests.TryGetValue(675, out var q675))\r
- {\r
- q675.Count.NowArray[0] += items.Count(spec => spec.Type == 6);\r
- q675.Count.NowArray[1] += items.Count(spec => spec.Type == 21);\r
- NeedSave = true;\r
- }\r
- if (_quests.TryGetValue(676, out var q676))\r
- {\r
- q676.Count.NowArray[0] += items.Count(spec => spec.Type == 2);\r
- q676.Count.NowArray[1] += items.Count(spec => spec.Type == 4);\r
- q676.Count.NowArray[2] += items.Count(spec => spec.Type == 30);\r
- NeedSave = true;\r
- }\r
- if (_quests.TryGetValue(677, out var q677))\r
- {\r
- q677.Count.NowArray[0] += items.Count(spec => spec.Type == 3);\r
- q677.Count.NowArray[1] += items.Count(spec => spec.Type == 10);\r
- q677.Count.NowArray[2] += items.Count(spec => spec.Type == 5);\r
- NeedSave = true;\r
- }\r
- if (_quests.TryGetValue(678, out var q678))\r
- {\r
- q678.Count.NowArray[0] += items.Count(spec => spec.Id == 19);\r
- q678.Count.NowArray[1] += items.Count(spec => spec.Id == 20);\r
- NeedSave = true;\r
+ if (destroy.Count(count, items))\r
+ NeedSave = true;\r
}\r
if (_quests.TryGetValue(680, out var q680))\r
{\r