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',
}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ón | Descripció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)
endEventos del sistema
Los nombres oficiales están en AdictosWebLogs.Events. Puedes usarlos con AddEventHandler o los helpers de integration.lua:
| Constante | Evento | Cuándo se dispara |
|---|---|---|
LOG_QUEUED | Adictos_WebLogs:onLogQueued | Cada vez que un log entra en la cola (antes de enviarse al panel). |
LOGS_SENT | Adictos_WebLogs:onLogsSent | Tras enviar un lote de logs al panel. |
CONFIG_LOADED | Adictos_WebLogs:onConfigLoaded | Configuración remota cargada (categorías, CK, etc.). |
CONFIG_UPDATED | Adictos_WebLogs:onConfigUpdated | El panel empuja cambios de configuración en caliente. |
CK_DONE | Adictos_WebLogs:onCKDone | CK completado desde el panel. |
LICENSE_TRANSFER_DONE | Adictos_WebLogs:onLicenseTransferDone | Cambio de licencia completado. |
PLAYER_BANNED | adictos:playerBanned | Ban aplicado desde el panel o sistema de sanciones. |
PERMABAN_REQUEST | adictos:webPermabanRequest | Solicitud 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()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ón | Constante | Cuándo llamarla |
|---|---|---|
| Guardar en garaje | store o AdictosWebLogs.VehicleActions.STORE | Tras marcar el vehículo como guardado en BD |
| Sacar del garaje | retrieve | Tras spawnear el vehículo al jugador |
| Reparar | repair | Tras actualizar motor/carrocería en BD o entidad |
| Gasolina | fuel | Tras cambiar el nivel de combustible |
| Transferir | transfer | Tras cambiar el dueño en BD |
| Borrar | delete | Tras eliminar el registro de la BD |
Campos de <code>data</code>
| Campo | Descripción |
|---|---|
plate | Obligatorio. Matrícula del vehículo. |
fuel / fuel_before / fuel_after | Nivel de combustible (0–100). |
engine_health / old_engine | Salud del motor (0–1000 en GTA). |
new_owner / targetLicense / targetName | Nuevo propietario (transferencias). |
details | Texto 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,
})[Panel]. No hace falta código extra para eso.Integraciones opcionales (no obligatorias)
- esx_advancedgarage — ya integrado; usa
LogVehicleinternamente. - 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
DeleteEntitysin que programes nada (ver abajo).
Logs de vehículos — referencia de categorías
| Situación | Categoría sugerida | Acción (action) | Notas |
|---|---|---|---|
| Enviar vehículo al garaje | vehicles_garage | vehicle_store | Crea la categoría vehicles_garage en el panel si no existe. |
| Sacar vehículo del garaje | vehicles_garage | vehicle_retrieve | Misma categoría que guardar. |
| Reparar vehículo | vehicles | vehicle_repair | Incluye matrícula y % de motor antes/después en details o raw_data. |
| Echar / llenar gasolina | vehicles | vehicle_fuel | Indica nivel anterior y nuevo (0–100). |
| Transferir propiedad | vehicles | vehicle_transfer | Usa targetLicense / targetName para el nuevo dueño. |
| Borrar vehículo (script propio) | vehicles | vehicle_delete | Usa logVehicle('delete', …) o ReportVehicleDelete. |
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 garajevehicles_engine,vehicles_tuning,vehicles_build— otros módulos del panel (crea y activa las que uses)