diff --git a/hwe/compare/turn_command_trace.php b/hwe/compare/turn_command_trace.php index 59924632..7a989783 100644 --- a/hwe/compare/turn_command_trace.php +++ b/hwe/compare/turn_command_trace.php @@ -176,12 +176,29 @@ function comparisonApplyTurnFixtureSetup(mixed $setup): void if ($generalIds === [] || $nationIds === []) { throw new \InvalidArgumentException('isolateWorld requires generals and nations'); } + $generalTemplate = $db->queryFirstRow( + 'SELECT * FROM general WHERE no IN %li ORDER BY no LIMIT 1', + $generalIds, + ); + if ($generalTemplate === null) { + throw new \InvalidArgumentException('isolateWorld requires at least one existing fixture general'); + } $db->delete('general_turn', 'general_id NOT IN %li', $generalIds); $db->delete('rank_data', 'general_id NOT IN %li', $generalIds); $db->delete('nation_turn', 'nation_id NOT IN %li', $nationIds); $db->delete('troop', '1 = 1'); $db->delete('diplomacy', '1 = 1'); $db->delete('general', 'no NOT IN %li', $generalIds); + foreach ($generalIds as $generalId) { + if ($db->queryFirstField('SELECT no FROM general WHERE no = %i', $generalId) !== null) { + continue; + } + $newGeneral = $generalTemplate; + $newGeneral['no'] = $generalId; + $newGeneral['owner'] = 0; + $newGeneral['name'] = "fixture-general-{$generalId}"; + $db->insert('general', $newGeneral); + } $db->delete('nation', 'nation NOT IN %li', $nationIds); $db->update('city', [ 'nation' => 0,