Partenaires dev
S'intégrer aux scripts Agency
Vous développez votre propre script FiveM et voulez le relier aux nôtres ? Chaque export et chaque événement public est listé ici, avec un extrait Lua à copier.
Les exports permettent à votre script d'appeler une fonction dans le nôtre : exports['script-name']:FunctionName(args), côté client comme côté serveur. Les événements font l'inverse : déclenchés avec TriggerEvent ou TriggerServerEvent, écoutés avec RegisterNetEvent.
01Agency-Phone
Téléphone multi-framework complet avec SMS, appels, fil social, mail, caméra, wallet et paiement AgencyPay.
À utiliser dans tout script de shop/braquage/job pour un flux de paiement propre dans le téléphone au lieu de débiter l'argent directement. Idéal aussi pour les notifications en jeu avec accept/deny (p. ex. demandes de taxi, appels dispatch).
Exports client
IsPhoneOpen()Renvoie true si l'UI du téléphone est actuellement ouverte.
Voir l'exemple
Ignore l'ouverture d'un menu si le téléphone est déjà affiché.
RegisterCommand('openmymenu', function()
if exports['agency-phone']:IsPhoneOpen() then
return
end
TriggerEvent('myresource:openMenu')
end)IsPhonePoweredOn()Renvoie true si le téléphone est allumé.
Voir l'exemple
Met en pause la synchro tant que le téléphone est éteint par le joueur.
CreateThread(function()
while true do
Wait(2000)
if not exports['agency-phone']:IsPhonePoweredOn() then
print('Phone off, pausing background sync')
end
end
end)GetPhoneData()Renvoie la table brute des données du téléphone.
Voir l'exemple
Affiche toute la table de données du téléphone pour le debug.
RegisterCommand('phonedebug', function()
local data = exports['agency-phone']:GetPhoneData()
print(json.encode(data, { indent = true }))
end)GetPhonePropEntity()Renvoie le handle de l'entité du prop de téléphone tenu, ou 0 si invisible.
Voir l'exemple
Masque brièvement l'entité du téléphone sans toucher à la logique.
CreateThread(function()
Wait(500)
local prop = exports['agency-phone']:GetPhonePropEntity()
if prop ~= 0 and DoesEntityExist(prop) then
SetEntityVisible(prop, false, false)
end
end)IsPhoneExpanded()Renvoie true si le téléphone est agrandi à l'écran.
Voir l'exemple
Ancien alias qui bloque un mini-jeu tant que le téléphone est ouvert.
AddEventHandler('myresource:beforeMinigame', function()
if exports['agency-phone']:IsPhoneExpanded() then
TriggerEvent('chat:addMessage', { args = { 'Close phone first' } })
return
end
end)HasCarrierContract()Renvoie true si le joueur dispose d'un data plan opérateur actif.
Voir l'exemple
Avertit le joueur quand aucun forfait data n'est actif.
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()Renvoie l'objet complet de l'état du téléphone.
Voir l'exemple
Met l'état du téléphone en cache seulement si ouvert, allumé et synchronisé.
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()Renvoie true si le joueur possède un item téléphone.
Voir l'exemple
Bloque la commande d'appel d'urgence sans téléphone dans l'inventaire.
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)Enregistre un terminal marchand AgencyPay récurrent.
Voir l'exemple
Crée un terminal Agency Pay au runtime pour la caisse du garage.
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)Supprime un terminal AgencyPay précédemment enregistré.
Voir l'exemple
Retire le point de paiement enregistré quand la boutique ferme.
AddEventHandler('myresource:onShopClosed', function(shopId)
exports['agency-phone']:RemoveAgencyPayPoint('mechanic_main')
print('Removed pay point for shop ' .. shopId)
end)StartAgencyPayCheckout(data)Ouvre la fiche de paiement AgencyPay pour un paiement carte sécurisé.
Voir l'exemple
Ouvre le téléphone et lance un petit paiement de pourboire 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)Démarre un appel pma-voice à partir d'une table de contact.
Voir l'exemple
Lance un appel sortant au contact reçu par 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)Affiche une notification téléphone avec boutons accept/deny optionnels.
Voir l'exemple
Affiche une notif bloquante d'acceptation/refus pour un contrat de remorquage.
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)Ajoute une app de votre propre resource à l'écran d'accueil du téléphone et au Store. Renvoie true, ou false et une erreur. Voir Apps Personnalisées.
UnregisterApp(id)Retire une app ajoutée avec RegisterApp. Se fait tout seul quand la resource qui l'a enregistrée s'arrête.
GetRegisteredApps()Renvoie la table de toutes les apps enregistrées par d'autres resources, indexée par id.
ClosePhone()Ferme le téléphone, par exemple avant l'ouverture de votre propre interface.
IsPhoneRadioActive()Renvoie deux valeurs : true tant que la radio du téléphone joue, et la station en cours.
StopPhoneRadio()Arrête la radio du téléphone.
Exports serveur
SendMail(identifier, mailData)Envoie un mail à un joueur (en ligne ou hors ligne).
Voir l'exemple
Envoie un mail de reçu à un joueur via son identifiant 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)Publie un message dans le feed Pulse (chirper).
Voir l'exemple
Publie une annonce de prime sur Chirper côté serveur.
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 enregistré quand ESX+ox_inventory est détecté ; ouvre le phone pour le porteur.
Voir l'exemple
S'accroche à usingItem d'ox_inventory pour ouvrir le téléphone.
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)Confirme côté serveur que ce joueur a payé le paiement Agency Pay portant cet id dans les 60 dernières secondes, pour au moins minAmount, puis consomme le paiement pour qu'il ne compte qu'une fois. requestId est l'id passé à StartAgencyPayCheckout. Renvoie true et le montant, ou false. À appeler avant de remettre la marchandise.
Événements
agency-phone:client:notifyAffiche une notification phone (title, text, icon, color, timeout, silent).
Voir l'exemple
Envoie un toast non bloquant : le véhicule est prêt.
TriggerEvent('agency-phone:client:notify', 'Heads up', 'Vehicle ready for pickup', 'car', '#22cc88', 5000, false)agency-phone:client:usePhoneItemDéclenche l'ouverture du phone quand l'item d'inventaire phone est utilisé.
Voir l'exemple
Transmet un event d'utilisation d'item à l'ouverture du téléphone.
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'phone' then
TriggerEvent('agency-phone:client:usePhoneItem')
end
end)agency-phone:client:openAppDemande au phone de naviguer vers une app personnalisée par id (utilisé par les modules d'apps).
Voir l'exemple
Ouvre directement l'app bancaire personnalisée via son id.
RegisterCommand('openbank', function()
TriggerEvent('agency-phone:client:openApp', 'banking')
end)agency-phone:client:newMailNotifyNotifie le client d'un mail fraîchement reçu.
Voir l'exemple
Écoute les notifs de nouveau mail et les log pour le debug.
AddEventHandler('agency-phone:client:newMailNotify', function(mail)
print(('New mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-phone:server:requestPhoneDataDemande une synchronisation fraîche des données phone pour le joueur appelant.
Voir l'exemple
Demande au serveur une nouvelle synchro complète des données du téléphone.
RegisterCommand('refreshphone', function()
TriggerServerEvent('agency-phone:server:requestPhoneData')
end)agency-phone:server:cancelCallAnnule ou termine un appel actif.
Voir l'exemple
Raccroche l'appel actif via une touche ou commande chat personnalisée.
RegisterCommand('hangup', function()
TriggerServerEvent('agency-phone:server:cancelCall')
end)agency-phone:server:sendMessageEnvoie un SMS (newMsg, targetNumber).
Voir l'exemple
Envoie rapidement un SMS à un numéro cible depuis le 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 une seule paire clé/valeur de réglage phone pour le joueur.
Voir l'exemple
Sauvegarde un paramètre du téléphone dès que le joueur le change.
AddEventHandler('myresource:client:onSettingChanged', function(key, value)
TriggerServerEvent('agency-phone:server:saveSetting', key, value)
end)agency-phone:server:airdropPayEffectue un transfert Agency Airdrop vers un joueur proche.
Voir l'exemple
Déclenche un Agency Airdrop vers les joueurs proches avec le montant saisi.
RegisterCommand('airdrop', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-phone:server:airdropPay', amount, 'Tip via airdrop')
end)agency-phone:server:buyDataPlanAchète un data plan opérateur pour le joueur (price, planName).
Voir l'exemple
Achète un forfait data quand le joueur le sélectionne dans un menu custom.
AddEventHandler('myresource:client:onPlanSelected', function(plan)
TriggerServerEvent('agency-phone:server:buyDataPlan', plan.price, plan.name)
end)agency-phone:dispatch:createCrée un dispatch phone à partir d'un appel/SMS d'urgence.
Voir l'exemple
Crée une entrée dispatch téléphone à partir d'un appel d'urgence entrant.
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
Tablette AgencyOS avec un écosystème d'apps complet. Enregistre tes propres apps via config.lua.
Parfait pour les dashboards admin, les apps de gestion d'entreprise, les cartes de territoire de gang ou toute UI custom dont tes joueurs ont besoin dans GTA, le tout dans un beau shell de tablette sans travail supplémentaire.
Exports client
IsPadOpen()Renvoie true si l'UI de la tablette est ouverte (vérifier l'état de la tablette avant d'afficher des UI).
Voir l'exemple
Évite de rouvrir l'UI tablette si la tablette est déjà ouverte.
RegisterCommand('opentablet', function()
if exports['agency-pad']:IsPadOpen() then
return
end
TriggerEvent('myresource:openTablet')
end)IsPadPoweredOn()Renvoie true si la tablette est allumée.
Voir l'exemple
Met en pause le polling de la flotte si la tablette est éteinte.
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()Renvoie la table PadData côté client complète.
Voir l'exemple
Affiche toute la table de données tablette côté client.
RegisterCommand('paddebug', function()
local data = exports['agency-pad']:GetPadData()
print(json.encode(data, { indent = true }))
end)GetPadPropEntity()Renvoie le handle de l'entité du prop tablette tenu, ou 0 si invisible.
Voir l'exemple
Masque brièvement le prop tablette pendant une cinématique personnalisée.
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() conservé pour la compatibilité ascendante.
Voir l'exemple
Ancien alias qui bloque un mini-jeu tant que la tablette est ouverte.
AddEventHandler('myresource:client:beforeMinigame', function()
if exports['agency-pad']:IsPadExpanded() then
return
end
TriggerEvent('myresource:client:startMinigame')
end)HasCarrierContract()Renvoie true si le joueur a un data plan opérateur actif sur la tablette.
Voir l'exemple
Avertit le joueur si aucun forfait data n'est actif sur la tablette.
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()Renvoie la table { isOpen, poweredOn, syncEnabled } résumant l'état actuel de la tablette.
Voir l'exemple
Met l'état tablette en cache uniquement si ouverte et allumée.
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()Renvoie true si le joueur possède l'item tablette configuré dans son inventaire.
Voir l'exemple
Bloque la commande UI dispatch sans tablette dans l'inventaire.
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)Enregistre un terminal Agency Pay au runtime à des coordonnées (markers, blip, checkout payload).
Voir l'exemple
Crée un terminal Agency Pay au runtime dans le hall de l'hôpital.
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)Supprime un terminal Agency Pay précédemment enregistré par id.
Voir l'exemple
Retire un point de paiement tablette quand son lieu ferme.
AddEventHandler('myresource:onLocationClosed', function(locationId)
exports['agency-pad']:RemoveAgencyPayPoint(locationId)
end)StartAgencyPayCheckout(data)Ouvre la tablette (si besoin) et lance un checkout Agency Pay avec le payload de paiement fourni.
Voir l'exemple
Ouvre la tablette et lance un paiement Agency Pay pour la taxe foncière.
RegisterCommand('paybill', function()
exports['agency-pad']:StartAgencyPayCheckout({
amount = 1500,
receiver = 'gov_taxes',
label = 'Property tax',
memo = 'Quarterly tax'
})
end)StartCall(contactData)Démarre un appel sortant tablette vers le contact fourni ({ name, number, ... }).
Voir l'exemple
Lance un appel sortant sur la tablette à la réception d'un 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)Affiche une notification d'action avec boutons accept/deny ; bloque jusqu'à la réponse et renvoie true/false.
Voir l'exemple
Affiche une notif tablette bloquante d'accept/refus pour une livraison.
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)Ajoute une app de votre propre resource à l'écran d'accueil du pad et au Store. Renvoie true, ou false et une erreur.
UnregisterApp(id)Retire une app ajoutée avec RegisterApp.
GetRegisteredApps()Renvoie la table de toutes les apps enregistrées par d'autres resources, indexée par id.
ClosePad()Ferme le pad, par exemple avant l'ouverture de votre propre interface.
ClosePhone()Identique à ClosePad(), sous le nom qu'utilise l'Agency Phone, pour que le même code d'intégration fonctionne avec les deux.
IsPhoneRadioActive()Renvoie deux valeurs : true tant que la radio du pad joue, et la station en cours.
StopPhoneRadio()Arrête la radio du pad.
Exports serveur
SendMail(identifier, mailData)Envoie un mail à la boîte principale du joueur via identifier (renvoie le succès).
Voir l'exemple
Envoie un mail de notification de facture via l'identifiant du joueur.
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 enregistré quand ESX+ox_inventory est détecté ; ouvre la tablette pour le porteur.
Voir l'exemple
S'accroche à ox_inventory pour ouvrir la tablette via le 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 pour l'id legacy de l'item phone ; ouvre la tablette pour le porteur.
Voir l'exemple
Redirige l'ancien item phone pour ouvrir l'UI tablette à la place.
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()Renvoie les cours actuels des actions et des cryptos, indexés par identifiant de marché.
PushPadData(source)Envoie une copie à jour des données de la tablette au pad de ce joueur. Renvoie false si elle n'a pas pu être construite.
Événements
agency-pad:client:notifyAffiche une notification tablette (title, text, icon, color, timeout, silent).
Voir l'exemple
Affiche un toast tablette non bloquant pour une mission débloquée.
TriggerEvent('agency-pad:client:notify', 'Job update', 'New mission unlocked', 'briefcase', '#22cc88', 5000, false)agency-pad:client:usePadItemOuvre la tablette quand l'item d'inventaire est utilisé.
Voir l'exemple
Transmet un event d'utilisation d'item à l'ouverture de la tablette.
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'tablet' then
TriggerEvent('agency-pad:client:usePadItem')
end
end)agency-pad:client:openAppÀ déclencher côté client pour ouvrir une app spécifique dans la tablette.
Voir l'exemple
Ouvre directement l'app de gestion de flotte personnalisée.
RegisterCommand('openfleet', function()
TriggerEvent('agency-pad:client:openApp', 'fleet')
end)agency-pad:client:newMailNotifyNotifie le client d'un mail fraîchement reçu.
Voir l'exemple
Écoute les notifs de nouveau mail tablette et les log localement.
AddEventHandler('agency-pad:client:newMailNotify', function(mail)
print(('Tablet mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-pad:client:hourlyPaycheckNotifie le client d'un événement de paye business horaire.
Voir l'exemple
Réagit à un paycheck horaire d'entreprise déclenché par la tablette.
AddEventHandler('agency-pad:client:hourlyPaycheck', function(payload)
print(('Hourly paycheck: $%s from %s'):format(payload.amount, payload.businessName))
end)agency-pad:server:requestPadDataDemande une synchronisation fraîche des données tablette pour le joueur appelant.
Voir l'exemple
Demande au serveur une nouvelle synchro complète des données tablette.
RegisterCommand('refreshpad', function()
TriggerServerEvent('agency-pad:server:requestPadData')
end)agency-pad:server:sendMessageEnvoie un SMS (newMsg, targetNumber).
Voir l'exemple
Envoie un SMS depuis la tablette via une commande et un numéro cible.
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:airdropPayEffectue un transfert Agency Airdrop vers un joueur proche.
Voir l'exemple
Déclenche un Agency Airdrop vers les joueurs proches via la tablette.
RegisterCommand('airdroppad', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-pad:server:airdropPay', amount, 'Tablet airdrop')
end)agency-pad:server:buyDataPlanAchète un data plan opérateur pour le joueur.
Voir l'exemple
Achète un forfait data tablette quand le joueur le choisit dans un UI custom.
AddEventHandler('myresource:client:padPlanSelected', function(plan)
TriggerServerEvent('agency-pad:server:buyDataPlan', plan.price, plan.name)
end)agency-pad:dispatch:createCrée un dispatch tablette à partir d'un appel/SMS d'urgence.
Voir l'exemple
Crée une entrée dispatch tablette à partir d'un appel d'urgence entrant.
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:createCrée un nouveau business/organisation pour le joueur.
Voir l'exemple
Crée une nouvelle entreprise via une commande in-game personnalisée.
RegisterCommand('startbiz', function()
TriggerServerEvent('agency-pad:server:biz:create', {
name = 'Bennys Repair',
type = 'mechanic',
location = 'sandy_shores'
})
end)agency-pad:server:biz:adminCreateL'admin crée un business pour le compte d'un autre joueur.
Voir l'exemple
Transmet une commande admin pour créer une entreprise pour un autre joueur.
RegisterNetEvent('myresource:server:adminCreateBiz', function(targetSrc, payload)
TriggerEvent('agency-pad:server:biz:adminCreate', targetSrc, payload)
end)agency-pad:server:biz:startMissionLance une mission business configurée pour le joueur.
Voir l'exemple
Lance une mission d'entreprise configurée pour le joueur appelant.
RegisterCommand('bizmission', function()
TriggerServerEvent('agency-pad:server:biz:startMission', {
bizId = 12,
missionId = 'delivery_route_a'
})
end)agency-pad:server:applyToListingEnvoie une candidature à une annonce business.
Voir l'exemple
Postule à une annonce d'emploi tablette via son id.
RegisterCommand('apply', function(_, args)
local listingId = tonumber(args[1])
TriggerServerEvent('agency-pad:server:applyToListing', listingId, {
coverNote = 'Available immediately'
})
end)agency-pad:server:createMechanicInvoiceCrée un brouillon de facture mécanicien.
Voir l'exemple
Crée un brouillon de facture mécanicien pour une plaque et un montant.
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:sendMechanicInvoicePayEnvoie une facture mécanicien à un client pour paiement.
Voir l'exemple
Envoie une facture mécanicien finalisée au client pour paiement.
AddEventHandler('myresource:client:onInvoiceConfirmed', function(invoice)
TriggerServerEvent('agency-pad:server:sendMechanicInvoicePay', invoice.id, invoice.targetSrc)
end)agency-pad:server:mdtCreateInvoiceLe MDT crée une amende/facture pour un citoyen.
Voir l'exemple
Crée une amende MDT pour un citoyen via un net event personnalisé.
RegisterNetEvent('myresource:server:mdtFine', function(targetSrc, amount, reason)
TriggerEvent('agency-pad:server:mdtCreateInvoice', {
target = targetSrc,
amount = amount,
reason = reason,
officer = source
})
end)03Agency-Watch
Désormais avec AgencyOS27 : une mise à jour gratuite pour tous ceux qui ont déjà la montre. Une vraie montre connectée pour FiveM, pas un HUD. Dix cadrans, un Studio pour le boîtier, le bracelet et les couleurs, anneaux d'activité, chronomètre, minuteur, réveil, météo, boussole, compteur, quatre jeux, un centre de contrôle et un app store, le tout sans aucune autre resource. Angy se trouve sur la couronne et pilote la montre à la demande, avec des règles fixes et sans IA. Un Agency Phone détecté débloque appels, messages, mail, contacts et Agency Pay au poignet, et ouvre la montre à vos propres apps. Gratuit, QBCore / Qbox / ESX / standalone, dix langues.
Exports client
OpenWatch(mitte)Ouvre la montre. Passez true pour l'ouvrir au centre de l'écran plutôt que dans son coin configuré.
CloseWatch()Ferme la montre et libère le focus NUI.
ToggleWatch()Ferme la montre si elle est ouverte, sinon l'ouvre.
IsWatchOpen()Renvoie true tant que l'interface de la montre est à l'écran.
IsWatchLinked()Renvoie false si le joueur a désactivé la liaison avec l'Agency Phone dans le centre de contrôle.
RunWatchAction()Déclenche l'action associée au bouton d'action orange (Config.ActionButton).
GetWatchSettings()Renvoie la table complète des réglages à partir de laquelle l'interface de la montre est construite (thème, cadran, taille, apps, langue).
SetWatchSetting(key, value)Définit un réglage, l'enregistre par personnage et l'applique immédiatement.
SetWatchSettings(table)Définit plusieurs réglages à la fois et reconstruit l'interface une seule fois au lieu d'une fois par valeur.
RequestWatchPairing()Demande au serveur un code d'appairage pour l'app Companion. La réponse arrive sous forme d'événement, pas de valeur de retour.
ShowUpdate()Ouvre l'écran de mise à jour logicielle d'AgencyOS.
HandlesDeath()Renvoie true si la montre affiche l'écran d'urgence à la mort. L'Agency Phone le vérifie pour que les deux appareils ne l'affichent jamais en même temps.
GetFitness()Renvoie les valeurs d'activité actuelles de la journée : pas, distance, minutes actives et calories.
SetWatchAppInstalled(id, on)Installe ou supprime une app pour ce joueur. Comme l'App Store, pour qu'un serveur puisse offrir une app en récompense.
FindWatch()Fait sonner et s'allumer la montre, comme la fonction de localisation de l'app Companion.
StopFindWatch()Arrête la sonnerie avant qu'elle ne s'arrête d'elle-même.
IsWatchRinging()Renvoie true tant que la montre sonne.
Exports serveur
IsPremium(src)Renvoie true si la montre de ce joueur tourne en version Pro. Le verdict vient de la poignée de main avec l'Agency Phone authentique, jamais du client.
04Agency-Zero
Une quatre places électrique autonome pour FiveM, gratuite. Le Project 0 est un véhicule à part entière, construit de zéro dans Blender avec Sollumz : pas de poignées de porte, des portes qui s'ouvrent en vague, un vrai volant et des pédales pour reprendre la main. Les joueurs l'appellent depuis l'Agency Phone, l'Agency Pad ou l'app Agency Companion sur leur vrai téléphone, et elle vient jusqu'à eux et se gare le long du trottoir à côté d'eux au lieu de partir chercher une place. À l'intérieur, AgencyOS27 tourne sur la tablette du tableau de bord et dans le menu Z : une carte à toucher, Angy, l'assistant intégré, avec des règles fixes et sans IA, à qui l'on parle avec des mots simples, six aides à la conduite avec un interrupteur principal, une reprogrammation par paliers, des puces sonores et des statistiques par voiture et par propriétaire. Chaque voiture porte son propre numéro, lié à son propriétaire dans la base de données, si bien que la propriété, la préparation et chaque réglage survivent à un redémarrage. QBCore, Qbox et ESX sont détectés automatiquement, elle fonctionne aussi en standalone, et tous les textes sont livrés en 27 langues avec l'anglais en base.
Exports client
ZeroStatus()Renvoie l'état du Project 0 du joueur : s'il existe, où il se trouve, batterie, autonomie et si un trajet est en cours.
ZeroCall()Appelle la voiture vers le joueur. Elle s'y rend et se gare le long du trottoir à côté de lui.
ZeroDeliver()Fait livrer la voiture si elle n'est pas sur la carte. Coûte Config.Remote.deliveryFee, gratuit sans framework.
ZeroGarage()Renvoie la voiture dans son garage.
ZeroCancel()Annule un appel ou un trajet en cours.
ZeroFind()Affiche en bas de l'écran la direction de la voiture pendant Config.Remote.findRadarSeconds secondes.
ZeroDoors(on)Ouvre les portes avec true, les ferme avec false. Elles bougent en vague, pas toutes en même temps.
ZeroLock(on)Verrouille la voiture avec true, la déverrouille avec false.
ZeroLights(on)Allume et éteint les feux.
ZeroBuyInfo()Indique si le joueur peut acheter un Project 0 et son prix. Celui qui en possède déjà un ne reçoit rien.
ZeroBuy()Achète un Project 0 pour ce joueur. La voiture lui est liée dans la même étape.
ZeroRefresh()Relit l'état, pour une interface qui veut des valeurs fraîches sans attendre le prochain tick.
IsRideActive()Renvoie true tant qu'un trajet autonome est en cours.
CallProjectZero()Démarre un trajet vers la destination actuelle. Sans destination, le point de passage de la carte est utilisé.
CancelProjectZero()Termine le trajet. La voiture se range sur le côté et s'arrête.
IsCockpitOpen()Renvoie true tant que la tablette du tableau de bord est à l'écran.
IsManualOverride()Renvoie true si le conducteur a pris le volant. Sans cette reprise en main, le Zero ne roule qu'en autonome.
AnyDoorOpen(veh)Renvoie true si au moins une porte de ce véhicule est ouverte.
OpenDoors(veh, opts)Ouvre les portes d'un véhicule avec l'animation en vague.
CloseDoors(veh, opts)Les referme.
AnimateDoors(veh, open, opts)Ouvre ou ferme selon le second argument, pour du code qui décide à l'exécution.
SoundChipOf(veh)Renvoie la puce sonore montée sur cette voiture. Changer de puce change le moteur, jamais la radio.
Exports serveur
IsPro(src)Renvoie true si le Zero de ce joueur tourne en version Pro. Le verdict vient de la poignée de main HMAC avec l'Agency Phone authentique, jamais du client.
ZeroVin(plate)Renvoie le numéro de véhicule associé à une plaque. Chaque Project 0 en reçoit un à sa remise et le garde pour toujours.
ZeroCarsOf(src)Renvoie tous les Project 0 que possède ce joueur, avec numéro, plaque, palier de préparation et statistiques.
ZeroSync(src)Renvoie l'état du registre à ce joueur, par exemple après qu'un autre script a changé la propriété.
Événements
agency-zero:client:rideStartedUn trajet a commencé. Contient la destination.
agency-zero:client:rideEndedLe trajet est terminé, annulé ou arrivé.
agency-zero:client:arrivedLa voiture a rejoint le joueur et ouvert ses portes.
05Agency-Lifeinvader V3
L’agence publicitaire de la ville : publicités des joueurs sur chaque écran, avec catégories, mises en avant, programmation, brouillons, validation, métier du personnel, rédacteur IA et application pour Agency Phone et Agency Pad.
Convient aux scripts d’entreprise et de métier qui diffusent leurs propres publicités, aux scripts d’événement et de casino qui annoncent ce qui se passe, aux journaux Discord de chaque publicité, aux téléphones et menus radiaux qui ouvrent l’application, ainsi qu’aux outils d’administration qui vérifient les admins Lifeinvader.
Exports client
OpenApp(tab)Ouvre l’application sur la page indiquée : 'feed', 'create', 'mine', 'drafts' ou 'settings'. Sans page précisée, elle s’ouvre sur la dernière page utilisée, ou sur le fil d’actualité.
Voir l'exemple
Ouvre l’application sur Nouvelle publicité depuis votre propre menu radial ou téléphone.
-- an entry in your radial menu
exports['Agency-LifeinvaderV3']:OpenApp('create')OpenFeed()Ouvre l’application sur le fil d’actualité.
Voir l'exemple
Ouvre le flux en direct, par exemple depuis un kiosque à journaux.
exports['Agency-LifeinvaderV3']:OpenFeed()CloseApp()Ferme l’application.
Voir l'exemple
Ferme l’application avant l’ouverture de votre propre menu.
exports['Agency-LifeinvaderV3']:CloseApp()IsOpen()Vaut true lorsque l’application est ouverte sur ce client.
Voir l'exemple
Empêche votre menu de s’ouvrir par-dessus l’application.
if not exports['Agency-LifeinvaderV3']:IsOpen() then
-- open your own menu
endExports serveur
PostAd(text, opts)Publie une publicité pour le serveur lui-même : gratuite, jamais soumise à vérification et placée en tête de file. opts : author, category, instant (lance immédiatement), reps, interval, duration et boosted. Renvoie l’identifiant de la publicité, ou nil et un code d’erreur.
Voir l'exemple
Publie une publicité officielle depuis votre script de casino ou d’événement, gratuitement et en tête de la file d’attente.
exports['Agency-LifeinvaderV3']:PostAd('Casino night tonight at 20:00, free entry!', {
author = 'Diamond Casino', category = 'events', instant = true,
})GetFeed(limit)Le fil d’actualité tel qu’affiché dans l’application, du plus récent au plus ancien : id, text, category, boosted, author (nil pour les publicités anonymes), sentAt, created, sent et live.
Voir l'exemple
Consulte les dernières annonces, pour un site web, un journal ou une application téléphonique.
for _, ad in ipairs(exports['Agency-LifeinvaderV3']:GetFeed(10)) do
print(ad.id, ad.author or 'anonymous', ad.text)
endGetAd(id)Une publicité au même format que le fil d’actualité, ou nil.
Voir l'exemple
Recherche une annonce par son numéro.
local ad = exports['Agency-LifeinvaderV3']:GetAd(412)
if ad then print(ad.text) endIsAdmin(source)Vaut true lorsque le joueur est administrateur Lifeinvader via ACE, son groupe ou son identifiant.
Voir l'exemple
Utilise les droits d’administration de Lifeinvader dans votre propre script.
if exports['Agency-LifeinvaderV3']:IsAdmin(source) then
-- show your admin tools
endÉvénements
agency-lifeinvader:adShownÉvénement local sur chaque client lorsqu’une publicité apparaît à l’écran, avec id, text, category, catLabel, icon, author (nil si anonyme), boosted, duration et system (true pour les annonces officielles).
Voir l'exemple
Réagit côté client lorsqu’une annonce apparaît, par exemple sur un panneau d’affichage.
AddEventHandler('agency-lifeinvader:adShown', function(ad)
-- ad.text, ad.author, ad.category
end)agency-lifeinvader:adBroadcastÉvénement local sur le serveur à chaque diffusion d’une publicité, avec la publicité au format du fil d’actualité. Pratique pour les logs ou un webhook Discord.
Voir l'exemple
Enregistre chaque annonce diffusée sur le serveur.
AddEventHandler('agency-lifeinvader:adBroadcast', function(ad)
-- send ad.text to your Discord log
end)agency_lifeinvader:openMenuConservé depuis V3 : ouvre l’application sur Nouvelle publicité, pour que les scripts qui ouvraient l’ancien menu continuent de fonctionner.
Voir l'exemple
Ouvre l’application sur la page Nouvelle annonce pour un joueur, comme le faisait l’événement V3.
TriggerClientEvent('agency_lifeinvader:openMenu', source)agency_lifeinvader:openRecentMenuConservé depuis V3 : ouvre l’application sur le fil d’actualité.
Voir l'exemple
Ouvre le fil d’actualité en direct pour un joueur, comme le faisait l’événement V3.
TriggerClientEvent('agency_lifeinvader:openRecentMenu', source)06Agency-Blackmarket V2
Un marché noir vivant avec des dealers qui se déplacent, un marché en direct, du marchandage, des commandes à récupérer, des courses, un receleur, du blanchiment d'argent et cinq niveaux de réputation.
Convient aux scripts de gangs, de braquages et de drogue qui doivent donner de la réputation ou du crédit, aux outils de police et de dispatch qui réagissent aux transactions et aux déplacements des dealers, et aux menus radiaux ou téléphones qui ouvrent le menu du marché noir.
Exports client
OpenMenu()Ouvre le menu de /ablackmarket, par exemple depuis un menu radial ou une application de téléphone. Les mêmes vérifications que pour la commande s'appliquent.
Voir l'exemple
Ouvre le menu du marché noir depuis votre propre menu radial ou votre application de téléphone.
-- an entry in your radial menu
exports['Agency-Blackmarket']:OpenMenu()CloseMenu()Ferme le menu et rend la souris au jeu.
Voir l'exemple
Ferme le menu, par exemple avant une cinématique à vous.
-- before your own cutscene starts
exports['Agency-Blackmarket']:CloseMenu()IsMenuOpen()Renvoie true tant que le menu du marché noir est ouvert, chez un dealer ou n'importe où.
Voir l'exemple
Vérifie si le menu est ouvert avant que votre propre interface n'apparaisse.
if exports['Agency-Blackmarket']:IsMenuOpen() then
return -- the player is busy in the black market menu
endExports serveur
GetReputation(source)Les points de réputation d'un joueur, 0 pour un joueur qui n'en a pas encore.
Voir l'exemple
Ne laisse que les joueurs avec assez de réputation lancer votre job ou votre braquage.
local rep = exports['Agency-Blackmarket']:GetReputation(source)
if rep < 150 then
return -- this heist needs a known name on the street
endSetReputation(source, value)Fixe la réputation d'un joueur à une valeur donnée, jamais en dessous de 0. Renvoie true en cas de succès.
Voir l'exemple
Fixe la réputation d'un joueur à une valeur donnée.
-- an admin tool resets a player
exports['Agency-Blackmarket']:SetReputation(targetId, 0)AddReputation(source, amount)Ajoute de la réputation, ou en retire avec un montant négatif. Un nouveau niveau est annoncé au joueur et à l'application Companion. Renvoie true en cas de succès.
Voir l'exemple
Récompense un job terminé avec de la réputation ; un nouveau niveau est annoncé.
-- a finished drug run earns street reputation
exports['Agency-Blackmarket']:AddReputation(source, 15)GetLevel(source)Renvoie deux valeurs : le numéro du niveau du joueur (1 à 5 par défaut) et son nom.
Voir l'exemple
Lit le numéro du niveau et son nom, par exemple pour débloquer votre propre contenu.
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)Ajoute du crédit dealer, que le joueur peut utiliser lors de son prochain achat ou de sa prochaine commande. Renvoie true en cas de succès.
Voir l'exemple
Donne à un joueur du crédit dealer pour son prochain achat ou sa prochaine commande.
-- a gang boss pays out in dealer credit
exports['Agency-Blackmarket']:AddCredit(source, 2500)RelocateDealer(dealerId)Déplace immédiatement un dealer vers un autre de ses emplacements. Renvoie true s'il a bougé.
Voir l'exemple
Déplace immédiatement un dealer vers un autre de ses emplacements.
-- a tip reached the police: the dealer changes his spot
exports['Agency-Blackmarket']:RelocateDealer('vince')SendDealerAway(dealerId, minutes)Le dealer disparaît pendant le nombre de minutes indiqué, puis réapparaît à un autre de ses emplacements, comme après une visite de la police.
Voir l'exemple
Éloigne un dealer pendant un moment, comme après une visite de la police.
-- a raid in the area: Marlow goes quiet for 20 minutes
exports['Agency-Blackmarket']:SendDealerAway('marlow', 20)IsDealerPresent(dealerId)True tant que le dealer se trouve à l'un de ses emplacements et n'est pas parti.
Voir l'exemple
Vérifie si un dealer se trouve en ce moment à l'un de ses emplacements.
if exports['Agency-Blackmarket']:IsDealerPresent('vince') then
print('Vince is on the street')
endStartFlashSale(minutes)Lance une vente flash avec des objets au hasard à prix réduit. Sans minutes, la durée de Config.FlashSale est utilisée.
Voir l'exemple
Lance une vente flash depuis votre propre événement ou planning.
-- the city had a big night: a flash sale for 10 minutes
exports['Agency-Blackmarket']:StartFlashSale(10)Événements
agency-blackmarket:dealSe déclenche sur le serveur avec (source, kind, data) après chaque transaction. kind vaut buy, sell, launder, order, pickup ou job, et data contient le détail de la transaction, comme le dealer, les objets et le total.
Voir l'exemple
Réagit à chaque transaction, par exemple pour vos propres logs ou une tablette de police.
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 déclenche sur le serveur avec (dealerId, pos, reason) quand un dealer change d'emplacement. reason vaut rotate, return, admin ou export.
Voir l'exemple
Suit les dealers, par exemple pour un job d'indic ou d'enquêteur.
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 déclenche sur le serveur avec (items, minutes) au début d'une vente flash. items associe chaque objet en promotion à sa remise en pourcentage.
Voir l'exemple
Annonce une vente flash sur vos propres canaux.
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 métier de mineur avec sept zones, trois outils, 100 niveaux, des fours, la taille de gemmes, des contrats et un marché aux prix fluctuants, le tout dans un seul menu.
Compatible avec les scripts de quêtes et de succès qui réagissent à l’activité minière, les scripts économiques et de métiers qui consultent les prix du marché, les menus radiaux et les téléphones qui ouvrent le menu, ainsi que les outils d’administration qui définissent les niveaux ou attribuent des XP.
Exports client
OpenMenu(page)Ouvre le menu, par exemple depuis un menu radial ou une application de téléphone. page peut être overview (par défaut), market, tools, smelter, cutting ou contracts.
Voir l'exemple
Ouvre le menu sur la page du marché depuis votre menu radial ou votre application de téléphone.
-- an entry in your radial menu
exports['Agency-Minerjob']:OpenMenu('market')CloseMenu()Ferme le menu et rend la souris au jeu.
Voir l'exemple
Ferme le menu avant l’ouverture de votre propre menu.
exports['Agency-Minerjob']:CloseMenu()IsMenuOpen()Vrai lorsque le menu est ouvert.
Voir l'exemple
Empêche votre menu de s’ouvrir par-dessus le menu de minage.
if not exports['Agency-Minerjob']:IsMenuOpen() then
-- open your own menu
endIsWorking()Vrai lorsque le joueur mine ou taille une gemme.
Voir l'exemple
Empêche votre script d’interrompre l’animation de minage ou de découpe.
if exports['Agency-Minerjob']:IsWorking() then
return -- no emotes while mining
endGetLevel()Le niveau de minage du joueur.
Voir l'exemple
Lit le niveau du joueur, par exemple pour un HUD ou une application téléphonique.
local level = exports['Agency-Minerjob']:GetLevel()
print('Mining level', level)Exports serveur
GetLevel(source)Le niveau de minage d’un joueur, 0 si le joueur est inconnu.
Voir l'exemple
Vérifie le niveau de minage côté serveur avant que votre script n’autorise une action.
if exports['Agency-Minerjob']:GetLevel(source) < 25 then
return -- the quarry job needs level 25
endGetProgress(source)Niveau et progression sous la forme { level, xp, need, pct, max }.
Voir l'exemple
Lit le niveau et la progression, par exemple pour une application téléphonique ou un tableau des scores.
local p = exports['Agency-Minerjob']:GetProgress(source)
print(p.level, p.xp, p.need, p.pct)AddXp(source, amount)Ajoute de l’XP, avec les montées de niveau et leur message. Renvoie true si le joueur a été trouvé.
Voir l'exemple
Attribue des XP de minage en récompense pour votre propre quête ou événement.
-- a quest reward
exports['Agency-Minerjob']:AddXp(source, 250)SetLevel(source, level)Définit le niveau entre 1 et le niveau maximal et le démarre à 0 XP.
Voir l'exemple
Définit le niveau, par exemple depuis votre propre outil d’administration.
exports['Agency-Minerjob']:SetLevel(source, 10)GetStats(source)Ce que le joueur a fait jusqu’à présent : { mined, smelted, cut, broken, sold, earned, contracts }.
Voir l'exemple
Lit ce qu’un joueur a extrait et gagné, pour un classement ou des succès.
local stats = exports['Agency-Minerjob']:GetStats(source)
print(stats.mined, stats.earned)GetPrice(item)Le prix actuel du marché d’un objet à l’unité.
Voir l'exemple
Lit le cours actuel du marché, par exemple pour un ticker boursier ou une boutique qui achète les mêmes objets.
local price = exports['Agency-Minerjob']:GetPrice('gold_bar')
print('Gold bar pays', price)Événements
agency-minerjob:minedDéclenché sur le serveur après le paiement d’une session de minage, avec source, item, count et la zone minière. Utilisez AddEventHandler pour l’écouter, par exemple pour des quêtes ou des statistiques.
Voir l'exemple
Réagit côté serveur à chaque opération de minage qui a rapporté quelque chose.
AddEventHandler('agency-minerjob:mined', function(source, item, count, area)
-- count mined ore for a quest
end)agency-minerjob:soldDéclenché sur le serveur après une vente, avec source, item, count et le montant total payé.
Voir l'exemple
Réagit côté serveur à chaque vente, pour les logs ou les statistiques.
AddEventHandler('agency-minerjob:sold', function(source, item, count, total)
-- log big sales
end)agency-minerjob:contractDéclenché sur le serveur lorsqu’un contrat a été livré, avec source, item, count et le paiement.
Voir l'exemple
Réagit côté serveur lorsqu’un contrat a été livré.
AddEventHandler('agency-minerjob:contract', function(source, item, count, pay)
-- an achievement for delivered contracts
end)08Agency-Repairkit V2
Dégâts de véhicule réalistes avec quatre kits de réparation, des skill checks et un bonus mécanicien.
Convient aux jobs de mécanicien et de dépanneur, aux boutiques qui vendent des kits, et à tout script qui doit réagir à une réparation terminée ou au niveau de dégâts de la voiture qu'un joueur conduit.
Exports client
IsRepairing()Renvoie true tant que le joueur local travaille sur un véhicule, par exemple pour garder votre propre menu fermé.
Voir l'exemple
Garde votre propre menu fermé pendant que le joueur répare un véhicule.
if exports['Agency-Repairkit']:IsRepairing() then
return -- keep your menu closed while the player works
endGetVehicleCondition(vehicle)Le moteur, la carrosserie et le réservoir en %, les pneus, la saleté, le niveau de dégâts et si le réservoir fuit. Sans argument, il lit le véhicule dans lequel se trouve le joueur.
Voir l'exemple
Lit l'état du véhicule que le joueur conduit.
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()Ouvre le menu /arepairkit, par exemple depuis une application de téléphone ou un menu radial.
Voir l'exemple
Ouvre le menu du kit de réparation depuis votre propre menu radial ou application de téléphone.
-- an entry in your radial menu or phone app
exports['Agency-Repairkit']:OpenMenu()CloseMenu()Ferme le menu et rend la souris au jeu.
Voir l'exemple
Ferme le menu, par exemple avant une de vos propres cinématiques.
-- before your own cutscene starts
exports['Agency-Repairkit']:CloseMenu()IsMenuOpen()Renvoie true tant que le menu est ouvert.
Voir l'exemple
Vérifie si le menu est ouvert avant que votre propre interface apparaisse.
if exports['Agency-Repairkit']:IsMenuOpen() then
return -- the player is busy in the repair kit menu
endExports serveur
UseKit(source, kit)Démarre un kit pour un joueur comme si l'item avait été utilisé, avec toutes les vérifications. Renvoie true, ou false et la raison. Pour les inventaires et boutiques personnalisés.
Voir l'exemple
Démarre le kit de dépannage pour un joueur depuis un inventaire personnalisé.
-- 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)Ajoute des kits à l'inventaire d'un joueur via l'inventaire détecté. Renvoie true en cas de succès.
Voir l'exemple
Donne à un joueur deux kits pneus via l'inventaire détecté.
-- a shop NPC sells two tyre kits
exports['Agency-Repairkit']:GiveKit(source, 'tyre', 2)IsRepairing(source)True tant que ce joueur travaille sur un véhicule.
Voir l'exemple
Ignore une tâche tant que le joueur répare.
if exports['Agency-Repairkit']:IsRepairing(source) then
return -- no new job task while the player is busy
endGetKits()Chaque kit configuré avec son item, son label, son type de travail et sa durée.
Voir l'exemple
Liste chaque kit avec son objet et son libellé.
for name, kit in pairs(exports['Agency-Repairkit']:GetKits()) do
print(name, kit.item, kit.label, kit.duration)
enduseKit(event, item, inventory, slot, data)L'export d'item d'ox_inventory. Les entrées d'items dans install/ox_inventory.lua pointent vers lui ; il n'est pas destiné à être appelé directement.
Voir l'exemple
L'entrée d'objet qui relie ox_inventory aux kits.
-- ox_inventory/data/items.lua
['agencyrepairkit'] = {
label = 'Roadside Repair Kit', weight = 1500, consume = 0,
server = { export = 'Agency-Repairkit.useKit' },
},Événements
agency-repairkit:repairedSe déclenche sur le serveur avec (source, netId, kit) une fois la réparation terminée et le kit consommé. Utile pour les logs, les paiements ou la progression du job.
Voir l'exemple
Enregistre chaque réparation terminée sur le serveur.
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 déclenche sur le client du joueur qui répare avec (netId, kit) quand une réparation est terminée.
Voir l'exemple
Réagit sur le client du joueur qui répare.
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 déclenche sur le client du conducteur avec (level, vehicle) à chaque changement du niveau de dégâts : ok, light, medium, heavy ou critical.
Voir l'exemple
Suit le niveau de dégâts du véhicule que conduit le joueur.
AddEventHandler('agency-repairkit:client:damageLevel', function(level, vehicle)
if level == 'critical' then
-- offer the tow-truck job
end
end)09Agency-Vehiclekeys V2
Clés de véhicule universelles avec trousseau et télécommande, clés permanentes et temporaires, clés liées aux métiers, crochetage et démarrage forcé avec alertes à la police, et une page d’administration.
Convient aux garages, aux concessionnaires et aux services de location qui fournissent des clés, aux scripts de métier avec leurs propres véhicules, aux scripts de braquage et de vol de voiture qui doivent vérifier ou fournir des clés, aux HUD qui indiquent l’état du moteur, ainsi qu’aux menus radiaux ou aux téléphones qui ouvrent le trousseau de clés.
Exports client
HasKeys(plate)Vrai lorsque le joueur possède une clé pour cette plaque : propriétaire, partagée ou temporaire. Les véhicules de métier s’ouvrent selon leur modèle et ne sont pas comptabilisés ici.
Voir l'exemple
Vérifie la clé avant que votre script autorise le joueur à utiliser la voiture.
if exports['Agency-Vehiclekeys']:HasKeys(GetVehicleNumberPlateText(vehicle)) then
-- the player may drive this car
endGetKeys()Toutes les clés du joueur sous forme de liste { plate, kind }. kind correspond à owner, shared ou temp.
Voir l'exemple
Répertorie toutes les clés du joueur, par exemple pour une application de téléphone.
for _, key in ipairs(exports['Agency-Vehiclekeys']:GetKeys()) do
print(key.plate, key.kind)
endToggleLock(vehicle)Verrouille ou déverrouille un véhicule dont le joueur possède la clé, avec la même animation et les mêmes vérifications que G. En l’absence de véhicule, le véhicule le plus proche à portée est utilisé.
Voir l'exemple
Verrouille ou déverrouille la voiture la plus proche depuis votre propre menu radial.
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:ToggleLock()ToggleEngine()Démarre ou arrête le moteur du véhicule conduit par le joueur, comme avec U.
Voir l'exemple
Démarre ou arrête le moteur depuis votre propre menu ou HUD de voiture.
exports['Agency-Vehiclekeys']:ToggleEngine()OpenMenu()Ouvre le trousseau, par exemple depuis un menu radial ou une application de téléphone.
Voir l'exemple
Ouvre le trousseau de clés depuis votre propre menu radial ou application de téléphone.
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:OpenMenu()CloseMenu()Ferme le trousseau et rend la souris au jeu.
Voir l'exemple
Ferme le trousseau de clés avant l’ouverture de votre propre menu.
exports['Agency-Vehiclekeys']:CloseMenu()IsMenuOpen()Vrai lorsque le trousseau est ouvert.
Voir l'exemple
Empêche votre menu de s’ouvrir par-dessus le trousseau de clés.
if not exports['Agency-Vehiclekeys']:IsMenuOpen() then
-- open your own menu
enduseLockpick()Lance une tentative de crochetage sur la voiture devant le joueur, ou un démarrage forcé depuis le siège conducteur. Prévu pour les objets ox_inventory : client = { export = 'Agency-Vehiclekeys.useLockpick' }.
Voir l'exemple
Permet aux joueurs d’utiliser le crochetage depuis le menu ox_inventory.
-- ox_inventory/data/items.lua
['lockpick'] = {
label = 'Lockpick',
client = { export = 'Agency-Vehiclekeys.useLockpick' },
},Exports serveur
GiveKeys(source, plate, mode, hours)Donne une clé. Le mode 'temp' (par défaut) correspond à une clé temporaire, éventuellement pour un certain nombre d’heures, et 'perm' à une clé enregistrée. Une source ou un identifiant peut être utilisé.
Voir l'exemple
Donne une clé temporaire, par exemple lorsqu’une voiture est louée ou créée par un métier.
-- a rental that lasts two hours
exports['Agency-Vehiclekeys']:GiveKeys(source, plate, 'temp', 2)RemoveKeys(source, plate)Retire une clé partagée ou temporaire. Renvoie true si une clé a été retirée.
Voir l'exemple
Retire la clé à la fin de la location ou une fois le travail terminé.
exports['Agency-Vehiclekeys']:RemoveKeys(source, plate)HasKeys(source, plate)Vrai lorsque le joueur possède une clé pour la plaque, y compris les clés de métier pour un véhicule à proximité.
Voir l'exemple
Vérifie côté serveur que le joueur possède bien la clé.
if not exports['Agency-Vehiclekeys']:HasKeys(source, plate) then
return -- no key, no delivery
endSetOwner(source, plate)Fait du joueur le propriétaire d’une plaque, pour les garages et les boutiques sur les serveurs standalone. Un ancien propriétaire perd sa clé.
Voir l'exemple
Définit l’acheteur comme propriétaire de la voiture sur les serveurs standalone.
-- your standalone vehicle shop, after the purchase
exports['Agency-Vehiclekeys']:SetOwner(source, plate)RemoveOwner(plate)Supprime le propriétaire enregistré par ce script pour une plaque.
Voir l'exemple
Supprime le propriétaire enregistré lorsque la voiture est vendue ou mise à la casse.
exports['Agency-Vehiclekeys']:RemoveOwner(plate)GetOwner(plate)L’identifiant du propriétaire et sa provenance : 'framework' pour les véhicules possédés dans QBCore, Qbox ou ESX, 'store' pour les propriétaires enregistrés par ce script.
Voir l'exemple
Trouve le propriétaire d’une plaque, pour les outils de police ou les scripts de mise en fourrière.
local owner, from = exports['Agency-Vehiclekeys']:GetOwner(plate)
print(owner, from) -- identifier, 'framework' or 'store'GetKeyHolders(plate)Toutes les autres personnes ayant une clé pour la plaque, sous forme de liste { identifier, kind, name, expires }.
Voir l'exemple
Affiche toutes les personnes qui possèdent une clé de voiture, par exemple dans un ordinateur de police.
for _, h in ipairs(exports['Agency-Vehiclekeys']:GetKeyHolders(plate)) do
print(h.name, h.kind)
endSetVehicleLocked(vehicle, locked)Verrouille ou déverrouille un véhicule pour tout le monde, sans vérifier les clés. Pour les scripts qui doivent ouvrir une voiture.
Voir l'exemple
Ouvre ou verrouille une voiture pour tout le monde, sans vérifier les clés.
-- a heist script opens the car for the crew
exports['Agency-Vehiclekeys']:SetVehicleLocked(vehicle, false)IsVehicleLocked(vehicle)Vrai lorsque le véhicule est verrouillé.
Voir l'exemple
Lit l’état du verrouillage côté serveur.
if exports['Agency-Vehiclekeys']:IsVehicleLocked(vehicle) then
-- the car is closed
endGetFramework()Le framework détecté par le script : qbcore, esx ou standalone.
Voir l'exemple
Permet à votre script de suivre le framework détecté par le script de clés.
if exports['Agency-Vehiclekeys']:GetFramework() == 'standalone' then
-- give the key yourself
endÉvénements
Agency:Keys:GiveServerDemande une clé temporaire pour une plaque, comme le font Agency Garage et Agency Vehicleshop. Déclenchez cet événement côté client avec la plaque. La voiture doit être à côté du joueur ou lui appartenir.
Voir l'exemple
Demande une clé pour une voiture qui vient d’apparaître à côté du joueur.
-- client side, after your garage spawned the car
TriggerServerEvent('Agency:Keys:GiveServer', GetVehicleNumberPlateText(vehicle))qb-vehiclekeys:server:AcquireVehicleKeysL'événement de clé de qb-vehiclekeys, interprété de la même manière, pour que les garages et les boutiques conçus pour qb-vehiclekeys continuent de fonctionner.
Voir l'exemple
Les scripts conçus pour qb-vehiclekeys continuent de fonctionner sans modification.
TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate)vehiclekeys:client:SetOwnerÉvénement client déclenché par de nombreux garages et boutiques après l'apparition d'une voiture. Donne une clé temporaire pour cette plaque après les mêmes vérifications côté serveur.
Voir l'exemple
L’événement que de nombreux garages déclenchent après avoir fait apparaître une voiture donne une clé au joueur.
TriggerEvent('vehiclekeys:client:SetOwner', plate)qb-vehiclekeys:client:AddKeysL'événement client de qb-vehiclekeys pour remettre des clés, interprété de la même manière.
Voir l'exemple
Remet une clé comme le faisait qb-vehiclekeys.
TriggerEvent('qb-vehiclekeys:client:AddKeys', plate)simple_carkeys:client:toggleEngineDéclenché côté client lorsque le moteur est démarré ou arrêté avec une clé, afin que les HUD tels que Agency-Hud puissent suivre l'état du moteur.
Voir l'exemple
Permet à votre HUD de suivre le moteur lorsqu’il est démarré ou arrêté avec une clé.
AddEventHandler('simple_carkeys:client:toggleEngine', function()
-- update the engine icon of your HUD
end)10Agency-Vending
Distributeurs automatiques avec propriété par les joueurs, paiement en espèces ou par carte AgencyPay.
Associez à l'export AgencyPay d'Agency-Phone pour les achats par carte. Utilisez dans des jobs où les joueurs possèdent des emplacements de vending (stations-service, bureaux, appartements) pour générer un revenu passif.
Événements
agency-vending:notifyDispatcher generique de notifications cote server pour la resource vending.
Voir l'exemple
Envoie une notification generique vending au joueur apres un achat.
-- Plug a vending receipt into a custom logger via notify event
TriggerClientEvent('agency-vending:notify', src, 'success', 'Receipt #4821 saved to wallet')agency-vending:startAgencyPayLance un checkout AgencyPay via l'integration agency-phone avec les metadonnees marchand.
Voir l'exemple
Lance un paiement Agency Pay via le telephone avec les donnees du kiosque.
-- 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:buyMachineResultResultat d'un achat de machine, transmis a la NUI pour retour.
Voir l'exemple
Transfere le resultat d'achat de machine vers une NUI shop personnalisee.
-- Forward buy-machine outcome to a custom shop UI
TriggerClientEvent('agency-vending:buyMachineResult', src, { success = true, machineId = 102 })agency-vending:machineCreatedBroadcast indiquant qu'une nouvelle machine du joueur a ete creee; met a jour le cache local et avertit le proprietaire.
Voir l'exemple
Diffuse a tous les clients un distributeur tout juste cree par un joueur.
-- Cache new owner-machine instantly when business script registers it
TriggerClientEvent('agency-vending:machineCreated', -1, { id = 142, owner = identifier, type = 'sprunk' })agency-vending:openManagementVerifiedOuverture verifiee cote server du menu de gestion proprietaire avec items, gains et label.
Voir l'exemple
Ouvre l'interface de gestion verifiee avec articles, gains et libelle apres auth.
-- 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:openOwnedListOuvre la NUI vue d'ensemble proprietaire avec toutes les machines du joueur et noms de rues.
Voir l'exemple
Ouvre la NUI d'apercu proprietaire listant tous les distributeurs du joueur.
-- Hotkey opens the owner overview NUI listing all owned machines
TriggerClientEvent('agency-vending:openOwnedList', src)agency-vending:spawnMachineCreatedBroadcast du spawner admin indiquant qu'une nouvelle entite machine a ete creee.
Voir l'exemple
Notifie tous les clients qu'un admin a fait apparaitre un distributeur.
-- 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 du spawner admin indiquant qu'une entite machine spawnee a ete supprimee.
Voir l'exemple
Indique a tous les clients qu'un admin a supprime un distributeur deja place.
-- Mapping tool removes a deleted spawned machine from cache
TriggerClientEvent('agency-vending:spawnMachineDeleted', -1, 7)agency-vending:openSpawnerUIOuvre la NUI du spawner admin apres validation cote server des permissions.
Voir l'exemple
Ouvre la NUI de spawn admin pour placer des distributeurs dans le monde.
-- Custom command opens the admin spawner UI after permission passes
TriggerClientEvent('agency-vending:openSpawnerUI', src)agency-vending:buyMachineLe joueur achete un distributeur d'un type donne aux coordonnees et heading fournis.
Voir l'exemple
Le joueur achete un distributeur Sprunk a sa position actuelle aupres d'un PNJ.
-- Custom NPC sells vending machines via dialog
local coords = GetEntityCoords(PlayerPedId())
local heading = GetEntityHeading(PlayerPedId())
TriggerServerEvent('agency-vending:buyMachine', 'sprunk', coords, heading)agency-vending:requestOwnedListL'appelant demande la liste de ses machines pour l'UI de vue d'ensemble proprietaire.
Voir l'exemple
Demande au serveur la liste des distributeurs detenus par le joueur.
-- Refresh owner overview after a balance/restock action elsewhere
TriggerServerEvent('agency-vending:requestOwnedList')agency-vending:requestMachinesL'appelant demande au server une synchronisation complete de toutes les machines de joueurs.
Voir l'exemple
Demande une synchro complete et fraiche des distributeurs des joueurs au serveur.
-- Scan for nearby machines after teleport finished
TriggerServerEvent('agency-vending:requestMachines')agency-vending:requestManagementOuverture verifiee cote server de l'UI de gestion d'une machine possedee.
Voir l'exemple
Demande l'interface de gestion verifiee serveur pour le distributeur clique.
-- Owner UI requests verified management menu for a clicked machine
TriggerServerEvent('agency-vending:requestManagement', machineId)agency-vending:requestSpawnedMachinesL'appelant demande la liste des machines spawnees par admin pour l'UI du spawner.
Voir l'exemple
Demande la liste de tous les distributeurs spawnes par admin pour l'UI spawner.
-- Admin spawner UI fetches all currently spawned machines
TriggerServerEvent('agency-vending:requestSpawnedMachines')agency-vending:adminSpawnMachineL'admin place un nouveau prop de distributeur cote server apres verification des permissions.
Voir l'exemple
L'admin spawn un nouveau distributeur de snacks apres verification des permissions.
-- 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:adminDeleteSpawnedL'admin supprime cote server un prop de distributeur precedemment spawne.
Voir l'exemple
L'admin supprime cote serveur un distributeur precedemment place.
-- Admin removes a misplaced machine via map editor button
TriggerServerEvent('agency-vending:adminDeleteSpawned', spawnedId)11Agency-Admin
Panneau admin complet avec UI verre, chat AgencyAI et plus de 60 outils admin.
Les events sont parfaits comme "primitives" pour anti-cheat, bots de modération ou outils automatisés, appelle-les depuis ton script serveur pour freeze/kick/notify sans écrire ta propre UI.
Événements
agency-admin:client:refreshStaffRanksDemande au client de recharger les donnees des rangs du staff.
Voir l'exemple
Rafraichit le cache des grades staff pour chaque admin connecte apres une promotion.
-- 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:freezeTimeFige ou libere l'heure du monde cote client a l'heure et minute donnees.
Voir l'exemple
L'anti-triche fige l'horloge du monde a midi pendant la verification d'un joueur.
-- 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:dashboardValueEnvoie une valeur de carte du tableau de bord (compteur live) vers l'UI du panel.
Voir l'exemple
Envoie le nombre de joueurs en ligne en direct a la carte du tableau de bord 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:teleportToCoordsTeleporte l'appelant aux coordonnees monde fournies.
Voir l'exemple
Teleporte un joueur aux coordonnees sauvegardees apres un evenement de reapparition.
-- 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:announceAffiche une bannière d'annonce pour tout le serveur.
Voir l'exemple
Diffuse une banniere d'annonce a tout le serveur depuis un expediteur systeme nomme.
-- Event bot announces a community contest start
TriggerClientEvent('agency-admin:client:announce', -1, 'Event Crew', 'Heist contest starts in 5 minutes!')agency-admin:client:notifyEnvoie une notification à un admin spécifique.
Voir l'exemple
Envoie une notification stylee au joueur lorsque sa candidature est approuvee.
-- Whitelist bot informs a player they passed the application
TriggerClientEvent('agency-admin:client:notify', src, 'Whitelist', 'Application approved!', 'success', 8000)agency-admin:client:freezeFige le joueur ciblé sur place.
Voir l'exemple
Fige un joueur suspect afin que le staff puisse enqueter sans qu'il bouge.
-- Anti-cheat freezes a suspect player while staff investigates
TriggerClientEvent('agency-admin:client:freeze', suspectSrc, true)agency-admin:client:healRestaure les HP/armure de la cible.
Voir l'exemple
Soigne entierement le patient apres la fin de son traitement medical RP.
-- Medic job script fully heals the player after RP treatment ends
TriggerClientEvent('agency-admin:client:heal', patientSrc)agency-admin:client:reviveRessuscite le joueur ciblé.
Voir l'exemple
Reanime un joueur a terre apres la reussite du mini-jeu des secours.
-- EMS revive minigame succeeds, server marks player alive again
TriggerClientEvent('agency-admin:client:revive', downedSrc)agency-admin:client:teleportTeleporte le joueur local au vecteur de coordonnees fourni.
Voir l'exemple
Teleporte le joueur local aux coordonnees fournies.
-- 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:openMenuOuvre l'UI du panneau admin (nécessite une permission ACE).
Voir l'exemple
Ouvre l'interface principale du panneau admin pour le staff lors de la prise de service.
-- Auto-open admin panel for staff right after they switch on duty
TriggerClientEvent('agency-admin:client:openMenu', src)agency-admin:client:openToolsMenuDeclencheur cote server pour ouvrir le sous-menu des outils admin.
Voir l'exemple
Ouvre le sous-menu des outils admin lorsque le raccourci staff est presse.
-- Quick-action keybind opens the admin tools sub-menu
TriggerClientEvent('agency-admin:client:openToolsMenu', src)agency-admin:client:closeMenuDeclencheur cote server pour fermer l'UI du panel admin.
Voir l'exemple
Force la fermeture de l'interface du panneau admin lors d'une enquete sur l'admin.
-- Force-close the panel when admin gets reported themselves
TriggerClientEvent('agency-admin:client:closeMenu', adminSrc)agency-admin:client:openClothingMenuDeclencheur cote server pour ouvrir le menu de vetements en jeu pour le joueur.
Voir l'exemple
Ouvre le menu de vetements apres l'achat d'une tenue chez un tailleur.
-- Tailor NPC opens clothing menu after a uniform purchase
TriggerClientEvent('agency-admin:client:openClothingMenu', src)agency-admin:server:requestPlayersDemande la liste actuelle des joueurs en ligne pour le panel admin.
Voir l'exemple
Demande au serveur la derniere liste des joueurs en ligne pour le panneau.
-- Custom dashboard widget refreshes its players list
TriggerServerEvent('agency-admin:server:requestPlayers')agency-admin:server:requestPanelPermissionsDemande la table des permissions du panel pour l'editeur de rangs.
Voir l'exemple
Demande au serveur la table des permissions du panneau pour l'editeur de grades.
-- Permission editor needs the latest panel permission map
TriggerServerEvent('agency-admin:server:requestPanelPermissions')agency-admin:server:requestStaffRanksDemande le jeu de donnees des rangs du staff pour le panel.
Voir l'exemple
Demande le jeu complet de grades staff pour un widget CRM personnalise.
-- Sync staff ranks dataset into a custom CRM widget
TriggerServerEvent('agency-admin:server:requestStaffRanks')agency-admin:server:createRankCree un nouveau rang du staff avec metadonnees et permissions.
Voir l'exemple
Cree un nouveau grade staff depuis une synchronisation de portail RH externe.
-- 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:requestMyPermissionsL'appelant demande son propre ensemble de permissions de panel resolu.
Voir l'exemple
Demande l'ensemble de permissions resolu du joueur a l'ouverture de l'interface.
-- Fetch caller's resolved permission set before showing dev tools
TriggerServerEvent('agency-admin:server:requestMyPermissions')agency-admin:server:requestSyncL'appelant demande au server d'envoyer la charge utile sync standard (service/permissions/etc.).
Voir l'exemple
Force le serveur a envoyer le paquet de synchro standard duty/perms au joueur.
-- Force a fresh sync after the player reconnects
TriggerServerEvent('agency-admin:server:requestSync')agency-admin:server:requestDutyRankL'appelant demande ses infos de rang admin en service actuel.
Voir l'exemple
Demande le grade de duty admin actuel du joueur pour une superposition HUD.
-- Display admin's duty rank on a custom HUD overlay
TriggerServerEvent('agency-admin:server:requestDutyRank')agency-admin:server:requestSpawnedObjectsL'appelant demande la liste des objets monde spawnes par l'admin.
Voir l'exemple
Demande la liste des objets monde spawnes par admin pour la mini-carte.
-- Map editor needs to draw all admin-spawned objects on a minimap
TriggerServerEvent('agency-admin:server:requestSpawnedObjects')12Agency-Anticheat
Un anticheat pour FiveM qui apprend à connaître votre serveur. Il contrôle chaque joueur côté serveur, là où un cheat ne peut pas se cacher : godmode, super saut, multiplicateurs de dégâts, téléportations et armes interdites sont lus depuis l'état de jeu synchronisé. Les recoupements détectent ce que les valeurs isolées laissent passer : un coup mortel que la victime survit, un kill au pistolet à 500 mètres, des statistiques de visée et plusieurs signaux faibles qui forment ensemble un schéma. La protection du monde annule les chars, explosions, incendies et spams de particules générés avant que quiconque ne les voie. Les bans couvrent les identifiants et les tokens matériels, si bien qu'un nouveau compte sur le même PC reste dehors, et un lockdown ferme le serveur de lui-même quand plusieurs tricheurs attaquent en même temps. Une installation neuve fonctionne 48 heures en mode Learning et ne punit personne. Son propre panneau en jeu (/acpanel) affiche tout en direct et exécute chaque action, sur n'importe quel serveur. Avec Agency Admin, ses admins sont exemptés automatiquement et la même page se trouve aussi dans ce panneau ; avec AgencyMod, les bans arrivent aussi sur votre Discord. Sans base de données, sans abonnement, 25 langues, QBCore, Qbox, ESX ou standalone.
Exports serveur
AllowTeleport(source: number, seconds?: number)Appelez-le juste avant que votre script déplace un joueur, le saut ne sera alors pas compté comme une téléportation. Par défaut 5 secondes.
SetExempt(source: number, seconds: number)Exempte un joueur de tous les contrôles pendant un moment, par exemple lors d'un événement avec Godmode. 0 y met fin.
Flag(source: number, detail: string)Votre propre détection. Compte comme n'importe quelle autre détection, sous la détection external.
BanPlayer(source: number, reason: string, duration?: number, by?: string)Bannit un joueur en ligne via ses identifiants et jetons matériels. Durée en secondes, 0 signifie permanent. Renvoie l'ID du ban.
KickPlayer(source: number, reason: string, by?: string)Expulse un joueur et l'enregistre dans Discord.
Unban(banId: string, by?: string)Lève un ban, par exemple AC-7K3P9.
SetMode(mode: string)Change le mode en direct : learning, relaxed, balanced ou strict.
SetDetection(key: string, enabled: boolean)Active ou désactive une détection en direct.
SetLockdown(on: boolean, by?: string)Démarre ou termine un lockdown.
IsExempt(source: number)Indique si un joueur est exempté des contrôles.
IsKnownPlayer(source: number)Indique si un joueur a joué ici assez longtemps sans détection pour être considéré comme connu.
GetStatus()Renvoie tout ce que le panneau affiche : mode, couches, connaissances, chiffres du jour, charge du serveur et chaque détection avec sa règle.
GetDetections(limit?: number)Renvoie les dernières détections, les plus récentes d'abord.
GetBans()Renvoie chaque ban actif avec ses preuves.
GetPlayers()Renvoie les joueurs en ligne avec score de risque et strikes ouverts, risque le plus élevé d'abord.
Événements
Agency-Anticheat:detectionSe déclenche à chaque détection avec joueur, détection, détail, action et strikes.
Agency-Anticheat:bannedSe déclenche après chaque ban avec l'enregistrement complet du ban.
Agency-Anticheat:unbannedSe déclenche après la levée d'un ban.
Agency-Anticheat:lockdownSe déclenche quand un lockdown démarre ou se termine.
Agency-Anticheat:learnedSe déclenche quand l'anticheat a appris un nouveau point de téléportation de votre serveur.
13Agency-Reports V2
Système de rapports moderne avec chat en direct par rapport et réponses assistées par IA.
Utilise-le comme épine dorsale "ticket de support" pour tout ton serveur. Tes scripts peuvent ouvrir automatiquement des rapports en cas de problème (véhicules bloqués, items dupliqués, sauvegardes SQL ratées) pour examen admin.
Événements
agency-reports:client:notifyDéclenche une notification "nouveau rapport" pour un admin spécifique.
Voir l'exemple
Notification piloteee serveur respectant la preference de notification UI du joueur.
-- Server tells client a new admin reply landed
TriggerClientEvent('agency-reports:client:notify', source, 'New reply on your report', 'info')agency-reports:client:openPlayerUIOuvre l'UI de rapport côté joueur.
Voir l'exemple
Ouvre l'UI rapport joueur avec categories, rapports recents et reglages 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:openAdminUIOuvre la liste des rapports côté admin.
Voir l'exemple
Ouvre le tableau de bord admin avec l'ensemble complet des rapports.
-- Force-open the admin reports dashboard from a staff command
TriggerEvent('agency-reports:client:openAdminUI', { reports = {}, total = 0 })agency-reports:client:teleportTeleporte l'admin appelant aux coordonnees fournies (pour les actions goto).
Voir l'exemple
Teleporte l'admin appelant aux coordonnees fournies pour les actions 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:healSelfSoigne entierement le ped de l'admin appelant.
Voir l'exemple
Soigne entierement le ped de l'admin apres avoir traite un rapport.
-- Heal admin after a hostile scene to keep them in service
TriggerEvent('agency-reports:client:healSelf')agency-reports:server:submitReportSoumet un nouveau rapport en dehors de l'UI.
Voir l'exemple
Le joueur soumet un nouveau rapport avec titre, categorie et description.
-- 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:requestPlayerDataL'appelant demande sa charge utile de rapport; ouvre eventuellement l'UI joueur en reponse.
Voir l'exemple
L'appelant demande sa charge utile de rapport, ouvre optionnellement l'UI joueur.
-- Pull fresh data and (optionally) auto-open the player UI
TriggerServerEvent('agency-reports:server:requestPlayerData', true)agency-reports:server:requestAdminDataL'admin demande le jeu complet de rapports et ouvre le dashboard admin si autorise.
Voir l'exemple
L'admin demande tout le dataset de rapports et ouvre le tableau de bord si autorise.
-- Admin staff opens the dashboard after going on duty
TriggerServerEvent('agency-reports:server:requestAdminData')agency-reports:server:sendChatMessageEnvoie un message de chat dans un rapport ouvert.
Voir l'exemple
Publie un message chat dans un fil de rapport specifique pour admin ou joueur.
-- Player posts a follow-up chat message into report #42
TriggerServerEvent('agency-reports:server:sendChatMessage', 42, 'Still stuck, any ETA?')14Agency-Doorlock
Portes verrouillables avec configuration en jeu et accès par porte selon le job, le gang ou le joueur.
Idéal pour les scripts de logement, de propriété ou de clés : donner à un joueur la clé d'une porte précise et la reprendre. Les clés sont enregistrées en base et synchronisées en direct, sans droits admin.
Exports client
ToggleNearestDoor()Locks or unlocks the door the player is standing at. The server checks access exactly like the E key.
Voir l'exemple
Ajoute ta propre touche (L) qui verrouille ou déverrouille la porte devant le joueur. L'accès reste vérifié par le serveur.
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.
Voir l'exemple
Récupère la porte devant laquelle se trouve le joueur, par exemple pour la lier à une maison dans ton 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.
Voir l'exemple
Liste toutes les portes avec leur numéro et leur état. Le code PIN n'est jamais inclus.
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.
Voir l'exemple
Place un point GPS vers une porte, par exemple pour guider un joueur vers sa nouvelle maison.
local c = exports['Agency-Doorlock']:GetDoorCoords(doorId)
if c then
SetNewWaypoint(c.x, c.y)
endExports serveur
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.
Voir l'exemple
Un propriétaire donne une clé à un autre joueur. Ton script vérifie la propriété, Agency-Doorlock enregistre la clé et la synchronise en direct. Personne n'obtient de droits 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.
Voir l'exemple
Retire une clé, par exemple quand un locataire déménage. Avec le citizenid, cela fonctionne aussi si le joueur est hors ligne.
-- 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.
Voir l'exemple
Vérifie si un joueur a sa propre clé pour cette porte. L'accès par job, gang ou "everyone" n'est pas compté.
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.
Voir l'exemple
Liste tous les détenteurs d'une clé, par exemple pour un menu "gérer les clés". Renvoie une copie, la modifier n'a aucun effet.
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.
Voir l'exemple
Attend que les portes soient chargées après un démarrage avant que ton script ne distribue des clés.
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)Événements
agency-doorlock:accessChangedFired on the server after AddPlayerAccess or RemovePlayerAccess changed a door. Arguments: doorId, identifier, granted (true / false). Listen with AddEventHandler.
Voir l'exemple
Journal côté serveur de chaque clé donnée ou retirée, par exemple pour un webhook 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 animé avec tableau de bord véhicule, barres de statut, compteur de vitesse et intégration ceinture.
Si tu as une économie ou un système de besoins personnalisé, pilote le HUD depuis ton propre script avec ces setters au lieu de bricoler autour. Le HUD gère l'animation et la persistance pour toi.
Exports client
GetVehicleSettings()Renvoie la table des paramètres véhicule actuels.
Voir l'exemple
Lit la table des parametres HUD vehicule local pour inspection ou synchronisation.
local settings = exports['Agency-Hud']:GetVehicleSettings()
print('Speed unit:', settings.speedUnit)
print('HUD scale:', settings.scale)SetSpeedUnit(unit: string)Bascule le compteur entre 'mph' et 'kmh'.
Voir l'exemple
Bascule le compteur de vitesse en miles par heure et enregistre localement.
RegisterCommand('usemph', function()
exports['Agency-Hud']:SetSpeedUnit('mph')
end)SetHunger(value: number)Définit la valeur de la barre de faim (0-100).
Voir l'exemple
Envoie le niveau de faim actuel du joueur dans le HUD.
AddEventHandler('player:hungerChanged', function(value)
exports['Agency-Hud']:SetHunger(value)
end)SetThirst(value: number)Définit la valeur de la barre de soif (0-100).
Voir l'exemple
Envoie le niveau de soif actuel du joueur dans le HUD.
AddEventHandler('player:thirstChanged', function(value)
exports['Agency-Hud']:SetThirst(value)
end)SetStress(value: number)Définit la valeur de la barre de stress (0-100).
Voir l'exemple
Met a jour l'indicateur de stress du HUD depuis un systeme de stress personnalise.
AddEventHandler('jobstress:onTick', function(stress)
exports['Agency-Hud']:SetStress(stress)
end)SetMoney(value: number)Définit le solde en espèces affiché.
Voir l'exemple
Met a jour le montant en especes affiche sur le HUD.
AddEventHandler('wallet:cashChanged', function(cash)
exports['Agency-Hud']:SetMoney(cash)
end)SetBank(value: number)Définit le solde bancaire affiché (pour les scripts d'économie personnalisés).
Voir l'exemple
Met a jour le solde bancaire affiche dans le HUD.
AddEventHandler('bank:balanceChanged', function(balance)
exports['Agency-Hud']:SetBank(balance)
end)SetJob(label: string)Définit le libellé de job affiché.
Voir l'exemple
Definit l'etiquette du metier affichee apres un changement de profession.
AddEventHandler('job:onChange', function(job)
exports['Agency-Hud']:SetJob(job.label)
end)SetRank(rank: string)Définit le rang/grade de job affiché.
Voir l'exemple
Met a jour le rang du joueur affiche a cote de l'etiquette du metier.
AddEventHandler('job:onGradeChange', function(grade)
exports['Agency-Hud']:SetRank(grade.label)
end)GetDetectedFramework()Renvoie la chaîne du framework ("qb", "esx", "standalone") détecté automatiquement par le HUD.
Voir l'exemple
Lit la cle du framework detecte pour brancher une logique HUD personnalisee.
local fw = exports['Agency-Hud']:GetDetectedFramework()
if fw == 'qb' then
print('QB-Core detected')
endÉvénements
Agency-HUD:client:applyVehicleSettingsPatchApplique un correctif partiel des réglages de véhicule au HUD véhicule local.
Voir l'exemple
Applique un patch partiel des parametres HUD vehicule sur le client local.
TriggerEvent('Agency-HUD:client:applyVehicleSettingsPatch', {
style = 'modern',
speedUnit = 'kmh'
})Agency-HUD:client:openAdminMenuOuvre le menu admin du HUD (nécessite une permission).
Voir l'exemple
Ouvre l'interface NUI du menu admin HUD chez le client recepteur.
TriggerEvent('Agency-HUD:client:openAdminMenu')Agency-HUD:server:checkAdminPermissionVérifie les droits admin de l'appelant et ouvre le menu admin en cas de succès.
Voir l'exemple
Demande au serveur de verifier les droits admin et d'ouvrir le menu admin HUD.
RegisterCommand('checkhudadmin', function()
TriggerServerEvent('Agency-HUD:server:checkAdminPermission')
end)Agency-HUD:server:saveGlobalSettingsPersistance des réglages HUD globaux réservée aux admins; diffuse la sync.
Voir l'exemple
Enregistre une nouvelle configuration HUD globale (admin uniquement) et la diffuse.
TriggerServerEvent('Agency-HUD:server:saveGlobalSettings', {
style = 'modern',
accent = '#ff6b00'
})Agency-HUD:server:requestGlobalSettingsRenvoie les réglages globaux actuels au client demandeur.
Voir l'exemple
Demande les parametres HUD globaux actuels au demarrage de la ressource.
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-HUD:server:requestGlobalSettings')
end
end)Agency-HUD:server:requestTimeRenvoie l'heure serveur actuelle à l'appelant pour l'horloge HUD.
Voir l'exemple
Interroge l'horloge serveur chaque minute pour actualiser l'affichage HUD.
CreateThread(function()
while true do
TriggerServerEvent('Agency-HUD:server:requestTime')
Wait(60000)
end
end)16Agency-Progressbar V2
Barre de progression animée avec UI verre, 4 thèmes, actions annulables et exports client/server.
Utilise-le partout où tu afficherais normalement "faire la chose X pendant Y secondes". Remplace plusieurs ressources de progress bar legacy par une seule UI cohérente sur tout ton serveur.
Exports client
StartProgress(data: table)Démarre une barre de progression avec une table d'options complète. Retourne immédiatement; les callbacks se déclenchent à la fin/annulation.
Voir l'exemple
Lance une barre de crochetage de 8s avec animation et 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)Arrête la barre de progression en cours. Passe true pour marquer comme annulée.
Voir l'exemple
Annule la barre de progression active quand le joueur appuie sur X.
if IsControlJustPressed(0, 73) then
exports['Agency-Progressbar']:StopProgress(false)
endIsProgressActive()Renvoie true si une barre de progression est actuellement affichée.
Voir l'exemple
Empeche de lancer une action d'artisanat tant qu'une barre est active.
if exports['Agency-Progressbar']:IsProgressActive() then
return
end
startCrafting()GetProgressPercentage()Renvoie le pourcentage de remplissage actuel (0-100).
Voir l'exemple
Declenche un tick de mini-jeu une fois la barre remplie a plus de 75 %.
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)Change le thème à l'exécution: 'modern', 'neon', 'minimal' ou 'classic'.
Voir l'exemple
Change l'apparence de la barre de progression active vers le theme moderne.
RegisterCommand('darkbar', function()
exports['Agency-Progressbar']:SetProgressTheme('modern')
end)SetProgressPosition(position: string)Change la position: 'top', 'bottom', 'center'.
Voir l'exemple
Deplace la barre de progression active au centre bas de l'ecran.
RegisterCommand('barbottom', function()
exports['Agency-Progressbar']:SetProgressPosition('bottom-center')
end)TryReload(usedItem?: string)Joue la séquence de rechargement style ESX.
Voir l'exemple
Lance un rechargement valide cote serveur avec une boite de 9mm.
RegisterKeyMapping('+reload', 'Reload weapon', 'keyboard', 'R')
RegisterCommand('+reload', function()
exports['Agency-Progressbar']:TryReload('ammo-9')
end)UseConsumable(itemName: string, isDrink: boolean)Joue l'animation manger/boire avec la barre de progression.
Voir l'exemple
Joue l'animation de boisson et augmente la soif a l'utilisation d'eau.
RegisterNetEvent('inventory:useItem', function(item)
if item == 'water_bottle' then
exports['Agency-Progressbar']:UseConsumable('water_bottle', true)
end
end)Exports serveur
StartProgressForPlayer(playerId: number, data: table)Déclenche une barre de progression sur un client spécifique depuis le serveur.
Voir l'exemple
Lance une barre de soulevement de caisse de 5 s pour le joueur demandant.
RegisterCommand('lift', function(source)
exports['Agency-Progressbar']:StartProgressForPlayer(source, {
label = 'Lifting crate...',
duration = 5000
})
end, false)StopProgressForPlayer(playerId: number, completed?: boolean)Annule à distance la barre de progression d'un joueur spécifique.
Voir l'exemple
Annule la barre de progression active d'un joueur cible depuis le serveur.
RegisterNetEvent('admin:cancelProgress', function(targetId)
exports['Agency-Progressbar']:StopProgressForPlayer(targetId, false)
end)StartProgressForAllPlayers(data: table)Diffuse une barre de progression à tous les clients connectés.
Voir l'exemple
Diffuse une barre d'alerte tempete de 30 s a tous les joueurs.
RegisterNetEvent('event:weatherWarning', function()
exports['Agency-Progressbar']:StartProgressForAllPlayers({
label = 'Storm incoming - take shelter',
duration = 30000
})
end)StopProgressForAllPlayers(completed?: boolean)Annule la barre de progression de chaque joueur (ex. fin de round).
Voir l'exemple
Arrete la barre globale d'alerte tempete chez tous les joueurs.
RegisterNetEvent('event:weatherCleared', function()
exports['Agency-Progressbar']:StopProgressForAllPlayers(true)
end)Événements
Agency:Progressbar:LoadSettingsCharge les réglages UI par joueur (position, couleur, échelle, style) depuis la BD vers le client.
Voir l'exemple
Charge les parametres UI sauvegardes de la barre lors de l'apparition.
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Progressbar:LoadSettings')
end)agency-progressbar:client:startDémarre la barre de progression sur le client récepteur avec les données fournies.
Voir l'exemple
Lance une barre de reparation moteur de 12 s, annulable.
TriggerEvent('agency-progressbar:client:start', {
label = 'Repairing engine...',
duration = 12000,
canCancel = true
})agency-progressbar:client:stopArrête la barre de progression active avec un drapeau de complétion.
Voir l'exemple
Interrompt la barre active lorsque le joueur est menotte.
RegisterNetEvent('police:cuffed', function()
TriggerEvent('agency-progressbar:client:stop', false)
end)agency:consumables:useFoodPont inventaire pour consommer un aliment (animation + application serveur sécurisée).
Voir l'exemple
Declenche le pont nourriture de l'inventaire pour consommer un sandwich.
TriggerEvent('agency:consumables:useFood', 'sandwich')agency:consumables:useDrinkPont inventaire pour consommer une boisson (animation + application serveur sécurisée).
Voir l'exemple
Declenche le pont boisson de l'inventaire pour consommer un cafe.
TriggerEvent('agency:consumables:useDrink', 'coffee_cup')Agency:Progressbar:SaveSettingsValide et persiste les réglages UI de la barre de progression du joueur en BD.
Voir l'exemple
Sauvegarde les preferences UI de la barre de progression dans la base.
TriggerServerEvent('Agency:Progressbar:SaveSettings', {
position = 'top-right',
color = '#00aaff',
scale = 1.2
})agency-progressbar:server:startDéclencheur côté serveur pour démarrer une barre de progression sur une cible (ou soi-même).
Voir l'exemple
Trigger serveur pour lancer une barre de chargement de caisse de 6 s sur la cible.
RegisterCommand('movecrate', function(source)
TriggerEvent('agency-progressbar:server:start', source, {
label = 'Loading crate onto truck',
duration = 6000
})
end, false)agency-progressbar:server:stopDéclencheur côté serveur pour arrêter une barre de progression sur une cible (ou soi-même).
Voir l'exemple
Trigger serveur pour stopper la barre d'une cible avec etat annule.
RegisterNetEvent('admin:abortJob', function(targetId)
TriggerEvent('agency-progressbar:server:stop', targetId, false)
end)agency:reload:requestValide munitions/arme/objet avant d'accorder un rechargement au joueur demandeur.
Voir l'exemple
Demande au serveur de valider les munitions et autoriser le rechargement d'un pistolet.
TriggerServerEvent('agency:reload:request', 'WEAPON_PISTOL', 'ammo-9')agency:consumables:applyValide l'inventaire, retire un objet et applique les gains de faim/soif.
Voir l'exemple
Demande au serveur de retirer l'aliment et d'appliquer le gain de faim.
RegisterNetEvent('food:onEatStart', function(itemName)
TriggerServerEvent('agency:consumables:apply', itemName)
end)17Agency-Notify V2
Systeme de notifications avec styles V1/V2, priorite intelligente AgencyAI, protection anti-spam et persistance en base de donnees.
Remplace toutes les autres ressources de notification de ton serveur (qb-notify, esx_notify, mythic_notify, okok-notify, etc.) par un design coherent. Le systeme de priorite AgencyAI limite automatiquement le debit des notifications spammy.
Exports client
Notify(data: { title, text, type, duration, ... })Affiche une notification. Accepte { type, title, text, duration, icon, color }.
Voir l'exemple
Envoie une notification de reussite de 6 s annoncant un objectif de braquage.
exports['Agency-Notify']:Notify({
title = 'Bank Heist',
text = 'Vault drilled, grab the loot!',
type = 'success',
duration = 6000
})Événements
Agency:Notify:SendIdentique a l'export, permet d'utiliser le pattern Trigger classique.
Voir l'exemple
Evenement client legacy v1 affichant le meme payload que l'export.
TriggerEvent('Agency:Notify:Send', {
title = 'Old Notify',
text = 'Legacy v1 entry point still works',
type = 'info'
})Agency:Notify:LoadSettingsApplique les réglages UI sauvegardés par joueur (position, couleur, échelle, style) depuis le serveur.
Voir l'exemple
Charge les parametres UI de notification sauvegardes par joueur a l'apparition.
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Notify:LoadSettings')
end)Agency:Notify:SaveSettingsValide et persiste les réglages de notification du joueur (position, accent, échelle, style).
Voir l'exemple
Sauvegarde la position, l'accent et l'echelle des notifications dans la base.
TriggerServerEvent('Agency:Notify:SaveSettings', {
position = 'top-right',
accent = '#ff8800',
scale = 1.1,
style = 'modern'
})18Agency-Seatbelt V2
Ceinture de securite avec physique d'ejection, sons 3D, support multi-occupants et integration HUD.
Branche l'etat sur ton propre HUD, ou force l'activation au debut d'une course-poursuite / fuite de braquage. Les exports force-enable/disable sont parfaits pour les moments RP.
Exports client
isSeatbeltOn()Renvoie true si le joueur a actuellement sa ceinture attachee.
Voir l'exemple
Desactive le controle de sortie tant que la ceinture est bouclee.
if exports['Agency-Seatbelt']:isSeatbeltOn() then
DisableControlAction(0, 75, true)
endenableSeatbelt()Force la mise de la ceinture (par ex. lors d'une arrestation par la police).
Voir l'exemple
Boucle la ceinture du joueur local avec retour HUD et sonore.
RegisterNetEvent('vehicle:autoBuckle', function()
if IsPedInAnyVehicle(PlayerPedId(), false) then
exports['Agency-Seatbelt']:enableSeatbelt()
end
end)disableSeatbelt()Force le retrait de la ceinture (cinematiques, scenarios RP).
Voir l'exemple
Detache la ceinture du joueur local en sortant d'un vehicule.
RegisterNetEvent('vehicle:onExit', function()
exports['Agency-Seatbelt']:disableSeatbelt()
end)toggleSeatbelt()Bascule l'etat de la ceinture (ce que fait le keybind par defaut).
Voir l'exemple
Bascule la ceinture du joueur local sur appui de touche.
RegisterKeyMapping('+seatbelt', 'Toggle seatbelt', 'keyboard', 'B')
RegisterCommand('+seatbelt', function()
exports['Agency-Seatbelt']:toggleSeatbelt()
end)isAutoBuckled()Renvoie true tant que la ceinture a été attachée par la voiture et non par le joueur.
autoBuckle(on: boolean)Attache ou détache la ceinture en mode automatique, comme le fait une voiture autonome.
getSeatbeltState()Renvoie une table avec l'état attaché, le mode automatique ou non, la place et le véhicule.
setSeatbeltEnabled(on: boolean)Désactive ou active toute la ceinture pour ce joueur, pour les cinématiques ou les situations d'admin.
isPlayerSeatbeltOn(serverId: number)Renvoie l'état de ceinture d'un autre joueur, lu depuis le state bag répliqué.
bucklesItselfVehicle(vehicle: number)Indique si ce véhicule attache lui-même ses occupants, via la liste de modèles ou le state bag agAuto.
openSettings()Ouvre la carte des réglages.
closeSettings()Ferme la carte des réglages.
isSettingsOpen()Indique si la carte des réglages est ouverte.
Exports serveur
isSeatbeltOn(source: number)Renvoie côté serveur l'état de ceinture d'un joueur, lu depuis le state bag répliqué.
getBuckledPlayers()Renvoie les ids serveur de tous les joueurs actuellement attachés.
setSeatbelt(source: number, on: boolean)Attache ou détache depuis le serveur la ceinture d'un joueur.
Événements
Agency-HUD:seatbeltStateChangedSe déclenche à chaque changement avec le nouvel état. Agency-HUD l'écoute ; toute autre resource peut le faire aussi.
19Agency-Elevator
Systeme d'ascenseur realiste avec UI Liquid Glass et un configurateur.
Parfait dans les scripts d'appartement/housing, QG de police, hopital ou tout interieur multi-etages. Utilise le configurateur pour placer les ascenseurs visuellement sans toucher aux fichiers de config.
Événements
Agency-Elevator:server:requestTravelRequete validee par le serveur pour se deplacer entre etages.
Voir l'exemple
Demande au serveur de valider l'acces puis de monter a l'etage 3.
TriggerServerEvent('Agency-Elevator:server:requestTravel', 'lspd-tower-1', 3)Agency-Elevator:server:travelCompleteConfirme l'arrivée du client et envoie la notification 'arrivé à l'étage'.
Voir l'exemple
Indique au serveur l'arrivee a l'etage 3 pour envoyer la notification d'arrivee.
TriggerServerEvent('Agency-Elevator:server:travelComplete', 'lspd-tower-1', 3)Agency-Elevator:server:requestElevatorsSynchronise la liste d'ascenseurs chargée depuis la base de données vers le client demandeur.
Voir l'exemple
Demande la liste complete des ascenseurs au serveur a l'initialisation.
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-Elevator:server:requestElevators')
end
end)Agency-Elevator:server:saveElevatorUpsert d'un ascenseur (id/label/étages) dans MySQL avec contrôle des permissions.
Voir l'exemple
Upsert admin d'un ascenseur avec une seule entree d'etage 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:loadElevatorFait apparaitre/charge un ascenseur sauvegarde depuis la base de donnees.
Voir l'exemple
Charge les donnees d'un seul ascenseur dans le NUI du configurateur pour edition.
TriggerServerEvent('Agency-Elevator:server:loadElevator', 'lspd-tower-1')Agency-Elevator:server:saveSettingsPersiste les réglages UI (position/échelle/couleur d'accent) dans MySQL et resynchronise tous les clients.
Voir l'exemple
Sauvegarde la position UI, la couleur d'accent et l'echelle et resync tous les clients.
TriggerServerEvent('Agency-Elevator:server:saveSettings', {
position = 'top-right',
accent = '#22c55e',
scale = 1.0
})Agency-Elevator:client:startTravelDemarre une cinematique de trajet d'ascenseur pour le joueur.
Voir l'exemple
Joue le fondu et l'animation puis teleporte le ped a l'etage 2 du garage.
TriggerEvent('Agency-Elevator:client:startTravel', 'parking-garage', 2)Agency-Elevator:client:applySettingsEnvoie les réglages UI (accent/échelle/position) vers le NUI.
Voir l'exemple
Applique l'accent, l'echelle et la position du NUI ascenseur sur le client local.
TriggerEvent('Agency-Elevator:client:applySettings', {
accent = '#0ea5e9',
scale = 0.9,
position = 'bottom-left'
})Agency-Elevator:client:openConfiguratorOuvre le configurateur d'ascenseur en jeu (admin uniquement).
Voir l'exemple
Ouvre le NUI configurateur admin avec la liste d'ascenseurs actuelle.
TriggerEvent('Agency-Elevator:client:openConfigurator')Agency-Elevator:client:refreshConfiguratorActualise le configurateur ouvert après une sauvegarde/suppression sans le fermer.
Voir l'exemple
Rafraichit le NUI configurateur ouvert apres une sauvegarde sans le fermer.
AddEventHandler('Agency-Elevator:server:elevatorSaved', function()
TriggerEvent('Agency-Elevator:client:refreshConfigurator')
end)20Agency-Multicharacter
Une sélection et création de personnage cinématique pour FiveM. Chaque personnage apparaît dans une scène adaptée à son métier, la police près du véhicule de patrouille, les médecins près de l'ambulance, les mécaniciens dans l'atelier, avec sa tenue sauvegardée, sa photo d'identité, son métier, son gang, son argent liquide, sa banque, son numéro de téléphone, son temps de jeu et sa dernière position sur une carte épurée. Les nouveaux personnages disposent de règles pour le nom et l'âge, d'une liste de nationalités avec recherche et du choix de la taille, puis le clothing script du serveur s'ouvre automatiquement. Des slots peuvent être vendus via Tebex : les acheteurs les débloquent avec leur transaction id. Les joueurs changent de personnage avec /logout. Framework, clothing script, inventaire, spawn selector et loading screen sont détectés automatiquement ; les personnages existants, les temps de jeu et les slots achetés de l'ancien multicharacter sont repris. QBCore, Qbox, ESX ou totalement standalone avec son propre stockage de personnages, 25 langues, la couleur s'adapte au logo du serveur.
Exports client
IsOpen()True while the character selection is open.
OpenSelection()Opens the selection, for example from your own logout button.
Exports serveur
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.
Événements
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 spawn selector avec caméra en direct pour FiveM. Pendant que le joueur navigue, la caméra survole Los Santos vers chaque lieu ; en choisir un le fait descendre du ciel jusqu'à son personnage. Il propose le dernier emplacement, des spawns publics issus d'une liste commentée, des spawns de métier et de gang visibles uniquement par les bons personnages, chaque maison Agency Housing que le personnage possède ou dont il a la clé, qb-apartments et un point d'arrivée fixe pour les nouveaux personnages. Les joueurs peuvent activer le spawn automatique à leur dernière position. Il répond aux événements qb-spawn et apartment, de sorte que la plupart des scripts multicharacter l'ouvrent sans modification, et fonctionne en parfaite harmonie avec Agency Multicharacter. QBCore, Qbox, ESX ou standalone, 25 langues, la couleur s'adapte au logo du serveur.
Exports client
Open(options)Opens the selector. options.isNew = true sends new characters to the arrival point.
IsOpen()True while the selector is open.
Événements
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
Système de logements basé sur une base de données pour FiveM. Détecte automatiquement QBCore, QBox et ESX, ou fonctionne entièrement en autonome sans framework. Les maisons se créent en jeu grâce à un créateur pas à pas plutôt qu'avec un fichier de config : intérieurs, shells, MLO et immeubles entiers d'appartements jusqu'à 40 logements derrière une seule porte d'entrée, chaque parcelle étant délimitée par une bordure de propriété visible depuis les airs. Les joueurs achètent des maisons, les revendent entre eux, louent et mettent en location, parcourent toutes les offres du marché et paient leur loyer à l'avance. L'argent reçu pendant qu'ils sont hors ligne leur est versé à leur prochaine connexion. Les clés, le verrouillage des portes MLO avec verrouillage automatique et sonnette, l'ameublement à partir d'un catalogue de plus de 1 300 accessoires, les caméras de surveillance et la garde-robe intégrée sont inclus, et une application Housing apporte le contrôle des serrures et les caméras en direct sur Agency Phone, Agency Pad, lb-phone et qs-smartphone-pro. Les scripts d'inventaire, de vêtements et de garages sont détectés automatiquement, la base de données se met à jour d'elle-même, et tout est enregistré dans MySQL.
Exports client
IsInsideHouse()Renvoie true tant que le joueur est dans une maison.
GetCurrentHouse()La maison où se trouve actuellement le joueur, ou nil.
LeaveHouse()Ramène le joueur dehors par l'entrée.
GetHouseAtPoint(coords)La première maison dont la limite de propriété couvre ce terrain.
GetHousesAtPoint(coords)Toutes les maisons auxquelles appartient ce terrain, pour les parcelles qui se chevauchent comme un immeuble.
GetCurrentProperty()La parcelle sur laquelle se tient actuellement le joueur, ou nil.
IsOnProperty(houseId)Indique si le joueur se tient sur la propriété de cette maison.
GetHouseZone(houseId)La forme de limite enregistrée d'une maison.
GetAccent()La couleur d'accent choisie par le joueur dans Housing > Réglages.
GetAppUrl(theme)L'adresse de la page de l'application Housing, pour ajouter l'app à n'importe quel autre téléphone. Passe 'light' ou 'dark' pour forcer un thème.
GetAppData()Tout ce qu'affiche l'application Housing : les logements que le joueur possède, loue ou dont il a une clé.
AppAction(action, houseId)Lance une action de l'application pour une maison : 'waypoint', 'lock' ou 'cams'.
Exports serveur
GetHouses()Toutes les maisons du serveur, indexées par id.
GetPlayerHouses(source)Les maisons que possède ce joueur.
HasHouseAccess(source, houseId)Indique si ce joueur possède la maison ou en a une clé.
GetHouseAtPoint(coords)La première maison dont la limite de propriété couvre ce terrain.
GetHousesAtPoint(coords)Toutes les maisons auxquelles appartient ce terrain, pour les parcelles qui se chevauchent.
GetHouseZone(houseId)La forme de limite enregistrée d'une maison.
Événements
agency-housing:client:enteredZoneSe déclenche avec (houseId, house) quand le joueur entre sur une propriété, pour qu'un script de métier ou de cambriolage n'ait pas à interroger en boucle.
agency-housing:client:leftZoneSe déclenche avec (houseId, house) quand le joueur quitte une propriété.
agency-housing:garage:openSe déclenche avec (houseId, houseName) lorsqu'un garage de maison est utilisé et que Config.Garage.script vaut 'event', afin que ton propre script de garage puisse l'ouvrir.
23Agency-Banking
Une banque complète pour FiveM qui fonctionne sous QBCore, Qbox, ESX ou entièrement en standalone. Les joueurs disposent d'un wallet avec compte bancaire et espèces, de cartes bancaires en quatre thèmes, de virements par ID ou vers des joueurs à proximité, de dépôts à terme dont seul le serveur fixe les intérêts, du trading d'actions et de crypto, d'un code PIN de distributeur et d'un historique complet des opérations. Sans framework, la banque gère ses propres comptes, et d'autres resources peuvent s'en servir comme système monétaire via les exports serveur. S'y ajoutent deux designs de menu, 13 langues, des marqueurs ou qb-target / ox_target, un curseur de taille d'affichage pour chaque joueur, des tables créées automatiquement au premier démarrage et l'app gratuite Agency Companion pour le solde, les virements, les dépôts à terme et les cartes en déplacement.
Exports client
OpenBank()Ouvre la banque pour le joueur local, où qu'il se trouve.
OpenATM()Ouvre l'écran du code PIN du distributeur pour le joueur local. Le joueur doit d'abord avoir créé un code PIN dans une banque.
Exports serveur
GetBankBalance(source)Renvoie le solde bancaire du joueur, sur tous les frameworks et en standalone.
GetCashBalance(source)Renvoie l'argent liquide du joueur.
AddBankMoney(source, amount, reason)Ajoute de l'argent au solde bancaire. Renvoie true en cas de succès, et une banque ouverte se met à jour toute seule.
RemoveBankMoney(source, amount, reason)Retire de l'argent du solde bancaire. Renvoie false si le solde est insuffisant, et rien n'est retiré dans ce cas.
AddCashMoney(source, amount, reason)Ajoute de l'argent liquide. Renvoie true en cas de succès.
RemoveCashMoney(source, amount, reason)Retire de l'argent liquide. Renvoie false s'il n'y en a pas assez, et rien n'est retiré dans ce cas.
AddTransaction(identifier, type, amount, reason)Ajoute une ligne à l'historique des opérations d'un joueur via son identifiant (citizenid sur QBCore et Qbox, identifier sur ESX, licence en standalone).
GetFramework()Renvoie le framework détecté par la banque : qbcore, esx ou standalone.
Événements
agency_banking:client:OpenBankÀ déclencher depuis le serveur pour ouvrir la banque de ce joueur.
agency_banking:client:MoneyChangedÀ déclencher depuis le serveur après qu'un autre script a modifié l'argent d'un joueur, et une banque ouverte se met à jour.
Toujours bloqué après cette page ? Notre support prend le relais.