Agency Docs

Socios dev

Integrarse con los scripts de Agency

¿Estás creando tu propio script de FiveM y quieres conectarlo con los nuestros? Aquí está cada export y cada evento público, con un fragmento de Lua para copiar.

Los exports permiten que tu script llame a una función del nuestro: exports['script-name']:FunctionName(args), tanto en cliente como en servidor. Los eventos van al revés: se lanzan con TriggerEvent o TriggerServerEvent y se escuchan con RegisterNetEvent.

01Agency-Phone

Teléfono multi-framework completo con SMS, llamadas, feed social, mail, cámara, wallet y pago AgencyPay.

Úsalo en cualquier script de tienda/robo/trabajo cuando quieras un flujo de pago limpio dentro del teléfono en lugar de descontar dinero al instante. También ideal para notificaciones en juego con aceptar/denegar (p. ej. peticiones de taxi, llamadas de dispatch).

Documentación completa

Exports de cliente

IsPhoneOpen()

Devuelve true si la UI del teléfono está abierta actualmente.

Ver ejemplo

Evita abrir un menú propio si el teléfono ya está en pantalla.

RegisterCommand('openmymenu', function() if exports['agency-phone']:IsPhoneOpen() then return end TriggerEvent('myresource:openMenu') end)
IsPhonePoweredOn()

Devuelve true si el teléfono está encendido.

Ver ejemplo

Detiene la sincronización en segundo plano mientras el teléfono está apagado.

CreateThread(function() while true do Wait(2000) if not exports['agency-phone']:IsPhonePoweredOn() then print('Phone off, pausing background sync') end end end)
GetPhoneData()

Devuelve la tabla cruda de datos del teléfono.

Ver ejemplo

Vuelca toda la tabla de datos del teléfono para depurar.

RegisterCommand('phonedebug', function() local data = exports['agency-phone']:GetPhoneData() print(json.encode(data, { indent = true })) end)
GetPhonePropEntity()

Devuelve el handle de la entidad del prop del teléfono sostenido, o 0 si no es visible.

Ver ejemplo

Oculta brevemente el prop del teléfono sin alterar la lógica.

CreateThread(function() Wait(500) local prop = exports['agency-phone']:GetPhonePropEntity() if prop ~= 0 and DoesEntityExist(prop) then SetEntityVisible(prop, false, false) end end)
IsPhoneExpanded()

Devuelve true si el teléfono está expandido en pantalla.

Ver ejemplo

Alias antiguo que bloquea un minijuego mientras el teléfono está abierto.

AddEventHandler('myresource:beforeMinigame', function() if exports['agency-phone']:IsPhoneExpanded() then TriggerEvent('chat:addMessage', { args = { 'Close phone first' } }) return end end)
HasCarrierContract()

Devuelve true cuando el jugador tiene un data plan de operador activo.

Ver ejemplo

Avisa al jugador cuando no hay un plan de datos activo.

RegisterCommand('checkdata', function() if not exports['agency-phone']:HasCarrierContract() then TriggerEvent('chat:addMessage', { args = { 'No data plan, buy one in the store app' } }) end end)
GetPhoneState()

Devuelve el objeto completo del estado del teléfono.

Ver ejemplo

Cachea el estado del teléfono solo si está abierto, encendido y sincronizando.

AddEventHandler('myresource:saveProfile', function() local state = exports['agency-phone']:GetPhoneState() if state.isOpen and state.poweredOn and state.syncEnabled then TriggerServerEvent('myresource:server:cachePhoneState', state) end end)
HasPhone()

Devuelve true si el jugador tiene un item de teléfono.

Ver ejemplo

Bloquea el comando de emergencia si el jugador no lleva un teléfono.

RegisterCommand('callemergency', function() if not exports['agency-phone']:HasPhone() then TriggerEvent('chat:addMessage', { args = { 'You need a phone first' } }) return end TriggerEvent('myresource:client:openEmergency') end)
RegisterAgencyPayPoint(id, data)

Registra un terminal de comerciante AgencyPay recurrente.

Ver ejemplo

Crea un terminal Agency Pay en tiempo real para el taller mecánico.

CreateThread(function() exports['agency-phone']:RegisterAgencyPayPoint('mechanic_main', { coords = vector3(-211.74, -1314.59, 31.29), label = 'Mechanic Pay Point', amount = 250, receiver = 'mechanic' }) end)
RemoveAgencyPayPoint(id)

Elimina un terminal AgencyPay registrado previamente.

Ver ejemplo

Elimina el punto de pago registrado al cerrar la tienda por la noche.

AddEventHandler('myresource:onShopClosed', function(shopId) exports['agency-phone']:RemoveAgencyPayPoint('mechanic_main') print('Removed pay point for shop ' .. shopId) end)
StartAgencyPayCheckout(data)

Abre la hoja de checkout de AgencyPay para un pago seguro con tarjeta.

Ver ejemplo

Abre el teléfono e inicia un pequeño pago de propina con Agency Pay.

RegisterCommand('paytip', function() exports['agency-phone']:StartAgencyPayCheckout({ amount = 25, receiver = 'staff_tip_jar', label = 'Staff tip', memo = 'Thanks for great service' }) end)
StartCall(contactData)

Inicia una llamada pma-voice usando una tabla de contacto.

Ver ejemplo

Inicia una llamada saliente al contacto enviado por el dispatch.

RegisterNetEvent('myresource:client:incomingDispatch', function(payload) exports['agency-phone']:StartCall({ name = payload.callerName or 'Dispatch', number = payload.callerNumber or '911', anonymous = false }) end)
PhoneNotification(title, text, icon, color, timeout, acceptIcon, denyIcon)

Muestra una notificación de teléfono con botones aceptar/denegar opcionales.

Ver ejemplo

Muestra una notificación bloqueante de aceptar/rechazar para un contrato de grúa.

CreateThread(function() local accepted = exports['agency-phone']:PhoneNotification( 'Tow request', 'Accept the contract?', 'truck', '#FF8800', 15000, 'check', 'x' ) if accepted then TriggerServerEvent('myresource:server:acceptTow') end end)
RegisterApp(config)

Pone una app de tu propio resource en la pantalla de inicio del teléfono y en la Store. Devuelve true, o false y un error. Consulta Apps Personalizadas.

UnregisterApp(id)

Quita una app añadida con RegisterApp. Ocurre por sí solo cuando se detiene el resource que la registró.

GetRegisteredApps()

Devuelve la tabla de todas las apps registradas por otros resources, indexada por id.

ClosePhone()

Cierra el teléfono, por ejemplo antes de que se abra tu propia interfaz.

IsPhoneRadioActive()

Devuelve dos valores: true mientras suena la radio del teléfono, y la emisora que está sonando.

StopPhoneRadio()

Detiene la radio del teléfono.

Exports de servidor

SendMail(identifier, mailData)

Envía un mail a un jugador (en línea o sin conexión).

Ver ejemplo

Envía un correo de recibo a un jugador por su identificador principal.

RegisterNetEvent('myresource:server:sendReceipt', function(targetId) local identifier = GetPlayerIdentifier(targetId, 0) exports['agency-phone']:SendMail(identifier, { sender = '[email protected]', subject = 'Your receipt', body = 'Thanks for your purchase!' }) end)
AddChirp(chirpData)

Publica un mensaje en el feed Pulse (chirper).

Ver ejemplo

Publica un anuncio de recompensa en Chirper desde el servidor.

RegisterNetEvent('myresource:server:postBounty', function(targetName) local src = source exports['agency-phone']:AddChirp({ identifier = GetPlayerIdentifier(src, 0), firstName = 'Bounty', lastName = 'Office', message = 'Wanted: ' .. targetName, postId = ('bounty_%s'):format(GetGameTimer()) }) end)
usePhone(event, item, inventory, slot, data)

Hook ox_inventory registrado cuando se detecta ESX+ox_inventory; abre el phone al portador del inventario.

Ver ejemplo

Engancha usingItem de ox_inventory para abrir el teléfono.

exports.ox_inventory:registerHook('usingItem', function(payload) if payload.item.name ~= 'phone' then return end return exports['agency-phone']:usePhone('inventory', payload.item, payload.inventory, payload.slot) end, { itemFilter = { phone = true } })
VerifyAgencyPayCharge(source, requestId, minAmount)

Confirma en el servidor que este jugador pagó el cobro Agency Pay con ese id en los últimos 60 segundos, por al menos minAmount, y consume el cobro para que cuente una sola vez. requestId es el id que pasaste a StartAgencyPayCheckout. Devuelve true y el importe, o false. Llámalo antes de entregar la mercancía.

Eventos

agency-phone:client:notify

Muestra una notificación del phone (title, text, icon, color, timeout, silent).

Ver ejemplo

Lanza un toast no bloqueante avisando que el vehículo está listo.

TriggerEvent('agency-phone:client:notify', 'Heads up', 'Vehicle ready for pickup', 'car', '#22cc88', 5000, false)
agency-phone:client:usePhoneItem

Activa el flujo de apertura del phone al usar el ítem de inventario.

Ver ejemplo

Reenvía un evento propio de uso de ítem al flujo de apertura del teléfono.

AddEventHandler('myresource:client:onItemUsed', function(itemName) if itemName == 'phone' then TriggerEvent('agency-phone:client:usePhoneItem') end end)
agency-phone:client:openApp

Solicita al phone navegar a una app personalizada por id (usado por módulos de app).

Ver ejemplo

Salta directo a una app bancaria personalizada por su id.

RegisterCommand('openbank', function() TriggerEvent('agency-phone:client:openApp', 'banking') end)
agency-phone:client:newMailNotify

Notifica al client de un correo recién recibido.

Ver ejemplo

Escucha notificaciones de correo nuevo y las registra para depuración.

AddEventHandler('agency-phone:client:newMailNotify', function(mail) print(('New mail from %s: %s'):format(mail.sender, mail.subject)) end)
agency-phone:server:requestPhoneData

Solicita una sincronización fresca de datos del phone para el jugador llamante.

Ver ejemplo

Pide al servidor un nuevo sync completo de los datos del teléfono.

RegisterCommand('refreshphone', function() TriggerServerEvent('agency-phone:server:requestPhoneData') end)
agency-phone:server:cancelCall

Cancela o finaliza una llamada activa.

Ver ejemplo

Cuelga la llamada activa desde un atajo propio o comando de chat.

RegisterCommand('hangup', function() TriggerServerEvent('agency-phone:server:cancelCall') end)
agency-phone:server:sendMessage

Envía un mensaje SMS (newMsg, targetNumber).

Ver ejemplo

Envía rápido un SMS a un número de destino desde el chat.

RegisterCommand('quicksms', function(_, args) local target, msg = args[1], table.concat(args, ' ', 2) TriggerServerEvent('agency-phone:server:sendMessage', { message = msg }, target) end)
agency-phone:server:saveSetting

Persiste una única clave/valor de ajuste del phone para el jugador.

Ver ejemplo

Persiste un ajuste del teléfono cuando el jugador lo cambia en cliente.

AddEventHandler('myresource:client:onSettingChanged', function(key, value) TriggerServerEvent('agency-phone:server:saveSetting', key, value) end)
agency-phone:server:airdropPay

Realiza una transferencia Agency Airdrop a un jugador cercano.

Ver ejemplo

Activa un Agency Airdrop a jugadores cercanos con el importe escrito.

RegisterCommand('airdrop', function(_, args) local amount = tonumber(args[1]) or 0 TriggerServerEvent('agency-phone:server:airdropPay', amount, 'Tip via airdrop') end)
agency-phone:server:buyDataPlan

Compra un data plan de operador para el jugador (price, planName).

Ver ejemplo

Compra un plan de datos después de que el jugador lo elija en una UI propia.

AddEventHandler('myresource:client:onPlanSelected', function(plan) TriggerServerEvent('agency-phone:server:buyDataPlan', plan.price, plan.name) end)
agency-phone:dispatch:create

Crea un dispatch del phone a partir de una llamada/SMS de emergencia.

Ver ejemplo

Genera una entrada de dispatch del teléfono desde una llamada de emergencia.

RegisterNetEvent('myresource:server:dispatchFromCall', function(payload) TriggerEvent('agency-phone:dispatch:create', { source = source, coords = payload.coords, type = 'robbery', title = '24/7 Robbery' }) end)

02Agency-Pad

Tablet AgencyOS con un ecosistema completo de apps. Registra tus propias apps mediante config.lua.

Perfecto para dashboards de admin, apps de gestión empresarial, mapas de territorio de gangs o cualquier UI custom que tus jugadores necesiten dentro de GTA, vive en una bonita carcasa de tablet sin trabajo extra.

Documentación completa

Exports de cliente

IsPadOpen()

Devuelve true si la UI del tablet está abierta (comprueba el estado del tablet antes de mostrar UIs).

Ver ejemplo

Evita reabrir la UI de tablet si la tablet en juego ya está abierta.

RegisterCommand('opentablet', function() if exports['agency-pad']:IsPadOpen() then return end TriggerEvent('myresource:openTablet') end)
IsPadPoweredOn()

Devuelve true si la tablet está encendida.

Ver ejemplo

Pausa el sondeo de flota mientras el tablet está apagado.

CreateThread(function() while true do Wait(3000) if not exports['agency-pad']:IsPadPoweredOn() then print('Tablet powered down, pausing fleet poll') end end end)
GetPadData()

Devuelve la tabla PadData completa del lado client.

Ver ejemplo

Vuelca toda la tabla de datos del tablet en cliente para inspeccionar.

RegisterCommand('paddebug', function() local data = exports['agency-pad']:GetPadData() print(json.encode(data, { indent = true })) end)
GetPadPropEntity()

Devuelve el handle de la entidad del prop de tablet sostenido, o 0 si no es visible.

Ver ejemplo

Oculta brevemente el prop del tablet durante una cinemática propia.

CreateThread(function() Wait(750) local prop = exports['agency-pad']:GetPadPropEntity() if prop ~= 0 and DoesEntityExist(prop) then SetEntityVisible(prop, false, false) end end)
IsPadExpanded()

Alias de IsPadOpen() conservado por compatibilidad hacia atrás.

Ver ejemplo

Alias antiguo que bloquea un minijuego mientras el tablet está abierto.

AddEventHandler('myresource:client:beforeMinigame', function() if exports['agency-pad']:IsPadExpanded() then return end TriggerEvent('myresource:client:startMinigame') end)
HasCarrierContract()

Devuelve true cuando el jugador tiene un data plan de operador activo en la tablet.

Ver ejemplo

Avisa al jugador si no hay un plan de datos activo en el tablet.

RegisterCommand('checkpaddata', function() if not exports['agency-pad']:HasCarrierContract() then TriggerEvent('chat:addMessage', { args = { 'No tablet data plan, buy one in Settings' } }) end end)
GetPadState()

Devuelve la tabla { isOpen, poweredOn, syncEnabled } que resume el estado actual de la tablet.

Ver ejemplo

Cachea el estado del tablet solo si está abierto y encendido.

AddEventHandler('myresource:saveSession', function() local state = exports['agency-pad']:GetPadState() if state.isOpen and state.poweredOn then TriggerServerEvent('myresource:server:cachePadState', state) end end)
HasPad()

Devuelve true si el jugador tiene el ítem tablet configurado en su inventario.

Ver ejemplo

Bloquea el comando del dispatch si el jugador no lleva un tablet.

RegisterCommand('opendispatch', function() if not exports['agency-pad']:HasPad() then TriggerEvent('chat:addMessage', { args = { 'You need a tablet first' } }) return end TriggerEvent('myresource:client:openDispatch') end)
RegisterAgencyPayPoint(id, data)

Registra un terminal Agency Pay en runtime en una coordenada (markers, blip, checkout payload).

Ver ejemplo

Crea un terminal Agency Pay en tiempo real en la recepción del hospital.

CreateThread(function() exports['agency-pad']:RegisterAgencyPayPoint('hospital_lobby', { coords = vector3(307.7, -1433.4, 30.0), label = 'Hospital Bill', amount = 500, receiver = 'medical' }) end)
RemoveAgencyPayPoint(id)

Elimina un terminal Agency Pay registrado previamente por id.

Ver ejemplo

Elimina un punto de pago del tablet cuando el local cierra.

AddEventHandler('myresource:onLocationClosed', function(locationId) exports['agency-pad']:RemoveAgencyPayPoint(locationId) end)
StartAgencyPayCheckout(data)

Abre la tablet (si es necesario) y lanza un checkout Agency Pay con el payload de pago dado.

Ver ejemplo

Abre el tablet e inicia un pago Agency Pay del impuesto a la propiedad.

RegisterCommand('paybill', function() exports['agency-pad']:StartAgencyPayCheckout({ amount = 1500, receiver = 'gov_taxes', label = 'Property tax', memo = 'Quarterly tax' }) end)
StartCall(contactData)

Inicia una llamada saliente desde la tablet al contacto suministrado ({ name, number, ... }).

Ver ejemplo

Inicia una llamada saliente del tablet cuando llega un evento de dispatch.

RegisterNetEvent('myresource:client:dispatchOnTablet', function(payload) exports['agency-pad']:StartCall({ name = payload.name or 'Field Agent', number = payload.number, anonymous = false }) end)
PhoneNotification(title, text, icon, color, timeout, acceptIcon, denyIcon)

Muestra una notificación de acción con botones accept/deny; bloquea hasta la respuesta y devuelve true/false.

Ver ejemplo

Muestra una notificación bloqueante en el tablet para iniciar una entrega.

CreateThread(function() local accepted = exports['agency-pad']:PhoneNotification( 'Mission ready', 'Start the delivery now?', 'box', '#3399ff', 12000, 'check', 'x' ) if accepted then TriggerServerEvent('myresource:server:startDelivery') end end)
RegisterApp(config)

Pone una app de tu propio resource en la pantalla de inicio del pad y en la Store. Devuelve true, o false y un error.

UnregisterApp(id)

Quita una app añadida con RegisterApp.

GetRegisteredApps()

Devuelve la tabla de todas las apps registradas por otros resources, indexada por id.

ClosePad()

Cierra el pad, por ejemplo antes de que se abra tu propia interfaz.

ClosePhone()

Igual que ClosePad(), con el nombre que usa el Agency Phone, para que el mismo código de integración funcione con ambos.

IsPhoneRadioActive()

Devuelve dos valores: true mientras suena la radio del pad, y la emisora que está sonando.

StopPhoneRadio()

Detiene la radio del pad.

Exports de servidor

SendMail(identifier, mailData)

Envía un mail a la bandeja principal del jugador por identifier (devuelve éxito).

Ver ejemplo

Envía un correo de aviso de factura a un jugador por su identificador.

RegisterNetEvent('myresource:server:sendInvoiceMail', function(targetId) local identifier = GetPlayerIdentifier(targetId, 0) exports['agency-pad']:SendMail(identifier, { sender = '[email protected]', subject = 'New invoice available', body = 'Open the tablet to review your invoice.' }) end)
usePad(event, item, inventory, slot, data)

Hook ox_inventory registrado al detectar ESX+ox_inventory; abre la tablet al portador del inventario.

Ver ejemplo

Engancha ox_inventory para abrir el tablet a través del helper.

exports.ox_inventory:registerHook('usingItem', function(payload) if payload.item.name ~= 'tablet' then return end return exports['agency-pad']:usePad('inventory', payload.item, payload.inventory, payload.slot) end, { itemFilter = { tablet = true } })
usePhone(event, item, inventory, slot, data)

Hook ox_inventory para el id legacy del ítem phone; abre la tablet al portador del inventario.

Ver ejemplo

Redirige el ítem antiguo de teléfono para abrir la UI del tablet.

exports.ox_inventory:registerHook('usingItem', function(payload) if payload.item.name ~= 'phone' then return end return exports['agency-pad']:usePhone('inventory', payload.item, payload.inventory, payload.slot) end, { itemFilter = { phone = true } })
GetMarketPrices()

Devuelve los precios actuales de acciones y criptomonedas, indexados por id de mercado.

PushPadData(source)

Envía una copia actualizada de los datos de la tablet al pad de este jugador. Devuelve false si no se pudo generar.

Eventos

agency-pad:client:notify

Muestra una notificación de la tablet (title, text, icon, color, timeout, silent).

Ver ejemplo

Lanza un toast no bloqueante en el tablet sobre una misión desbloqueada.

TriggerEvent('agency-pad:client:notify', 'Job update', 'New mission unlocked', 'briefcase', '#22cc88', 5000, false)
agency-pad:client:usePadItem

Abre la tablet cuando se usa el ítem de inventario.

Ver ejemplo

Reenvía un evento propio de uso de ítem al flujo de apertura del tablet.

AddEventHandler('myresource:client:onItemUsed', function(itemName) if itemName == 'tablet' then TriggerEvent('agency-pad:client:usePadItem') end end)
agency-pad:client:openApp

Disparar en el client para abrir una app específica dentro del tablet.

Ver ejemplo

Salta directo a la app personalizada de gestión de flota.

RegisterCommand('openfleet', function() TriggerEvent('agency-pad:client:openApp', 'fleet') end)
agency-pad:client:newMailNotify

Notifica al client de un correo recién recibido.

Ver ejemplo

Escucha notificaciones de correo nuevo del tablet y las registra localmente.

AddEventHandler('agency-pad:client:newMailNotify', function(mail) print(('Tablet mail from %s: %s'):format(mail.sender, mail.subject)) end)
agency-pad:client:hourlyPaycheck

Notifica al client de un evento de paycheck horario del business.

Ver ejemplo

Reacciona a un paycheck horario de empresa desde el tablet.

AddEventHandler('agency-pad:client:hourlyPaycheck', function(payload) print(('Hourly paycheck: $%s from %s'):format(payload.amount, payload.businessName)) end)
agency-pad:server:requestPadData

Solicita una sincronización fresca de datos de la tablet para el jugador llamante.

Ver ejemplo

Pide al servidor un nuevo sync completo de los datos del tablet.

RegisterCommand('refreshpad', function() TriggerServerEvent('agency-pad:server:requestPadData') end)
agency-pad:server:sendMessage

Envía un mensaje SMS (newMsg, targetNumber).

Ver ejemplo

Envía un SMS desde el tablet con un comando propio y número destino.

RegisterCommand('quicksmsTab', function(_, args) local target, msg = args[1], table.concat(args, ' ', 2) TriggerServerEvent('agency-pad:server:sendMessage', { message = msg }, target) end)
agency-pad:server:airdropPay

Realiza una transferencia Agency Airdrop a un jugador cercano.

Ver ejemplo

Activa un Agency Airdrop a jugadores cercanos desde el tablet.

RegisterCommand('airdroppad', function(_, args) local amount = tonumber(args[1]) or 0 TriggerServerEvent('agency-pad:server:airdropPay', amount, 'Tablet airdrop') end)
agency-pad:server:buyDataPlan

Compra un data plan de operador para el jugador.

Ver ejemplo

Compra un plan de datos del tablet tras elegirlo en una UI propia.

AddEventHandler('myresource:client:padPlanSelected', function(plan) TriggerServerEvent('agency-pad:server:buyDataPlan', plan.price, plan.name) end)
agency-pad:dispatch:create

Crea un dispatch de la tablet a partir de una llamada/SMS de emergencia.

Ver ejemplo

Genera una entrada de dispatch del tablet desde una llamada de emergencia.

RegisterNetEvent('myresource:server:padDispatchFromCall', function(payload) TriggerEvent('agency-pad:dispatch:create', { source = source, coords = payload.coords, type = 'medical', title = 'Medical assistance' }) end)
agency-pad:server:biz:create

Crea un nuevo business/organización para el jugador.

Ver ejemplo

Crea una nueva entrada de empresa desde un comando in-game propio.

RegisterCommand('startbiz', function() TriggerServerEvent('agency-pad:server:biz:create', { name = 'Bennys Repair', type = 'mechanic', location = 'sandy_shores' }) end)
agency-pad:server:biz:adminCreate

El admin crea un business en nombre de otro jugador.

Ver ejemplo

Reenvía un comando admin para crear una empresa en nombre de otro jugador.

RegisterNetEvent('myresource:server:adminCreateBiz', function(targetSrc, payload) TriggerEvent('agency-pad:server:biz:adminCreate', targetSrc, payload) end)
agency-pad:server:biz:startMission

Inicia una misión de business configurada para el jugador.

Ver ejemplo

Inicia una misión de empresa configurada para el jugador que llama.

RegisterCommand('bizmission', function() TriggerServerEvent('agency-pad:server:biz:startMission', { bizId = 12, missionId = 'delivery_route_a' }) end)
agency-pad:server:applyToListing

Envía una solicitud de empleo a un listado de business.

Ver ejemplo

Envía una postulación a un anuncio de empleo del tablet por su id.

RegisterCommand('apply', function(_, args) local listingId = tonumber(args[1]) TriggerServerEvent('agency-pad:server:applyToListing', listingId, { coverNote = 'Available immediately' }) end)
agency-pad:server:createMechanicInvoice

Crea un borrador de factura de mecánico.

Ver ejemplo

Crea un borrador de factura del mecánico para una matrícula y monto.

RegisterCommand('mechinvoice', function(_, args) TriggerServerEvent('agency-pad:server:createMechanicInvoice', { plate = args[1], amount = tonumber(args[2]) or 250, notes = 'Brake replacement' }) end)
agency-pad:server:sendMechanicInvoicePay

Envía una factura de mecánico a un cliente para su pago.

Ver ejemplo

Envía una factura de mecánico finalizada al cliente para pago.

AddEventHandler('myresource:client:onInvoiceConfirmed', function(invoice) TriggerServerEvent('agency-pad:server:sendMechanicInvoicePay', invoice.id, invoice.targetSrc) end)
agency-pad:server:mdtCreateInvoice

El MDT crea una multa/factura para un ciudadano.

Ver ejemplo

Crea una multa MDT para un ciudadano desde un net event propio.

RegisterNetEvent('myresource:server:mdtFine', function(targetSrc, amount, reason) TriggerEvent('agency-pad:server:mdtCreateInvoice', { target = targetSrc, amount = amount, reason = reason, officer = source }) end)

03Agency-Watch

Ahora con AgencyOS27: una actualización gratuita para quien ya tenga el reloj. Un reloj inteligente de verdad para FiveM, no un HUD. Diez esferas, un Studio para caja, correa y colores, anillos de actividad, cronómetro, temporizador, alarma, tiempo, brújula, velocímetro, cuatro juegos, un centro de control y una tienda de apps, todo sin ninguna otra resource. Angy vive en la corona y maneja el reloj cuando se lo pides, con reglas fijas y sin ninguna IA. Un Agency Phone detectado desbloquea llamadas, mensajes, correo, contactos y Agency Pay en la muñeca, y abre el reloj a tus propias apps. Gratis, QBCore / Qbox / ESX / standalone, diez idiomas.

Documentación completa

Exports de cliente

OpenWatch(mitte)

Abre el reloj. Pasa true para abrirlo centrado en pantalla en lugar de en su esquina configurada.

CloseWatch()

Cierra el reloj y libera el foco NUI.

ToggleWatch()

Cierra el reloj si está abierto y, si no, lo abre.

IsWatchOpen()

Devuelve true mientras la interfaz del reloj está en pantalla.

IsWatchLinked()

Devuelve false si el jugador desactivó la conexión con el Agency Phone en el centro de control.

RunWatchAction()

Ejecuta lo que esté asignado al botón de acción naranja (Config.ActionButton).

GetWatchSettings()

Devuelve la tabla completa de ajustes con la que se construye la interfaz del reloj (tema, esfera, tamaño, apps, idioma).

SetWatchSetting(key, value)

Cambia un ajuste, lo guarda por personaje y lo aplica al instante.

SetWatchSettings(table)

Cambia varios ajustes a la vez y reconstruye la interfaz una sola vez en lugar de una vez por valor.

RequestWatchPairing()

Pide al servidor un código de vinculación para la app Companion. La respuesta llega como evento, no como valor de retorno.

ShowUpdate()

Abre la pantalla de actualización de software de AgencyOS.

HandlesDeath()

Devuelve true si el reloj muestra la pantalla de emergencia al morir. El Agency Phone lo consulta para que nunca la muestren los dos dispositivos a la vez.

GetFitness()

Devuelve los valores de actividad del día en curso: pasos, distancia, minutos activos y calorías.

SetWatchAppInstalled(id, on)

Instala o elimina una app para este jugador. Lo mismo que hace la App Store, para que un servidor pueda dar una app como recompensa.

FindWatch()

Hace que el reloj suene y se ilumine, como la función de búsqueda de la app Companion.

StopFindWatch()

Detiene el sonido antes de que termine por sí solo.

IsWatchRinging()

Devuelve true mientras el reloj está sonando.

Exports de servidor

IsPremium(src)

Devuelve true si el reloj de este jugador funciona en la versión Pro. El veredicto sale del handshake con el Agency Phone original, nunca del cliente.

04Agency-Zero

Un cuatro plazas eléctrico y autónomo para FiveM, gratis. El Project 0 es un vehículo propio, creado desde cero en Blender con Sollumz: sin manillas, con puertas que se abren en ola, un volante de verdad y pedales para tomar el control. Los jugadores lo llaman desde el Agency Phone, el Agency Pad o la app Agency Companion en su móvil real, y conduce hasta ellos y aparca junto a la acera a su lado en lugar de irse a buscar un hueco. Dentro, AgencyOS27 funciona en la tablet del salpicadero y en el menú Z: un mapa para tocar, Angy, el asistente integrado, con reglas fijas y sin ninguna IA, para hablarle con palabras normales, seis asistentes de conducción con un interruptor general, reprogramación por etapas, chips de sonido y estadísticas por coche y por propietario. Cada coche lleva su propio número, ligado a su propietario en la base de datos, así que la propiedad, el tuning y cada ajuste sobreviven a un reinicio. QBCore, Qbox y ESX se detectan automáticamente, también funciona standalone, y todos los textos vienen en 27 idiomas con el inglés como base.

Documentación completa

Exports de cliente

ZeroStatus()

Devuelve el estado del Project 0 del jugador: si existe, dónde está, batería, autonomía y si hay un viaje en curso.

ZeroCall()

Llama al coche hasta el jugador. Conduce hasta allí y aparca junto a la acera a su lado.

ZeroDeliver()

Hace que te entreguen el coche cuando no está en el mapa. Cuesta Config.Remote.deliveryFee, gratis sin framework.

ZeroGarage()

Envía el coche de vuelta a su garaje.

ZeroCancel()

Cancela una llamada o un viaje en curso.

ZeroFind()

Muestra en la parte inferior de la pantalla la dirección hacia el coche durante Config.Remote.findRadarSeconds segundos.

ZeroDoors(on)

Abre las puertas con true y las cierra con false. Se mueven en ola, no todas a la vez.

ZeroLock(on)

Bloquea el coche con true y lo desbloquea con false.

ZeroLights(on)

Enciende y apaga las luces.

ZeroBuyInfo()

Indica si el jugador puede comprar un Project 0 y cuánto cuesta. Quien ya tiene uno no recibe nada.

ZeroBuy()

Compra un Project 0 para este jugador. El coche queda ligado a él en el mismo paso.

ZeroRefresh()

Vuelve a leer el estado, para una interfaz que quiere datos frescos sin esperar al siguiente tick.

IsRideActive()

Devuelve true mientras hay un viaje autónomo en curso.

CallProjectZero()

Inicia un viaje al destino actual. Si no hay, se usa el punto marcado en el mapa.

CancelProjectZero()

Termina el viaje. El coche se aparta a un lado y se detiene.

IsCockpitOpen()

Devuelve true mientras la tablet del salpicadero está en pantalla.

IsManualOverride()

Devuelve true si el conductor ha tomado el volante. Sin esa toma de control, el Zero solo conduce solo.

AnyDoorOpen(veh)

Devuelve true si al menos una puerta de ese vehículo está abierta.

OpenDoors(veh, opts)

Abre las puertas de un vehículo con la animación en ola.

CloseDoors(veh, opts)

Las vuelve a cerrar.

AnimateDoors(veh, open, opts)

Abre o cierra según el segundo argumento, para código que decide en tiempo de ejecución.

SoundChipOf(veh)

Devuelve el chip de sonido montado en ese coche. Cambiar el chip cambia el motor, nunca la radio.

Exports de servidor

IsPro(src)

Devuelve true si el Zero de este jugador funciona en la versión Pro. El veredicto sale del handshake HMAC con el Agency Phone original, nunca del cliente.

ZeroVin(plate)

Devuelve el número de vehículo que hay tras una matrícula. Cada Project 0 recibe uno al entregarse y lo conserva para siempre.

ZeroCarsOf(src)

Devuelve todos los Project 0 de este jugador, con número, matrícula, etapa de tuning y estadísticas.

ZeroSync(src)

Vuelve a enviar el estado del registro a este jugador, por ejemplo después de que otro script cambiara la propiedad.

Eventos

agency-zero:client:rideStarted

Ha empezado un viaje. Incluye el destino.

agency-zero:client:rideEnded

El viaje ha terminado, se ha cancelado o ha llegado.

agency-zero:client:arrived

El coche ha llegado hasta el jugador y ha abierto las puertas.

05Agency-Lifeinvader V3

La agencia de publicidad de la ciudad: anuncios de jugadores en todas las pantallas, con categorías, promociones, programación, borradores, revisión, un trabajo para el personal, un redactor con IA y una app para Agency Phone y Agency Pad.

Compatible con scripts de negocios y trabajos que publican anuncios automáticamente, scripts de eventos y casinos que anuncian lo que ocurre, registros de Discord de cada anuncio, teléfonos y menús radiales que abren la app, y herramientas de administración que consultan quiénes son los administradores de Lifeinvader.

Documentación completa

Exports de cliente

OpenApp(tab)

Abre la app en la página que indiques: 'feed', 'create', 'mine', 'drafts' o 'settings'. Si no indicas una página, abre la última que se usó o el feed en directo.

Ver ejemplo

Abre la app en Nuevo anuncio desde tu propio menú radial o teléfono.

-- an entry in your radial menu exports['Agency-LifeinvaderV3']:OpenApp('create')
OpenFeed()

Abre la app en el feed en directo.

Ver ejemplo

Abre la transmisión en directo, por ejemplo, en un quiosco de periódicos.

exports['Agency-LifeinvaderV3']:OpenFeed()
CloseApp()

Cierra la app.

Ver ejemplo

Cierra la app antes de que se abra tu propio menú.

exports['Agency-LifeinvaderV3']:CloseApp()
IsOpen()

Es true mientras la app está abierta en este cliente.

Ver ejemplo

Evita que tu menú se abra sobre la app.

if not exports['Agency-LifeinvaderV3']:IsOpen() then -- open your own menu end

Exports de servidor

PostAd(text, opts)

Publica un anuncio del propio servidor: es gratis, nunca se revisa y va primero en la cola. opts: author, category, instant (se publica de inmediato), reps, interval, duration y boosted. Devuelve el id del anuncio, o nil y un código de error.

Ver ejemplo

Publica un anuncio oficial desde tu script de casino o evento, gratis y al principio de la cola.

exports['Agency-LifeinvaderV3']:PostAd('Casino night tonight at 20:00, free entry!', { author = 'Diamond Casino', category = 'events', instant = true, })
GetFeed(limit)

El feed en directo tal como aparece en la app, del más reciente al más antiguo: id, text, category, boosted, author (nil para anuncios anónimos), sentAt, created, sent y live.

Ver ejemplo

Lee los últimos anuncios, para un sitio web, un periódico o una aplicación de teléfono.

for _, ad in ipairs(exports['Agency-LifeinvaderV3']:GetFeed(10)) do print(ad.id, ad.author or 'anonymous', ad.text) end
GetAd(id)

Un anuncio con el mismo formato que el feed, o nil.

Ver ejemplo

Busca un anuncio por su número.

local ad = exports['Agency-LifeinvaderV3']:GetAd(412) if ad then print(ad.text) end
IsAdmin(source)

Es true cuando el jugador es administrador de Lifeinvader mediante ACE, grupo o identificador.

Ver ejemplo

Usa los permisos de administración de Lifeinvader en tu propio script.

if exports['Agency-LifeinvaderV3']:IsAdmin(source) then -- show your admin tools end

Eventos

agency-lifeinvader:adShown

Evento local en cada cliente cuando aparece un anuncio en pantalla, con id, text, category, catLabel, icon, author (nil si es anónimo), boosted, duration y system (true para anuncios oficiales).

Ver ejemplo

Reacciona en el cliente cuando aparece un anuncio, por ejemplo, en una valla publicitaria.

AddEventHandler('agency-lifeinvader:adShown', function(ad) -- ad.text, ad.author, ad.category end)
agency-lifeinvader:adBroadcast

Evento local en el servidor cada vez que se publica un anuncio, con el anuncio en el formato del feed. Útil para registros o un webhook de Discord.

Ver ejemplo

Registra todos los anuncios que se muestran en el servidor.

AddEventHandler('agency-lifeinvader:adBroadcast', function(ad) -- send ad.text to your Discord log end)
agency_lifeinvader:openMenu

Se conserva de V3: abre la app en Nuevo anuncio, para que los scripts que abrían el menú anterior sigan funcionando.

Ver ejemplo

Abre la aplicación en Nuevo anuncio para un jugador, como hacía el evento V3.

TriggerClientEvent('agency_lifeinvader:openMenu', source)
agency_lifeinvader:openRecentMenu

Se conserva de V3: abre la app en el feed en directo.

Ver ejemplo

Abre el feed en directo para un jugador, como hacía el evento V3.

TriggerClientEvent('agency_lifeinvader:openRecentMenu', source)

06Agency-Blackmarket V2

Un mercado negro vivo con dealers que se mueven, un mercado en vivo, regateo, pedidos para recoger, encargos de reparto, un perista, lavado de dinero y cinco niveles de reputación.

Encaja con scripts de bandas, atracos y drogas que deban dar reputación o crédito, con herramientas de policía y dispatch que reaccionen a los tratos y a los movimientos de los dealers, y con menús radiales o móviles que abran el menú del mercado negro.

Documentación completa

Exports de cliente

OpenMenu()

Abre el menú de /ablackmarket, por ejemplo desde un menú radial o una app de móvil. Se aplican las mismas comprobaciones que con el comando.

Ver ejemplo

Abre el menú del mercado negro desde tu propio menú radial o tu app de móvil.

-- an entry in your radial menu exports['Agency-Blackmarket']:OpenMenu()
CloseMenu()

Cierra el menú y devuelve el ratón al juego.

Ver ejemplo

Cierra el menú, por ejemplo antes de una cinemática propia.

-- before your own cutscene starts exports['Agency-Blackmarket']:CloseMenu()
IsMenuOpen()

Devuelve true mientras el menú del mercado negro está abierto, en un dealer o en cualquier parte.

Ver ejemplo

Comprueba si el menú está abierto antes de que aparezca tu propia interfaz.

if exports['Agency-Blackmarket']:IsMenuOpen() then return -- the player is busy in the black market menu end

Exports de servidor

GetReputation(source)

Los puntos de reputación de un jugador, 0 para quien aún no tiene ninguno.

Ver ejemplo

Solo deja iniciar tu trabajo o atraco a jugadores con suficiente reputación.

local rep = exports['Agency-Blackmarket']:GetReputation(source) if rep < 150 then return -- this heist needs a known name on the street end
SetReputation(source, value)

Fija la reputación de un jugador en un valor, nunca por debajo de 0. Devuelve true si tiene éxito.

Ver ejemplo

Fija la reputación de un jugador en un valor.

-- an admin tool resets a player exports['Agency-Blackmarket']:SetReputation(targetId, 0)
AddReputation(source, amount)

Suma reputación, o la resta con una cantidad negativa. Un nuevo nivel se anuncia al jugador y a la app Companion. Devuelve true si tiene éxito.

Ver ejemplo

Premia un trabajo terminado con reputación; un nuevo nivel se anuncia.

-- a finished drug run earns street reputation exports['Agency-Blackmarket']:AddReputation(source, 15)
GetLevel(source)

Devuelve dos valores: el número del nivel del jugador (de 1 a 5 por defecto) y su nombre.

Ver ejemplo

Lee el número del nivel y su nombre, por ejemplo para desbloquear tu propio contenido.

local level, name = exports['Agency-Blackmarket']:GetLevel(source) if level >= 4 then print(('%s is %s on the street'):format(GetPlayerName(source), name)) end
AddCredit(source, amount)

Añade crédito de dealer, que el jugador puede usar en su próxima compra o pedido. Devuelve true si tiene éxito.

Ver ejemplo

Da a un jugador crédito de dealer para su próxima compra o pedido.

-- a gang boss pays out in dealer credit exports['Agency-Blackmarket']:AddCredit(source, 2500)
RelocateDealer(dealerId)

Mueve al momento a un dealer a otro de sus lugares. Devuelve true si se ha movido.

Ver ejemplo

Mueve al momento a un dealer a otro de sus lugares.

-- a tip reached the police: the dealer changes his spot exports['Agency-Blackmarket']:RelocateDealer('vince')
SendDealerAway(dealerId, minutes)

El dealer desaparece durante los minutos indicados y luego aparece en otro de sus lugares, como tras una visita de la policía.

Ver ejemplo

Aleja a un dealer durante un rato, como tras una visita de la policía.

-- a raid in the area: Marlow goes quiet for 20 minutes exports['Agency-Blackmarket']:SendDealerAway('marlow', 20)
IsDealerPresent(dealerId)

True mientras el dealer está en uno de sus lugares y no se ha ido.

Ver ejemplo

Comprueba si un dealer está ahora mismo en uno de sus lugares.

if exports['Agency-Blackmarket']:IsDealerPresent('vince') then print('Vince is on the street') end
StartFlashSale(minutes)

Inicia una oferta relámpago con objetos al azar con descuento. Sin minutos se usa el tiempo de Config.FlashSale.

Ver ejemplo

Inicia una oferta relámpago desde tu propio evento o calendario.

-- the city had a big night: a flash sale for 10 minutes exports['Agency-Blackmarket']:StartFlashSale(10)

Eventos

agency-blackmarket:deal

Se dispara en el servidor con (source, kind, data) tras cada trato. kind es buy, sell, launder, order, pickup o job, y data contiene los detalles del trato, como el dealer, los objetos y el total.

Ver ejemplo

Reacciona a cada trato, por ejemplo para tus propios logs o una tablet de policía.

AddEventHandler('agency-blackmarket:deal', function(source, kind, data) if kind == 'buy' then print(('%s spent %d at %s'):format(GetPlayerName(source), data.total, data.dealer)) end end)
agency-blackmarket:dealerMoved

Se dispara en el servidor con (dealerId, pos, reason) cuando un dealer cambia de lugar. reason es rotate, return, admin o export.

Ver ejemplo

Sigue a los dealers, por ejemplo para un trabajo de informante o de detective.

AddEventHandler('agency-blackmarket:dealerMoved', function(dealerId, pos, reason) print(('%s moved to %.1f, %.1f (%s)'):format(dealerId, pos.x, pos.y, reason)) end)
agency-blackmarket:flashSale

Se dispara en el servidor con (items, minutes) cuando empieza una oferta relámpago. items asigna a cada objeto rebajado su descuento en porcentaje.

Ver ejemplo

Anuncia una oferta relámpago en tus propios canales.

AddEventHandler('agency-blackmarket:flashSale', function(items, minutes) for item, discount in pairs(items) do print(('%s is %d%% off for %d minutes'):format(item, discount, minutes)) end end)

07Agency-Minerjob V2

Un trabajo de minería con siete zonas, tres herramientas, 100 niveles, hornos, corte de gemas, contratos y un mercado con precios variables, todo en un mismo menú.

Compatible con scripts de misiones y logros que reaccionan a la minería, scripts de economía y trabajos que consultan los precios del mercado, menús radiales y teléfonos que abren el menú, y herramientas de administración que establecen niveles o conceden XP.

Documentación completa

Exports de cliente

OpenMenu(page)

Abre el menú, por ejemplo, desde un menú radial o una aplicación del teléfono. page puede ser overview (predeterminado), market, tools, smelter, cutting o contracts.

Ver ejemplo

Abre el menú en la página del mercado desde tu propio menú radial o aplicación del teléfono.

-- an entry in your radial menu exports['Agency-Minerjob']:OpenMenu('market')
CloseMenu()

Cierra el menú y devuelve el ratón al juego.

Ver ejemplo

Cierra el menú antes de que se abra tu propio menú.

exports['Agency-Minerjob']:CloseMenu()
IsMenuOpen()

True mientras el menú está abierto.

Ver ejemplo

Evita que tu menú se abra encima del menú de minería.

if not exports['Agency-Minerjob']:IsMenuOpen() then -- open your own menu end
IsWorking()

True mientras el jugador está minando o cortando una gema.

Ver ejemplo

Evita que tu script interrumpa la animación de minería o corte.

if exports['Agency-Minerjob']:IsWorking() then return -- no emotes while mining end
GetLevel()

El nivel de minería del jugador.

Ver ejemplo

Lee el nivel del jugador, por ejemplo, para un HUD o una aplicación del teléfono.

local level = exports['Agency-Minerjob']:GetLevel() print('Mining level', level)

Exports de servidor

GetLevel(source)

El nivel de minería de un jugador, 0 si se desconoce al jugador.

Ver ejemplo

Comprueba el nivel de minería en el servidor antes de que tu script permita una acción.

if exports['Agency-Minerjob']:GetLevel(source) < 25 then return -- the quarry job needs level 25 end
GetProgress(source)

Nivel y progreso como { level, xp, need, pct, max }.

Ver ejemplo

Lee el nivel y el progreso, por ejemplo, para una aplicación del teléfono o una tabla de clasificación.

local p = exports['Agency-Minerjob']:GetProgress(source) print(p.level, p.xp, p.need, p.pct)
AddXp(source, amount)

Añade XP, aplica las subidas de nivel y muestra sus mensajes. Devuelve true si se encontró al jugador.

Ver ejemplo

Otorga XP de minería como recompensa de tu propia misión o evento.

-- a quest reward exports['Agency-Minerjob']:AddXp(source, 250)
SetLevel(source, level)

Establece el nivel entre 1 y el nivel máximo y lo inicia con 0 XP.

Ver ejemplo

Establece el nivel, por ejemplo, desde tu propia herramienta de administración.

exports['Agency-Minerjob']:SetLevel(source, 10)
GetStats(source)

Lo que ha hecho el jugador hasta ahora: { mined, smelted, cut, broken, sold, earned, contracts }.

Ver ejemplo

Lee lo que un jugador ha minado y ganado, para una tabla de clasificación o logros.

local stats = exports['Agency-Minerjob']:GetStats(source) print(stats.mined, stats.earned)
GetPrice(item)

El precio de mercado actual de un objeto por unidad.

Ver ejemplo

Lee el precio actual del mercado, por ejemplo, para un indicador bursátil o una tienda que compra los mismos artículos.

local price = exports['Agency-Minerjob']:GetPrice('gold_bar') print('Gold bar pays', price)

Eventos

agency-minerjob:mined

Se activa en el servidor después de que una acción de minería otorgue una recompensa, con source, item, count y la zona minera. Escúchalo con AddEventHandler, por ejemplo, para misiones o estadísticas.

Ver ejemplo

Reacciona en el servidor a cada actividad de minería que haya otorgado una recompensa.

AddEventHandler('agency-minerjob:mined', function(source, item, count, area) -- count mined ore for a quest end)
agency-minerjob:sold

Se activa en el servidor después de una venta, con source, item, count y el total pagado.

Ver ejemplo

Reacciona en el servidor a cada venta, para los registros o las estadísticas.

AddEventHandler('agency-minerjob:sold', function(source, item, count, total) -- log big sales end)
agency-minerjob:contract

Se activa en el servidor cuando se entrega un contrato, con source, item, count y el pago.

Ver ejemplo

Reacciona en el servidor cuando se haya entregado un contrato.

AddEventHandler('agency-minerjob:contract', function(source, item, count, pay) -- an achievement for delivered contracts end)

08Agency-Repairkit V2

Daño de vehículos realista con cuatro kits de reparación, controles de habilidad y un bono de mecánico.

Encaja con trabajos de mecánico y grúa, tiendas que venden kits, y cualquier script que deba reaccionar a una reparación terminada o al nivel de daño del vehículo que conduce un jugador.

Documentación completa

Exports de cliente

IsRepairing()

Devuelve true mientras el jugador local está trabajando en un vehículo, por ejemplo para mantener cerrado tu propio menú.

Ver ejemplo

Mantiene tu propio menú cerrado mientras el jugador repara un vehículo.

if exports['Agency-Repairkit']:IsRepairing() then return -- keep your menu closed while the player works end
GetVehicleCondition(vehicle)

Motor, carrocería y tanque en %, los neumáticos, la suciedad, el nivel de daño y si el tanque pierde combustible. Sin ningún argumento, lee el vehículo en el que está sentado el jugador.

Ver ejemplo

Lee el estado del vehículo que conduce el jugador.

local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) local cond = exports['Agency-Repairkit']:GetVehicleCondition(vehicle) if cond and cond.level == 'critical' then print(('Engine %d %%, leaking: %s'):format(cond.engine, tostring(cond.leaking))) end
OpenMenu()

Abre el menú de /arepairkit, por ejemplo desde una app de teléfono o un menú radial.

Ver ejemplo

Abre el menú del kit de reparación desde tu propio menú radial o app de teléfono.

-- an entry in your radial menu or phone app exports['Agency-Repairkit']:OpenMenu()
CloseMenu()

Cierra el menú y devuelve el ratón al juego.

Ver ejemplo

Cierra el menú, por ejemplo antes de una cutscene propia.

-- before your own cutscene starts exports['Agency-Repairkit']:CloseMenu()
IsMenuOpen()

Devuelve true mientras el menú está abierto.

Ver ejemplo

Comprueba si el menú está abierto antes de que aparezca tu propia interfaz.

if exports['Agency-Repairkit']:IsMenuOpen() then return -- the player is busy in the repair kit menu end

Exports de servidor

UseKit(source, kit)

Inicia un kit para un jugador como si se hubiera usado el objeto, con todas las comprobaciones. Devuelve true, o false y el motivo. Para inventarios y tiendas personalizados.

Ver ejemplo

Inicia el kit de carretera para un jugador desde un inventario personalizado.

-- your own inventory: start the repair when the item is used local ok, reason = exports['Agency-Repairkit']:UseKit(source, 'basic') if not ok then print('Repair refused: ' .. tostring(reason)) end
GiveKit(source, kit, amount)

Añade kits al inventario de un jugador a través del inventario detectado. Devuelve true si tiene éxito.

Ver ejemplo

Da a un jugador dos kits de neumáticos a través del inventario detectado.

-- a shop NPC sells two tyre kits exports['Agency-Repairkit']:GiveKit(source, 'tyre', 2)
IsRepairing(source)

True mientras ese jugador está trabajando en un vehículo.

Ver ejemplo

Omite una tarea mientras el jugador está reparando.

if exports['Agency-Repairkit']:IsRepairing(source) then return -- no new job task while the player is busy end
GetKits()

Cada kit configurado con su objeto, etiqueta, tipo de trabajo y duración.

Ver ejemplo

Lista todos los kits con su objeto y su etiqueta.

for name, kit in pairs(exports['Agency-Repairkit']:GetKits()) do print(name, kit.item, kit.label, kit.duration) end
useKit(event, item, inventory, slot, data)

El export de objeto de ox_inventory. Las entradas de objetos en install/ox_inventory.lua apuntan a él; no está pensado para llamarse directamente.

Ver ejemplo

La entrada de objeto que conecta ox_inventory con los kits.

-- ox_inventory/data/items.lua ['agencyrepairkit'] = { label = 'Roadside Repair Kit', weight = 1500, consume = 0, server = { export = 'Agency-Repairkit.useKit' }, },

Eventos

agency-repairkit:repaired

Se dispara en el servidor con (source, netId, kit) después de que una reparación termine y el kit se haya agotado. Útil para registros, pagos o progreso del trabajo.

Ver ejemplo

Registra cada reparación terminada en el servidor.

AddEventHandler('agency-repairkit:repaired', function(src, netId, kit) print(('%s finished %s on vehicle %s'):format(GetPlayerName(src), kit, netId)) end)
agency-repairkit:client:repaired

Se dispara en el cliente del jugador que repara con (netId, kit) cuando una reparación se completa.

Ver ejemplo

Reacciona en el cliente del jugador que repara.

AddEventHandler('agency-repairkit:client:repaired', function(netId, kit) if kit == 'advanced' then -- play a sound or advance a job step end end)
agency-repairkit:client:damageLevel

Se dispara en el cliente del conductor con (level, vehicle) cada vez que cambia el nivel de daño: ok, light, medium, heavy o critical.

Ver ejemplo

Sigue el nivel de daño del vehículo que conduce el jugador.

AddEventHandler('agency-repairkit:client:damageLevel', function(level, vehicle) if level == 'critical' then -- offer the tow-truck job end end)

09Agency-Vehiclekeys V2

Llaves universales para vehículos con llavero y mando, llaves guardadas y temporales, llaves de trabajo, ganzuado y puenteado con alertas a la policía, y una página de administración.

Ideal para garajes, tiendas de vehículos y alquileres que entregan llaves, scripts de trabajo con vehículos propios, scripts de atracos y robos de coches que deben comprobar o entregar llaves, HUD que muestran el estado del motor, y menús radiales o teléfonos que abren el llavero.

Documentación completa

Exports de cliente

HasKeys(plate)

Es true cuando el jugador tiene una llave para esta matrícula: de propietario, compartida o temporal. Los vehículos de trabajo se abren por su modelo y no se cuentan aquí.

Ver ejemplo

Comprueba la llave antes de que tu script permita al jugador usar el coche.

if exports['Agency-Vehiclekeys']:HasKeys(GetVehicleNumberPlateText(vehicle)) then -- the player may drive this car end
GetKeys()

Todas las llaves del jugador en una lista de { plate, kind }. kind puede ser owner, shared o temp.

Ver ejemplo

Muestra todas las llaves del jugador, por ejemplo, en una aplicación para el teléfono.

for _, key in ipairs(exports['Agency-Vehiclekeys']:GetKeys()) do print(key.plate, key.kind) end
ToggleLock(vehicle)

Bloquea o desbloquea un vehículo para el que el jugador tiene una llave, con la misma animación y comprobaciones que G. Si no hay ningún vehículo, se usa el más cercano dentro del alcance.

Ver ejemplo

Cierra o abre el coche más cercano desde tu propio menú radial.

-- an entry in your radial menu exports['Agency-Vehiclekeys']:ToggleLock()
ToggleEngine()

Arranca o detiene el motor del vehículo que conduce el jugador, como U.

Ver ejemplo

Arranca o apaga el motor desde tu propio menú o HUD del coche.

exports['Agency-Vehiclekeys']:ToggleEngine()
OpenMenu()

Abre el llavero, por ejemplo, desde un menú radial o una aplicación del teléfono.

Ver ejemplo

Abre el llavero desde tu propio menú radial o aplicación para el teléfono.

-- an entry in your radial menu exports['Agency-Vehiclekeys']:OpenMenu()
CloseMenu()

Cierra el llavero y devuelve el control del ratón al juego.

Ver ejemplo

Cierra el llavero antes de que se abra tu propio menú.

exports['Agency-Vehiclekeys']:CloseMenu()
IsMenuOpen()

Es true mientras el llavero está abierto.

Ver ejemplo

Evita que tu menú se abra sobre el llavero.

if not exports['Agency-Vehiclekeys']:IsMenuOpen() then -- open your own menu end
useLockpick()

Inicia un intento de ganzúa en el coche situado frente al jugador o el puenteo del encendido desde el asiento del conductor. Pensado para objetos de ox_inventory: client = { export = 'Agency-Vehiclekeys.useLockpick' }.

Ver ejemplo

Permite que los jugadores usen la ganzúa desde el menú de ox_inventory.

-- ox_inventory/data/items.lua ['lockpick'] = { label = 'Lockpick', client = { export = 'Agency-Vehiclekeys.useLockpick' }, },

Exports de servidor

GiveKeys(source, plate, mode, hours)

Entrega una llave. El modo 'temp' (predeterminado) es una llave temporal, opcionalmente por un número de horas; 'perm' es una llave guardada. Se puede usar un source o un identifier.

Ver ejemplo

Entrega una llave temporal, por ejemplo, cuando se alquila un coche o lo genera un trabajo.

-- a rental that lasts two hours exports['Agency-Vehiclekeys']:GiveKeys(source, plate, 'temp', 2)
RemoveKeys(source, plate)

Retira una llave compartida o temporal. Devuelve true si había una.

Ver ejemplo

Retira la llave cuando termina el alquiler o el trabajo.

exports['Agency-Vehiclekeys']:RemoveKeys(source, plate)
HasKeys(source, plate)

Es true cuando el jugador tiene una llave para la matrícula, incluidas las llaves de trabajo para un vehículo cercano.

Ver ejemplo

Comprueba en el servidor que el jugador realmente tiene la llave.

if not exports['Agency-Vehiclekeys']:HasKeys(source, plate) then return -- no key, no delivery end
SetOwner(source, plate)

Convierte al jugador en propietario de una matrícula, para garajes y tiendas en servidores standalone. El propietario anterior pierde la llave.

Ver ejemplo

Asigna el coche al comprador en servidores independientes.

-- your standalone vehicle shop, after the purchase exports['Agency-Vehiclekeys']:SetOwner(source, plate)
RemoveOwner(plate)

Elimina el propietario que este script guardó para una matrícula.

Ver ejemplo

Elimina el propietario guardado cuando se vende o se desguaza el coche.

exports['Agency-Vehiclekeys']:RemoveOwner(plate)
GetOwner(plate)

El identifier del propietario y su procedencia: 'framework' para vehículos en propiedad de QBCore, Qbox o ESX, 'store' para propietarios guardados por este script.

Ver ejemplo

Busca al propietario de una matrícula, para herramientas policiales o scripts de depósito de vehículos.

local owner, from = exports['Agency-Vehiclekeys']:GetOwner(plate) print(owner, from) -- identifier, 'framework' or 'store'
GetKeyHolders(plate)

Todos los demás que tienen una llave para la matrícula, en una lista de { identifier, kind, name, expires }.

Ver ejemplo

Muestra quién tiene una llave de un coche, por ejemplo, en un ordenador policial.

for _, h in ipairs(exports['Agency-Vehiclekeys']:GetKeyHolders(plate)) do print(h.name, h.kind) end
SetVehicleLocked(vehicle, locked)

Bloquea o desbloquea un vehículo para todos, sin comprobar si tienen llave. Para scripts que necesitan abrir un coche.

Ver ejemplo

Abre o cierra un coche para todos, sin comprobar si tienen la llave.

-- a heist script opens the car for the crew exports['Agency-Vehiclekeys']:SetVehicleLocked(vehicle, false)
IsVehicleLocked(vehicle)

True cuando el vehículo está bloqueado.

Ver ejemplo

Lee el estado del cierre en el servidor.

if exports['Agency-Vehiclekeys']:IsVehicleLocked(vehicle) then -- the car is closed end
GetFramework()

El framework que detectó el script: qbcore, esx o standalone.

Ver ejemplo

Permite que tu script use el framework que detectó el script de llaves.

if exports['Agency-Vehiclekeys']:GetFramework() == 'standalone' then -- give the key yourself end

Eventos

Agency:Keys:GiveServer

Solicita una llave temporal para una matrícula, como hacen Agency Garage y Agency Vehicleshop. Actívalo desde el cliente con la matrícula. El coche debe estar junto al jugador o ser suyo.

Ver ejemplo

Solicita una llave para un coche que acaba de aparecer junto al jugador.

-- client side, after your garage spawned the car TriggerServerEvent('Agency:Keys:GiveServer', GetVehicleNumberPlateText(vehicle))
qb-vehiclekeys:server:AcquireVehicleKeys

El evento de llaves de qb-vehiclekeys, interpretado del mismo modo, para que los garajes y tiendas creados para qb-vehiclekeys sigan funcionando.

Ver ejemplo

Los scripts escritos para qb-vehiclekeys siguen funcionando sin cambios.

TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate)
vehiclekeys:client:SetOwner

Evento de cliente que muchos garajes y tiendas activan después de generar un coche. Otorga una llave temporal para esa matrícula tras realizar las mismas comprobaciones en el servidor.

Ver ejemplo

El evento que muchos garajes activan después de generar un coche entrega una llave al jugador.

TriggerEvent('vehiclekeys:client:SetOwner', plate)
qb-vehiclekeys:client:AddKeys

El evento de cliente de qb-vehiclekeys para entregar llaves, interpretado del mismo modo.

Ver ejemplo

Entrega una llave, como hacía qb-vehiclekeys.

TriggerEvent('qb-vehiclekeys:client:AddKeys', plate)
simple_carkeys:client:toggleEngine

Se activa en el cliente cuando se enciende o se apaga el motor con una llave, para que los HUD, como Agency-Hud, puedan seguir el estado del motor.

Ver ejemplo

Permite que el HUD siga el estado del motor al arrancarlo o apagarlo con una llave.

AddEventHandler('simple_carkeys:client:toggleEngine', function() -- update the engine icon of your HUD end)

10Agency-Vending

Máquinas expendedoras con propiedad del jugador, pago en efectivo o con tarjeta AgencyPay.

Combina con el export AgencyPay de Agency-Phone para compras con tarjeta. Úsalo en trabajos donde los jugadores son dueños de ubicaciones de vending (gasolineras, oficinas, apartamentos) para generar ingresos pasivos.

Documentación completa

Eventos

agency-vending:notify

Despachador generico de notificaciones desde el server para la resource vending.

Ver ejemplo

Envia una notificacion generica con tema vending al jugador tras una compra.

-- Plug a vending receipt into a custom logger via notify event TriggerClientEvent('agency-vending:notify', src, 'success', 'Receipt #4821 saved to wallet')
agency-vending:startAgencyPay

Inicia un checkout de AgencyPay mediante la integracion agency-phone con metadatos del comercio.

Ver ejemplo

Inicia un pago Agency Pay por telefono con los datos del comercio del quiosco.

-- Pop a phone Agency Pay flow when a player taps a kiosk TriggerClientEvent('agency-vending:startAgencyPay', src, { merchant = 'Sprunk Co', amount = 4.50, ref = 'flash_sale_01' })
agency-vending:buyMachineResult

Resultado de la compra de una maquina, enviado a la NUI para feedback.

Ver ejemplo

Reenvia el resultado de la compra de la maquina a una NUI de tienda personalizada.

-- Forward buy-machine outcome to a custom shop UI TriggerClientEvent('agency-vending:buyMachineResult', src, { success = true, machineId = 102 })
agency-vending:machineCreated

Broadcast de que se creo una nueva maquina del jugador; actualiza la cache local y notifica al propietario.

Ver ejemplo

Transmite una maquina expendedora recien creada por jugador a todos los clientes.

-- Cache new owner-machine instantly when business script registers it TriggerClientEvent('agency-vending:machineCreated', -1, { id = 142, owner = identifier, type = 'sprunk' })
agency-vending:openManagementVerified

Apertura verificada en el server del menu de gestion del propietario con items, ingresos y etiqueta.

Ver ejemplo

Abre la UI de gestion verificada con items, ingresos y etiqueta tras la autorizacion.

-- After server-side ownership check open management menu with stock TriggerClientEvent('agency-vending:openManagementVerified', src, { items = items, earnings = 1240, label = 'East LS Sprunk' })
agency-vending:openOwnedList

Abre la NUI de resumen del propietario que lista todas las maquinas del jugador con nombres de calles.

Ver ejemplo

Abre la NUI de resumen del propietario listando todas las maquinas del jugador.

-- Hotkey opens the owner overview NUI listing all owned machines TriggerClientEvent('agency-vending:openOwnedList', src)
agency-vending:spawnMachineCreated

Broadcast del spawner de admin de que se creo una nueva entidad de maquina.

Ver ejemplo

Notifica a todos los clientes que un admin genero una maquina expendedora.

-- Custom mapping tool tracks newly admin-spawned machine TriggerClientEvent('agency-vending:spawnMachineCreated', -1, { entity = netId, model = 'prop_vend_soda_01', id = 7 })
agency-vending:spawnMachineDeleted

Broadcast del spawner de admin de que se elimino una entidad de maquina spawneada.

Ver ejemplo

Informa a todos los clientes que un admin elimino una maquina ya generada.

-- Mapping tool removes a deleted spawned machine from cache TriggerClientEvent('agency-vending:spawnMachineDeleted', -1, 7)
agency-vending:openSpawnerUI

Abre la NUI del spawner de admin tras pasar la verificacion de permisos en el server.

Ver ejemplo

Abre la NUI del spawner admin para colocar maquinas en el mundo.

-- Custom command opens the admin spawner UI after permission passes TriggerClientEvent('agency-vending:openSpawnerUI', src)
agency-vending:buyMachine

El jugador compra una maquina expendedora de un tipo dado en las coords/heading indicados.

Ver ejemplo

El jugador compra una maquina Sprunk en sus coordenadas actuales a un NPC.

-- Custom NPC sells vending machines via dialog local coords = GetEntityCoords(PlayerPedId()) local heading = GetEntityHeading(PlayerPedId()) TriggerServerEvent('agency-vending:buyMachine', 'sprunk', coords, heading)
agency-vending:requestOwnedList

El llamador solicita la lista de sus maquinas propias para la UI de resumen de propietario.

Ver ejemplo

Solicita al servidor la lista de maquinas expendedoras propiedad del jugador.

-- Refresh owner overview after a balance/restock action elsewhere TriggerServerEvent('agency-vending:requestOwnedList')
agency-vending:requestMachines

El llamador solicita al server una sincronizacion completa de todas las maquinas de jugadores.

Ver ejemplo

Solicita una sincronizacion completa y reciente de todas las maquinas del jugador.

-- Scan for nearby machines after teleport finished TriggerServerEvent('agency-vending:requestMachines')
agency-vending:requestManagement

Apertura verificada en el server de la UI de gestion para una maquina propia.

Ver ejemplo

Solicita la UI de gestion verificada por el servidor para la maquina seleccionada.

-- Owner UI requests verified management menu for a clicked machine TriggerServerEvent('agency-vending:requestManagement', machineId)
agency-vending:requestSpawnedMachines

El llamador solicita la lista de maquinas generadas por admin para la UI del spawner.

Ver ejemplo

Solicita la lista de todas las maquinas generadas por admin para la UI del spawner.

-- Admin spawner UI fetches all currently spawned machines TriggerServerEvent('agency-vending:requestSpawnedMachines')
agency-vending:adminSpawnMachine

Admin coloca un nuevo prop de maquina expendedora en el server tras verificar permisos.

Ver ejemplo

El admin genera una nueva maquina de snacks tras la verificacion de permisos.

-- Admin places a snack machine via custom slash command TriggerServerEvent('agency-vending:adminSpawnMachine', 'snack', vector3(120.5, -1280.7, 29.3), 90.0)
agency-vending:adminDeleteSpawned

Admin elimina en el server un prop de maquina expendedora previamente generado.

Ver ejemplo

El admin elimina del lado servidor un prop de maquina previamente generado.

-- Admin removes a misplaced machine via map editor button TriggerServerEvent('agency-vending:adminDeleteSpawned', spawnedId)

11Agency-Admin

Panel de administración completo con UI de cristal, chat AgencyAI y más de 60 herramientas.

Los eventos son perfectos como "primitivas" para anti-cheat, bots de moderación o herramientas automáticas, llámalos desde tu script de servidor para freeze/kick/notify sin escribir tu propia UI.

Documentación completa

Eventos

agency-admin:client:refreshStaffRanks

Hace que el client recargue los datos de rangos de staff.

Ver ejemplo

Actualiza la cache de rangos de staff para cada admin en linea tras un ascenso.

-- After auto-promotion, refresh staff ranks for all online admins for _, src in ipairs(GetPlayers()) do TriggerClientEvent('agency-admin:client:refreshStaffRanks', tonumber(src)) end
agency-admin:client:freezeTime

Congela o descongela la hora del mundo en el client a la hora/minuto dados.

Ver ejemplo

El anti-cheat congela el reloj del mundo al mediodia mientras revisa a un jugador.

-- Anti-cheat halts world time during an investigation local hour, minute = 12, 0 TriggerClientEvent('agency-admin:client:freezeTime', src, true, hour, minute)
agency-admin:client:dashboardValue

Envia un unico valor de tarjeta del panel (p. ej. contador en vivo) a la UI del panel.

Ver ejemplo

Envia el conteo de jugadores en linea en vivo a la tarjeta del panel admin.

-- Stream live online player count to admin dashboard cards local count = #GetPlayers() TriggerClientEvent('agency-admin:client:dashboardValue', adminSrc, 'players_online', count)
agency-admin:client:teleportToCoords

Teletransporta al llamador a las coordenadas del mundo indicadas.

Ver ejemplo

Teletransporta a un jugador a las coordenadas guardadas tras un evento de reaparicion.

-- Job script teleports a player back to last save point on respawn local coords = vector3(-1037.7, -2737.6, 20.16) TriggerClientEvent('agency-admin:client:teleportToCoords', src, coords)
agency-admin:client:announce

Muestra un banner de anuncio en todo el servidor.

Ver ejemplo

Transmite un banner de anuncio para todo el servidor desde un remitente nombrado.

-- Event bot announces a community contest start TriggerClientEvent('agency-admin:client:announce', -1, 'Event Crew', 'Heist contest starts in 5 minutes!')
agency-admin:client:notify

Envía una notificación a un administrador específico.

Ver ejemplo

Envia una notificacion con estilo al jugador cuando su solicitud es aprobada.

-- Whitelist bot informs a player they passed the application TriggerClientEvent('agency-admin:client:notify', src, 'Whitelist', 'Application approved!', 'success', 8000)
agency-admin:client:freeze

Congela al jugador objetivo en su sitio.

Ver ejemplo

Congela a un jugador sospechoso para que el staff pueda investigar sin que se mueva.

-- Anti-cheat freezes a suspect player while staff investigates TriggerClientEvent('agency-admin:client:freeze', suspectSrc, true)
agency-admin:client:heal

Restaura HP/armadura del objetivo.

Ver ejemplo

Cura por completo al paciente despues de finalizar su tratamiento medico RP.

-- Medic job script fully heals the player after RP treatment ends TriggerClientEvent('agency-admin:client:heal', patientSrc)
agency-admin:client:revive

Revive al jugador objetivo.

Ver ejemplo

Revive a un jugador derribado tras completar con exito el minijuego de SEM.

-- EMS revive minigame succeeds, server marks player alive again TriggerClientEvent('agency-admin:client:revive', downedSrc)
agency-admin:client:teleport

Teletransporta al jugador local al vector de coordenadas indicado.

Ver ejemplo

Teletransporta al jugador local a las coordenadas proporcionadas.

-- Tutorial system teleports new player to spawn pad on first join local coords = vector3(245.7, -871.5, 30.5) TriggerClientEvent('agency-admin:client:teleport', src, coords)
agency-admin:client:openMenu

Abre la UI del panel de administración (requiere permiso ACE).

Ver ejemplo

Abre la UI principal del panel de admin para el staff cuando entra de servicio.

-- Auto-open admin panel for staff right after they switch on duty TriggerClientEvent('agency-admin:client:openMenu', src)
agency-admin:client:openToolsMenu

Disparador desde el server para abrir el submenu de herramientas de admin.

Ver ejemplo

Abre el submenu de herramientas admin cuando se pulsa el atajo del staff.

-- Quick-action keybind opens the admin tools sub-menu TriggerClientEvent('agency-admin:client:openToolsMenu', src)
agency-admin:client:closeMenu

Disparador desde el server para cerrar la UI del panel de admin.

Ver ejemplo

Fuerza el cierre de la UI del panel admin cuando se investiga al propio admin.

-- Force-close the panel when admin gets reported themselves TriggerClientEvent('agency-admin:client:closeMenu', adminSrc)
agency-admin:client:openClothingMenu

Disparador desde el server para abrir el menu de ropa en el juego para el jugador.

Ver ejemplo

Abre el menu de ropa despues de que el jugador compra un atuendo a un sastre.

-- Tailor NPC opens clothing menu after a uniform purchase TriggerClientEvent('agency-admin:client:openClothingMenu', src)
agency-admin:server:requestPlayers

Solicita la lista actual de jugadores conectados para el panel de admin.

Ver ejemplo

Solicita al servidor la lista mas reciente de jugadores en linea para el panel.

-- Custom dashboard widget refreshes its players list TriggerServerEvent('agency-admin:server:requestPlayers')
agency-admin:server:requestPanelPermissions

Solicita la tabla de permisos del panel para el editor de rangos.

Ver ejemplo

Pide al servidor la tabla de permisos del panel usada por el editor de rangos.

-- Permission editor needs the latest panel permission map TriggerServerEvent('agency-admin:server:requestPanelPermissions')
agency-admin:server:requestStaffRanks

Solicita el conjunto de datos de rangos de staff para el panel.

Ver ejemplo

Solicita el conjunto completo de rangos de staff para un widget CRM personalizado.

-- Sync staff ranks dataset into a custom CRM widget TriggerServerEvent('agency-admin:server:requestStaffRanks')
agency-admin:server:createRank

Crea un nuevo rango de staff con metadatos y permisos.

Ver ejemplo

Crea un nuevo rango de staff desde una sincronizacion de portal de RR.HH. externo.

-- Sync rank from external HR portal -> create matching staff rank TriggerServerEvent('agency-admin:server:createRank', { name = 'Senior Mod', color = '#a855f7', priority = 50 })
agency-admin:server:requestMyPermissions

El llamador solicita su propio conjunto de permisos del panel ya resuelto.

Ver ejemplo

Solicita el conjunto de permisos del panel del propio llamador al abrir la UI.

-- Fetch caller's resolved permission set before showing dev tools TriggerServerEvent('agency-admin:server:requestMyPermissions')
agency-admin:server:requestSync

El llamador pide al server que envie el payload de sync estandar (servicio/permisos/etc.).

Ver ejemplo

Obliga al servidor a enviar el paquete de sincro duty/perms estandar al llamador.

-- Force a fresh sync after the player reconnects TriggerServerEvent('agency-admin:server:requestSync')
agency-admin:server:requestDutyRank

El llamador solicita su informacion actual de rango admin en servicio.

Ver ejemplo

Solicita el rango de duty admin actual del llamador para un overlay HUD personalizado.

-- Display admin's duty rank on a custom HUD overlay TriggerServerEvent('agency-admin:server:requestDutyRank')
agency-admin:server:requestSpawnedObjects

El llamador solicita la lista de objetos del mundo generados por admin.

Ver ejemplo

Solicita la lista de objetos del mundo generados por admin para el overlay del minimapa.

-- Map editor needs to draw all admin-spawned objects on a minimap TriggerServerEvent('agency-admin:server:requestSpawnedObjects')

12Agency-Anticheat

Un anticheat para FiveM que llega a conocer tu servidor. Comprueba a cada jugador en el lado del servidor, donde un cheat no puede esconderse: el godmode, el supersalto, los multiplicadores de daño, los teletransportes y las armas prohibidas se leen del estado de juego sincronizado. Las comprobaciones cruzadas atrapan lo que los valores sueltos pasan por alto: un golpe letal que la víctima sobrevive, una baja con pistola a 500 metros, estadísticas de puntería y varias señales débiles que juntas forman un patrón. La protección del mundo cancela tanques, explosiones, fuego y spam de partículas generados antes de que nadie los vea. Los bans cubren identificadores y tokens de hardware, así que una cuenta nueva en el mismo PC se queda fuera, y un lockdown cierra el servidor por sí solo cuando atacan varios tramposos a la vez. Una instalación nueva funciona 48 horas en modo Learning y no castiga a nadie. Su propio panel dentro del juego (/acpanel) muestra todo en directo y ejecuta cada acción, en cualquier servidor. Con Agency Admin, sus admins quedan exentos automáticamente y la misma página también está dentro de ese panel; con AgencyMod los bans llegan también a tu Discord. Sin base de datos, sin suscripción, 25 idiomas, QBCore, Qbox, ESX o standalone.

Documentación completa

Exports de servidor

AllowTeleport(source: number, seconds?: number)

Llámalo justo antes de que tu script mueva a un jugador, así el salto no cuenta como teletransporte. Por defecto 5 segundos.

SetExempt(source: number, seconds: number)

Exime a un jugador de todas las comprobaciones durante un tiempo, por ejemplo en un evento con Godmode. 0 lo termina.

Flag(source: number, detail: string)

Tu propia detección. Cuenta como cualquier otro hit, bajo la detección external.

BanPlayer(source: number, reason: string, duration?: number, by?: string)

Banea a un jugador conectado por identificadores y tokens de hardware. Duración en segundos, 0 es permanente. Devuelve el ID del ban.

KickPlayer(source: number, reason: string, by?: string)

Expulsa a un jugador y lo registra en Discord.

Unban(banId: string, by?: string)

Levanta un ban, por ejemplo AC-7K3P9.

SetMode(mode: string)

Cambia el modo en vivo: learning, relaxed, balanced o strict.

SetDetection(key: string, enabled: boolean)

Activa o desactiva una detección en vivo.

SetLockdown(on: boolean, by?: string)

Inicia o termina un lockdown.

IsExempt(source: number)

Devuelve si un jugador está exento de las comprobaciones.

IsKnownPlayer(source: number)

Devuelve si un jugador ha jugado aquí el tiempo suficiente sin detecciones para considerarse conocido.

GetStatus()

Devuelve todo lo que muestra el panel: modo, capas, conocimiento, cifras de hoy, carga del servidor y cada detección con su regla.

GetDetections(limit?: number)

Devuelve las últimas detecciones, las más recientes primero.

GetBans()

Devuelve cada ban activo con sus pruebas.

GetPlayers()

Devuelve los jugadores conectados con puntuación de riesgo y strikes abiertos, el mayor riesgo primero.

Eventos

Agency-Anticheat:detection

Se dispara en cada detección con jugador, detección, detalle, acción y strikes.

Agency-Anticheat:banned

Se dispara tras cada ban con el registro completo del ban.

Agency-Anticheat:unbanned

Se dispara después de que se levante un ban.

Agency-Anticheat:lockdown

Se dispara cuando un lockdown comienza o termina.

Agency-Anticheat:learned

Se dispara cuando el anticheat aprendió un nuevo punto de teletransporte de tu servidor.

13Agency-Reports V2

Sistema de reportes moderno con chat en vivo por reporte y respuestas asistidas por IA.

Úsalo como columna vertebral de "ticket de soporte" para todo tu servidor. Tus scripts pueden abrir reportes automáticamente cuando algo va mal (vehículos atascados, items duplicados, guardados SQL fallidos) para revisión del admin.

Documentación completa

Eventos

agency-reports:client:notify

Dispara una notificación de "nuevo reporte" a un admin específico.

Ver ejemplo

Notificacion del servidor que respeta la preferencia de notificacion UI del jugador.

-- Server tells client a new admin reply landed TriggerClientEvent('agency-reports:client:notify', source, 'New reply on your report', 'info')
agency-reports:client:openPlayerUI

Abre la UI de reportes del lado del jugador.

Ver ejemplo

Abre la UI de reportes con categorias, reportes abiertos y ajustes AI/Discord.

-- Open the player report UI on a custom keybind local categories = { 'Bug', 'Player report', 'Stuck' } TriggerEvent('agency-reports:client:openPlayerUI', categories, {}, {}, {})
agency-reports:client:openAdminUI

Abre la lista de reportes del lado del admin.

Ver ejemplo

Abre el panel admin de reportes con el conjunto de datos completo.

-- Force-open the admin reports dashboard from a staff command TriggerEvent('agency-reports:client:openAdminUI', { reports = {}, total = 0 })
agency-reports:client:teleport

Teletransporta al admin que llama a las coordenadas indicadas (para acciones goto).

Ver ejemplo

Teletransporta al admin a las coordenadas proporcionadas para acciones goto.

-- Goto-action: teleport the responding admin to the report scene TriggerEvent('agency-reports:client:teleport', vector3(-247.6, -2010.2, 30.1))
agency-reports:client:healSelf

Cura por completo el ped del admin que llama.

Ver ejemplo

Cura completamente el ped del admin tras atender un reporte.

-- Heal admin after a hostile scene to keep them in service TriggerEvent('agency-reports:client:healSelf')
agency-reports:server:submitReport

Envía un nuevo reporte desde fuera de la UI.

Ver ejemplo

El jugador envia un nuevo reporte con titulo, categoria y descripcion.

-- Player submits a quick stuck-at-pier report TriggerServerEvent('agency-reports:server:submitReport', 'Stuck at pier', 'Stuck', 'Vehicle wedged under pier - cant move')
agency-reports:server:requestPlayerData

El llamador solicita su propio payload de reporte; opcionalmente abre la UI de jugador en la respuesta.

Ver ejemplo

El llamador pide su carga de reportes y opcionalmente abre la UI del jugador.

-- Pull fresh data and (optionally) auto-open the player UI TriggerServerEvent('agency-reports:server:requestPlayerData', true)
agency-reports:server:requestAdminData

Admin solicita el conjunto completo de reportes y abre el dashboard de admin si tiene permiso.

Ver ejemplo

El admin pide el dataset completo y abre el panel de admin si esta autorizado.

-- Admin staff opens the dashboard after going on duty TriggerServerEvent('agency-reports:server:requestAdminData')
agency-reports:server:sendChatMessage

Envía un mensaje de chat a un reporte abierto.

Ver ejemplo

Publica un mensaje de chat en un hilo de reporte especifico para admin o jugador.

-- Player posts a follow-up chat message into report #42 TriggerServerEvent('agency-reports:server:sendChatMessage', 42, 'Still stuck, any ETA?')

14Agency-Doorlock

Puertas con cerradura, configuración en el juego y acceso por puerta según trabajo, banda o jugador.

Para scripts de vivienda, propiedades o llaves: dar a un jugador la llave de una puerta concreta y quitársela. Las llaves se guardan en la base de datos y se sincronizan al instante, sin permisos de admin.

Documentación completa

Exports de cliente

ToggleNearestDoor()

Locks or unlocks the door the player is standing at. The server checks access exactly like the E key.

Ver ejemplo

Añade tu propia tecla (L) que abre o cierra la puerta junto al jugador. El acceso se sigue comprobando en el servidor.

RegisterCommand('lockdoor', function() -- same as pressing E at the door; the server still checks access exports['Agency-Doorlock']:ToggleNearestDoor() end) RegisterKeyMapping('lockdoor', 'Lock / unlock door', 'keyboard', 'L')
GetNearbyDoorId()

Returns the id of the door the player is standing at, or nil.

Ver ejemplo

Lee junto a qué puerta está el jugador, por ejemplo para asignarla a una casa en tu script.

local doorId = exports['Agency-Doorlock']:GetNearbyDoorId() if doorId then -- e.g. let the house owner pick this door when setting up keys TriggerServerEvent('myhousing:server:linkDoor', doorId) end
GetAllDoors()

Returns every door as { id, label, locked, static, leaves, access }. The PIN is never included.

Ver ejemplo

Lista todas las puertas con su número y estado. El PIN nunca se incluye.

for _, door in ipairs(exports['Agency-Doorlock']:GetAllDoors()) do print(('#%d %s - %s'):format(door.id, door.label, door.locked and 'locked' or 'open')) end
GetDoorCoords(doorId: number)

Returns the position of the first door leaf as { x, y, z }, or nil.

Ver ejemplo

Marca un punto GPS hacia una puerta, por ejemplo para guiar a un jugador a su nueva casa.

local c = exports['Agency-Doorlock']:GetDoorCoords(doorId) if c then SetNewWaypoint(c.x, c.y) end

Exports de servidor

AddPlayerAccess(doorId: number, player: number|string)

Gives one player access to one door. Saved to the database and synced to every player at once. Returns true, or false plus a reason. true, "unchanged" if the player already had access.

Ver ejemplo

Un propietario da una llave a otro jugador. Tu script comprueba la propiedad, Agency-Doorlock guarda la llave y la sincroniza al instante. Nadie obtiene permisos de admin.

RegisterNetEvent('myhousing:server:giveKey', function(targetId, houseId) local src = source if not IsHouseOwner(src, houseId) then return end -- your own check local doorId = GetHouseDoorId(houseId) -- id from /adoorlock local ok, reason = exports['Agency-Doorlock']:AddPlayerAccess(doorId, tonumber(targetId)) if not ok then print(('Key not given: %s'):format(reason)) end end)
RemovePlayerAccess(doorId: number, player: number|string)

Takes the access away again. Saved and synced at once. Returns true, or false plus a reason. true, "unchanged" if there was nothing to remove.

Ver ejemplo

Retira una llave, por ejemplo cuando un inquilino se muda. Con el citizenid funciona también si el jugador está desconectado.

-- works while the player is offline: pass the citizenid local ok, reason = exports['Agency-Doorlock']:RemovePlayerAccess(doorId, 'ABC12345')
HasPlayerAccess(doorId: number, player: number|string)

true if the player is on the door's player list. Job, gang and "everyone" access are not counted.

Ver ejemplo

Comprueba si un jugador tiene llave propia para esta puerta. El acceso por trabajo, banda o "everyone" no cuenta.

if exports['Agency-Doorlock']:HasPlayerAccess(doorId, source) then TriggerClientEvent('myhousing:client:showKeyMenu', source, doorId) end
GetPlayerAccess(doorId: number)

Returns a copy of the door's player list, or nil if the door does not exist.

Ver ejemplo

Lista a todos los que tienen llave de una puerta, por ejemplo para un menú "gestionar llaves". Devuelve una copia, cambiarla no hace nada.

for _, citizenid in ipairs(exports['Agency-Doorlock']:GetPlayerAccess(doorId) or {}) do print('Key holder: ' .. citizenid) end
IsReady()

false while the doors are still loading from the database after a start, true afterwards.

Ver ejemplo

Espera a que las puertas estén cargadas tras un arranque antes de que tu script reparta llaves.

CreateThread(function() while not exports['Agency-Doorlock']:IsReady() do Wait(500) end -- doors are loaded, safe to grant keys from your own database now end)

Eventos

agency-doorlock:accessChanged

Fired on the server after AddPlayerAccess or RemovePlayerAccess changed a door. Arguments: doorId, identifier, granted (true / false). Listen with AddEventHandler.

Ver ejemplo

Registro en el servidor de cada llave dada o retirada, por ejemplo para un webhook de Discord.

AddEventHandler('agency-doorlock:accessChanged', function(doorId, identifier, granted) print(('Door #%d: %s %s'):format(doorId, identifier, granted and 'got a key' or 'lost their key')) end)

15Agency-Hud

HUD animado con tablero de vehículo, barras de estado, velocímetro e integración de cinturón.

Si tienes una economía o sistema de necesidades personalizado, controla el HUD desde tu propio script con estos setters en lugar de hackearlo. El HUD se encarga de la animación y persistencia.

Documentación completa

Exports de cliente

GetVehicleSettings()

Devuelve la tabla actual de ajustes del vehículo.

Ver ejemplo

Lee la tabla de ajustes HUD del vehiculo local para inspeccion o sincronizacion.

local settings = exports['Agency-Hud']:GetVehicleSettings() print('Speed unit:', settings.speedUnit) print('HUD scale:', settings.scale)
SetSpeedUnit(unit: string)

Cambia el velocímetro entre 'mph' y 'kmh'.

Ver ejemplo

Cambia el velocimetro a millas por hora y lo guarda localmente.

RegisterCommand('usemph', function() exports['Agency-Hud']:SetSpeedUnit('mph') end)
SetHunger(value: number)

Establece el valor de la barra de hambre (0-100).

Ver ejemplo

Envia el nivel de hambre actual del jugador al HUD.

AddEventHandler('player:hungerChanged', function(value) exports['Agency-Hud']:SetHunger(value) end)
SetThirst(value: number)

Establece el valor de la barra de sed (0-100).

Ver ejemplo

Envia el nivel de sed actual del jugador al HUD.

AddEventHandler('player:thirstChanged', function(value) exports['Agency-Hud']:SetThirst(value) end)
SetStress(value: number)

Establece el valor de la barra de estrés (0-100).

Ver ejemplo

Actualiza el medidor de estres del HUD desde un sistema de estres personalizado.

AddEventHandler('jobstress:onTick', function(stress) exports['Agency-Hud']:SetStress(stress) end)
SetMoney(value: number)

Establece el saldo de efectivo mostrado.

Ver ejemplo

Actualiza la cantidad de dinero en efectivo mostrada en el HUD.

AddEventHandler('wallet:cashChanged', function(cash) exports['Agency-Hud']:SetMoney(cash) end)
SetBank(value: number)

Establece el saldo bancario mostrado (para scripts de economía personalizados).

Ver ejemplo

Actualiza el saldo bancario mostrado en el HUD.

AddEventHandler('bank:balanceChanged', function(balance) exports['Agency-Hud']:SetBank(balance) end)
SetJob(label: string)

Establece la etiqueta de trabajo mostrada.

Ver ejemplo

Establece la etiqueta de trabajo mostrada cuando el jugador cambia de profesion.

AddEventHandler('job:onChange', function(job) exports['Agency-Hud']:SetJob(job.label) end)
SetRank(rank: string)

Establece el rango/grado de trabajo mostrado.

Ver ejemplo

Actualiza el rango del jugador mostrado junto a la etiqueta de trabajo.

AddEventHandler('job:onGradeChange', function(grade) exports['Agency-Hud']:SetRank(grade.label) end)
GetDetectedFramework()

Devuelve la cadena del framework ("qb", "esx", "standalone") que el HUD detectó automáticamente.

Ver ejemplo

Lee la clave del framework detectado para ramificar logica HUD personalizada.

local fw = exports['Agency-Hud']:GetDetectedFramework() if fw == 'qb' then print('QB-Core detected') end

Eventos

Agency-HUD:client:applyVehicleSettingsPatch

Aplica un parche parcial de configuración de vehículo al HUD de vehículo local.

Ver ejemplo

Aplica un parche parcial de ajustes HUD del vehiculo en el cliente local.

TriggerEvent('Agency-HUD:client:applyVehicleSettingsPatch', { style = 'modern', speedUnit = 'kmh' })
Agency-HUD:client:openAdminMenu

Abre el menú admin del HUD (requiere permiso).

Ver ejemplo

Abre la NUI del menu admin HUD en el cliente receptor.

TriggerEvent('Agency-HUD:client:openAdminMenu')
Agency-HUD:server:checkAdminPermission

Verifica los permisos de admin del solicitante y abre el menú admin si tiene éxito.

Ver ejemplo

Pide al servidor que verifique permisos admin y abra el menu admin HUD.

RegisterCommand('checkhudadmin', function() TriggerServerEvent('Agency-HUD:server:checkAdminPermission') end)
Agency-HUD:server:saveGlobalSettings

Persistencia de ajustes HUD globales solo para admin; transmite sincronización.

Ver ejemplo

Guarda una nueva configuracion HUD global (solo admin) y la difunde.

TriggerServerEvent('Agency-HUD:server:saveGlobalSettings', { style = 'modern', accent = '#ff6b00' })
Agency-HUD:server:requestGlobalSettings

Devuelve los ajustes globales actuales al cliente solicitante.

Ver ejemplo

Solicita los ajustes globales HUD actuales al iniciar el recurso.

AddEventHandler('onClientResourceStart', function(res) if res == GetCurrentResourceName() then TriggerServerEvent('Agency-HUD:server:requestGlobalSettings') end end)
Agency-HUD:server:requestTime

Devuelve la hora actual del servidor al solicitante para el reloj del HUD.

Ver ejemplo

Sondea el reloj del servidor cada minuto para actualizar la hora del HUD.

CreateThread(function() while true do TriggerServerEvent('Agency-HUD:server:requestTime') Wait(60000) end end)

16Agency-Progressbar V2

Barra de progreso animada con UI de cristal, 4 temas, acciones cancelables y exports client/server.

Úsalo en cualquier lugar donde normalmente mostrarías "haciendo X durante Y segundos". Reemplaza múltiples recursos legacy de progress bar con una UI consistente en todo tu servidor.

Documentación completa

Exports de cliente

StartProgress(data: table)

Inicia una barra de progreso con una tabla de opciones completa. Retorna inmediatamente; los callbacks se disparan al completarse/cancelarse.

Ver ejemplo

Inicia una barra de ganzua de 8 segundos con animacion y callback de fin.

exports['Agency-Progressbar']:StartProgress({ label = 'Picking lock...', duration = 8000, animation = { dict = 'anim@heists@fleeca_bank@drilling', clip = 'drill_straight_idle' }, onFinish = function() TriggerServerEvent('garage:lockpicked', vehNet) end, onCancel = function() print('Lockpick cancelled') end })
StopProgress(completed: boolean)

Detiene la barra de progreso actualmente en ejecución. Pasa true para marcarla como cancelada.

Ver ejemplo

Cancela la barra de progreso activa cuando el jugador presiona X.

if IsControlJustPressed(0, 73) then exports['Agency-Progressbar']:StopProgress(false) end
IsProgressActive()

Devuelve true si actualmente se muestra una barra de progreso.

Ver ejemplo

Impide iniciar una nueva accion de crafteo mientras hay una barra activa.

if exports['Agency-Progressbar']:IsProgressActive() then return end startCrafting()
GetProgressPercentage()

Devuelve el porcentaje de llenado actual (0-100).

Ver ejemplo

Activa un tick de minijuego cuando la barra supera el 75 por ciento.

CreateThread(function() while exports['Agency-Progressbar']:IsProgressActive() do local pct = exports['Agency-Progressbar']:GetProgressPercentage() if pct > 75 then SendMinigameTick() end Wait(100) end end)
SetProgressTheme(theme: string)

Cambia el tema en tiempo de ejecución: 'modern', 'neon', 'minimal' o 'classic'.

Ver ejemplo

Cambia la apariencia de la barra activa al tema moderno.

RegisterCommand('darkbar', function() exports['Agency-Progressbar']:SetProgressTheme('modern') end)
SetProgressPosition(position: string)

Cambia la posición: 'top', 'bottom', 'center'.

Ver ejemplo

Mueve la barra de progreso activa al centro inferior de la pantalla.

RegisterCommand('barbottom', function() exports['Agency-Progressbar']:SetProgressPosition('bottom-center') end)
TryReload(usedItem?: string)

Reproduce la secuencia de recarga estilo ESX.

Ver ejemplo

Inicia una recarga validada por el servidor con una caja de 9mm.

RegisterKeyMapping('+reload', 'Reload weapon', 'keyboard', 'R') RegisterCommand('+reload', function() exports['Agency-Progressbar']:TryReload('ammo-9') end)
UseConsumable(itemName: string, isDrink: boolean)

Reproduce la animación de comer/beber con barra de progreso.

Ver ejemplo

Reproduce la animacion de beber y aumenta la sed al usar agua.

RegisterNetEvent('inventory:useItem', function(item) if item == 'water_bottle' then exports['Agency-Progressbar']:UseConsumable('water_bottle', true) end end)

Exports de servidor

StartProgressForPlayer(playerId: number, data: table)

Dispara una barra de progreso en un cliente específico desde el servidor.

Ver ejemplo

Inicia una barra de levantar caja de 5 segundos en el jugador solicitante.

RegisterCommand('lift', function(source) exports['Agency-Progressbar']:StartProgressForPlayer(source, { label = 'Lifting crate...', duration = 5000 }) end, false)
StopProgressForPlayer(playerId: number, completed?: boolean)

Cancela remotamente la barra de progreso de un jugador específico.

Ver ejemplo

Cancela la barra de progreso activa de un jugador objetivo desde el servidor.

RegisterNetEvent('admin:cancelProgress', function(targetId) exports['Agency-Progressbar']:StopProgressForPlayer(targetId, false) end)
StartProgressForAllPlayers(data: table)

Difunde una barra de progreso a cada cliente conectado.

Ver ejemplo

Difunde una barra de aviso de tormenta de 30 segundos a todos los jugadores.

RegisterNetEvent('event:weatherWarning', function() exports['Agency-Progressbar']:StartProgressForAllPlayers({ label = 'Storm incoming - take shelter', duration = 30000 }) end)
StopProgressForAllPlayers(completed?: boolean)

Cancela la barra de progreso de cada jugador (p. ej. fin de ronda).

Ver ejemplo

Detiene la barra global de aviso de tormenta en todos los jugadores.

RegisterNetEvent('event:weatherCleared', function() exports['Agency-Progressbar']:StopProgressForAllPlayers(true) end)

Eventos

Agency:Progressbar:LoadSettings

Carga ajustes de UI por jugador (posición, color, escala, estilo) desde la BD al client.

Ver ejemplo

Carga los ajustes UI guardados de la barra de progreso al aparecer.

AddEventHandler('playerSpawned', function() TriggerEvent('Agency:Progressbar:LoadSettings') end)
agency-progressbar:client:start

Inicia la barra de progreso en el client receptor con los datos suministrados.

Ver ejemplo

Inicia una barra de reparacion del motor de 12 segundos, cancelable.

TriggerEvent('agency-progressbar:client:start', { label = 'Repairing engine...', duration = 12000, canCancel = true })
agency-progressbar:client:stop

Detiene la barra de progreso activa con un indicador de finalización.

Ver ejemplo

Aborta la barra de progreso activa cuando esposan al jugador.

RegisterNetEvent('police:cuffed', function() TriggerEvent('agency-progressbar:client:stop', false) end)
agency:consumables:useFood

Puente de inventario para consumir un objeto de comida (animación + aplicación segura del server).

Ver ejemplo

Activa el puente de comida del inventario para consumir un sandwich.

TriggerEvent('agency:consumables:useFood', 'sandwich')
agency:consumables:useDrink

Puente de inventario para consumir una bebida (animación + aplicación segura del server).

Ver ejemplo

Activa el puente de bebida del inventario para consumir una taza de cafe.

TriggerEvent('agency:consumables:useDrink', 'coffee_cup')
Agency:Progressbar:SaveSettings

Valida y persiste los ajustes UI de la barra de progreso del jugador en la BD.

Ver ejemplo

Persiste las preferencias UI de la barra del jugador en la base de datos.

TriggerServerEvent('Agency:Progressbar:SaveSettings', { position = 'top-right', color = '#00aaff', scale = 1.2 })
agency-progressbar:server:start

Disparador del lado server para iniciar una barra de progreso en un objetivo (o uno mismo).

Ver ejemplo

Disparador del servidor para iniciar una barra de carga de caja de 6 s en un objetivo.

RegisterCommand('movecrate', function(source) TriggerEvent('agency-progressbar:server:start', source, { label = 'Loading crate onto truck', duration = 6000 }) end, false)
agency-progressbar:server:stop

Disparador del lado server para detener una barra de progreso en un objetivo (o uno mismo).

Ver ejemplo

Disparador del servidor para detener la barra de un objetivo con estado cancelado.

RegisterNetEvent('admin:abortJob', function(targetId) TriggerEvent('agency-progressbar:server:stop', targetId, false) end)
agency:reload:request

Valida munición/arma/objeto antes de conceder una recarga al jugador solicitante.

Ver ejemplo

Pide al servidor validar la municion y autorizar la recarga de la pistola.

TriggerServerEvent('agency:reload:request', 'WEAPON_PISTOL', 'ammo-9')
agency:consumables:apply

Valida el inventario, elimina un objeto y aplica las ganancias de hambre/sed.

Ver ejemplo

Pide al servidor quitar el alimento y aplicar las ganancias de hambre.

RegisterNetEvent('food:onEatStart', function(itemName) TriggerServerEvent('agency:consumables:apply', itemName) end)

17Agency-Notify V2

Sistema de notificaciones con estilos V1/V2, prioridad inteligente AgencyAI, proteccion antispam y persistencia en base de datos.

Reemplaza cualquier otro recurso de notificaciones en tu servidor (qb-notify, esx_notify, mythic_notify, okok-notify, etc.) con un aspecto coherente. El sistema de prioridad AgencyAI limita automaticamente las notificaciones spam.

Documentación completa

Exports de cliente

Notify(data: { title, text, type, duration, ... })

Muestra una notificacion. Acepta { type, title, text, duration, icon, color }.

Ver ejemplo

Envia una notificacion de exito de 6 segundos anunciando un objetivo del atraco.

exports['Agency-Notify']:Notify({ title = 'Bank Heist', text = 'Vault drilled, grab the loot!', type = 'success', duration = 6000 })

Eventos

Agency:Notify:Send

Igual que el export, permite usar el patron clasico basado en Trigger.

Ver ejemplo

Evento cliente legacy v1 que muestra el mismo payload que el export.

TriggerEvent('Agency:Notify:Send', { title = 'Old Notify', text = 'Legacy v1 entry point still works', type = 'info' })
Agency:Notify:LoadSettings

Aplica los ajustes UI guardados por jugador (posición, color, escala, estilo) desde el server.

Ver ejemplo

Carga los ajustes UI de notify guardados por jugador al aparecer.

AddEventHandler('playerSpawned', function() TriggerEvent('Agency:Notify:LoadSettings') end)
Agency:Notify:SaveSettings

Valida y persiste los ajustes de notify del jugador (posición, color de acento, escala, estilo).

Ver ejemplo

Persiste la posicion, el acento y la escala de notify del jugador en la BD.

TriggerServerEvent('Agency:Notify:SaveSettings', { position = 'top-right', accent = '#ff8800', scale = 1.1, style = 'modern' })

18Agency-Seatbelt V2

Cinturon de seguridad con fisica de eyeccion, sonidos 3D, soporte multi-ocupante e integracion HUD.

Conecta el estado a tu propio HUD, o forzar la activacion al inicio de una persecucion policial / fuga de atraco. Los exports force-enable/disable son ideales para momentos RP.

Documentación completa

Exports de cliente

isSeatbeltOn()

Devuelve true si el jugador tiene actualmente el cinturon puesto.

Ver ejemplo

Deshabilita el control de salida mientras el cinturon esta abrochado.

if exports['Agency-Seatbelt']:isSeatbeltOn() then DisableControlAction(0, 75, true) end
enableSeatbelt()

Fuerza la activacion del cinturon (usalo p. ej. en arresto policial).

Ver ejemplo

Abrocha el cinturon del jugador local con retroalimentacion HUD y de sonido.

RegisterNetEvent('vehicle:autoBuckle', function() if IsPedInAnyVehicle(PlayerPedId(), false) then exports['Agency-Seatbelt']:enableSeatbelt() end end)
disableSeatbelt()

Fuerza el desabrochado del cinturon (cinematicas, escenarios RP).

Ver ejemplo

Desabrocha el cinturon del jugador local al salir del vehiculo.

RegisterNetEvent('vehicle:onExit', function() exports['Agency-Seatbelt']:disableSeatbelt() end)
toggleSeatbelt()

Alterna el cinturon (lo que hace la tecla predeterminada).

Ver ejemplo

Alterna el estado del cinturon del jugador local al pulsar una tecla.

RegisterKeyMapping('+seatbelt', 'Toggle seatbelt', 'keyboard', 'B') RegisterCommand('+seatbelt', function() exports['Agency-Seatbelt']:toggleSeatbelt() end)
isAutoBuckled()

Devuelve true mientras el cinturón lo abrochó el coche y no el jugador.

autoBuckle(on: boolean)

Abrocha o desabrocha el cinturón como cinturón automático, igual que un coche autónomo.

getSeatbeltState()

Devuelve una tabla con el estado del cinturón, si es automático, el asiento y el vehículo.

setSeatbeltEnabled(on: boolean)

Desactiva o activa todo el cinturón para este jugador, para cinemáticas o situaciones de admin.

isPlayerSeatbeltOn(serverId: number)

Devuelve el estado del cinturón de otro jugador, leído del state bag replicado.

bucklesItselfVehicle(vehicle: number)

Indica si este vehículo abrocha él mismo a sus ocupantes, según la lista de modelos o el state bag agAuto.

openSettings()

Abre la tarjeta de ajustes.

closeSettings()

Cierra la tarjeta de ajustes.

isSettingsOpen()

Indica si la tarjeta de ajustes está abierta.

Exports de servidor

isSeatbeltOn(source: number)

Devuelve en el servidor el estado del cinturón de un jugador, leído del state bag replicado.

getBuckledPlayers()

Devuelve las ids de servidor de todos los jugadores que llevan el cinturón abrochado.

setSeatbelt(source: number, on: boolean)

Abrocha o desabrocha desde el servidor el cinturón de un jugador.

Eventos

Agency-HUD:seatbeltStateChanged

Se dispara en cada cambio con el nuevo estado. Agency-HUD lo escucha; cualquier otro resource también puede.

19Agency-Elevator

Sistema de ascensor realista con UI Liquid Glass y un configurador.

Perfecto dentro de scripts de apartamentos/housing, comisaria, hospital o cualquier interior de varios pisos. Usa el configurador para colocar ascensores visualmente sin tocar archivos de config.

Documentación completa

Eventos

Agency-Elevator:server:requestTravel

Solicitud validada por el servidor para viajar entre pisos.

Ver ejemplo

Pide al servidor que valide el acceso y luego viaje al piso 3.

TriggerServerEvent('Agency-Elevator:server:requestTravel', 'lspd-tower-1', 3)
Agency-Elevator:server:travelComplete

Reconoce la llegada del client y envía la notificación 'llegó al piso'.

Ver ejemplo

Indica al servidor que el jugador llego al piso 3 para enviar la notificacion.

TriggerServerEvent('Agency-Elevator:server:travelComplete', 'lspd-tower-1', 3)
Agency-Elevator:server:requestElevators

Sincroniza la lista de ascensores cargada desde la base de datos al client solicitante.

Ver ejemplo

Solicita la lista completa de ascensores al servidor al inicializar el cliente.

AddEventHandler('onClientResourceStart', function(res) if res == GetCurrentResourceName() then TriggerServerEvent('Agency-Elevator:server:requestElevators') end end)
Agency-Elevator:server:saveElevator

Upsert con control de permisos de un ascensor (id/label/floors) en MySQL.

Ver ejemplo

Upsert de admin de un ascensor con una sola entrada de planta Lobby.

TriggerServerEvent('Agency-Elevator:server:saveElevator', { id = 'lspd-tower-1', label = 'LSPD HQ', floors = { { name = 'Lobby', coords = vector3(441.0, -981.5, 30.7) } } })
Agency-Elevator:server:loadElevator

Genera/carga un ascensor guardado desde la base de datos.

Ver ejemplo

Carga los datos de un solo ascensor en el NUI del configurador para editar.

TriggerServerEvent('Agency-Elevator:server:loadElevator', 'lspd-tower-1')
Agency-Elevator:server:saveSettings

Persiste los ajustes UI (posición/escala/color de acento) en MySQL y resincroniza todos los clients.

Ver ejemplo

Guarda posicion UI, color de acento y escala y resincroniza a todos los clientes.

TriggerServerEvent('Agency-Elevator:server:saveSettings', { position = 'top-right', accent = '#22c55e', scale = 1.0 })
Agency-Elevator:client:startTravel

Inicia una cinematica de viaje en ascensor para el jugador.

Ver ejemplo

Reproduce el fade y la animacion y teletransporta al ped al piso 2 del garaje.

TriggerEvent('Agency-Elevator:client:startTravel', 'parking-garage', 2)
Agency-Elevator:client:applySettings

Envía los ajustes UI (acento/escala/posición) al NUI.

Ver ejemplo

Aplica el acento, la escala y la posicion del NUI del ascensor en el cliente local.

TriggerEvent('Agency-Elevator:client:applySettings', { accent = '#0ea5e9', scale = 0.9, position = 'bottom-left' })
Agency-Elevator:client:openConfigurator

Abre el configurador de ascensores en el juego (solo admin).

Ver ejemplo

Abre el NUI configurador admin con la lista actual de ascensores.

TriggerEvent('Agency-Elevator:client:openConfigurator')
Agency-Elevator:client:refreshConfigurator

Actualiza el configurador abierto tras un guardado/eliminación sin cerrarlo.

Ver ejemplo

Refresca el NUI configurador abierto tras guardar sin cerrarlo.

AddEventHandler('Agency-Elevator:server:elevatorSaved', function() TriggerEvent('Agency-Elevator:client:refreshConfigurator') end)

20Agency-Multicharacter

Una selección y creación de personajes cinematográfica para FiveM. Cada personaje aparece en una escena según su trabajo, policías junto a la patrulla, médicos junto a la ambulancia, mecánicos en el taller, con su atuendo guardado, foto de perfil, trabajo, banda, dinero en efectivo, banco, número de teléfono, tiempo de juego y última ubicación en una tarjeta limpia. Los nuevos personajes cuentan con reglas de nombre y edad, lista de nacionalidades con buscador y altura; luego, el script de ropa del servidor se abre automáticamente. Los espacios se pueden vender mediante Tebex: los compradores los desbloquean con su id de transacción. Los jugadores cambian de personaje con /logout. El framework, script de ropa, inventario, selector de spawn y pantalla de carga se detectan automáticamente; los personajes existentes, tiempos de juego y espacios comprados del antiguo multicharacter se transfieren. QBCore, Qbox, ESX o totalmente standalone con almacenamiento propio de personajes, 25 idiomas, el color se adapta al logo del servidor.

Documentación completa

Exports de cliente

IsOpen()

True while the character selection is open.

OpenSelection()

Opens the selection, for example from your own logout button.

Exports de servidor

GetCharacter(source)

The loaded character (standalone: the full record).

GetCharacterId(source)

citizenid, ESX identifier or agency:<id> of the loaded character.

IsInSelection(source)

True while the player is in the selection.

GetSlots(license)

Slots of a licence.

AddSlots(license, amount)

Adds slots, returns the new total.

Logout(source)

Saves the character and opens the selection.

Eventos

agency-multicharacter:server:loaded

A character was loaded or created (source, charid, isNew).

agency-multicharacter:server:deleted

A character was deleted (source, charid).

agency:selection

true while a selection screen is open, HUDs can hide themselves.

21Agency-Spawn

Un selector de spawn con cámara en vivo para FiveM. Mientras el jugador explora, la cámara sobrevuela Los Santos hacia cada ubicación; al elegir una, desciende desde el cielo hasta su personaje. Ofrece la última ubicación, spawns públicos desde una lista comentada, spawns de trabajo y banda que solo ven los personajes correspondientes, cada casa de Agency Housing que el personaje posee o de la que tiene llave, qb-apartments y un punto de llegada fijo para nuevos personajes. Los jugadores pueden activar el auto spawn en su última ubicación. Responde a los eventos de qb-spawn y apartment, por lo que la mayoría de scripts de multicharacter lo abren sin modificaciones, y funciona en conjunto con Agency Multicharacter. QBCore, Qbox, ESX o standalone, 25 idiomas, el color se adapta al logo del servidor.

Documentación completa

Exports de cliente

Open(options)

Opens the selector. options.isNew = true sends new characters to the arrival point.

IsOpen()

True while the selector is open.

Eventos

agency-spawn:client:spawned

The character landed (id, kind).

agency-spawn:server:spawned

A player spawned (source, id, kind).

qb-spawn:client:setupSpawns / openUI

Answered when qb-spawn is not running, so other multicharacters open Agency Spawn.

22Agency-Housing

Sistema de viviendas basado en base de datos para FiveM. Detecta QBCore, QBox y ESX por sí mismo, o funciona de forma totalmente independiente sin ningún framework. Las casas se construyen en el juego con un creador paso a paso en lugar de un archivo de configuración: interiores, shells, MLO y edificios de apartamentos completos con hasta 40 pisos tras una misma puerta principal, cada parcela delimitada por un borde de propiedad marcado desde el aire. Los jugadores compran casas, se las venden entre sí, alquilan y ponen en alquiler sus propiedades, revisan todas las ofertas del mercado y pagan el alquiler por adelantado. El dinero que llega mientras están desconectados se paga cuando vuelven a conectarse. Se incluyen llaves, bloqueo de puertas MLO con cierre automático y timbre, amueblado desde un catálogo de más de 1.300 props, cámaras de seguridad y el armario integrado, y una app Housing lleva el control de cerraduras y las cámaras en vivo a Agency Phone, Agency Pad, lb-phone y qs-smartphone-pro. Los scripts de inventario, ropa y garajes se detectan automáticamente, la base de datos se actualiza sola y todo se guarda en MySQL.

Documentación completa

Exports de cliente

IsInsideHouse()

Devuelve true mientras el jugador está dentro de una casa.

GetCurrentHouse()

La casa en la que está el jugador ahora mismo, o nil.

LeaveHouse()

Saca al jugador fuera por la entrada.

GetHouseAtPoint(coords)

La primera casa cuyo límite de parcela incluye este terreno.

GetHousesAtPoint(coords)

Todas las casas a las que pertenece este terreno, para parcelas que se solapan como un bloque de pisos.

GetCurrentProperty()

La parcela en la que está el jugador ahora mismo, o nil.

IsOnProperty(houseId)

Si el jugador está en la parcela de esa casa.

GetHouseZone(houseId)

La forma de límite guardada de una casa.

GetAccent()

El color de acento que el jugador eligió en Housing > Ajustes.

GetAppUrl(theme)

La dirección de la página de la app Housing, para añadir la app a cualquier otro teléfono. Pasa 'light' o 'dark' para forzar un tema.

GetAppData()

Todo lo que muestra la app Housing: las casas que el jugador posee, alquila o de las que tiene una llave.

AppAction(action, houseId)

Ejecuta una acción de la app para una casa: 'waypoint', 'lock' o 'cams'.

Exports de servidor

GetHouses()

Todas las casas del servidor, indexadas por id.

GetPlayerHouses(source)

Las casas que tiene ese jugador.

HasHouseAccess(source, houseId)

Si ese jugador es dueño de la casa o tiene una llave.

GetHouseAtPoint(coords)

La primera casa cuyo límite de parcela incluye este terreno.

GetHousesAtPoint(coords)

Todas las casas a las que pertenece este terreno, para parcelas que se solapan.

GetHouseZone(houseId)

La forma de límite guardada de una casa.

Eventos

agency-housing:client:enteredZone

Se dispara con (houseId, house) cuando el jugador pisa una parcela, para que un script de trabajo o de robo no tenga que consultar constantemente.

agency-housing:client:leftZone

Se dispara con (houseId, house) cuando el jugador sale de una parcela.

agency-housing:garage:open

Se dispara con (houseId, houseName) cuando se usa un garaje de casa y Config.Garage.script es 'event', para que tu propio script de garaje pueda abrirlo.

23Agency-Banking

Un banco completo para FiveM que funciona con QBCore, Qbox, ESX o totalmente standalone. Los jugadores tienen un wallet con saldo bancario y efectivo, tarjetas bancarias en cuatro temas, transferencias por ID o a jugadores cercanos, depósitos a plazo cuyos intereses decide solo el servidor, trading de acciones y cripto, un PIN de cajero y un historial completo de movimientos. Sin framework, el banco lleva sus propias cuentas y otros resources pueden usarlo como sistema de dinero mediante exports de servidor. Además: dos diseños de menú, 13 idiomas, marcadores o qb-target / ox_target, un control de tamaño de pantalla para cada jugador, tablas que se crean solas en el primer arranque y la app gratuita Agency Companion para el saldo, las transferencias, los depósitos a plazo y las tarjetas desde cualquier lugar.

Documentación completa

Exports de cliente

OpenBank()

Abre el banco para el jugador local, esté donde esté.

OpenATM()

Abre la pantalla del PIN del cajero para el jugador local. El jugador debe haber configurado antes un PIN en un banco.

Exports de servidor

GetBankBalance(source)

Devuelve el saldo bancario del jugador, en cualquier framework y en standalone.

GetCashBalance(source)

Devuelve el efectivo del jugador.

AddBankMoney(source, amount, reason)

Añade dinero al saldo bancario. Devuelve true si tiene éxito, y un banco abierto se actualiza solo.

RemoveBankMoney(source, amount, reason)

Retira dinero del saldo bancario. Devuelve false si el saldo no alcanza, y en ese caso no se retira nada.

AddCashMoney(source, amount, reason)

Añade efectivo. Devuelve true si tiene éxito.

RemoveCashMoney(source, amount, reason)

Retira efectivo. Devuelve false si no hay suficiente, y en ese caso no se retira nada.

AddTransaction(identifier, type, amount, reason)

Escribe una entrada en el historial de movimientos de un jugador por su identificador (citizenid en QBCore y Qbox, identifier en ESX, licencia en standalone).

GetFramework()

Devuelve el framework que detectó el banco: qbcore, esx o standalone.

Eventos

agency_banking:client:OpenBank

Lánzalo desde el servidor para abrir el banco a ese jugador.

agency_banking:client:MoneyChanged

Lánzalo desde el servidor después de que otro script cambie el dinero de un jugador, y un banco abierto se actualiza.

¿Sigues atascado después de esta página? Nuestro soporte se encarga.

¿Sigues atascado después de esta página? Nuestro soporte se encarga.