sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
sniffer.EnableLog(LogType.Battle);\r
SnifferTest.SniffLogFile(sniffer, "combined_surface_001");\r
- PAssert.That(() => "2015-01-01 00:00:00,南西方面海域,3,出撃,S,同航戦,第四警戒航行序列,単縦陣,ピケット水雷戦隊 A群,,," +\r
- "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),59/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
- "軽巡ツ級(elite),0/66,軽巡ト級(elite),0/55,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35," +\r
- "144~149,0,制空権確保|" +\r
- "2015-01-01 00:00:00,南西方面海域,7,,S,同航戦,第四警戒航行序列,複縦陣,任務部隊 D群,駆逐艦,満潮," +\r
- "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),33/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
- "戦艦タ級(flagship),0/90,軽母ヌ級(flagship),0/84,軽巡ト級(elite),0/55,軽巡ト級(elite),0/55,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37," +\r
- "123~131,23,制空権確保|"\r
- == result);\r
+ PAssert.That(() =>\r
+ "2015-01-01 00:00:00,南西方面海域,3,出撃,S,同航戦,第四警戒航行序列,単縦陣,ピケット水雷戦隊 A群,,," +\r
+ "あきつ丸改(Lv68)・大淀改(Lv95),40/40・47/47,山城改二(Lv85)・Z1 zwei(Lv84),77/77・35/35,扶桑改二(Lv85)・Z3 zwei(Lv84),77/77・11/35,利根改二(Lv117)・島風改(Lv130),59/66・39/41,筑摩改二(Lv117)・雪風改(Lv130),51/65・37/37,神通改二(Lv97)・北上改二(Lv99),47/50・40/43," +\r
+ "軽巡ツ級(elite),0/66,軽巡ト級(elite),0/55,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35," +\r
+ "144~149,0,制空権確保|" +\r
+ "2015-01-01 00:00:00,南西方面海域,7,,S,同航戦,第四警戒航行序列,複縦陣,任務部隊 D群,駆逐艦,満潮," +\r
+ "あきつ丸改(Lv68)・大淀改(Lv95),40/40・39/47,山城改二(Lv85)・Z1 zwei(Lv84),77/77・35/35,扶桑改二(Lv85)・Z3 zwei(Lv84),77/77・11/35,利根改二(Lv117)・島風改(Lv130),33/66・39/41,筑摩改二(Lv117)・雪風改(Lv130),51/65・37/37,神通改二(Lv97)・北上改二(Lv99),47/50・40/43," +\r
+ "戦艦タ級(flagship),0/90,軽母ヌ級(flagship),0/84,軽巡ト級(elite),0/55,軽巡ト級(elite),0/55,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37," +\r
+ "123~131,23,制空権確保|"\r
+ == result);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void InspectBothCombinedBattleResult()\r
+ {\r
+ var sniffer = new Sniffer();\r
+ var result = "";\r
+ sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 1, 1));\r
+ sniffer.EnableLog(LogType.Battle);\r
+ SnifferTest.SniffLogFile(sniffer, "both_combined_001");\r
+ PAssert.That(() =>\r
+ "2017-01-01 00:00:00,本土沖太平洋上,27,出撃&ボス,S,同航戦,第四警戒航行序列,第三警戒航行序列,16th任務部隊 主力機動部隊群,駆逐艦,天津風," +\r
+ "愛宕改(Lv98)・暁改二(Lv84),55/57・28/31,金剛改二(Lv99)・初月改(Lv98),69/82・33/37,飛龍改二(Lv99)・高雄改(Lv98),16/67・57/57,蒼龍改二(Lv99)・神通改二(Lv99),40/67・11/50,龍驤改二(Lv99)・木曾改二(Lv99),50/50・40/44,祥鳳改(Lv76)・北上改二(Lv97),26/45・43/43," +\r
+ "水母水姫・軽巡ヘ級(flagship),0/390・0/57,空母ヲ級改(flagship)・重巡リ級(flagship),0/160・0/76,空母ヲ級改(flagship)・重巡リ級(flagship),0/160・0/76,戦艦タ級(elite)・軽巡ツ級(elite),0/88・0/66,重巡ネ級(elite)・駆逐イ級後期型,0/88・0/35,重巡ネ級(elite)・駆逐イ級後期型,0/88・0/35," +\r
+ "750~751,389,航空優勢|"\r
+ == result);\r
}\r
\r
[TestMethod]\r
var fstats = _shipInfo.GetShipStatuses(_fleet);\r
FlagshipRecovery(fstats[0]);\r
_friend = Record.Setup(fstats);\r
- _enemyHp = nowhps.Skip(7).TakeWhile(hp => hp != -1).ToArray();\r
+ _enemyHp = nowhps.Skip(7).ToArray();\r
_enemyStartHp = (int[])_enemyHp.Clone();\r
EnemyResultStatus =\r
- (from id in (int[])json.api_ship_ke\r
- where id != -1\r
+ (from id in\r
+ json.api_ship_ke_combined()\r
+ ? ((int[])json.api_ship_ke).Skip(1).Concat(((int[])json.api_ship_ke_combined).Skip(1))\r
+ : ((int[])json.api_ship_ke).Skip(1)\r
select new ShipStatus {Id = id, Spec = _shipInfo.GetSpec(id)}).ToArray();\r
_guard = new Record[0];\r
_enemyGuardHp = new int[0];\r
{\r
_enemyGuardHp =\r
((int[])json.api_nowhps_combined).\r
- Skip(7).TakeWhile(hp => hp != -1).ToArray();\r
+ Skip(7).ToArray();\r
_enemyGuardStartHp = (int[])_enemyGuardHp.Clone();\r
}\r
}\r
\r
private void SetEnemyResultStatus()\r
{\r
- for (var i = 0; i < EnemyResultStatus.Length; i++)\r
+ for (var i = 0; i < 6; i++)\r
{\r
EnemyResultStatus[i].MaxHp = _enemyStartHp[i];\r
EnemyResultStatus[i].NowHp = _enemyHp[i];\r
}\r
+ for (var i = 6; i < EnemyResultStatus.Length; i++)\r
+ {\r
+ EnemyResultStatus[i].MaxHp = _enemyGuardStartHp[i - 6];\r
+ EnemyResultStatus[i].NowHp = _enemyGuardHp[i - 6];\r
+ }\r
}\r
\r
public void SetEscapeShips(dynamic json)\r
_map = _battle = null;\r
return;\r
}\r
- var fships = new List<string>();\r
- int deckId = BattleInfo.DeckId(_battle);\r
- var deck = _shipInfo.GetDeck(deckId);\r
- fships.AddRange(deck.Select(id =>\r
- {\r
- if (id == -1)\r
- return ",";\r
- var s = _shipInfo.GetStatus(id);\r
- return $"{s.Name}(Lv{s.Level}),{s.NowHp}/{s.MaxHp}";\r
- }));\r
- var estatus = _battleInfo.EnemyResultStatus;\r
- var edeck = ((int[])_battle.api_ship_ke).Skip(1).ToArray();\r
- var eships = edeck.Select((id, i) =>\r
- {\r
- if (id == -1)\r
- return ",";\r
- var s = estatus[i];\r
- return $"{s.Name},{s.NowHp}/{s.MaxHp}";\r
- });\r
+ var fships = GenerateFirendShipList();\r
+ var eships = GenerateEnemyShipList();\r
var cell = (int)_map.api_no;\r
var boss = "";\r
if (_start)\r
else\r
dropName += "+" + itemName;\r
}\r
- var fp = _shipInfo.GetFighterPower(deckId);\r
+ var fp = _shipInfo.GetFighterPower(BattleInfo.DeckId(_battle));\r
var fpower = fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1];\r
_writer("海戦・ドロップ報告書", string.Join(",", _nowFunc().ToString(DateTimeFormat),\r
result.api_quest_name,\r
_start = false;\r
}\r
\r
+ private IEnumerable<string> GenerateFirendShipList()\r
+ {\r
+ int deckId = BattleInfo.DeckId(_battle);\r
+ if (_battle.api_nowhps_combined() && (int)_battle.api_nowhps_combined[1] != -1)\r
+ {\r
+ var main = _shipInfo.GetDeck(0);\r
+ var guard = _shipInfo.GetDeck(1);\r
+ return main.Zip(guard, (m, g) =>\r
+ {\r
+ if (m == -1 && g == -1)\r
+ return ",";\r
+ var name = "";\r
+ var hp = "";\r
+ if (m != -1)\r
+ {\r
+ var sm = _shipInfo.GetStatus(m);\r
+ name = $"{sm.Name}(Lv{sm.Level})";\r
+ hp = $"{sm.NowHp}/{sm.MaxHp}";\r
+ }\r
+ name += "・";\r
+ hp += "・";\r
+ if (g != -1)\r
+ {\r
+ var sg = _shipInfo.GetStatus(g);\r
+ name += $"{sg.Name}(Lv{sg.Level})";\r
+ hp += $"{sg.NowHp}/{sg.MaxHp}";\r
+ }\r
+ return name + "," + hp;\r
+ }).ToList();\r
+ }\r
+ var deck = _shipInfo.GetDeck(deckId);\r
+ return deck.Select(id =>\r
+ {\r
+ if (id == -1)\r
+ return ",";\r
+ var s = _shipInfo.GetStatus(id);\r
+ return $"{s.Name}(Lv{s.Level}),{s.NowHp}/{s.MaxHp}";\r
+ }).ToList();\r
+ }\r
+\r
+ private IEnumerable<string> GenerateEnemyShipList()\r
+ {\r
+ var result = _battleInfo.EnemyResultStatus;\r
+ if (result.Length <= 6)\r
+ return result.Select(s => s.Id == -1 ? "," : $"{s.Name},{s.NowHp}/{s.MaxHp}").ToList();\r
+ var main = result.Take(6);\r
+ var guard = result.Skip(6);\r
+ return main.Zip(guard, (m, g) =>\r
+ {\r
+ if (m.Id == -1 && g.Id == -1)\r
+ return ",";\r
+ var name = "";\r
+ var hp = "";\r
+ if (m.Id != -1)\r
+ {\r
+ name = $"{m.Name}";\r
+ hp = $"{m.NowHp}/{m.MaxHp}";\r
+ }\r
+ name += "・";\r
+ hp += "・";\r
+ if (g.Id != -1)\r
+ {\r
+ name += $"{g.Name}";\r
+ hp += $"{g.NowHp}/{g.MaxHp}";\r
+ }\r
+ return name + "," + hp;\r
+ }).ToList();\r
+ }\r
+\r
private string FormationName(dynamic f)\r
{\r
if (f is string) // 連合艦隊のときは文字列\r