prepare("SELECT wp_key, name, info FROM geo_waypoints WHERE wp_key IN ($inList)"); $wpStmt->execute($missionWaypoints); $wps = []; foreach ($wpStmt as $row) $wps[$row['wp_key']] = $row; $factsByKey = []; try { $factStmt = $db->prepare("SELECT wp_key, text_de FROM geo_waypoint_facts WHERE kind = 'geo' AND wp_key IN ($inList) ORDER BY wp_key, display_order ASC"); $factStmt->execute($missionWaypoints); foreach ($factStmt as $row) { $factsByKey[$row['wp_key']][] = $row['text_de']; } } catch (Exception $e) { echo "WARN: geo_waypoint_facts fehlt — fallback nur info/name\n"; } $lines = []; $missing = []; foreach ($missionWaypoints as $key) { $wp = $wps[$key] ?? null; if (!$wp) { $missing[] = $key; continue; } $name = $wp['name']; $text = ''; if (!empty($factsByKey[$key])) { // 1–2 erste Geo-Facts nehmen, mit Name als Lead $facts = array_slice($factsByKey[$key], 0, 2); $text = $name . '. ' . implode(' ', $facts); } elseif (!empty($wp['info'])) { $text = $name . '. ' . $wp['info']; } else { $text = $name . '.'; } $lines[] = [ 'id' => 'r_wp_geo_' . $key, 'text' => $text, ]; } $out = [ '_note' => 'Wegpunkt-Geografie fuer die Plan-Phase. Spielt waehrend der Bearbeiter den jeweils gesuchten Wegpunkt sucht.', 'lines' => $lines, ]; $path = __DIR__ . '/../sims/heli/scripts/wp-geo-lines.json'; file_put_contents($path, json_encode($out, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); echo "Geschrieben: $path\n"; echo "Zeilen: " . count($lines) . "\n"; if ($missing) echo "Fehlende wp_keys (nicht in DB): " . implode(', ', $missing) . "\n";