{\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
- 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
- if (_quests.TryGetValue(861, out var q861) && _map == 16 && (int)json.api_event_id == 8)\r
+ if (_map != 16 || (int)json.api_event_id != 8)\r
+ return;\r
+ foreach (var count in _quests.Values.Select(q => q.Count))\r
{\r
- if (new ResultShipSpecs(_battleInfo).Types.Count(s => s == 10 || s == 22) == 2)\r
- Increment(q861.Count);\r
+ if (!(count.Spec is QuestSortie sortie) || sortie.Maps == null)\r
+ continue;\r
+ if (!FleetCheck(count.Id))\r
+ continue;\r
+ if (sortie.Count(count, "S", _map, true))\r
+ NeedSave = true;\r
}\r
}\r
\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.Types.Count(s => s == 3) >= 2 && specs.Types.Count(s => s == 16) >= 1;\r
case 873:\r
return specs.Names.Contains("長波改二") &&\r
specs.Names.Count("朝霜改", "高波改", "沖波改") > 0;\r
case 888:\r
- return specs.Names.Count("鳥海", "é\9d\92è\91\89", "è¡£ç¬ ", "å\8a å\8f¤", "天ç«\9c", "夕張") >= 4;\r
+ return specs.Names.Count("鳥海", "é\9d\92è\91\89", "è¡£ç¬ ", "å\8a å\8f¤", "å\8f¤é·¹", "天é¾\8d", "夕張") >= 4;\r
case 894:\r
return specs.Specs.Any(spec => spec.IsAircraftCarrier);\r
+ case 903:\r
+ return specs.Flagship.Name.StartsWith("夕張改二") &&\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
specs.Types.Count(type => type == 2) >= 2;\r
case 337:\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
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 count = quest.Count;\r
if (!(count.Spec is QuestPowerUp))\r
continue;\r
+ if (quest.Id == 714 || quest.Id == 715)\r
+ {\r
+ var values = HttpUtility.ParseQueryString(request);\r
+ if (_shipInventory[int.Parse(values["api_id"])].Spec.ShipType != 2)\r
+ return;\r
+ var ships = values["api_id_items"].Split(',').Select(id => _shipInventory[int.Parse(id)]).ToArray();\r
+ var type = quest.Id == 714 ? 2 : quest.Id == 715 ? 3 : -1;\r
+ if (ships.Count(s => s.Spec.ShipType == type) < 3)\r
+ return;\r
+ }\r
Increment(count);\r
}\r
}\r
\r
- public void Increment(QuestCount count)\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