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).
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:notifyMuestra 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:usePhoneItemActiva 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:openAppSolicita 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:newMailNotifyNotifica 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:requestPhoneDataSolicita 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:cancelCallCancela 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:sendMessageEnví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:saveSettingPersiste 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:airdropPayRealiza 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:buyDataPlanCompra 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:createCrea 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.
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:notifyMuestra 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:usePadItemAbre 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:openAppDisparar 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:newMailNotifyNotifica 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:hourlyPaycheckNotifica 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:requestPadDataSolicita 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:sendMessageEnví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:airdropPayRealiza 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:buyDataPlanCompra 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:createCrea 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:createCrea 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:adminCreateEl 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:startMissionInicia 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:applyToListingEnví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:createMechanicInvoiceCrea 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:sendMechanicInvoicePayEnví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:mdtCreateInvoiceEl 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.
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.
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:rideStartedHa empezado un viaje. Incluye el destino.
agency-zero:client:rideEndedEl viaje ha terminado, se ha cancelado o ha llegado.
agency-zero:client:arrivedEl 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.
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
endExports 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)
endGetAd(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) endIsAdmin(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
endEventos
agency-lifeinvader:adShownEvento 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:adBroadcastEvento 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:openMenuSe 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:openRecentMenuSe 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.
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
endExports 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
endSetReputation(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))
endAddCredit(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')
endStartFlashSale(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:dealSe 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:dealerMovedSe 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:flashSaleSe 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.
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
endIsWorking()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
endGetLevel()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
endGetProgress(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:minedSe 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:soldSe 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:contractSe 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.
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
endGetVehicleCondition(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)))
endOpenMenu()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
endExports 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)) endGiveKit(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
endGetKits()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)
enduseKit(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:repairedSe 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:repairedSe 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:damageLevelSe 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.
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
endGetKeys()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)
endToggleLock(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
enduseLockpick()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
endSetOwner(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)
endSetVehicleLocked(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
endGetFramework()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
endEventos
Agency:Keys:GiveServerSolicita 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:AcquireVehicleKeysEl 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:SetOwnerEvento 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:AddKeysEl 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:toggleEngineSe 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.
Eventos
agency-vending:notifyDespachador 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:startAgencyPayInicia 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:buyMachineResultResultado 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:machineCreatedBroadcast 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:openManagementVerifiedApertura 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:openOwnedListAbre 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:spawnMachineCreatedBroadcast 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:spawnMachineDeletedBroadcast 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:openSpawnerUIAbre 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:buyMachineEl 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:requestOwnedListEl 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:requestMachinesEl 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:requestManagementApertura 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:requestSpawnedMachinesEl 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:adminSpawnMachineAdmin 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:adminDeleteSpawnedAdmin 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.
Eventos
agency-admin:client:refreshStaffRanksHace 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))
endagency-admin:client:freezeTimeCongela 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:dashboardValueEnvia 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:teleportToCoordsTeletransporta 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:announceMuestra 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:notifyEnví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:freezeCongela 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:healRestaura 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:reviveRevive 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:teleportTeletransporta 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:openMenuAbre 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:openToolsMenuDisparador 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:closeMenuDisparador 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:openClothingMenuDisparador 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:requestPlayersSolicita 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:requestPanelPermissionsSolicita 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:requestStaffRanksSolicita 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:createRankCrea 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:requestMyPermissionsEl 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:requestSyncEl 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:requestDutyRankEl 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:requestSpawnedObjectsEl 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.
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:detectionSe dispara en cada detección con jugador, detección, detalle, acción y strikes.
Agency-Anticheat:bannedSe dispara tras cada ban con el registro completo del ban.
Agency-Anticheat:unbannedSe dispara después de que se levante un ban.
Agency-Anticheat:lockdownSe dispara cuando un lockdown comienza o termina.
Agency-Anticheat:learnedSe 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.
Eventos
agency-reports:client:notifyDispara 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:openPlayerUIAbre 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:openAdminUIAbre 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:teleportTeletransporta 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:healSelfCura 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:submitReportEnví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:requestPlayerDataEl 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:requestAdminDataAdmin 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:sendChatMessageEnví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.
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)
endGetAllDoors()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'))
endGetDoorCoords(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)
endExports 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)
endGetPlayerAccess(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)
endIsReady()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:accessChangedFired 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.
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')
endEventos
Agency-HUD:client:applyVehicleSettingsPatchAplica 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:openAdminMenuAbre 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:checkAdminPermissionVerifica 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:saveGlobalSettingsPersistencia 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:requestGlobalSettingsDevuelve 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:requestTimeDevuelve 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.
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)
endIsProgressActive()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:LoadSettingsCarga 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:startInicia 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:stopDetiene 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:useFoodPuente 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:useDrinkPuente 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:SaveSettingsValida 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:startDisparador 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:stopDisparador 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:requestValida 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:applyValida 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.
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:SendIgual 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:LoadSettingsAplica 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:SaveSettingsValida 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.
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)
endenableSeatbelt()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:seatbeltStateChangedSe 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.
Eventos
Agency-Elevator:server:requestTravelSolicitud 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:travelCompleteReconoce 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:requestElevatorsSincroniza 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:saveElevatorUpsert 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:loadElevatorGenera/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:saveSettingsPersiste 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:startTravelInicia 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:applySettingsEnví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:openConfiguratorAbre 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:refreshConfiguratorActualiza 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.
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:loadedA character was loaded or created (source, charid, isNew).
agency-multicharacter:server:deletedA character was deleted (source, charid).
agency:selectiontrue 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.
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:spawnedThe character landed (id, kind).
agency-spawn:server:spawnedA player spawned (source, id, kind).
qb-spawn:client:setupSpawns / openUIAnswered 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.
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:enteredZoneSe 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:leftZoneSe dispara con (houseId, house) cuando el jugador sale de una parcela.
agency-housing:garage:openSe 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.
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:OpenBankLánzalo desde el servidor para abrir el banco a ese jugador.
agency_banking:client:MoneyChangedLá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.