return new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType}};\r
}\r
\r
+ private ShipStatus ShipStatus(int shipType, int shipClass, int specId)\r
+ {\r
+ return new ShipStatus\r
+ {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType, ShipClass = shipClass}};\r
+ }\r
+\r
+ private ShipStatus ShipStatus(string name)\r
+ {\r
+ return new ShipStatus {NowHp = 1, Spec = new ShipSpec {Name = name}};\r
+ }\r
+\r
+\r
private BattleInfo _battleInfo;\r
private ItemInfo _itemInfo;\r
private QuestInfo _questInfo;\r
\r
_battleInfo.InjectResultStatus(new[]\r
{\r
- ShipStatus(5, 319), ShipStatus(5, 192), ShipStatus(5, 194),\r
- ShipStatus(5, 193), ShipStatus(6, 189), ShipStatus(6, 188)\r
+ ShipStatus("妙高改二"), ShipStatus("那智改二"), ShipStatus("羽黒改二"),\r
+ ShipStatus("足柄改二"), ShipStatus("筑摩改二"), ShipStatus("利根改二")\r
}, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
\r
InjectMapNext(25, 4);\r
Assert.AreEqual(0, count.Now);\r
InjectBattleResult("S");\r
Assert.AreEqual(1, count.Now);\r
- _questInfo.Quests[0].Count.Now = 0;\r
+\r
+ _battleInfo.Result.Friend.Main[3].NowHp = 0;\r
+ InjectBattleResult("S");\r
+ Assert.AreEqual(2, count.Now, "足柄改二轟沈");\r
\r
_battleInfo.Result.Friend.Main[1].NowHp = 0;\r
InjectBattleResult("S");\r
- Assert.AreEqual(0, count.Now, "那智改二轟沈");\r
+ Assert.AreEqual(2, count.Now, "那智改二轟沈");\r
}\r
\r
/// <summary>\r
Assert.AreEqual(0, count.Now, "駆逐軽巡以外");\r
}\r
\r
- private ShipStatus ShipStatus(int shipType, int shipClass, int specId) =>\r
- new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType, ShipClass = shipClass}};\r
-\r
/// <summary>\r
/// 257: 「水上打撃部隊」南方へ!\r
/// </summary>\r
\r
_battleInfo.InjectResultStatus(new[]\r
{\r
- ShipStatus(2, 543), ShipStatus(8, 360), ShipStatus(11, 545),\r
- ShipStatus(18, 467), ShipStatus(11, 261), ShipStatus(2, 344)\r
+ ShipStatus("長波改二"), ShipStatus("Iowa改"), ShipStatus("Saratoga Mk.II"),\r
+ ShipStatus("瑞鶴改二甲"), ShipStatus("望月改"), ShipStatus("朝霜改")\r
}, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
\r
InjectMapNext(54, 4);\r
Assert.AreEqual(1, count.Now, "朝霜改轟沈");\r
_battleInfo.Result.Friend.Main[5].NowHp = 1;\r
\r
- _battleInfo.Result.Friend.Main[0].Spec.Id = 345;\r
+ _battleInfo.Result.Friend.Main[0] = ShipStatus("高波改");\r
InjectBattleResult("S");\r
Assert.AreEqual(1, count.Now, "長波改二なし");\r
- _battleInfo.Result.Friend.Main[0].Spec.Id = 543;\r
+ _battleInfo.Result.Friend.Main[0] = ShipStatus("長波改二");\r
\r
- _battleInfo.Result.Friend.Main[5].Spec.Id = 345;\r
+ _battleInfo.Result.Friend.Main[5] = ShipStatus("高波改");\r
InjectBattleResult("S");\r
Assert.AreEqual(2, count.Now, "高波改");\r
- _battleInfo.Result.Friend.Main[5].Spec.Id = 359;\r
+ _battleInfo.Result.Friend.Main[5] = ShipStatus("沖波改");\r
InjectBattleResult("S");\r
Assert.AreEqual(3, count.Now, "沖波改");\r
- _battleInfo.Result.Friend.Main[5].Spec.Id = 578;\r
+ _battleInfo.Result.Friend.Main[5] = ShipStatus("朝霜改二");\r
InjectBattleResult("S");\r
Assert.AreEqual(4, count.Now, "朝霜改二");\r
}\r
\r
_battleInfo.InjectResultStatus(new[]\r
{\r
- ShipStatus(5, 427), ShipStatus(5, 264), ShipStatus(5, 142),\r
- ShipStatus(5, 417), ShipStatus(2, 144), ShipStatus(2, 195)\r
+ ShipStatus("鳥海改二"), ShipStatus("青葉改"), ShipStatus("衣笠改二"),\r
+ ShipStatus("加古改二"), ShipStatus("夕立改二"), ShipStatus("綾波改二")\r
}, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
\r
InjectMapNext(51, 4);\r
PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}), "轟沈あり");\r
_battleInfo.Result.Friend.Main[0].NowHp = 1;\r
\r
- _battleInfo.Result.Friend.Main[0].Spec.Id = 319;\r
+ _battleInfo.Result.Friend.Main[0] = ShipStatus("妙高改二");\r
InjectBattleResult("S");\r
PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}), "三川艦隊3隻");\r
- _battleInfo.Result.Friend.Main[0].Spec.Id = 427;\r
\r
+ _battleInfo.Result.Friend.Main[0] = ShipStatus("夕張改二特");\r
InjectMapNext(53, 5);\r
InjectBattleResult("S");\r
PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0}));\r
\r
_battleInfo.InjectResultStatus(new []\r
{\r
- ShipStatus(2, 48), ShipStatus(2, 49),\r
- ShipStatus(2, 17), ShipStatus(2, 18),\r
- ShipStatus(2, 19)\r
+ ShipStatus("霰"), ShipStatus("霰"),\r
+ ShipStatus("陽炎"), ShipStatus("不知火"),\r
+ ShipStatus("黒潮")\r
}, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
InjectPracticeResult("A");\r
Assert.AreEqual(0, count.Now, "A");\r
InjectPracticeResult("S");\r
Assert.AreEqual(1, count.Now);\r
- _battleInfo.Result.Friend.Main[0] = ShipStatus(2, 47);\r
+ _battleInfo.Result.Friend.Main[0] = ShipStatus("涼風");\r
InjectPracticeResult("S");\r
Assert.AreEqual(1, count.Now, "霰→涼風");\r
- _battleInfo.Result.Friend.Main[4] = ShipStatus(2, 464);\r
+ _battleInfo.Result.Friend.Main[4] = ShipStatus("霞改二");\r
InjectPracticeResult("S");\r
Assert.AreEqual(2, count.Now, "黒潮→霞改二");\r
}\r
\r
private class ResultShipSpecs\r
{\r
+ public ShipSpec[] Specs { get; }\r
+ public NameChecker Names { get; }\r
+ public int[] Types { get; }\r
+ public int[] Classes { get; }\r
+ public ShipSpec Flagship { get; }\r
+ public int FlagshipType { get; }\r
+\r
+ public class NameChecker\r
+ {\r
+ private readonly string[] _names;\r
+\r
+ public NameChecker(ShipSpec[] specs)\r
+ {\r
+ _names = specs.Select(spec => spec.Name).ToArray();\r
+ }\r
+\r
+ public bool Contains(string demand)\r
+ {\r
+ return _names.Any(name => name.StartsWith(demand));\r
+ }\r
+\r
+ public int Count(params string[] demands)\r
+ {\r
+ return demands.Sum(demand => _names.Count(name => name.StartsWith(demand)));\r
+ }\r
+ }\r
+\r
public ResultShipSpecs(BattleInfo battleInfo)\r
{\r
Specs = battleInfo.Result?.Friend.Main.Where(s => s.NowHp > 0).Select(ship => ship.Spec).ToArray() ??\r
new ShipSpec[0];\r
- Ids = Specs.Select(spec => spec.Id).ToArray();\r
+ Names = new NameChecker(Specs);\r
Types = Specs.Select(spec => spec.ShipType).ToArray();\r
Classes = Specs.Select(spec => spec.ShipClass).ToArray();\r
Flagship = Specs.FirstOrDefault();\r
FlagshipType = Types.FirstOrDefault();\r
}\r
-\r
- public ShipSpec[] Specs { get; }\r
- public int[] Ids { get; }\r
- public int[] Types { get; }\r
- public int[] Classes { get; }\r
- public ShipSpec Flagship { get; }\r
- public int FlagshipType { get; }\r
}\r
\r
public QuestCounter(QuestInfo questInfo, ItemInfo itemInfo, BattleInfo battleInfo)\r
switch (id)\r
{\r
case 249:\r
- return specs.Ids.Intersect(new[] {62, 63, 64, 265, 266, 268, 319, 192, 194}).Count() == 3;\r
+ return specs.Names.Count("妙高", "那智", "羽黒") == 3;\r
case 257:\r
return specs.FlagshipType == 3 && specs.Types.Count(s => s == 3) <= 3 &&\r
specs.Types.All(s => s == 2 || s == 3);\r
case 873:\r
return specs.Types.Count(type => type == 3) >= 1;\r
case 875:\r
- return specs.Ids.Contains(543) &&\r
- specs.Ids.Intersect(new[]\r
- {\r
- 344, // 朝霜改\r
- 345, // 高波改\r
- 359, // 沖波改\r
- 578 // 朝霜改二\r
- }).Any();\r
+ return specs.Names.Contains("長波改二") &&\r
+ specs.Names.Count("朝霜改", "高波改", "沖波改") > 0;\r
case 888:\r
- return specs.Ids.Intersect(new[]\r
- {\r
- 69, 272, 427, // 鳥海\r
- 61, 264, // 青葉\r
- 123, 295, 142, // 衣笠\r
- 59, 262, 416, // 古鷹\r
- 60, 263, 417, // 加古\r
- 51, 213, 477, // 天龍\r
- 115, 293 // 夕張\r
- }).Count() >= 4;\r
+ return specs.Names.Count("鳥海", "青葉", "衣笠", "加古", "天竜", "夕張") >= 4;\r
case 894:\r
return specs.Specs.Any(spec => spec.IsAircraftCarrier);\r
case 318:\r
specs.Specs.Count(spec => spec.IsAircraftCarrier) >= 2 &&\r
specs.Types.Count(type => type == 2) >= 2;\r
case 337:\r
- return specs.Ids.Intersect(new[]\r
- {\r
- 17, 225, 566, // 陽炎\r
- 18, 226, 567, // 不知火\r
- 48, 198, 252, // 霰\r
- 49, 253, 464 // 霞\r
- }).Count() == 4;\r
+ return specs.Names.Count("陽炎", "不知火", "霰", "霞") == 4;\r
default:\r
return true;\r
}\r