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

  • Categoría screenrecord (o la definida en Config.ScreenRecord.DiscordCategory) con webhook en Mis servidores → 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
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 de la categoría screenrecord (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. Debes tener la categoría screenrecord activa con un webhook de Discord configurado en Mis servidores → Categorías. El vídeo se almacena en Discord, no en el panel: el panel solo guarda el enlace (video_url) para reproducirlo desde el log.

Configuración

Ajusta resolución, FPS, duración máxima y calidad en config.luaConfig.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.