Documentación / API d'intégration

API d'intégration

Connectez vos scripts FiveM à Adictos_WebLogs avec integration.lua, les événements et les logs véhicules.

Le fichier shared/integration.lua est l'API publique d'Adictos_WebLogs. Il fonctionne même si le reste de la ressource est chiffré. Utilisez-le pour enregistrer des logs, écouter les événements système ou réagir à la fin d'un CK ou d'un changement de licence.

Incluir integration.lua en tu recurso

Añade el archivo como shared_script en el fxmanifest.lua de tu recurso. Las funciones de servidor (log, logPlayer, listeners) solo existen en el lado servidor; en cliente solo tienes AdictosWebLogs.isAvailable().

fx_version 'cerulean'
game 'gta5'

shared_scripts {
    '@Adictos_WebLogs/shared/integration.lua',
}

server_scripts {
    'server/main.lua',
}
Requisito: ensure Adictos_WebLogs debe ir antes o al menos estar iniciado cuando tu recurso registre logs. Comprueba con AdictosWebLogs.isAvailable() o GetResourceState('Adictos_WebLogs') == 'started'.

Funciones helper

FunciónDescripción
AdictosWebLogs.isAvailable()Devuelve true si el recurso Adictos_WebLogs está iniciado (cliente y servidor).
AdictosWebLogs.log(category, action, data, sendDiscord)Envía un log al panel. sendDiscord por defecto es true. Solo servidor.
AdictosWebLogs.logPlayer(source, category, action, data, sendDiscord)Igual que log pero rellena licencia y nombres desde el source del jugador. Solo servidor.
AdictosWebLogs.logVehicle(action, source, data, sendDiscord)Recomendado para vehículos. Una sola función para garaje, fuel, reparar, transferir y borrar. Ver sección dedicada.
AdictosWebLogs.onLog(handler)Escucha cada log aceptado: handler(category, action, logEntry).
AdictosWebLogs.onConfigLoaded(handler)Se dispara cuando WebLogs carga la configuración remota del panel.
AdictosWebLogs.onCKDone(handler)Se dispara al terminar un CK: handler(identifier, success, totalDeleted).
AdictosWebLogs.onLicenseTransferDone(handler)Se dispara al terminar un cambio de licencia: handler(oldLicense, newLicense, success, stats).

Ejemplo básico

local function logVenta(source, plate, precio)
    if not AdictosWebLogs.isAvailable() then return end

    AdictosWebLogs.logPlayer(source, 'vehicles', 'vehicle_sell', {
        details = ('Vendió %s por $%s'):format(plate, precio),
        raw_data = { plate = plate, price = precio },
    }, true)
end

Eventos del sistema

Los nombres oficiales están en AdictosWebLogs.Events. Puedes usarlos con AddEventHandler o los helpers de integration.lua:

ConstanteEventoCuándo se dispara
LOG_QUEUEDAdictos_WebLogs:onLogQueuedCada vez que un log entra en la cola (antes de enviarse al panel).
LOGS_SENTAdictos_WebLogs:onLogsSentTras enviar un lote de logs al panel.
CONFIG_LOADEDAdictos_WebLogs:onConfigLoadedConfiguración remota cargada (categorías, CK, etc.).
CONFIG_UPDATEDAdictos_WebLogs:onConfigUpdatedEl panel empuja cambios de configuración en caliente.
CK_DONEAdictos_WebLogs:onCKDoneCK completado desde el panel.
LICENSE_TRANSFER_DONEAdictos_WebLogs:onLicenseTransferDoneCambio de licencia completado.
PLAYER_BANNEDadictos:playerBannedBan aplicado desde el panel o sistema de sanciones.
PERMABAN_REQUESTadictos:webPermabanRequestSolicitud de permaban desde el panel.
-- Escuchar todos los logs de vehículos
AdictosWebLogs.onLog(function(category, action, entry)
    if category ~= 'vehicles' and category ~= 'vehicles_garage' then return end
    print(('[WebLogs] %s / %s — %s'):format(category, action, entry.details or ''))
end)

-- O con AddEventHandler directamente
AddEventHandler(AdictosWebLogs.Events.CONFIG_LOADED, function()
    print('WebLogs: categorías sincronizadas con el panel')
end)

Exports alternativos (sin integration.lua)

Si no quieres incluir el archivo compartido, puedes llamar a los exports del recurso o disparar eventos de red internos:

exports['Adictos_WebLogs']:Log('economy', 'payment', { amount = 500, details = 'Pago nómina' }, true)
exports['Adictos_WebLogs']:LogPlayer(source, 'jobs', 'duty_on', { details = 'Entró de servicio' })

-- Mismo efecto vía evento (servidor)
TriggerEvent('Adictos_WebLogs:Log', 'general', 'custom_event', { details = '...' }, false)

-- Lista de eventos disponibles
local events = exports['Adictos_WebLogs']:GetEvents()
El export Log() también acepta un objeto único con campos category, action, license, player_name, etc. Útil si ya tienes una tabla de datos montada (como en esx_advancedgarage).

API unificada de vehículos (recomendada)

No necesitas AdvancedParking, ox_fuel, esx_advancedgarage ni ningún script concreto. Solo llama a logVehicle() desde tu garaje, sistema de combustible o mecánico cuando la acción se complete en la base de datos. WebLogs se encarga de la categoría, la acción y el texto del log.

Acciones disponibles

AcciónConstanteCuándo llamarla
Guardar en garajestore o AdictosWebLogs.VehicleActions.STORETras marcar el vehículo como guardado en BD
Sacar del garajeretrieveTras spawnear el vehículo al jugador
RepararrepairTras actualizar motor/carrocería en BD o entidad
GasolinafuelTras cambiar el nivel de combustible
TransferirtransferTras cambiar el dueño en BD
BorrardeleteTras eliminar el registro de la BD

Campos de <code>data</code>

CampoDescripción
plateObligatorio. Matrícula del vehículo.
fuel / fuel_before / fuel_afterNivel de combustible (0–100).
engine_health / old_engineSalud del motor (0–1000 en GTA).
new_owner / targetLicense / targetNameNuevo propietario (transferencias).
detailsTexto libre; si no lo pones, WebLogs genera uno automático.
via = 'panel'Marca que la acción vino del panel web (staff).

Ejemplo — cualquier script de garaje (servidor)

shared_scripts { '@Adictos_WebLogs/shared/integration.lua' }

-- Tras guardar en TU tabla owned_vehicles / player_vehicles:
AdictosWebLogs.logVehicle(AdictosWebLogs.VehicleActions.STORE, source, {
    plate = plate,
    fuel = fuelLevel,
    engine_health = engineHealth,
})

-- Tras sacar del garaje:
AdictosWebLogs.logVehicle('retrieve', source, { plate = plate, engine_health = engineHealth })

Ejemplo — script de combustible (servidor)

-- Funciona con LegacyFuel, ps-fuel, ox_fuel, CDN-fuel o script propio
RegisterNetEvent('mi_fuel:pagado', function(plate, oldFuel, newFuel)
    AdictosWebLogs.logVehicle('fuel', source, {
        plate = plate,
        fuel_before = oldFuel,
        fuel_after = newFuel,
    })
end)

Ejemplo — mecánico / reparación

AdictosWebLogs.logVehicle('repair', source, {
    plate = plate,
    old_engine = engineHealthBefore,
})

Ejemplo — transferencia o borrado

AdictosWebLogs.logVehicle('transfer', adminSource, {
    plate = plate,
    new_owner = newOwnerLicense,
    targetName = newOwnerName,
})

AdictosWebLogs.logVehicle('delete', source, { plate = plate })

Desde cliente (si el evento nace en client)

-- En client.lua (con integration.lua cargado)
AdictosWebLogs.logVehicle('fuel', {
    plate = plate,
    fuel_before = 20,
    fuel_after = 100,
})

Sin integration.lua (solo export)

exports['Adictos_WebLogs']:LogVehicle('store', source, {
    plate = 'ABC 123',
    fuel = 75,
    engine_health = 900,
})
Las acciones del panel web (Garaje, Reparar, Gasolina, Transferir, Borrar en el perfil del jugador) ya registran log automáticamente con prefijo [Panel]. No hace falta código extra para eso.

Integraciones opcionales (no obligatorias)

  • esx_advancedgarage — ya integrado; usa LogVehicle internamente.
  • AdvancedParking — solo afecta al mapa en vivo y al borrado automático; los logs de garaje/fuel los pones tú con logVehicle.
  • Hook de borrado — opcional; detecta DeleteEntity sin que programes nada (ver abajo).

Logs de vehículos — referencia de categorías

SituaciónCategoría sugeridaAcción (action)Notas
Enviar vehículo al garajevehicles_garagevehicle_storeCrea la categoría vehicles_garage en el panel si no existe.
Sacar vehículo del garajevehicles_garagevehicle_retrieveMisma categoría que guardar.
Reparar vehículovehiclesvehicle_repairIncluye matrícula y % de motor antes/después en details o raw_data.
Echar / llenar gasolinavehiclesvehicle_fuelIndica nivel anterior y nuevo (0–100).
Transferir propiedadvehiclesvehicle_transferUsa targetLicense / targetName para el nuevo dueño.
Borrar vehículo (script propio)vehiclesvehicle_deleteUsa logVehicle('delete', …) o ReportVehicleDelete.
Prefiere siempre logVehicle() en lugar de montar categoría y acción a mano: así tus logs serán consistentes con el panel y con otros servidores.

Hook automático de borrado (otros recursos)

Si tu recurso llama a DeleteEntity o DeleteVehicle sobre coches, puedes cargar el hook compartido para que WebLogs registre el borrado con el nombre de tu script:

shared_scripts {
    '@Adictos_WebLogs/hooks/vehicle_delete_hook.lua',  -- después de otros hooks de AP si los hay
}

El monitor unificado de WebLogs fusiona estos reportes con eventos de AdvancedParking y avisos de “vehículo perdido mientras conduces”. Configurable en el panel → Mis servidores → Gestionar → pestaña de vehículos.

Referencia rápida de categorías de vehículos

  • vehicles — acciones generales (spawn, delete, subir/bajar, reparar, fuel, transferir…)
  • vehicles_garage — guardar y sacar de garaje
  • vehicles_engine, vehicles_tuning, vehicles_build — otros módulos del panel (crea y activa las que uses)
Los identificadores de categoría deben existir y estar activos en Mis servidores → Categorías. Si no, el log puede no mostrarse en el filtro esperado.