From 3e8c18b8d35ef3062d7976b13d4ed661ac66cedf Mon Sep 17 00:00:00 2001 From: hided62 Date: Sun, 26 Jul 2026 13:09:37 +0000 Subject: [PATCH] compare: expose canonical history logs --- hwe/compare/turn_state_snapshot.php | 36 +++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/hwe/compare/turn_state_snapshot.php b/hwe/compare/turn_state_snapshot.php index c5aabba6..ff1eabb1 100644 --- a/hwe/compare/turn_state_snapshot.php +++ b/hwe/compare/turn_state_snapshot.php @@ -191,6 +191,7 @@ function comparisonTurnStateSnapshot(array $request): array $logAfterId = $observe['logAfterId'] ?? 0; $messageAfterId = $observe['messageAfterId'] ?? 0; $includeNationHistoryLogs = $observe['includeNationHistoryLogs'] ?? false; + $includeGlobalHistoryLogs = $observe['includeGlobalHistoryLogs'] ?? false; $generalCooldownSelectors = comparisonGeneralCooldownSelectors( $observe['generalCooldowns'] ?? [], 'generalCooldowns', @@ -214,6 +215,9 @@ function comparisonTurnStateSnapshot(array $request): array if (!is_bool($includeNationHistoryLogs)) { throw new \InvalidArgumentException('includeNationHistoryLogs must be a boolean'); } + if (!is_bool($includeGlobalHistoryLogs)) { + throw new \InvalidArgumentException('includeGlobalHistoryLogs must be a boolean'); + } $db = DB::db(); $game = KVStorage::getStorage($db, 'game_env'); @@ -486,14 +490,24 @@ function comparisonTurnStateSnapshot(array $request): array if ((int)$row['general_id'] !== 0 && !in_array((int)$row['general_id'], $generalIds, true)) { continue; } + $generalId = (int)$row['general_id']; + $category = (string)$row['log_type']; + if ($category === 'battle') { + $category = 'battle_detail'; + } elseif ($generalId === 0) { + $category = 'summary'; + } $logs[] = comparisonPickRow($row, [ 'id' => 'id', 'generalId' => 'general_id', - 'category' => 'log_type', 'year' => 'year', 'month' => 'month', 'text' => 'text', - ]); + ]) + [ + 'scope' => $generalId === 0 ? 'system' : 'general', + 'category' => $category, + 'nationId' => null, + ]; } } if ($includeNationHistoryLogs && $nationIds !== []) { @@ -514,6 +528,23 @@ function comparisonTurnStateSnapshot(array $request): array ]; } } + if ($includeGlobalHistoryLogs) { + foreach ($db->query( + 'SELECT id, nation_id, year, month, text FROM world_history WHERE nation_id = 0 ORDER BY id', + ) as $row) { + $logs[] = comparisonPickRow($row, [ + 'id' => 'id', + 'nationId' => 'nation_id', + 'year' => 'year', + 'month' => 'month', + 'text' => 'text', + ]) + [ + 'scope' => 'system', + 'category' => 'history', + 'generalId' => null, + ]; + } + } $messages = array_map( static fn(array $row): array => comparisonPickRow( @@ -563,6 +594,7 @@ function comparisonTurnStateSnapshot(array $request): array 'messages' => $messages, 'watermarks' => [ 'logId' => (int)($db->queryFirstField('SELECT COALESCE(MAX(id), 0) FROM general_record') ?? 0), + 'historyLogId' => (int)($db->queryFirstField('SELECT COALESCE(MAX(id), 0) FROM world_history') ?? 0), 'messageId' => (int)($db->queryFirstField('SELECT COALESCE(MAX(id), 0) FROM message') ?? 0), ], ];