private readonly List<int> _escapedShips = new List<int>();\r
private int _combinedFleetType;\r
private ShipStatus[] _battleResult = new ShipStatus[0];\r
- public List<ShipStatusPair> WrongBattleResult { get; private set; } = new List<ShipStatusPair>();\r
+ public ShipStatusPair[] BattleResultDiff { get; private set; } = new ShipStatusPair[0];\r
+ public bool IsBattleResultError => BattleResultDiff.Length > 0;\r
+ public ShipStatus[] BattleStartStatus { get; private set; } = new ShipStatus[0];\r
\r
public class ShipStatusPair\r
{\r
\r
private void VerifyBattleResult()\r
{\r
- WrongBattleResult = (from assumed in _battleResult\r
+ BattleResultDiff = (from assumed in _battleResult\r
let actual = GetStatus(assumed.Id)\r
where !assumed.Escaped && assumed.NowHp != actual.NowHp\r
- select new ShipStatusPair(assumed, actual)).ToList();\r
+ select new ShipStatusPair(assumed, actual)).ToArray();\r
_battleResult = new ShipStatus[0];\r
}\r
\r
+ public void SaveBattleStartStatus()\r
+ {\r
+ BattleStartStatus = _decks.Where((deck, i) => _inSortie[i])\r
+ .SelectMany(deck => deck.Select(id => (ShipStatus)GetStatus(id).Clone())).ToArray();\r
+ }\r
+\r
private void ClearShipInfo()\r
{\r
_shipInfo.Clear();\r
set => _shipMaster.UseOldEnemyId = value;\r
}\r
\r
- public void InjectShips(dynamic battle)\r
+ public void InjectShips(dynamic battle, dynamic item)\r
{\r
- var deck = (int)battle.api_deck_id;\r
- var id = 1;\r
- var ships = ((int[])battle.api_f_nowhps).Zip((int[])battle.api_f_maxhps,\r
- (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
- _decks[deck - 1] = (from ship in ships select ship.Id).ToArray();\r
- foreach (var ship in ships)\r
- _shipInfo[ship.Id] = ship;\r
+ var deck = (int)battle.api_deck_id - 1;\r
+ InjectShips(deck, (int[])battle.api_f_nowhps, (int[])battle.api_f_maxhps, (int[][])item[0]);\r
if (battle.api_f_nowhps_combined())\r
- {\r
- var guards = ((int[])battle.api_f_nowhps_combined).Zip((int[])battle.api_f_maxhps_combined,\r
- (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
- _decks[1] = (from ship in guards select ship.Id).ToArray();\r
- foreach (var ship in guards)\r
- _shipInfo[ship.Id] = ship;\r
- }\r
+ InjectShips(1, (int[])battle.api_f_nowhps_combined, (int[])battle.api_f_maxhps_combined, (int[][])item[1]);\r
foreach (var enemy in (int[])battle.api_ship_ke)\r
_shipMaster[enemy] = new ShipSpec {Id = enemy};\r
if (battle.api_ship_ke_combined())\r
_shipMaster[enemy] = new ShipSpec {Id = enemy};\r
}\r
}\r
+\r
+ private void InjectShips(int deck, int[] nowhps, int[] maxhps, int[][] slots)\r
+ {\r
+ var id = _shipInfo.Keys.Count + 1;\r
+ var ships = nowhps.Zip(maxhps,\r
+ (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
+ _decks[deck] = (from ship in ships select ship.Id).ToArray();\r
+ foreach (var ship in ships)\r
+ _shipInfo[ship.Id] = ship;\r
+ foreach (var entry in ships.Zip(slots, (ship, slot) =>new {ship, slot}))\r
+ {\r
+ entry.ship.Slot = _itemInfo.InjectItems(entry.slot.Take(5)).ToArray();\r
+ if (entry.slot.Length >= 6)\r
+ entry.ship.SlotEx = _itemInfo.InjectItems(entry.slot.Skip(5)).First();\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file