diff --git a/hwe/compare/turn_command_trace.php b/hwe/compare/turn_command_trace.php index e08408fb..377f97d6 100644 --- a/hwe/compare/turn_command_trace.php +++ b/hwe/compare/turn_command_trace.php @@ -335,7 +335,27 @@ function comparisonApplyTurnFixtureSetup(mixed $setup): void 'trade' => 'trade', 'officerSet' => 'officer_set', ]); - if (array_key_exists('conflict', $row)) { + if (array_key_exists('conflictEntries', $row)) { + if (!is_array($row['conflictEntries'])) { + throw new \InvalidArgumentException('setup.cities.conflictEntries must be an array'); + } + $orderedConflict = []; + foreach ($row['conflictEntries'] as $entry) { + if ( + !is_array($entry) + || count($entry) !== 2 + || !is_int($entry[0] ?? null) + || $entry[0] < 1 + || !is_numeric($entry[1] ?? null) + ) { + throw new \InvalidArgumentException( + 'setup.cities.conflictEntries requires [positive nation id, numeric value] pairs' + ); + } + $orderedConflict[$entry[0]] = $entry[1]; + } + $patch['conflict'] = Json::encode($orderedConflict); + } elseif (array_key_exists('conflict', $row)) { if (!is_array($row['conflict'])) { throw new \InvalidArgumentException('setup.cities.conflict must be an object'); }