public EnemyFighterPower EnemyFighterPower { get; private set; }\r
public int AirControlLevel { get; private set; }\r
public BattleResultRank ResultRank { get; private set; }\r
+ public List<char> WrongResultRank { get; set; } = new List<char>(2);\r
public ShipStatus[] EnemyResultStatus { get; private set; }\r
public ShipStatus[] EnemyGuardResultStatus { get; private set; }\r
public bool EnemyIsCombined => EnemyGuardResultStatus.Length > 0;\r
{\r
BattleState = BattleState.Result;\r
ShowResult(!_lastCell);\r
+ VerifyResultRank(json);\r
CleanupResult();\r
SetEscapeShips(json);\r
+\r
+ }\r
+\r
+ private void VerifyResultRank(dynamic json)\r
+ {\r
+ if (_friend == null)\r
+ return;\r
+ WrongResultRank.Clear();\r
+ if (!json.api_win_rank())\r
+ return;\r
+ var assumed = "PSABCDE"[(int)ResultRank];\r
+ if (assumed == 'P')\r
+ assumed = 'S';\r
+ var actual = ((string)json.api_win_rank)[0];\r
+ if (assumed == actual)\r
+ return;\r
+ WrongResultRank.AddRange(new[] {assumed, actual});\r
}\r
\r
public void InspectPracticeResult(dynamic json)\r
try\r
{\r
UpdateInfo(_sniffer.Sniff(url, request, JsonParser.Parse(response)));\r
- CheckBattleResult();\r
SaveBattleApi(url, request, response);\r
+ CheckBattleResult();\r
}\r
+\r
catch (RuntimeBinderException e)\r
{\r
if (_errorDialog.ShowDialog(this,\r
\r
private void CheckBattleResult()\r
{\r
- if (_sniffer.WrongBattleResult.Count > 0)\r
- {\r
- if (_errorDialog.ShowDialog(this,\r
- "戦闘結果の計算に誤りがあります。",\r
- GenerateBattleErrorLog()) == DialogResult.Abort)\r
- Application.Exit();\r
- _sniffer.WrongBattleResult.Clear();\r
- }\r
+ if (_sniffer.Battle.WrongResultRank.Count == 0 && _sniffer.WrongBattleResult.Count == 0)\r
+ return;\r
+ if (_errorDialog.ShowDialog(this,\r
+ "戦闘結果の計算に誤りがあります。",\r
+ GenerateBattleErrorLog()) == DialogResult.Abort)\r
+ Application.Exit();\r
+ _sniffer.Battle.WrongResultRank.Clear();\r
+ _sniffer.WrongBattleResult.Clear();\r
}\r
\r
+ private BattleState _prevBattleState = BattleState.None;\r
+\r
private void SaveBattleApi(string url, string request, string response)\r
{\r
+ if (_prevBattleState == BattleState.None)\r
+ _battleApiLog.Clear();\r
if (_sniffer.Battle.BattleState != BattleState.None)\r
- {\r
_battleApiLog.Add(new[] {url, request, response});\r
- return;\r
- }\r
- _battleApiLog.Clear();\r
+ _prevBattleState = _sniffer.Battle.BattleState;\r
}\r
\r
private string GenerateBattleErrorLog()\r
RemoveSensitiveInformation(ref logs[1], ref logs[2]);\r
var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
var api = string.Join("\r\n", _battleApiLog.Select(logs => string.Join("\r\n", logs)));\r
- var status = string.Join(" ",\r
- from pair in _sniffer.WrongBattleResult\r
- let assumed = pair.Assumed\r
- let actual = pair.Actual\r
- select $"[{assumed.Fleet}-{assumed.DeckIndex}] {assumed.Id}: {assumed.NowHp}->{actual.NowHp}");\r
+ var ranks = _sniffer.Battle.WrongResultRank;\r
+ var status = ranks.Count > 0\r
+ ? $"{ranks[0]}->{ranks[1]}"\r
+ : string.Join(" ",\r
+ from pair in _sniffer.WrongBattleResult\r
+ let assumed = pair.Assumed\r
+ let actual = pair.Actual\r
+ select $"[{assumed.Fleet}-{assumed.DeckIndex}] {assumed.Id}: {assumed.NowHp}->{actual.NowHp}");\r
return $"{DateTime.Now:g} {version}\r\n{api}\r\n{status}";\r
}\r
\r
}\r
}\r
\r
-\r
private string UnescapeString(string s)\r
{\r
try\r