false, 'error' => 'Database unavailable.']); exit; } $payload = json_decode(file_get_contents('php://input'), true); if (!is_array($payload)) { echo json_encode(['success' => false, 'error' => 'Invalid payload.']); exit; } $name = trim((string)($payload['name'] ?? '')); $world = $payload['world'] ?? null; $size = (int)($payload['size'] ?? 0); if ($name === '' || mb_strlen($name) < 2 || mb_strlen($name) > 80) { echo json_encode(['success' => false, 'error' => 'World name must be 2-80 characters.']); exit; } if (!is_array($world) || $size <= 0 || $size > 32) { echo json_encode(['success' => false, 'error' => 'World data is invalid.']); exit; } $worldJson = json_encode($world, JSON_UNESCAPED_UNICODE); if ($worldJson === false || strlen($worldJson) > 200000) { echo json_encode(['success' => false, 'error' => 'World data too large.']); exit; } try { $id = saveWorld($name, $worldJson, $size); echo json_encode(['success' => true, 'id' => $id]); } catch (Throwable $e) { echo json_encode(['success' => false, 'error' => 'Unable to save world right now.']); }