{\r
if (NowArray == null)\r
return "";\r
- if (Spec is QuestSortie spec && spec.Maps != null && spec.MaxArray != null)\r
+ switch (Spec)\r
{\r
- return string.Join(" ", spec.Maps.Zip(NowArray, (map, n) => $"{MapString(map)}:{n}"));\r
+ case QuestSortie sortie when sortie.Maps != null && sortie.MaxArray != null:\r
+ return string.Join(" ", sortie.Maps.Zip(NowArray, (map, n) => $"{MapString(map)}:{n}"));\r
+ case QuestMission mission when mission.Ids != null:\r
+ return string.Join(" ", mission.Names.Zip(NowArray, (name, n) => $"{name}{n}"));\r
+ default:\r
+ return string.Join(" ", (Id switch\r
+ {\r
+ 688 => new[] {"艦戦", "艦爆", "艦攻", "水偵"},\r
+ _ => new string[0]\r
+ }).Zip(NowArray, (entry, n) => $"{entry}{n}"));\r
}\r
- return string.Join(" ", (Id switch\r
- {\r
- 426 => new[] {"警備任務", "対潜警戒任務", "海上護衛任務", "強硬偵察任務"},\r
- 428 => new[] {"対潜警戒任務", "海峡警備行動", "長時間対潜警戒"},\r
- 436 => new[] {"練習航海", "長距離練習航海", "警備任務", "対潜警戒任務", "強行偵察任務"},\r
- 688 => new[] {"艦戦", "艦爆", "艦攻", "水偵"},\r
- _ => new string[0]\r
- }).Zip(NowArray, (entry, n) => $"{entry}{n}"));\r
}\r
\r
public bool Cleared => NowArray?.Zip(Spec.MaxArray, (n, m) => n >= m).All(x => x) ??\r
public class QuestCounter\r
{\r
private readonly QuestInfo _questInfo;\r
- private readonly ItemInfo _itemInfo;\r
+ private readonly ItemInventory _itemInventory;\r
+ private readonly ShipInventory _shipInventory;\r
private readonly BattleInfo _battleInfo;\r
private readonly SortedDictionary<int, QuestStatus> _quests;\r
private int _map;\r
}\r
}\r
\r
- public QuestCounter(QuestInfo questInfo, ItemInfo itemInfo, BattleInfo battleInfo)\r
+ public QuestCounter(QuestInfo questInfo, ItemInventory itemInventory, ShipInventory shipInventory, BattleInfo battleInfo)\r
{\r
_questInfo = questInfo;\r
_quests = questInfo.QuestDictionary;\r
- _itemInfo = itemInfo;\r
+ _itemInventory = itemInventory;\r
+ _shipInventory = shipInventory;\r
_battleInfo = battleInfo;\r
}\r
\r
public void InspectMapNext(dynamic json)\r
{\r
_map = (int)json.api_maparea_id * 10 + (int)json.api_mapinfo_no;\r
+ var cell = json.api_no() ? (int)json.api_no : 0;\r
if (_map == 72)\r
{\r
- var cell = json.api_no() ? (int)json.api_no : 0;\r
- _map *= 10;\r
if (cell == 7)\r
- _map++;\r
- if (cell == 15)\r
- _map += 2;\r
+ _map = 721;\r
+ else if (cell == 15)\r
+ _map = 722;\r
+ }\r
+ if (_map == 73)\r
+ {\r
+ if (cell == 5)\r
+ _map = 731;\r
+ else if (cell == 18)\r
+ _map = 732;\r
}\r
_boss = (int)json.api_event_id == 5;\r
\r
return;\r
foreach (var count in _quests.Values.Select(q => q.Count))\r
{\r
- if (!(count.Spec is QuestSortie sortie))\r
+ if (!(count.Spec is QuestSortie sortie) || sortie.Maps == null)\r
continue;\r
if (!FleetCheck(count.Id))\r
continue;\r
case 284:\r
return specs.Types.Count(type => type == 1 || type == 2) >= 3 &&\r
specs.Types.Intersect(new[] {3, 4, 7, 21}).Any();\r
+ case 840:\r
+ return new[] {3, 4, 7, 21}.Contains(specs.FlagshipType) &&\r
+ specs.Types.Count(type => type == 2 || type == 1) >= 3;\r
case 861:\r
return specs.Types.Count(s => s == 10 || s == 22) == 2;\r
case 862:\r
return specs.Specs.Any(spec => spec.IsAircraftCarrier);\r
case 903:\r
return specs.Flagship.Name.StartsWith("夕張改二") &&\r
- specs.Names.Count("睦月", "如月", "弥生", "卯月", "菊月", "望月") >= 2;\r
+ (specs.Names.Count("睦月", "如月", "弥生", "卯月", "菊月", "望月") >= 2 || specs.Names.Contains("由良改二"));\r
case 904:\r
return specs.Names.Count("綾波改二", "敷波改二") == 2;\r
case 905:\r
return specs.Types.Count(type => type == 1) >= 3 && specs.Types.Length <= 5;\r
case 912:\r
return specs.Flagship.Name.StartsWith("明石") && specs.Types.Count(type => type == 2) >= 3;\r
+ case 914:\r
+ return specs.Types.Count(type => type == 5) >= 3 && specs.Types.Count(type => type == 2) >= 1;\r
+ case 928:\r
+ return specs.Names.Count("羽黒", "足柄", "妙高", "高雄", "神風") >= 2;\r
case 318:\r
return specs.Types.Count(type => type == 3) >= 2;\r
+ case 329:\r
+ return specs.Types.Count(type => type == 2 || type == 1) >= 2;\r
case 330:\r
return specs.Flagship.IsAircraftCarrier &&\r
specs.Specs.Count(spec => spec.IsAircraftCarrier) >= 2 &&\r
return specs.Names.Count("陽炎", "不知火", "霰", "霞") == 4;\r
case 339:\r
return specs.Names.Count("磯波", "浦波", "綾波", "敷波") == 4;\r
+ case 342:\r
+ var t12 = specs.Types.Count(type => type == 1 || type == 2);\r
+ return t12 >= 4 || t12 >= 3 && specs.Types.Intersect(new[] {3, 4, 7, 21}).Any();\r
+ case 345:\r
+ return specs.Names.Count("Warspite", "金剛", "Ark Royal", "Nelson", "Jervis", "Janus") >= 4;\r
+ case 346:\r
+ return specs.Names.Count("夕雲改二", "巻雲改二", "風雲改二", "秋雲改二") == 4;\r
+ case 348:\r
+ return new[] {3, 21}.Contains(specs.FlagshipType) &&\r
+ specs.Types.Skip(1).Count(type => new[] {3, 4, 21}.Contains(type)) >= 2 &&\r
+ specs.Types.Count(type => type == 2) >= 2;\r
default:\r
return true;\r
}\r
\r
public void CountRemodelSlot() => Increment(619);\r
\r
- public void InspectDestroyItem(string request, dynamic json)\r
+ public void InspectDestroyItem(string request)\r
{\r
var values = HttpUtility.ParseQueryString(request);\r
var items = values["api_slotitem_ids"].Split(',')\r
- .Select(id => _itemInfo.GetStatus(int.Parse(id)).Spec).ToArray();\r
+ .Select(id => _itemInventory[int.Parse(id)].Spec).ToArray();\r
Increment(613); // 613: 資源の再利用\r
foreach (var quest in _quests.Values)\r
{\r
}\r
}\r
\r
- public void InspectPowerUp(dynamic json)\r
+ public void InspectPowerUp(string request, dynamic json)\r
{\r
if ((int)json.api_powerup_flag == 0)\r
return;\r
+ var values = HttpUtility.ParseQueryString(request);\r
foreach (var quest in _quests.Values)\r
{\r
var count = quest.Count;\r
if (!(count.Spec is QuestPowerUp))\r
continue;\r
+ if (quest.Id == 714 || quest.Id == 715)\r
+ {\r
+ if (ShipTypeById(values["api_id"]) != 2)\r
+ return;\r
+ var ships = values["api_id_items"].Split(',').Select(ShipTypeById).ToArray();\r
+ var required = quest.Id == 714 ? 2 : quest.Id == 715 ? 3 : -1;\r
+ if (ships.Count(type => type == required) < 3)\r
+ return;\r
+ }\r
+ if (quest.Id == 716 || quest.Id == 717)\r
+ {\r
+ if (!new[] {3, 4, 21}.Contains(ShipTypeById(values["api_id"])))\r
+ return;\r
+ var ships = values["api_id_items"].Split(',').Select(ShipTypeById).ToArray();\r
+ if (quest.Id == 716)\r
+ {\r
+ if (ships.Count(type => new[] {3, 4, 21}.Contains(type)) < 3)\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ if (ships.Count(type => new[] {5, 6}.Contains(type)) < 3)\r
+ return;\r
+ }\r
+ }\r
Increment(count);\r
}\r
}\r
\r
- public void Increment(QuestCount count)\r
+ private int ShipTypeById(string id)\r
+ {\r
+ return _shipInventory[int.Parse(id)].Spec.ShipType;\r
+ }\r
+\r
+ private void Increment(QuestCount count)\r
{\r
Add(count, 1);\r
}\r
\r
- public void Add(QuestCount count, int value)\r
+ private void Add(QuestCount count, int value)\r
{\r
count.Now += value;\r
NeedSave = true;\r
}\r
\r
- public void Increment(int id)\r
+ private void Increment(int id)\r
{\r
Add(id, 1);\r
}\r
\r
- public void Add(int id, int value)\r
+ private void Add(int id, int value)\r
{\r
if (!_quests.TryGetValue(id, out var quest))\r
return;\r
NeedSave = true;\r
}\r
\r
- public void IncrementNth(QuestCount count, int n)\r
+ private void IncrementNth(QuestCount count, int n)\r
{\r
count.NowArray[n]++;\r
NeedSave = true;\r