Documentación / Grabación de pantalla

Grabación de pantalla

Graba vídeo o captura instantáneas del jugador y súbelas a Discord desde el servidor.

Adictos_WebLogs incluye un módulo de ScreenRecord integrado: captura la pantalla del cliente vía NUI (WebGL/MediaRecorder), envía el vídeo al servidor y lo sube a Discord mediante el proxy del panel. Ideal para anticheat, reportes de staff o evidencias en logs.

Requisitos

  • Webhook ScreenRecord en Mis servidores → Logs web (activo + URL de Discord). La categoría screenrecord es fija y ya no se edita en Categorías.
  • Config.WebsiteURL correcta (el servidor sube el vídeo vía screenrecord-upload.php).

Export recordPlayerScreen

Graba un vídeo WebM de la pantalla del jugador y devuelve la URL de Discord en el callback:

exports['Adictos_WebLogs']:recordPlayerScreen(source, durationMs, function(success, urlOrError)
    if success then
        print('Video subido: ' .. urlOrError)
        -- urlOrError = URL del attachment en Discord
    else
        print('Error: ' .. tostring(urlOrError))
    end
end, 'Motivo de la grabación')

-- durationMs: por defecto Config.ScreenRecord.DefaultDuration (10000)
-- Máximo: Config.ScreenRecord.MaxDuration (30000)

Export capturePlayerSnapshot

Captura una imagen JPEG instantánea (más ligera que un vídeo):

exports['Adictos_WebLogs']:capturePlayerSnapshot(source, function(success, urlOrError)
    if success then
        print('Snapshot: ' .. urlOrError)
    end
end, 'Evidencia anticheat')

Otros exports útiles

ExportUso
isScreenRecordReady()true si hay webhook y está activo
getScreenRecordStatus()ready, reason (mensaje si no está listo)
stopPlayerRecording(src)Detiene una grabación en curso
isPlayerBeingRecorded(src)Devuelve si el jugador está siendo grabado
spectatePlayer(adminSrc, targetSrc)Spectate en vivo (relay al panel web)
stopSpectating(adminSrc)Detiene el spectate

Comandos de consola / staff

/record <player_id> [duracion_seg] [motivo]
/spectate <admin_id> <target_id>
/spectate <admin_id> stop

Uso en logs

Si al registrar un log incluyes el campo video (duración en milisegundos) junto con server_id del jugador, WebLogs graba automáticamente su pantalla antes de enviar el log al panel. No hace falta llamar a recordPlayerScreen aparte.

exports['Adictos_WebLogs']:Log('anticheat', 'detection', {
    license = licenseClean,
    playerName = name,
    server_id = source,   -- obligatorio para saber a quién grabar
    video = 10000,        -- duración en ms (10 segundos)
    reason = 'Noclip detectado',
}, true)

El flujo interno es el siguiente:

  1. 1WebLogs detecta video y lanza la grabación del jugador indicado en server_id.
  2. 2El cliente captura la pantalla y envía el vídeo al servidor FiveM.
  3. 3FiveM lo sube a Discord mediante el webhook ScreenRecord de Logs web (proxy del panel: screenrecord-upload.php).
  4. 4Discord devuelve la URL del archivo adjunto (CDN de Discord).
  5. 5Esa URL se guarda en video_url y el log se envía al panel con el enlace al vídeo.
Sin webhook no hay vídeo. Configura ScreenRecord en Mis servidores → Logs web (webhook + activo). El vídeo se almacena en Discord; el panel solo guarda el enlace (video_url).

Configuración

Ajusta resolución, FPS, duración máxima y calidad en config.lua → Config.ScreenRecord. El cliente usa client/config_client.lua solo para ajustes visuales del spectate.

La grabación requiere que el jugador tenga el cliente activo y la NUI cargada. Si falla, revisa la consola del servidor ([ScreenRecord]) y que el webhook de la categoría esté configurado.