开发者对接
对接 Agency 脚本
你正在写自己的 FiveM 脚本,想让它和我们的脚本通信?这里列出了所有公开的导出与事件,每一项都配有可直接复制的 Lua 片段。
导出让你的脚本调用我们脚本里的函数:exports['script-name']:FunctionName(args),客户端和服务端用法相同。事件方向相反:用 TriggerEvent 或 TriggerServerEvent 触发,用 RegisterNetEvent 监听。
01Agency-Phone
支持多框架的全功能手机,集成SMS、通话、社交动态、邮件、相机、钱包和AgencyPay支付。
适用于任何商店/抢劫/职业脚本,当你想要在手机内呈现整洁的支付流程,而不是直接扣款时使用。也非常适合带接受/拒绝按钮的游戏内通知(如出租车请求、dispatch呼叫)。
客户端导出
IsPhoneOpen()若手机UI当前已打开则返回true。
查看示例
手机界面已打开时跳过自定义菜单。
RegisterCommand('openmymenu', function()
if exports['agency-phone']:IsPhoneOpen() then
return
end
TriggerEvent('myresource:openMenu')
end)IsPhonePoweredOn()若手机已开机则返回true。
查看示例
玩家关机期间暂停后台同步任务。
CreateThread(function()
while true do
Wait(2000)
if not exports['agency-phone']:IsPhonePoweredOn() then
print('Phone off, pausing background sync')
end
end
end)GetPhoneData()返回原始的手机数据表。
查看示例
为调试输出完整的手机数据表。
RegisterCommand('phonedebug', function()
local data = exports['agency-phone']:GetPhoneData()
print(json.encode(data, { indent = true }))
end)GetPhonePropEntity()返回手持电话prop的实体句柄,不可见时返回0。
查看示例
在不改动逻辑的情况下短暂隐藏手机道具。
CreateThread(function()
Wait(500)
local prop = exports['agency-phone']:GetPhonePropEntity()
if prop ~= 0 and DoesEntityExist(prop) then
SetEntityVisible(prop, false, false)
end
end)IsPhoneExpanded()若手机在屏幕上处于展开状态则返回true。
查看示例
在手机打开时阻止小游戏的旧版别名。
AddEventHandler('myresource:beforeMinigame', function()
if exports['agency-phone']:IsPhoneExpanded() then
TriggerEvent('chat:addMessage', { args = { 'Close phone first' } })
return
end
end)HasCarrierContract()玩家拥有有效运营商data plan时返回true。
查看示例
当玩家没有有效的流量套餐时提示。
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()返回完整的手机状态对象。
查看示例
仅当手机开启、通电并同步时才缓存状态。
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()若玩家拥有手机物品则返回true。
查看示例
玩家未携带手机时阻止紧急通话命令。
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)注册一个循环使用的AgencyPay商户终端。
查看示例
运行时为修理厂收银台创建Agency Pay终端。
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)移除先前已注册的AgencyPay终端。
查看示例
商店打烊时移除已注册的支付点位。
AddEventHandler('myresource:onShopClosed', function(shopId)
exports['agency-phone']:RemoveAgencyPayPoint('mechanic_main')
print('Removed pay point for shop ' .. shopId)
end)StartAgencyPayCheckout(data)打开AgencyPay结账页面进行安全的银行卡支付。
查看示例
打开手机并发起一笔小额小费支付。
RegisterCommand('paytip', function()
exports['agency-phone']:StartAgencyPayCheckout({
amount = 25,
receiver = 'staff_tip_jar',
label = 'Staff tip',
memo = 'Thanks for great service'
})
end)StartCall(contactData)使用contact表启动pma-voice通话。
查看示例
事件到达时向调度联系人发起呼出通话。
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)显示带有可选接受/拒绝按钮的手机通知。
查看示例
为拖车合同显示阻塞式接受/拒绝通知。
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)把你自己资源中的应用放到手机主屏幕和 Store 中。返回 true,或返回 false 与错误信息。参见自定义应用。
UnregisterApp(id)移除通过 RegisterApp 添加的应用。注册该应用的资源停止时会自动移除。
GetRegisteredApps()返回其他资源注册的所有应用的表,以 id 为键。
ClosePhone()关闭手机,例如在打开你自己的界面之前。
IsPhoneRadioActive()返回两个值:手机电台正在播放时为 true,以及正在播放的电台。
StopPhoneRadio()停止手机电台。
服务端导出
SendMail(identifier, mailData)向玩家(在线或离线)发送邮件。
查看示例
通过主标识符向玩家发送订单回执邮件。
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)向Pulse(chirper)动态发布消息。
查看示例
通过服务端事件向Chirper发布悬赏公告。
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)检测到ESX+ox_inventory时注册的ox_inventory钩子;为持有者打开phone。
查看示例
挂接ox_inventory的usingItem以打开手机。
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)在服务端确认该玩家在过去 60 秒内支付了此 id 的 Agency Pay 结账,金额不低于 minAmount,并将这笔付款标记为已使用,只计一次。requestId 是你传给 StartAgencyPayCheckout 的 id。返回 true 和金额,否则返回 false。请在发放商品之前调用。
事件
agency-phone:client:notify显示phone通知 (title, text, icon, color, timeout, silent)。
查看示例
发送非阻塞提示,告知车辆已准备好。
TriggerEvent('agency-phone:client:notify', 'Heads up', 'Vehicle ready for pickup', 'car', '#22cc88', 5000, false)agency-phone:client:usePhoneItem使用phone物品时触发打开流程。
查看示例
将自定义物品使用事件转发到手机打开流程。
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'phone' then
TriggerEvent('agency-phone:client:usePhoneItem')
end
end)agency-phone:client:openApp请求phone按id导航到自定义应用(应用模块使用)。
查看示例
通过应用id直接跳转到自定义银行应用。
RegisterCommand('openbank', function()
TriggerEvent('agency-phone:client:openApp', 'banking')
end)agency-phone:client:newMailNotify向client通知新收到的邮件。
查看示例
监听新邮件通知并记录以便调试。
AddEventHandler('agency-phone:client:newMailNotify', function(mail)
print(('New mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-phone:server:requestPhoneData为调用方玩家请求新的phone数据同步。
查看示例
请求服务器推送最新的手机数据同步。
RegisterCommand('refreshphone', function()
TriggerServerEvent('agency-phone:server:requestPhoneData')
end)agency-phone:server:cancelCall取消或结束当前通话。
查看示例
通过自定义按键或聊天命令挂断当前通话。
RegisterCommand('hangup', function()
TriggerServerEvent('agency-phone:server:cancelCall')
end)agency-phone:server:sendMessage发送SMS消息 (newMsg, targetNumber)。
查看示例
通过聊天命令快速向目标号码发送短信。
RegisterCommand('quicksms', function(_, args)
local target, msg = args[1], table.concat(args, ' ', 2)
TriggerServerEvent('agency-phone:server:sendMessage', { message = msg }, target)
end)agency-phone:server:saveSetting为玩家持久化单个phone设置键/值。
查看示例
当玩家在客户端切换设置时立即保存到服务端。
AddEventHandler('myresource:client:onSettingChanged', function(key, value)
TriggerServerEvent('agency-phone:server:saveSetting', key, value)
end)agency-phone:server:airdropPay向附近玩家执行Agency Airdrop转账。
查看示例
以输入金额向附近玩家发起Agency Airdrop付款。
RegisterCommand('airdrop', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-phone:server:airdropPay', amount, 'Tip via airdrop')
end)agency-phone:server:buyDataPlan为玩家购买运营商data plan (price, planName)。
查看示例
玩家在自定义界面选择后购买相应的流量套餐。
AddEventHandler('myresource:client:onPlanSelected', function(plan)
TriggerServerEvent('agency-phone:server:buyDataPlan', plan.price, plan.name)
end)agency-phone:dispatch:create从紧急呼叫/SMS创建phone调度。
查看示例
根据来电的紧急呼叫生成手机调度记录。
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
拥有完整应用生态的AgencyOS平板。通过config.lua注册你自己的应用。
适用于管理员仪表板、业务管理应用、帮派领地地图,或GTA中玩家需要的任何自定义UI, 无需额外工作即可在精美的平板外壳中运行。
客户端导出
IsPadOpen()若平板UI已打开则返回true(显示UI前请先检查平板状态)。
查看示例
平板已经打开时,不再打开自定义平板界面。
RegisterCommand('opentablet', function()
if exports['agency-pad']:IsPadOpen() then
return
end
TriggerEvent('myresource:openTablet')
end)IsPadPoweredOn()tablet已开机时返回true。
查看示例
玩家关闭平板期间暂停车队轮询。
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()返回完整的客户端PadData表。
查看示例
输出客户端完整的平板数据表以便检查。
RegisterCommand('paddebug', function()
local data = exports['agency-pad']:GetPadData()
print(json.encode(data, { indent = true }))
end)GetPadPropEntity()返回手持tablet prop的实体句柄,不可见时返回0。
查看示例
在自定义过场动画中短暂隐藏手持平板道具。
CreateThread(function()
Wait(750)
local prop = exports['agency-pad']:GetPadPropEntity()
if prop ~= 0 and DoesEntityExist(prop) then
SetEntityVisible(prop, false, false)
end
end)IsPadExpanded()为向后兼容保留的IsPadOpen()别名。
查看示例
在平板打开时阻止小游戏的旧版别名。
AddEventHandler('myresource:client:beforeMinigame', function()
if exports['agency-pad']:IsPadExpanded() then
return
end
TriggerEvent('myresource:client:startMinigame')
end)HasCarrierContract()玩家在tablet上拥有有效运营商data plan时返回true。
查看示例
当平板没有有效流量套餐时提示玩家。
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()返回汇总当前tablet状态的{ isOpen, poweredOn, syncEnabled }表。
查看示例
仅当平板处于开启且通电状态时才缓存到服务端。
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()玩家库存中拥有配置的tablet物品时返回true。
查看示例
玩家未携带平板时阻止打开调度界面命令。
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)在坐标处注册运行时Agency Pay terminal (markers, blip, checkout payload)。
查看示例
运行时在医院大厅创建Agency Pay结算终端。
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)按id移除先前注册的Agency Pay terminal。
查看示例
当场所关闭时移除已注册的平板支付点位。
AddEventHandler('myresource:onLocationClosed', function(locationId)
exports['agency-pad']:RemoveAgencyPayPoint(locationId)
end)StartAgencyPayCheckout(data)按需打开tablet,并以给定支付payload启动Agency Pay结算流程。
查看示例
打开平板并发起房产税的Agency Pay付款。
RegisterCommand('paybill', function()
exports['agency-pad']:StartAgencyPayCheckout({
amount = 1500,
receiver = 'gov_taxes',
label = 'Property tax',
memo = 'Quarterly tax'
})
end)StartCall(contactData)向给定联系人发起tablet外拨呼叫 ({ name, number, ... })。
查看示例
调度事件到达时通过平板发起呼出通话。
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)显示带accept/deny按钮的操作通知;阻塞至响应并返回true/false。
查看示例
在平板上显示阻塞式接受/拒绝通知以开始配送任务。
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)把你自己资源中的应用放到平板主屏幕和 Store 中。返回 true,或返回 false 与错误信息。
UnregisterApp(id)移除通过 RegisterApp 添加的应用。
GetRegisteredApps()返回其他资源注册的所有应用的表,以 id 为键。
ClosePad()关闭平板,例如在打开你自己的界面之前。
ClosePhone()与 ClosePad() 相同,只是使用 Agency Phone 的名称,这样同一套集成代码可同时用于两者。
IsPhoneRadioActive()返回两个值:平板电台正在播放时为 true,以及正在播放的电台。
StopPhoneRadio()停止平板电台。
服务端导出
SendMail(identifier, mailData)按identifier向玩家主邮箱发送mail(返回success)。
查看示例
通过标识符向玩家发送账单通知邮件。
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)检测到ESX+ox_inventory时注册的ox_inventory钩子;为持有者打开tablet。
查看示例
通过集成助手挂接ox_inventory以打开平板。
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)用于旧phone物品id的ox_inventory钩子;为持有者打开tablet。
查看示例
将旧版手机物品改为打开平板界面。
exports.ox_inventory:registerHook('usingItem', function(payload)
if payload.item.name ~= 'phone' then return end
return exports['agency-pad']:usePhone('inventory', payload.item, payload.inventory, payload.slot)
end, { itemFilter = { phone = true } })GetMarketPrices()返回当前股票与加密货币价格,以市场 id 为键。
PushPadData(source)把最新的平板数据发送到该玩家的平板。无法生成时返回 false。
事件
agency-pad:client:notify显示tablet通知 (title, text, icon, color, timeout, silent)。
查看示例
为新解锁的任务在平板上显示非阻塞提示。
TriggerEvent('agency-pad:client:notify', 'Job update', 'New mission unlocked', 'briefcase', '#22cc88', 5000, false)agency-pad:client:usePadItem使用库存物品时打开tablet。
查看示例
将自定义物品使用事件转发到平板打开流程。
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'tablet' then
TriggerEvent('agency-pad:client:usePadItem')
end
end)agency-pad:client:openApp在client端触发以打开平板中的特定应用。
查看示例
直接跳转到自定义车队管理应用。
RegisterCommand('openfleet', function()
TriggerEvent('agency-pad:client:openApp', 'fleet')
end)agency-pad:client:newMailNotify向client通知新收到的邮件。
查看示例
监听平板的新邮件通知并在本地记录。
AddEventHandler('agency-pad:client:newMailNotify', function(mail)
print(('Tablet mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-pad:client:hourlyPaycheck向client通知每小时business paycheck事件。
查看示例
对平板触发的每小时企业薪资事件做出响应。
AddEventHandler('agency-pad:client:hourlyPaycheck', function(payload)
print(('Hourly paycheck: $%s from %s'):format(payload.amount, payload.businessName))
end)agency-pad:server:requestPadData为调用方玩家请求新的tablet数据同步。
查看示例
请求服务器向玩家推送最新的平板数据同步。
RegisterCommand('refreshpad', function()
TriggerServerEvent('agency-pad:server:requestPadData')
end)agency-pad:server:sendMessage发送SMS消息 (newMsg, targetNumber)。
查看示例
通过自定义命令和号码参数从平板发送短信。
RegisterCommand('quicksmsTab', function(_, args)
local target, msg = args[1], table.concat(args, ' ', 2)
TriggerServerEvent('agency-pad:server:sendMessage', { message = msg }, target)
end)agency-pad:server:airdropPay向附近玩家执行Agency Airdrop转账。
查看示例
从平板向附近玩家发起Agency Airdrop转账。
RegisterCommand('airdroppad', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-pad:server:airdropPay', amount, 'Tablet airdrop')
end)agency-pad:server:buyDataPlan为玩家购买运营商data plan。
查看示例
玩家在自定义界面选择后购买相应的平板流量套餐。
AddEventHandler('myresource:client:padPlanSelected', function(plan)
TriggerServerEvent('agency-pad:server:buyDataPlan', plan.price, plan.name)
end)agency-pad:dispatch:create从紧急呼叫/SMS创建tablet调度。
查看示例
根据来电的紧急呼叫生成平板调度记录。
RegisterNetEvent('myresource:server:padDispatchFromCall', function(payload)
TriggerEvent('agency-pad:dispatch:create', {
source = source,
coords = payload.coords,
type = 'medical',
title = 'Medical assistance'
})
end)agency-pad:server:biz:create为玩家创建新的business/组织。
查看示例
通过自定义游戏命令创建新的企业条目。
RegisterCommand('startbiz', function()
TriggerServerEvent('agency-pad:server:biz:create', {
name = 'Bennys Repair',
type = 'mechanic',
location = 'sandy_shores'
})
end)agency-pad:server:biz:adminCreateAdmin代表其他玩家创建business。
查看示例
转发管理员命令以代表其他玩家创建企业。
RegisterNetEvent('myresource:server:adminCreateBiz', function(targetSrc, payload)
TriggerEvent('agency-pad:server:biz:adminCreate', targetSrc, payload)
end)agency-pad:server:biz:startMission为玩家启动已配置的business任务。
查看示例
为发起命令的玩家启动已配置的企业任务。
RegisterCommand('bizmission', function()
TriggerServerEvent('agency-pad:server:biz:startMission', {
bizId = 12,
missionId = 'delivery_route_a'
})
end)agency-pad:server:applyToListing向business职位列表提交求职申请。
查看示例
通过id向平板的招聘列表提交求职申请。
RegisterCommand('apply', function(_, args)
local listingId = tonumber(args[1])
TriggerServerEvent('agency-pad:server:applyToListing', listingId, {
coverNote = 'Available immediately'
})
end)agency-pad:server:createMechanicInvoice创建机修工发票草稿。
查看示例
为指定车牌和金额创建机械维修发票草稿。
RegisterCommand('mechinvoice', function(_, args)
TriggerServerEvent('agency-pad:server:createMechanicInvoice', {
plate = args[1],
amount = tonumber(args[2]) or 250,
notes = 'Brake replacement'
})
end)agency-pad:server:sendMechanicInvoicePay向客户发送机修工发票以收款。
查看示例
将定稿的维修发票发送给客户进行付款。
AddEventHandler('myresource:client:onInvoiceConfirmed', function(invoice)
TriggerServerEvent('agency-pad:server:sendMechanicInvoicePay', invoice.id, invoice.targetSrc)
end)agency-pad:server:mdtCreateInvoiceMDT为市民创建罚款/账单。
查看示例
通过自定义网络事件为市民创建MDT罚单/发票。
RegisterNetEvent('myresource:server:mdtFine', function(targetSrc, amount, reason)
TriggerEvent('agency-pad:server:mdtCreateInvoice', {
target = targetSrc,
amount = amount,
reason = reason,
officer = source
})
end)03Agency-Watch
现已搭载 AgencyOS27,已拥有手表的用户可免费升级。 为 FiveM 打造的真正智能手表,不是 HUD。十款表盘、可自定义表壳表带与配色的 Studio、活动圆环、秒表、计时器、闹钟、天气、指南针、时速表、四款游戏、控制中心以及应用商店,全部无需任何其他资源即可运行。Angy 就在表冠上,基于固定规则运行,不使用人工智能,随叫随到地操作手表。检测到 Agency Phone 后,腕上即可使用通话、短信、邮件、联系人和 Agency Pay,并可开发你自己的应用。免费,支持 QBCore / Qbox / ESX / 独立运行,十种语言。
客户端导出
OpenWatch(mitte)打开手表。传入 true 时在屏幕中央打开,而不是在配置的角落。
CloseWatch()关闭手表并释放 NUI 焦点。
ToggleWatch()手表打开时将其关闭,否则打开。
IsWatchOpen()手表界面显示在屏幕上时返回 true。
IsWatchLinked()玩家在控制中心关闭了与 Agency Phone 的连接时返回 false。
RunWatchAction()触发橙色操作按钮上绑定的功能(Config.ActionButton)。
GetWatchSettings()返回构建手表界面所用的完整设置表(主题、表盘、尺寸、应用、语言)。
SetWatchSetting(key, value)设置单项设置,按角色保存并立即生效。
SetWatchSettings(table)一次设置多项,只重建一次界面,而不是每个值重建一次。
RequestWatchPairing()向服务器请求 Companion 应用配对码。结果以事件形式返回,而不是返回值。
ShowUpdate()打开 AgencyOS 的软件更新界面。
HandlesDeath()手表在死亡时显示紧急界面时返回 true。Agency Phone 会查询此值,确保两台设备不会同时显示。
GetFitness()返回当天当前的健身数据:步数、距离、活动分钟数和卡路里。
SetWatchAppInstalled(id, on)为该玩家安装或移除一个应用。与应用商店的操作相同,服务器可以把应用当作奖励发放。
FindWatch()让手表响铃并亮屏,与 Companion 应用的查找功能相同。
StopFindWatch()在响铃自行结束前将其停止。
IsWatchRinging()手表正在响铃时返回 true。
服务端导出
IsPremium(src)该玩家的手表以 Pro 版本运行时返回 true。结论来自与正版 Agency Phone 的握手验证,绝不来自客户端。
04Agency-Zero
一款适用于 FiveM 的免费自动驾驶电动四座车。Project 0 是一辆完全原创的车辆,在 Blender 中用 Sollumz 从零打造:没有门把手,车门如波浪般依次开启,配有真实的方向盘和踏板供手动接管。玩家可以通过 Agency Phone、Agency Pad 或真实手机上的 Agency Companion 应用呼叫它,它会开到玩家身边并停在路边,而不是跑去找车位。车内的仪表台平板和 Z 菜单运行 AgencyOS27:可点按的地图、基于固定规则运行、不使用人工智能、能用日常用语对话的内置助手 Angy、带总开关的六项驾驶辅助、分级芯片调校、声浪芯片,以及按车辆和车主统计的数据。每辆车都有专属编号,在数据库中与车主绑定,因此归属、调校和所有设置在重启后依然保留。自动识别 QBCore、Qbox 和 ESX,也可独立运行,所有文本提供 27 种语言,以英语为基础。
客户端导出
ZeroStatus()返回玩家自己的 Project 0 状态:是否存在、所在位置、电量、续航以及是否正在行程中。
ZeroCall()把车叫到玩家身边。车会开过去并停在玩家身旁的路边。
ZeroDeliver()车辆不在地图上时安排送车。费用为 Config.Remote.deliveryFee,未使用框架时免费。
ZeroGarage()把车送回车库。
ZeroCancel()取消正在进行的呼叫或行程。
ZeroFind()在屏幕底部显示车辆方位,持续 Config.Remote.findRadarSeconds 秒。
ZeroDoors(on)传入 true 开门,传入 false 关门。车门依次如波浪般动作,而不是同时。
ZeroLock(on)传入 true 锁车,传入 false 解锁。
ZeroLights(on)开关车灯。
ZeroBuyInfo()返回玩家能否购买 Project 0 以及价格。已经拥有一辆的玩家不会得到任何返回。
ZeroBuy()为该玩家购买一辆 Project 0,并在同一步中与其绑定。
ZeroRefresh()重新读取状态,供需要最新数据、不想等待下一次刷新的界面使用。
IsRideActive()自动驾驶行程进行中时返回 true。
CallProjectZero()前往当前目的地。没有目的地时使用地图上的路径点。
CancelProjectZero()结束行程。车辆靠边停下。
IsCockpitOpen()仪表台平板显示在屏幕上时返回 true。
IsManualOverride()驾驶员接管方向盘时返回 true。未接管时 Zero 只会自动驾驶。
AnyDoorOpen(veh)该车辆至少有一扇门打开时返回 true。
OpenDoors(veh, opts)以波浪动画打开车辆的车门。
CloseDoors(veh, opts)再次关闭车门。
AnimateDoors(veh, open, opts)根据第二个参数开门或关门,适用于运行时才决定的代码。
SoundChipOf(veh)返回该车安装的声浪芯片。更换芯片只会改变引擎声,不会改变电台。
服务端导出
IsPro(src)该玩家的 Zero 以 Pro 版本运行时返回 true。结论来自与正版 Agency Phone 的 HMAC 握手验证,绝不来自客户端。
ZeroVin(plate)返回车牌对应的车辆编号。每辆 Project 0 在发放时获得编号,并永久保留。
ZeroCarsOf(src)返回该玩家拥有的所有 Project 0,包括编号、车牌、调校等级和统计数据。
ZeroSync(src)重新向该玩家写入登记状态,例如在其他脚本更改了归属之后。
事件
agency-zero:client:rideStarted行程已开始,附带目的地。
agency-zero:client:rideEnded行程已结束:已取消或已到达。
agency-zero:client:arrived车辆已到达玩家身边并打开车门。
05Agency-Lifeinvader V3
城市的广告代理:玩家广告会显示在每个屏幕上,并提供分类、推广、排期、草稿、审核、员工职业、AI 撰写工具,以及适用于 Agency Phone 和 Agency Pad 的应用。
适用于可自行发布广告的商店和职业脚本、发布活动信息的活动和赌场脚本、记录每条广告的 Discord 日志、用于打开应用的手机和快捷轮盘菜单,以及用于检查 Lifeinvader 管理员的管理工具。
客户端导出
OpenApp(tab)在你指定的页面打开应用:'feed'、'create'、'mine'、'drafts' 或 'settings'。未指定页面时,会打开上次使用的页面,或实时动态。
查看示例
从你自己的快捷轮盘菜单或手机打开应用,并直接进入新建广告页面。
-- an entry in your radial menu
exports['Agency-LifeinvaderV3']:OpenApp('create')OpenFeed()在实时动态页面打开应用。
查看示例
打开实时动态,例如在报刊亭使用。
exports['Agency-LifeinvaderV3']:OpenFeed()CloseApp()关闭应用。
查看示例
在打开你自己的菜单前关闭应用。
exports['Agency-LifeinvaderV3']:CloseApp()IsOpen()此客户端上的应用处于打开状态时为 True。
查看示例
防止你的菜单在应用上方打开。
if not exports['Agency-LifeinvaderV3']:IsOpen() then
-- open your own menu
end服务端导出
PostAd(text, opts)发布一条服务器自己的广告:免费、无需审核,并排在队列首位。opts:author、category、instant(立即发布)、reps、interval、duration 和 boosted。返回广告 id,或 nil 和错误代码。
查看示例
从你的赌场或活动脚本发布官方广告,该广告免费且排在队列首位。
exports['Agency-LifeinvaderV3']:PostAd('Casino night tonight at 20:00, free entry!', {
author = 'Diamond Casino', category = 'events', instant = true,
})GetFeed(limit)应用中显示的实时动态,按时间从新到旧排列:id、text、category、boosted、author(匿名广告时为 nil)、sentAt、created、sent 和 live。
查看示例
读取最近发布的广告,适用于网站、报纸或手机应用。
for _, ad in ipairs(exports['Agency-LifeinvaderV3']:GetFeed(10)) do
print(ad.id, ad.author or 'anonymous', ad.text)
endGetAd(id)一条与动态格式相同的广告,或 nil。
查看示例
按编号查找广告。
local ad = exports['Agency-LifeinvaderV3']:GetAd(412)
if ad then print(ad.text) endIsAdmin(source)当玩家通过 ACE、组或标识符成为 Lifeinvader 管理员时为 True。
查看示例
在自己的脚本中使用 Lifeinvader 管理员权限。
if exports['Agency-LifeinvaderV3']:IsAdmin(source) then
-- show your admin tools
end事件
agency-lifeinvader:adShown每当广告显示在屏幕上时,在每个客户端触发的本地事件,包含 id、text、category、catLabel、icon、author(匿名时为 nil)、boosted、duration 和 system(官方公告时为 true)。
查看示例
广告出现时在客户端作出响应,例如显示在广告牌上。
AddEventHandler('agency-lifeinvader:adShown', function(ad)
-- ad.text, ad.author, ad.category
end)agency-lifeinvader:adBroadcast每次广告发布时在服务器上触发的本地事件,包含一条格式与动态相同的广告。适用于日志记录或 Discord webhook。
查看示例
记录服务器上发布的每条广告。
AddEventHandler('agency-lifeinvader:adBroadcast', function(ad)
-- send ad.text to your Discord log
end)agency_lifeinvader:openMenu从 V3 保留:在“新建广告”页面打开应用,因此使用旧菜单的脚本仍可正常工作。
查看示例
像 V3 事件一样,为玩家打开「新广告」页面。
TriggerClientEvent('agency_lifeinvader:openMenu', source)agency_lifeinvader:openRecentMenu从 V3 保留:在实时动态页面打开应用。
查看示例
像 V3 事件一样,为玩家打开实时动态。
TriggerClientEvent('agency_lifeinvader:openRecentMenu', source)06Agency-Blackmarket V2
一个鲜活的黑市,包含四处移动的贩子、实时市场、讲价、取货订单、跑腿任务、收赃人、洗钱和五个名声等级。
适合需要发放名声或额度的帮派、抢劫和毒品脚本,适合对交易和贩子移动作出反应的警察与 dispatch 工具,也适合用来打开黑市菜单的轮盘菜单或手机。
客户端导出
OpenMenu()打开 /ablackmarket 的菜单,例如从轮盘菜单或手机应用中打开。检查规则与命令相同。
查看示例
从你自己的轮盘菜单或手机应用打开黑市菜单。
-- an entry in your radial menu
exports['Agency-Blackmarket']:OpenMenu()CloseMenu()关闭菜单,并将鼠标控制权交还给游戏。
查看示例
关闭菜单,例如在你自己的过场动画开始之前。
-- before your own cutscene starts
exports['Agency-Blackmarket']:CloseMenu()IsMenuOpen()只要黑市菜单处于打开状态(无论是在贩子处还是在任何地方),就返回 true。
查看示例
在你自己的界面出现之前,先检查菜单是否打开。
if exports['Agency-Blackmarket']:IsMenuOpen() then
return -- the player is busy in the black market menu
end服务端导出
GetReputation(source)玩家的名声点数,还没有名声的玩家返回 0。
查看示例
只让名声足够的玩家开始你的任务或抢劫。
local rep = exports['Agency-Blackmarket']:GetReputation(source)
if rep < 150 then
return -- this heist needs a known name on the street
endSetReputation(source, value)把玩家的名声设为固定值,最低为 0。成功时返回 true。
查看示例
把玩家的名声设为固定值。
-- an admin tool resets a player
exports['Agency-Blackmarket']:SetReputation(targetId, 0)AddReputation(source, amount)增加名声,传入负数时则扣除名声。升到新等级时会通知玩家和 Companion 应用。成功时返回 true。
查看示例
用名声奖励完成的任务;升到新等级时会有通知。
-- a finished drug run earns street reputation
exports['Agency-Blackmarket']:AddReputation(source, 15)GetLevel(source)返回两个值:玩家等级的编号(默认 1 到 5)和等级名称。
查看示例
读取等级编号和名称,例如用来解锁你自己的内容。
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)增加贩子额度,玩家可在下一次购买或订单中使用。成功时返回 true。
查看示例
给玩家贩子额度,用于下一次购买或订单。
-- a gang boss pays out in dealer credit
exports['Agency-Blackmarket']:AddCredit(source, 2500)RelocateDealer(dealerId)立即把贩子移到他的另一个地点。移动成功时返回 true。
查看示例
立即把贩子移到他的另一个地点。
-- a tip reached the police: the dealer changes his spot
exports['Agency-Blackmarket']:RelocateDealer('vince')SendDealerAway(dealerId, minutes)贩子消失指定的分钟数,然后出现在他的另一个地点,就像警察来过之后一样。
查看示例
让贩子暂时离开,就像警察来过之后一样。
-- a raid in the area: Marlow goes quiet for 20 minutes
exports['Agency-Blackmarket']:SendDealerAway('marlow', 20)IsDealerPresent(dealerId)只要贩子站在他的某个地点且没有离开,就返回 true。
查看示例
检查贩子此刻是否在他的某个地点。
if exports['Agency-Blackmarket']:IsDealerPresent('vince') then
print('Vince is on the street')
endStartFlashSale(minutes)开始一场限时特卖,随机商品打折出售。不传分钟数时使用 Config.FlashSale 中的时长。
查看示例
从你自己的事件或日程开始一场限时特卖。
-- the city had a big night: a flash sale for 10 minutes
exports['Agency-Blackmarket']:StartFlashSale(10)事件
agency-blackmarket:deal每笔交易之后在服务器端触发,参数为 (source, kind, data)。kind 为 buy、sell、launder、order、pickup 或 job,data 包含交易详情,例如贩子、物品和总额。
查看示例
对每笔交易作出反应,例如写入你自己的日志或警用平板。
AddEventHandler('agency-blackmarket:deal', function(source, kind, data)
if kind == 'buy' then
print(('%s spent %d at %s'):format(GetPlayerName(source), data.total, data.dealer))
end
end)agency-blackmarket:dealerMoved贩子更换地点时在服务器端触发,参数为 (dealerId, pos, reason)。reason 为 rotate、return、admin 或 export。
查看示例
追踪贩子的动向,例如用于线人或侦探任务。
AddEventHandler('agency-blackmarket:dealerMoved', function(dealerId, pos, reason)
print(('%s moved to %.1f, %.1f (%s)'):format(dealerId, pos.x, pos.y, reason))
end)agency-blackmarket:flashSale限时特卖开始时在服务器端触发,参数为 (items, minutes)。items 把每件打折物品对应到它的折扣百分比。
查看示例
在你自己的频道中宣布限时特卖。
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
一套采矿工作,包含七个区域、三种工具、100 个等级、熔炉、宝石切割、合同和一个价格浮动的市场,全部集成在一个菜单中。
兼容会响应采矿事件的任务和成就脚本、读取市场价格的经济和工作脚本、打开菜单的轮盘菜单和手机,以及可设置等级或发放 XP 的管理工具。
客户端导出
OpenMenu(page)打开菜单,例如从环形菜单或手机应用中打开。page 可以是 overview(默认)、market、tools、smelter、cutting 或 contracts。
查看示例
从你自己的轮盘菜单或手机应用中打开菜单,并跳转到市场页面。
-- an entry in your radial menu
exports['Agency-Minerjob']:OpenMenu('market')CloseMenu()关闭菜单,并将鼠标控制权交还给游戏。
查看示例
在你自己的菜单打开前关闭该菜单。
exports['Agency-Minerjob']:CloseMenu()IsMenuOpen()菜单打开时为 True。
查看示例
防止你的菜单覆盖在采矿菜单上打开。
if not exports['Agency-Minerjob']:IsMenuOpen() then
-- open your own menu
endIsWorking()玩家正在采矿或切割宝石时为 True。
查看示例
防止你的脚本中断采矿或切割动画。
if exports['Agency-Minerjob']:IsWorking() then
return -- no emotes while mining
endGetLevel()玩家的采矿等级。
查看示例
读取玩家的等级,例如用于 HUD 或手机应用。
local level = exports['Agency-Minerjob']:GetLevel()
print('Mining level', level)服务端导出
GetLevel(source)玩家的采矿等级,玩家未知时为 0。
查看示例
在服务器端检查采矿等级,然后你的脚本才能允许执行某项操作。
if exports['Agency-Minerjob']:GetLevel(source) < 25 then
return -- the quarry job needs level 25
endGetProgress(source)等级和进度,格式为 { level, xp, need, pct, max }。
查看示例
读取等级和进度,例如用于手机应用或排行榜。
local p = exports['Agency-Minerjob']:GetProgress(source)
print(p.level, p.xp, p.need, p.pct)AddXp(source, amount)添加 XP,包括升级和升级提示。找到玩家时返回 true。
查看示例
将采矿经验值作为奖励发放,用于你自己的任务或活动。
-- a quest reward
exports['Agency-Minerjob']:AddXp(source, 250)SetLevel(source, level)将等级设为 1 到最高等级之间的值,并将 XP 设为 0。
查看示例
设置等级,例如通过你自己的管理员工具设置。
exports['Agency-Minerjob']:SetLevel(source, 10)GetStats(source)玩家目前为止的操作记录:{ mined, smelted, cut, broken, sold, earned, contracts }。
查看示例
读取玩家采集和获得的物品,用于排行榜或成就。
local stats = exports['Agency-Minerjob']:GetStats(source)
print(stats.mined, stats.earned)GetPrice(item)物品当前的单件市场价格。
查看示例
读取当前市场价格,例如用于行情显示或收购相同物品的商店。
local price = exports['Agency-Minerjob']:GetPrice('gold_bar')
print('Gold bar pays', price)事件
agency-minerjob:mined采矿奖励发放后在服务器上触发,包含 source、item、count 和采矿区域。使用 AddEventHandler 监听,例如用于任务或统计。
查看示例
在服务器端对每次发放奖励的采矿操作作出响应。
AddEventHandler('agency-minerjob:mined', function(source, item, count, area)
-- count mined ore for a quest
end)agency-minerjob:sold出售后在服务器上触发,包含 source、item、count 和支付总额。
查看示例
在服务器端对每笔销售作出响应,用于日志或统计。
AddEventHandler('agency-minerjob:sold', function(source, item, count, total)
-- log big sales
end)agency-minerjob:contract交付合约后在服务器上触发,包含 source、item、count 和报酬。
查看示例
在服务器端于合约交付时作出响应。
AddEventHandler('agency-minerjob:contract', function(source, item, count, pay)
-- an achievement for delivered contracts
end)08Agency-Repairkit V2
真实的载具损坏系统,搭配四种维修包、技能检查和技工加成。
适用于技工和拖车工作、出售维修包的商店,以及任何需要对维修完成或玩家所驾驶车辆损坏程度做出反应的脚本。
客户端导出
IsRepairing()在本地玩家维修载具期间返回 true,例如可用来保持你自己的菜单关闭。
查看示例
在玩家维修载具期间,保持你自己的菜单处于关闭状态。
if exports['Agency-Repairkit']:IsRepairing() then
return -- keep your menu closed while the player works
endGetVehicleCondition(vehicle)以 % 为单位的发动机、车身和油箱状态,以及轮胎、脏污程度、损坏等级和油箱是否漏油。不传参数时,读取玩家当前所在的载具。
查看示例
读取玩家所驾驶载具的状态。
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()打开 /arepairkit 菜单,例如通过手机应用或轮盘菜单调用。
查看示例
从你自己的轮盘菜单或手机应用中打开维修包菜单。
-- an entry in your radial menu or phone app
exports['Agency-Repairkit']:OpenMenu()CloseMenu()关闭菜单,并将鼠标控制权交还给游戏。
查看示例
关闭菜单,例如在你自己的过场动画开始前。
-- before your own cutscene starts
exports['Agency-Repairkit']:CloseMenu()IsMenuOpen()菜单打开期间返回 true。
查看示例
在你自己的界面出现之前,检查菜单是否已打开。
if exports['Agency-Repairkit']:IsMenuOpen() then
return -- the player is busy in the repair kit menu
end服务端导出
UseKit(source, kit)为玩家启动一个维修包,效果如同该道具已被使用,并执行全部检查。返回 true,或返回 false 及失败原因。适用于自定义库存和商店。
查看示例
从自定义库存为玩家启动路边维修包。
-- 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)通过检测到的库存,将维修包添加到玩家的库存中。成功时返回 true。
查看示例
通过检测到的库存,给予玩家两个轮胎维修包。
-- a shop NPC sells two tyre kits
exports['Agency-Repairkit']:GiveKit(source, 'tyre', 2)IsRepairing(source)该玩家正在维修载具时为 true。
查看示例
玩家维修时会跳过该任务。
if exports['Agency-Repairkit']:IsRepairing(source) then
return -- no new job task while the player is busy
endGetKits()所有已配置的维修包,包括其道具、标签、工作类型和持续时间。
查看示例
列出每个维修包及其对应的物品和标签。
for name, kit in pairs(exports['Agency-Repairkit']:GetKits()) do
print(name, kit.item, kit.label, kit.duration)
enduseKit(event, item, inventory, slot, data)供 ox_inventory 道具使用的导出函数。install/ox_inventory.lua 中的道具条目会指向它,不应被直接调用。
查看示例
将 ox_inventory 与维修包关联起来的物品条目。
-- ox_inventory/data/items.lua
['agencyrepairkit'] = {
label = 'Roadside Repair Kit', weight = 1500, consume = 0,
server = { export = 'Agency-Repairkit.useKit' },
},事件
agency-repairkit:repaired维修完成且维修包用尽后,会在服务器端触发,参数为 (source, netId, kit)。适合用于日志记录、支付或工作进度。
查看示例
在服务器上记录每一次完成的维修。
AddEventHandler('agency-repairkit:repaired', function(src, netId, kit)
print(('%s finished %s on vehicle %s'):format(GetPlayerName(src), kit, netId))
end)agency-repairkit:client:repaired维修完成时,会在执行维修的玩家客户端触发,参数为 (netId, kit)。
查看示例
在正在维修的玩家客户端上触发。
AddEventHandler('agency-repairkit:client:repaired', function(netId, kit)
if kit == 'advanced' then
-- play a sound or advance a job step
end
end)agency-repairkit:client:damageLevel每当损坏等级发生变化时,会在驾驶者客户端触发,参数为 (level, vehicle):ok、light、medium、heavy 或 critical。
查看示例
跟踪玩家所驾驶车辆的损坏等级。
AddEventHandler('agency-repairkit:client:damageLevel', function(level, vehicle)
if level == 'critical' then
-- offer the tow-truck job
end
end)09Agency-Vehiclekeys V2
通用车辆钥匙系统,包含钥匙环和遥控器、永久和临时钥匙、工作钥匙、带警方警报的撬锁和热接线功能,以及管理页面。
适用于发放钥匙的车库、车辆商店和租车服务,使用自有车辆的工作脚本,应检查或发放钥匙的抢劫和偷车脚本、需要跟随引擎状态的 HUD,以及可打开钥匙环的轮盘菜单或手机。
客户端导出
HasKeys(plate)当玩家持有该车牌的钥匙时返回 true:车主钥匙、共享钥匙或临时钥匙。工作车辆通过车型解锁,不计入此处。
查看示例
在脚本允许玩家使用车辆之前检查钥匙。
if exports['Agency-Vehiclekeys']:HasKeys(GetVehicleNumberPlateText(vehicle)) then
-- the player may drive this car
endGetKeys()玩家持有的所有钥匙列表,格式为 { plate, kind }。kind 可以是 owner、shared 或 temp。
查看示例
列出玩家拥有的所有钥匙,例如供手机应用使用。
for _, key in ipairs(exports['Agency-Vehiclekeys']:GetKeys()) do
print(key.plate, key.kind)
endToggleLock(vehicle)锁定或解锁玩家持有钥匙的车辆,使用与 G 相同的动画和检查。若玩家未在车辆内,则使用范围内最近的车辆。
查看示例
通过你自己的轮盘菜单锁定或解锁最近的车辆。
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:ToggleLock()ToggleEngine()启动或停止玩家当前驾驶车辆的引擎,功能类似 U。
查看示例
通过你自己的菜单或车辆 HUD 启动或关闭引擎。
exports['Agency-Vehiclekeys']:ToggleEngine()OpenMenu()打开钥匙环,例如从环形菜单或手机应用中打开。
查看示例
通过你自己的轮盘菜单或手机应用打开钥匙环。
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:OpenMenu()CloseMenu()关闭钥匙环,并将鼠标控制权交还给游戏。
查看示例
在你自己的菜单打开前关闭钥匙串。
exports['Agency-Vehiclekeys']:CloseMenu()IsMenuOpen()钥匙环打开时返回 true。
查看示例
防止你的菜单在钥匙串上方打开。
if not exports['Agency-Vehiclekeys']:IsMenuOpen() then
-- open your own menu
enduseLockpick()开始尝试撬开玩家前方的车辆,或在驾驶座上尝试热启动。适用于 ox_inventory 物品:client = { export = 'Agency-Vehiclekeys.useLockpick' }。
查看示例
允许玩家从 ox_inventory 菜单中使用开锁工具。
-- ox_inventory/data/items.lua
['lockpick'] = {
label = 'Lockpick',
client = { export = 'Agency-Vehiclekeys.useLockpick' },
},服务端导出
GiveKeys(source, plate, mode, hours)发放一把钥匙。mode 为 'temp'(默认值)时发放临时钥匙,可选设置有效小时数;'perm' 则发放已保存的钥匙。可以使用 source 或 identifier。
查看示例
发放临时钥匙,例如租车或工作生成车辆时。
-- a rental that lasts two hours
exports['Agency-Vehiclekeys']:GiveKeys(source, plate, 'temp', 2)RemoveKeys(source, plate)移除共享钥匙或临时钥匙。若成功移除钥匙,则返回 true。
查看示例
租赁结束或工作完成后收回钥匙。
exports['Agency-Vehiclekeys']:RemoveKeys(source, plate)HasKeys(source, plate)当玩家持有该车牌的钥匙时返回 true,包括附近车辆的工作车辆钥匙。
查看示例
在服务器端检查玩家是否确实持有钥匙。
if not exports['Agency-Vehiclekeys']:HasKeys(source, plate) then
return -- no key, no delivery
endSetOwner(source, plate)将玩家设为某个车牌的车主,适用于独立服务器上的车库和商店。之前的车主将失去钥匙。
查看示例
在独立服务器上将车辆所有权赋予买家。
-- your standalone vehicle shop, after the purchase
exports['Agency-Vehiclekeys']:SetOwner(source, plate)RemoveOwner(plate)移除此脚本为某个车牌保存的车主信息。
查看示例
车辆出售或报废时移除已保存的车主信息。
exports['Agency-Vehiclekeys']:RemoveOwner(plate)GetOwner(plate)车主的 identifier 及其来源:对于 QBCore、Qbox 或 ESX 的自有车辆,来源为 'framework';对于由此脚本保存的车主,来源为 'store'。
查看示例
查询车牌对应的车主,供警察工具或扣押脚本使用。
local owner, from = exports['Agency-Vehiclekeys']:GetOwner(plate)
print(owner, from) -- identifier, 'framework' or 'store'GetKeyHolders(plate)所有持有该车牌钥匙的其他玩家,以 { identifier, kind, name, expires } 列表形式返回。
查看示例
显示所有持有某辆车钥匙的人员,例如在警用电脑中显示。
for _, h in ipairs(exports['Agency-Vehiclekeys']:GetKeyHolders(plate)) do
print(h.name, h.kind)
endSetVehicleLocked(vehicle, locked)为所有人锁定或解锁车辆,不检查钥匙。供需要打开车辆的脚本使用。
查看示例
无需检查钥匙即可为所有人打开或锁上车辆。
-- a heist script opens the car for the crew
exports['Agency-Vehiclekeys']:SetVehicleLocked(vehicle, false)IsVehicleLocked(vehicle)车辆已锁定时为 True。
查看示例
在服务器端读取车锁状态。
if exports['Agency-Vehiclekeys']:IsVehicleLocked(vehicle) then
-- the car is closed
endGetFramework()脚本检测到的框架:qbcore、esx 或 standalone。
查看示例
让你的脚本遵循钥匙脚本检测到的框架。
if exports['Agency-Vehiclekeys']:GetFramework() == 'standalone' then
-- give the key yourself
end事件
Agency:Keys:GiveServer为某个车牌申请临时钥匙,Agency Garage 和 Agency Vehicleshop 也会这样做。通过客户端传入车牌触发。车辆必须在玩家旁边,或属于该玩家。
查看示例
为刚生成在玩家旁边的车辆申请钥匙。
-- client side, after your garage spawned the car
TriggerServerEvent('Agency:Keys:GiveServer', GetVehicleNumberPlateText(vehicle))qb-vehiclekeys:server:AcquireVehicleKeys以相同方式处理 qb-vehiclekeys 的钥匙事件,使为 qb-vehiclekeys 制作的车库和商店继续正常工作。
查看示例
为 qb-vehiclekeys 编写的脚本无需修改即可继续运行。
TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate)vehiclekeys:client:SetOwner许多车库和商店在生成车辆后触发的客户端事件。服务器执行相同检查后,会为该车牌发放临时钥匙。
查看示例
许多车库在生成车辆后触发的事件会为玩家提供钥匙。
TriggerEvent('vehiclekeys:client:SetOwner', plate)qb-vehiclekeys:client:AddKeys以相同方式处理 qb-vehiclekeys 用于发放钥匙的客户端事件。
查看示例
像 qb-vehiclekeys 一样递出一把钥匙。
TriggerEvent('qb-vehiclekeys:client:AddKeys', plate)simple_carkeys:client:toggleEngine使用钥匙启动或关闭引擎时在客户端触发,使 Agency-Hud 等 HUD 能够跟踪引擎状态。
查看示例
让 HUD 根据用钥匙启动或熄火的发动机状态同步变化。
AddEventHandler('simple_carkeys:client:toggleEngine', function()
-- update the engine icon of your HUD
end)10Agency-Vending
支持玩家所有权、现金或 AgencyPay 卡付款的自动售货机。
与 Agency-Phone 的 AgencyPay export 配合使用以支持卡付款。在玩家拥有自动售货机点位(加油站、办公室、公寓)的职业中使用,产生被动收入。
事件
agency-vending:notifyYong yu vending ziyuan de tongyong server qudong tongzhi diaodu qi.
查看示例
Zai gou mai hou xiang wan jia fa song tong yong fan shou ji zhu ti tong zhi.
-- Plug a vending receipt into a custom logger via notify event
TriggerClientEvent('agency-vending:notify', src, 'success', 'Receipt #4821 saved to wallet')agency-vending:startAgencyPayTongguo agency-phone jicheng yi shanghu yuan shuju qidong AgencyPay jiezhang.
查看示例
Tong guo dian hua shi yong zi dong shou huo ji shang jia shu ju qi dong Agency Pay.
-- 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:buyMachineResultGoumai jiqi de jieguo, zhuan fa zhi NUI yi tigong fankui.
查看示例
Jiang gou ji jie guo zhuan fa dao zi ding yi shang dian NUI yi huo qu fan kui.
-- Forward buy-machine outcome to a custom shop UI
TriggerClientEvent('agency-vending:buyMachineResult', src, { success = true, machineId = 102 })agency-vending:machineCreatedGuangbo xin de wanjia ziyou jiqi yi chuangjian; gengxin bendi huanchun bing tongzhi suoyouren.
查看示例
Xiang suo you ke hu duan guang bo xin chuang jian de wan jia yong you zi dong shou huo ji.
-- Cache new owner-machine instantly when business script registers it
TriggerClientEvent('agency-vending:machineCreated', -1, { id = 142, owner = identifier, type = 'sprunk' })agency-vending:openManagementVerifiedJingguo server yanzheng de daka suoyouzhe guanli caidan, baohan wupin, shouyi he biaoqian.
查看示例
Ren zheng hou da kai dai shang pin shou yi he biao qian de jing yan zheng guan li jie mian.
-- 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:openOwnedListDaka suoyouzhe gailan NUI, lieshou wanjia suoyou jiqi ji jiedao mingcheng.
查看示例
Da kai lie chu wan jia suo you zi dong shou huo ji de yong you zhe gai lan jie mian.
-- Hotkey opens the owner overview NUI listing all owned machines
TriggerClientEvent('agency-vending:openOwnedList', src)agency-vending:spawnMachineCreatedGuanliyuan shengcheng qi guangbo xin de shengcheng jiqi shiti yi chuangjian.
查看示例
Tong zhi suo you ke hu duan guan li yuan sheng cheng le xin de zi dong shou huo ji.
-- Custom mapping tool tracks newly admin-spawned machine
TriggerClientEvent('agency-vending:spawnMachineCreated', -1, { entity = netId, model = 'prop_vend_soda_01', id = 7 })agency-vending:spawnMachineDeletedGuanliyuan shengcheng qi guangbo yi shengcheng de jiqi shiti yi shanchu.
查看示例
Gao zhi suo you ke hu duan guan li yuan shan chu le yi sheng cheng de zi dong shou huo ji.
-- Mapping tool removes a deleted spawned machine from cache
TriggerClientEvent('agency-vending:spawnMachineDeleted', -1, 7)agency-vending:openSpawnerUIZai server duan quanxian jianyan tongguo hou daka guanliyuan shengcheng qi NUI.
查看示例
Da kai guan li yuan sheng cheng qi NUI yong yu fang zhi shi jie zi dong shou huo ji.
-- Custom command opens the admin spawner UI after permission passes
TriggerClientEvent('agency-vending:openSpawnerUI', src)agency-vending:buyMachineWanjia zai zhiding zuobiao/fangxiang chu goumai zhiding leixing de zidong shoumai ji.
查看示例
Wan jia zai dang qian zuo biao xiang NPC gou mai yi tai sprunk lei xing zi dong shou huo ji.
-- Custom NPC sells vending machines via dialog
local coords = GetEntityCoords(PlayerPedId())
local heading = GetEntityHeading(PlayerPedId())
TriggerServerEvent('agency-vending:buyMachine', 'sprunk', coords, heading)agency-vending:requestOwnedListQingqiuzhe wei suoyouzhe gailan UI qingqiu ziji yongyou de jiqi liebiao.
查看示例
Cong fu wu qi qing qiu wan jia yong you de zi dong shou huo ji lie biao.
-- Refresh owner overview after a balance/restock action elsewhere
TriggerServerEvent('agency-vending:requestOwnedList')agency-vending:requestMachinesQingqiuzhe xiang server qingqiu suoyou wanjia ziyou jiqi de wanzheng tongbu.
查看示例
Cong fu wu qi qing qiu suo you wan jia yong you de zi dong shou huo ji de quan xin tong bu.
-- Scan for nearby machines after teleport finished
TriggerServerEvent('agency-vending:requestMachines')agency-vending:requestManagementJingguo server yanzheng de daka suoyou jiqi de guanli UI.
查看示例
Wei dian ji de yong you zi dong shou huo ji qing qiu fu wu qi yan zheng guan li jie mian.
-- Owner UI requests verified management menu for a clicked machine
TriggerServerEvent('agency-vending:requestManagement', machineId)agency-vending:requestSpawnedMachinesQingqiuzhe wei shengcheng qi UI qingqiu guanliyuan shengcheng de jiqi liebiao.
查看示例
Wei sheng cheng qi jie mian qing qiu suo you guan li yuan sheng cheng de zi dong shou huo ji lie biao.
-- Admin spawner UI fetches all currently spawned machines
TriggerServerEvent('agency-vending:requestSpawnedMachines')agency-vending:adminSpawnMachineGuanliyuan zai quanxian jianyan hou zai server duan fangzhi xin de zidong shoumai ji wujian.
查看示例
Quan xian jian cha hou guan li yuan sheng cheng yi ge xin de ling shi zi dong shou huo ji.
-- 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:adminDeleteSpawnedGuanliyuan zai server duan shanchu zhiqian shengcheng de zidong shoumai ji wujian.
查看示例
Guan li yuan zai fu wu qi duan shan chu zhi qian sheng cheng de zi dong shou huo ji wu pin.
-- Admin removes a misplaced machine via map editor button
TriggerServerEvent('agency-vending:adminDeleteSpawned', spawnedId)11Agency-Admin
全功能管理面板,配备玻璃 UI、AgencyAI 聊天和 60 多种管理工具。
这些事件非常适合作为反作弊、审核机器人或自动化执法工具的"原语", 从服务器脚本调用即可冻结/踢出/通知,无需编写自己的 UI。
事件
agency-admin:client:refreshStaffRanksChufa keduan chongxin huoqu yuangong dengji shuju.
查看示例
Sheng zhi hou shua xin suo you zai xian guan li yuan de zhi yuan deng ji huan cun.
-- 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:freezeTimeZai zhiding xiaoshi/fenzhong dongjie huo jiedong keduan de shijie shijian.
查看示例
Fan zuo bi xi tong zai shen cha wan jia shi jiang shi jian ding ge zai zheng wu.
-- 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:dashboardValueTuisong yige yibanpan kapian de zhi (li ji jishuqi) dao mianban UI.
查看示例
Shi shi tui song zai xian wan jia shu liang dao guan li yuan yi biao pan ka pian.
-- Stream live online player count to admin dashboard cards
local count = #GetPlayers()
TriggerClientEvent('agency-admin:client:dashboardValue', adminSrc, 'players_online', count)agency-admin:client:teleportToCoordsJiang qingqiuzhe chuansong dao zhiding de shijie zuobiao.
查看示例
Zai chong sheng shi jian hou jiang wan jia chuan song dao bao cun de zuo biao.
-- Job script teleports a player back to last save point on respawn
local coords = vector3(-1037.7, -2737.6, 20.16)
TriggerClientEvent('agency-admin:client:teleportToCoords', src, coords)agency-admin:client:announce显示全服公告横幅。
查看示例
Cong zhi ding xi tong fa song fang guang bo quan fu wu qi de gong gao heng fu.
-- Event bot announces a community contest start
TriggerClientEvent('agency-admin:client:announce', -1, 'Event Crew', 'Heist contest starts in 5 minutes!')agency-admin:client:notify向特定管理员推送通知。
查看示例
Dang shen qing pi zhun shi xiang wan jia fa song dai yang shi de tong zhi xin xi.
-- Whitelist bot informs a player they passed the application
TriggerClientEvent('agency-admin:client:notify', src, 'Whitelist', 'Application approved!', 'success', 8000)agency-admin:client:freeze将目标玩家原地冻结。
查看示例
Dong jie ke yi wan jia ying shi yuan gong neng wu yi dong di jin hang diao cha.
-- Anti-cheat freezes a suspect player while staff investigates
TriggerClientEvent('agency-admin:client:freeze', suspectSrc, true)agency-admin:client:heal恢复目标的 HP/护甲。
查看示例
Zai RP yi liao zhi liao jie shu hou wan quan zhi yu huan zhe.
-- Medic job script fully heals the player after RP treatment ends
TriggerClientEvent('agency-admin:client:heal', patientSrc)agency-admin:client:revive复活目标玩家。
查看示例
Zai EMS xiao you xi cheng gong wan cheng hou fu huo dao xia de wan jia.
-- EMS revive minigame succeeds, server marks player alive again
TriggerClientEvent('agency-admin:client:revive', downedSrc)agency-admin:client:teleportJiang bendi wanjia chuansong dao zhiding de zuobiao xiangliang.
查看示例
Jiang ben di wan jia chuan song dao zhi ding de zuo biao xiang liang.
-- Tutorial system teleports new player to spawn pad on first join
local coords = vector3(245.7, -871.5, 30.5)
TriggerClientEvent('agency-admin:client:teleport', src, coords)agency-admin:client:openMenu打开管理面板 UI(需要 ACE 权限)。
查看示例
Dang ren yuan shang ban shi da kai zhu guan li yuan mian ban jie mian.
-- Auto-open admin panel for staff right after they switch on duty
TriggerClientEvent('agency-admin:client:openMenu', src)agency-admin:client:openToolsMenuServer qudong de chufa qi, daka guanliyuan gongju zicaidan.
查看示例
An xia ren yuan kuai jie jian shi da kai guan li yuan gong ju zi cai dan.
-- Quick-action keybind opens the admin tools sub-menu
TriggerClientEvent('agency-admin:client:openToolsMenu', src)agency-admin:client:closeMenuServer qudong de chufa qi, guanbi guanliyuan mianban UI.
查看示例
Dang guan li yuan bei diao cha shi qiang zhi guan bi guan li yuan mian ban.
-- Force-close the panel when admin gets reported themselves
TriggerClientEvent('agency-admin:client:closeMenu', adminSrc)agency-admin:client:openClothingMenuServer qudong de chufa qi, wei wanjia daka youxinei fuzhuang caidan.
查看示例
Wan jia zai cai feng dian gou mai fu zhuang hou da kai fu zhuang cai dan.
-- Tailor NPC opens clothing menu after a uniform purchase
TriggerClientEvent('agency-admin:client:openClothingMenu', src)agency-admin:server:requestPlayersWei guanliyuan mianban qingqiu dangqian zaixian wanjia liebiao.
查看示例
Cong fu wu qi qing qiu zui xin de zai xian wan jia lie biao yong yu mian ban.
-- Custom dashboard widget refreshes its players list
TriggerServerEvent('agency-admin:server:requestPlayers')agency-admin:server:requestPanelPermissionsWei dengji bianjiqi qingqiu mianban quanxian biao.
查看示例
Wei deng ji bian ji qi xiang fu wu qi qing qiu mian ban quan xian biao ge.
-- Permission editor needs the latest panel permission map
TriggerServerEvent('agency-admin:server:requestPanelPermissions')agency-admin:server:requestStaffRanksWei mianban qingqiu yuangong dengji shujuji.
查看示例
Wei zi ding yi CRM xiao gong ju qing qiu wan zheng zhi yuan deng ji shu ju.
-- Sync staff ranks dataset into a custom CRM widget
TriggerServerEvent('agency-admin:server:requestStaffRanks')agency-admin:server:createRankChuangjian dai you yuan shuju he quanxian de xin yuangong dengji.
查看示例
Cong wai bu ren li zi yuan men hu tong bu chuang jian xin zhi yuan deng ji.
-- 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:requestMyPermissionsQingqiuzhe qingqiu zixing jiexi de mianban quanxian jihe.
查看示例
Da kai jie mian shi qing qiu hu jiao zhe zi ji yi jie xi de mian ban quan xian.
-- Fetch caller's resolved permission set before showing dev tools
TriggerServerEvent('agency-admin:server:requestMyPermissions')agency-admin:server:requestSyncQingqiuzhe qing server tuisong biaozhun sync fuzai (zhiwu/quanxian/deng).
查看示例
Qiang zhi fu wu qi xiang hu jiao zhe fa song biao zhun duty/perms tong bu bao.
-- Force a fresh sync after the player reconnects
TriggerServerEvent('agency-admin:server:requestSync')agency-admin:server:requestDutyRankQingqiuzhe qingqiu zishen dangqian de admin-duty dengji xinxi.
查看示例
Wei zi ding yi HUD die ceng qing qiu hu jiao zhe dang qian guan li zhi wu deng ji.
-- Display admin's duty rank on a custom HUD overlay
TriggerServerEvent('agency-admin:server:requestDutyRank')agency-admin:server:requestSpawnedObjectsQingqiuzhe qingqiu guanliyuan shengcheng de shijie wuti liebiao.
查看示例
Wei xiao di tu die ceng qing qiu guan li yuan sheng cheng de shi jie wu pin lie biao.
-- Map editor needs to draw all admin-spawned objects on a minimap
TriggerServerEvent('agency-admin:server:requestSpawnedObjects')12Agency-Anticheat
一款会逐步熟悉你服务器的 FiveM 反作弊。它在作弊者无处藏身的服务端检查每一位玩家:无敌模式、超级跳跃、伤害倍率、瞬移和黑名单武器都直接从同步的游戏状态中读取。交叉校验能抓住单项数值漏掉的情况:受害者幸存的致命一击、500 米外的手枪击杀、瞄准统计,以及多个微弱信号叠加后形成的行为模式。世界保护会在任何人看到之前取消生成的坦克、爆炸、火焰和粒子刷屏。封禁同时覆盖标识符和硬件令牌,因此同一台电脑上的新账号也进不来;当多名作弊者同时攻击时,锁定模式会自动关闭服务器。全新安装会先以 Learning 模式运行 48 小时,期间不会惩罚任何人。自带的游戏内面板(/acpanel)可实时显示一切并执行所有操作,适用于任何服务器。搭配 Agency Admin 时,其管理员会被自动豁免,同一页面也内置在该面板中;搭配 AgencyMod 时,封禁还会同步到你的 Discord。无需数据库,无需订阅,支持 25 种语言,兼容 QBCore、Qbox、ESX 或独立运行。
服务端导出
AllowTeleport(source: number, seconds?: number)在你的脚本移动玩家之前立即调用,这样该次位移不会被计为传送。默认 5 秒。
SetExempt(source: number, seconds: number)让某位玩家在一段时间内免于所有检测,例如在带有 Godmode 的活动期间。0 表示结束。
Flag(source: number, detail: string)你自己的检测。与其他命中一样计数,归入检测 external。
BanPlayer(source: number, reason: string, duration?: number, by?: string)通过标识符和硬件令牌封禁在线玩家。时长以秒为单位,0 表示永久。返回封禁 ID。
KickPlayer(source: number, reason: string, by?: string)踢出玩家并记录到 Discord。
Unban(banId: string, by?: string)解除封禁,例如 AC-7K3P9。
SetMode(mode: string)实时切换模式:learning、relaxed、balanced 或 strict。
SetDetection(key: string, enabled: boolean)实时开启或关闭某项检测。
SetLockdown(on: boolean, by?: string)开始或结束锁定。
IsExempt(source: number)返回玩家是否免于检测。
IsKnownPlayer(source: number)返回玩家是否在此游玩足够长时间且无命中,从而被视为已知玩家。
GetStatus()返回面板显示的全部内容:模式、层级、已学知识、今日数据、服务器负载以及每项检测及其规则。
GetDetections(limit?: number)返回最新的检测记录,最新的在前。
GetBans()返回每个有效封禁及其证据。
GetPlayers()返回在线玩家及其风险分数和未清除的警告,风险最高的在前。
事件
Agency-Anticheat:detection每次命中时触发,包含玩家、检测、详情、动作和警告数。
Agency-Anticheat:banned每次封禁后触发,附带完整的封禁记录。
Agency-Anticheat:unbanned封禁被解除后触发。
Agency-Anticheat:lockdown锁定开始或结束时触发。
Agency-Anticheat:learned当反作弊学到你服务器的一个新传送点时触发。
13Agency-Reports V2
现代化举报系统,每个举报都有实时聊天和 AI 辅助回复。
作为整个服务器的"支持工单"基础。当出现问题(车辆卡住、物品复制、SQL 保存失败)时,你的自定义脚本可自动开启举报供管理员审核。
事件
agency-reports:client:notify向特定管理员发送"新举报"通知。
查看示例
Zun zhong wan jia UI tong zhi pian hao de fu wu qi tui song tong zhi.
-- Server tells client a new admin reply landed
TriggerClientEvent('agency-reports:client:notify', source, 'New reply on your report', 'info')agency-reports:client:openPlayerUI打开玩家端举报 UI。
查看示例
Da kai bao han fen lei, kai fang bao gao yi ji AI/Discord she zhi de wan jia bao gao UI.
-- Open the player report UI on a custom keybind
local categories = { 'Bug', 'Player report', 'Stuck' }
TriggerEvent('agency-reports:client:openPlayerUI', categories, {}, {}, {})agency-reports:client:openAdminUI打开管理员端举报列表。
查看示例
Da kai bao han wan zheng bao gao shu ju ji de guan li yuan bao gao yi biao ban.
-- Force-open the admin reports dashboard from a staff command
TriggerEvent('agency-reports:client:openAdminUI', { reports = {}, total = 0 })agency-reports:client:teleportJiang qingqiu de guanliyuan chuansong dao zhiding zuobiao (yong yu goto caozuo).
查看示例
Wei goto cao zuo jiang guan li yuan chuan song dao zhi ding zuo biao.
-- 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:healSelfWanquan zhiyu qingqiu de guanliyuan de ped.
查看示例
Zai chu li bao gao hou wan quan zhi liao guan li yuan ped.
-- Heal admin after a hostile scene to keep them in service
TriggerEvent('agency-reports:client:healSelf')agency-reports:server:submitReport从 UI 外部提交新举报。
查看示例
Wan jia ti jiao bao han biao ti, fen lei he miao shu de xin bao gao zhi shu ju ku.
-- 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:requestPlayerDataQingqiuzhe qingqiu zishen de baogao fuzai; xuanze xing di zai xiangying shi daka wanjia UI.
查看示例
Diao yong zhe qing qiu zi ji de bao gao shu ju, ke xuan da kai wan jia UI.
-- Pull fresh data and (optionally) auto-open the player UI
TriggerServerEvent('agency-reports:server:requestPlayerData', true)agency-reports:server:requestAdminDataGuanliyuan qingqiu wanzheng baogao shujuji, ru you quanxian ze daka guanliyuan yibanpan.
查看示例
Guan li yuan qing qiu wan zheng bao gao shu ju ji bing zai yun xu shi da kai yi biao ban.
-- Admin staff opens the dashboard after going on duty
TriggerServerEvent('agency-reports:server:requestAdminData')agency-reports:server:sendChatMessage向已打开的举报发送聊天消息。
查看示例
Zai te ding bao gao xian cheng zhong wei guan li yuan huo wan jia fa song liao tian xiao xi.
-- Player posts a follow-up chat message into report #42
TriggerServerEvent('agency-reports:server:sendChatMessage', 42, 'Still stuck, any ETA?')14Agency-Doorlock
可上锁的门,支持游戏内设置,并可按职业、帮派或玩家为每扇门分配权限。
适用于房屋、地产或钥匙脚本:给玩家某扇门的钥匙并随时收回。钥匙保存在数据库中并实时同步,无需任何管理员权限。
客户端导出
ToggleNearestDoor()Locks or unlocks the door the player is standing at. The server checks access exactly like the E key.
查看示例
添加一个自定义按键 (L),用于锁上或打开玩家身边的门。权限仍由服务器检查。
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.
查看示例
读取玩家所在的门,例如在你的脚本中把这扇门关联到某栋房子。
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.
查看示例
列出所有门的编号和锁定状态。数据中永远不包含 PIN。
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.
查看示例
在门的位置设置 GPS 路点,例如引导玩家前往他的新房子。
local c = exports['Agency-Doorlock']:GetDoorCoords(doorId)
if c then
SetNewWaypoint(c.x, c.y)
end服务端导出
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.
查看示例
房主把钥匙交给另一名玩家。你的脚本检查所有权,Agency-Doorlock 保存钥匙并实时同步。没有人获得管理员权限。
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.
查看示例
收回钥匙,例如租客搬走时。使用 citizenid 时,即使玩家离线也能生效。
-- 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.
查看示例
检查玩家是否拥有这扇门的个人钥匙。通过职业、帮派或 "everyone" 获得的权限不计入。
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.
查看示例
列出持有某扇门钥匙的所有人,例如用于“管理钥匙”菜单。返回的是副本,修改它不会产生任何影响。
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.
查看示例
服务器启动后等待门加载完成,再让你的脚本发放钥匙。
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)事件
agency-doorlock:accessChangedFired on the server after AddPlayerAccess or RemovePlayerAccess changed a door. Arguments: doorId, identifier, granted (true / false). Listen with AddEventHandler.
查看示例
在服务器端记录每一次发放或收回的钥匙,例如发送到 Discord webhook。
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,集车辆仪表盘、状态栏、速度表和安全带集成于一体。
如果你有自定义经济或需求系统,请使用这些 setter 从自己的脚本驱动 HUD,而非绕开它。HUD 会为你处理动画和持久化。
客户端导出
GetVehicleSettings()返回当前车辆设置表。
查看示例
读取本地车辆HUD设置表用于检查或同步。
local settings = exports['Agency-Hud']:GetVehicleSettings()
print('Speed unit:', settings.speedUnit)
print('HUD scale:', settings.scale)SetSpeedUnit(unit: string)在 'mph' 和 'kmh' 之间切换速度表。
查看示例
将车辆速度表切换为英里每小时并本地保存。
RegisterCommand('usemph', function()
exports['Agency-Hud']:SetSpeedUnit('mph')
end)SetHunger(value: number)设置饥饿条数值(0-100)。
查看示例
将玩家当前的饥饿值推送到HUD。
AddEventHandler('player:hungerChanged', function(value)
exports['Agency-Hud']:SetHunger(value)
end)SetThirst(value: number)设置口渴条数值(0-100)。
查看示例
将玩家当前的口渴值推送到HUD。
AddEventHandler('player:thirstChanged', function(value)
exports['Agency-Hud']:SetThirst(value)
end)SetStress(value: number)设置压力条数值(0-100)。
查看示例
从自定义压力系统更新HUD压力计。
AddEventHandler('jobstress:onTick', function(stress)
exports['Agency-Hud']:SetStress(stress)
end)SetMoney(value: number)设置显示的现金余额。
查看示例
更新HUD钱包面板上显示的现金金额。
AddEventHandler('wallet:cashChanged', function(cash)
exports['Agency-Hud']:SetMoney(cash)
end)SetBank(value: number)设置显示的银行余额(用于自定义经济脚本)。
查看示例
更新HUD中显示的银行余额。
AddEventHandler('bank:balanceChanged', function(balance)
exports['Agency-Hud']:SetBank(balance)
end)SetJob(label: string)设置显示的职业标签。
查看示例
玩家更换职业后设置显示的职业标签。
AddEventHandler('job:onChange', function(job)
exports['Agency-Hud']:SetJob(job.label)
end)SetRank(rank: string)设置显示的职业等级。
查看示例
更新职业标签旁边显示的玩家职级。
AddEventHandler('job:onGradeChange', function(grade)
exports['Agency-Hud']:SetRank(grade.label)
end)GetDetectedFramework()返回 HUD 自动检测到的框架字符串("qb"、"esx"、"standalone")。
查看示例
读取检测到的框架键以分支自定义HUD逻辑。
local fw = exports['Agency-Hud']:GetDetectedFramework()
if fw == 'qb' then
print('QB-Core detected')
end事件
Agency-HUD:client:applyVehicleSettingsPatch向本地车辆 HUD 应用部分车辆设置补丁。
查看示例
在本地客户端应用部分车辆HUD设置补丁。
TriggerEvent('Agency-HUD:client:applyVehicleSettingsPatch', {
style = 'modern',
speedUnit = 'kmh'
})Agency-HUD:client:openAdminMenu打开 HUD 管理菜单(需要权限)。
查看示例
在接收客户端打开管理员HUD菜单NUI。
TriggerEvent('Agency-HUD:client:openAdminMenu')Agency-HUD:server:checkAdminPermission验证调用方的管理员权限,成功后打开管理员菜单。
查看示例
请求服务器验证管理员权限并打开HUD管理员菜单。
RegisterCommand('checkhudadmin', function()
TriggerServerEvent('Agency-HUD:server:checkAdminPermission')
end)Agency-HUD:server:saveGlobalSettings仅管理员可持久化全局 HUD 设置;广播同步。
查看示例
保存新的全局HUD配置(仅管理员)并广播。
TriggerServerEvent('Agency-HUD:server:saveGlobalSettings', {
style = 'modern',
accent = '#ff6b00'
})Agency-HUD:server:requestGlobalSettings向请求的客户端返回当前全局设置。
查看示例
在资源启动时请求当前的全局HUD设置。
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-HUD:server:requestGlobalSettings')
end
end)Agency-HUD:server:requestTime向调用方返回当前服务器时间用于 HUD 时钟。
查看示例
每分钟轮询服务器时钟以刷新HUD时间显示。
CreateThread(function()
while true do
TriggerServerEvent('Agency-HUD:server:requestTime')
Wait(60000)
end
end)16Agency-Progressbar V2
动画进度条,配玻璃 UI、4 种主题、可取消操作和 client/server 导出。
在通常显示"执行 X 操作 Y 秒"的任何地方使用。用单一一致的 UI 替代整个服务器上的多个旧版进度条资源。
客户端导出
StartProgress(data: table)使用完整的选项表启动进度条。立即返回;完成/取消时触发回调。
查看示例
启动一个8秒的开锁进度条,带动画和完成回调。
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)停止当前运行的进度条。传入 true 标记为已取消。
查看示例
玩家按X键时取消活动的进度条。
if IsControlJustPressed(0, 73) then
exports['Agency-Progressbar']:StopProgress(false)
endIsProgressActive()如果当前显示进度条则返回 true。
查看示例
当进度条处于活动状态时,阻止开始新的制作动作。
if exports['Agency-Progressbar']:IsProgressActive() then
return
end
startCrafting()GetProgressPercentage()返回当前填充百分比(0-100)。
查看示例
当进度条超过75%时触发小游戏tick。
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)运行时切换主题:'modern'、'neon'、'minimal' 或 'classic'。
查看示例
将活动进度条的外观切换为现代主题。
RegisterCommand('darkbar', function()
exports['Agency-Progressbar']:SetProgressTheme('modern')
end)SetProgressPosition(position: string)更改位置:'top'、'bottom'、'center'。
查看示例
将活动进度条移动到屏幕底部中央。
RegisterCommand('barbottom', function()
exports['Agency-Progressbar']:SetProgressPosition('bottom-center')
end)TryReload(usedItem?: string)播放 ESX 风格的重新装填序列。
查看示例
使用9mm弹药盒物品启动经服务器验证的重新装填。
RegisterKeyMapping('+reload', 'Reload weapon', 'keyboard', 'R')
RegisterCommand('+reload', function()
exports['Agency-Progressbar']:TryReload('ammo-9')
end)UseConsumable(itemName: string, isDrink: boolean)播放带进度条的吃/喝动画。
查看示例
使用水时播放饮用动画并增加口渴值。
RegisterNetEvent('inventory:useItem', function(item)
if item == 'water_bottle' then
exports['Agency-Progressbar']:UseConsumable('water_bottle', true)
end
end)服务端导出
StartProgressForPlayer(playerId: number, data: table)从服务器在特定客户端上触发进度条。
查看示例
在请求的玩家上启动5秒举起木箱进度条。
RegisterCommand('lift', function(source)
exports['Agency-Progressbar']:StartProgressForPlayer(source, {
label = 'Lifting crate...',
duration = 5000
})
end, false)StopProgressForPlayer(playerId: number, completed?: boolean)远程取消特定玩家的进度条。
查看示例
从服务器取消目标玩家的活动进度条。
RegisterNetEvent('admin:cancelProgress', function(targetId)
exports['Agency-Progressbar']:StopProgressForPlayer(targetId, false)
end)StartProgressForAllPlayers(data: table)向每个已连接的客户端广播进度条。
查看示例
向所有玩家广播30秒的风暴警告进度条。
RegisterNetEvent('event:weatherWarning', function()
exports['Agency-Progressbar']:StartProgressForAllPlayers({
label = 'Storm incoming - take shelter',
duration = 30000
})
end)StopProgressForAllPlayers(completed?: boolean)取消每个玩家的进度条(例如回合结束)。
查看示例
停止所有玩家上的全局风暴警告进度条。
RegisterNetEvent('event:weatherCleared', function()
exports['Agency-Progressbar']:StopProgressForAllPlayers(true)
end)事件
Agency:Progressbar:LoadSettings将每位玩家的 UI 设置(位置、颜色、缩放、样式)从数据库加载到 client。
查看示例
在出生时加载玩家保存的进度条UI设置。
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Progressbar:LoadSettings')
end)agency-progressbar:client:start使用提供的数据在接收 client 上启动进度条。
查看示例
启动一个可取消的12秒发动机修理进度条。
TriggerEvent('agency-progressbar:client:start', {
label = 'Repairing engine...',
duration = 12000,
canCancel = true
})agency-progressbar:client:stop使用完成标志停止活动的进度条。
查看示例
当玩家被铐上时中止活动的进度条。
RegisterNetEvent('police:cuffed', function()
TriggerEvent('agency-progressbar:client:stop', false)
end)agency:consumables:useFood用于消耗食物物品的 inventory 桥接(动画 + 安全的 server 应用)。
查看示例
触发库存食物桥接以消耗一个三明治物品。
TriggerEvent('agency:consumables:useFood', 'sandwich')agency:consumables:useDrink用于消耗饮品物品的 inventory 桥接(动画 + 安全的 server 应用)。
查看示例
触发库存饮料桥接以消耗一杯咖啡物品。
TriggerEvent('agency:consumables:useDrink', 'coffee_cup')Agency:Progressbar:SaveSettings验证并将玩家的进度条 UI 设置保存到数据库。
查看示例
将玩家的进度条UI首选项持久化到数据库。
TriggerServerEvent('Agency:Progressbar:SaveSettings', {
position = 'top-right',
color = '#00aaff',
scale = 1.2
})agency-progressbar:server:start在目标(或自身)上启动进度条的 server 端触发器。
查看示例
服务器端触发器,在目标上启动6秒的木箱装载条。
RegisterCommand('movecrate', function(source)
TriggerEvent('agency-progressbar:server:start', source, {
label = 'Loading crate onto truck',
duration = 6000
})
end, false)agency-progressbar:server:stop在目标(或自身)上停止进度条的 server 端触发器。
查看示例
服务器端触发器,以取消状态停止目标的进度条。
RegisterNetEvent('admin:abortJob', function(targetId)
TriggerEvent('agency-progressbar:server:stop', targetId, false)
end)agency:reload:request在向请求玩家授予重新装填之前验证弹药/武器/物品。
查看示例
请求服务器验证弹药并授权手枪重新装填。
TriggerServerEvent('agency:reload:request', 'WEAPON_PISTOL', 'ammo-9')agency:consumables:apply验证 inventory,移除一个物品并应用饥饿/口渴增益。
查看示例
请求服务器移除食物物品并应用饥饿值增加。
RegisterNetEvent('food:onEatStart', function(itemName)
TriggerServerEvent('agency:consumables:apply', itemName)
end)17Agency-Notify V2
具有V1/V2样式、AgencyAI智能优先级、垃圾信息防护和数据库持久化的通知系统。
用统一外观替换服务器上所有其他通知资源(qb-notify、esx_notify、mythic_notify、okok-notify等)。AgencyAI优先级系统会自动限速垃圾通知。
客户端导出
Notify(data: { title, text, type, duration, ... })显示一条通知。接受 { type, title, text, duration, icon, color }。
查看示例
发送一个6秒的成功通知,宣布抢劫目标。
exports['Agency-Notify']:Notify({
title = 'Bank Heist',
text = 'Vault drilled, grab the loot!',
type = 'success',
duration = 6000
})事件
Agency:Notify:Send与export相同, 让您使用传统的基于Trigger的模式。
查看示例
显示与导出相同负载的旧版v1客户端事件。
TriggerEvent('Agency:Notify:Send', {
title = 'Old Notify',
text = 'Legacy v1 entry point still works',
type = 'info'
})Agency:Notify:LoadSettings应用 server 上每位玩家保存的 UI 设置(位置、颜色、缩放、样式)。
查看示例
在出生时加载每个玩家保存的notify UI设置。
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Notify:LoadSettings')
end)Agency:Notify:SaveSettings验证并保存玩家的 notify 设置(位置、强调色、缩放、样式)。
查看示例
将玩家的notify位置、强调色和缩放比例持久化到数据库。
TriggerServerEvent('Agency:Notify:SaveSettings', {
position = 'top-right',
accent = '#ff8800',
scale = 1.1,
style = 'modern'
})18Agency-Seatbelt V2
具有弹出物理、3D音效、多乘员支持和HUD集成的安全带。
将状态接入您自己的HUD,或在警察追击/抢劫逃跑开始时强制启用。force-enable/disable导出非常适合RP场景。
客户端导出
isSeatbeltOn()如果玩家当前系着安全带则返回true。
查看示例
系上安全带时禁用下车控制。
if exports['Agency-Seatbelt']:isSeatbeltOn() then
DisableControlAction(0, 75, true)
endenableSeatbelt()强制系上安全带(例如用于警察逮捕时)。
查看示例
为本地玩家系上安全带,带HUD和声音反馈。
RegisterNetEvent('vehicle:autoBuckle', function()
if IsPedInAnyVehicle(PlayerPedId(), false) then
exports['Agency-Seatbelt']:enableSeatbelt()
end
end)disableSeatbelt()强制解开安全带(过场动画、RP场景)。
查看示例
玩家离开车辆时解开本地玩家的安全带。
RegisterNetEvent('vehicle:onExit', function()
exports['Agency-Seatbelt']:disableSeatbelt()
end)toggleSeatbelt()切换安全带(默认按键绑定的功能)。
查看示例
按键时切换本地玩家的安全带状态。
RegisterKeyMapping('+seatbelt', 'Toggle seatbelt', 'keyboard', 'B')
RegisterCommand('+seatbelt', function()
exports['Agency-Seatbelt']:toggleSeatbelt()
end)isAutoBuckled()安全带是由车辆而非玩家系上时返回 true。
autoBuckle(on: boolean)以自动安全带的方式系上或解开,与自动驾驶汽车的做法相同。
getSeatbeltState()返回一个表,包含是否系上、是否为自动、座位和车辆。
setSeatbeltEnabled(on: boolean)为该玩家整体关闭或开启安全带功能,用于过场动画或管理场景。
isPlayerSeatbeltOn(serverId: number)返回其他玩家的安全带状态,从同步的 state bag 中读取。
bucklesItselfVehicle(vehicle: number)返回该车辆是否会自动为乘员系安全带,依据车型列表或 agAuto state bag。
openSettings()打开设置卡片。
closeSettings()关闭设置卡片。
isSettingsOpen()返回设置卡片是否处于打开状态。
服务端导出
isSeatbeltOn(source: number)在服务端返回玩家的安全带状态,从同步的 state bag 中读取。
getBuckledPlayers()返回当前所有系着安全带的玩家的服务器 id。
setSeatbelt(source: number, on: boolean)从服务端为玩家系上或解开安全带。
事件
Agency-HUD:seatbeltStateChanged每次变化时带着新状态触发。Agency-HUD 会监听它,其他资源也可以监听。
19Agency-Elevator
具有Liquid Glass UI和配置器的逼真电梯系统。
非常适合公寓/住宅脚本、警察总部、医院或任何多层室内场景。使用配置器以可视化方式放置电梯,无需触碰配置文件。
事件
Agency-Elevator:server:requestTravel经服务器验证的楼层间移动请求。
查看示例
请求服务器验证访问权限然后前往电梯的3楼。
TriggerServerEvent('Agency-Elevator:server:requestTravel', 'lspd-tower-1', 3)Agency-Elevator:server:travelComplete确认 client 到达并推送'已到达楼层'通知。
查看示例
告诉服务器玩家已到达3楼以推送到达通知。
TriggerServerEvent('Agency-Elevator:server:travelComplete', 'lspd-tower-1', 3)Agency-Elevator:server:requestElevators将从数据库加载的电梯列表同步到请求的 client。
查看示例
在客户端初始化时从服务器请求完整的电梯列表。
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-Elevator:server:requestElevators')
end
end)Agency-Elevator:server:saveElevator对电梯(id/label/floors)进行权限检查后 upsert 到 MySQL。
查看示例
管理员upsert一个带单个Lobby楼层条目的电梯。
TriggerServerEvent('Agency-Elevator:server:saveElevator', {
id = 'lspd-tower-1',
label = 'LSPD HQ',
floors = { { name = 'Lobby', coords = vector3(441.0, -981.5, 30.7) } }
})Agency-Elevator:server:loadElevator从数据库生成/加载已保存的电梯。
查看示例
将单个电梯的数据加载到配置器NUI中进行编辑。
TriggerServerEvent('Agency-Elevator:server:loadElevator', 'lspd-tower-1')Agency-Elevator:server:saveSettings将 UI 设置(位置/缩放/强调色)持久化到 MySQL 并重新同步所有 client。
查看示例
保存电梯UI位置、强调色和缩放,并重新同步所有客户端。
TriggerServerEvent('Agency-Elevator:server:saveSettings', {
position = 'top-right',
accent = '#22c55e',
scale = 1.0
})Agency-Elevator:client:startTravel为玩家启动电梯运行的过场动画。
查看示例
播放淡入淡出和动画,然后将ped传送到车库的2楼。
TriggerEvent('Agency-Elevator:client:startTravel', 'parking-garage', 2)Agency-Elevator:client:applySettings将 UI 设置(强调色/缩放/位置)推送到 NUI。
查看示例
在本地客户端应用电梯NUI的强调色、缩放和位置。
TriggerEvent('Agency-Elevator:client:applySettings', {
accent = '#0ea5e9',
scale = 0.9,
position = 'bottom-left'
})Agency-Elevator:client:openConfigurator打开游戏内电梯配置器(仅限管理员)。
查看示例
打开带有当前电梯列表的管理员配置器NUI。
TriggerEvent('Agency-Elevator:client:openConfigurator')Agency-Elevator:client:refreshConfigurator在保存/删除后刷新打开的配置器而不关闭它。
查看示例
保存后刷新打开的配置器NUI而不关闭它。
AddEventHandler('Agency-Elevator:server:elevatorSaved', function()
TriggerEvent('Agency-Elevator:client:refreshConfigurator')
end)20Agency-Multicharacter
专为 FiveM 打造的电影级角色选择与创建系统。每个角色都置身于契合其职业的场景中,警察站在警车旁,医务人员在救护车旁,机械师在修理厂内,身穿已保存的外观,并在简洁的卡片上展示专属头像、职业、帮派、现金、银行存款、电话号码、游玩时长和最后位置。新角色拥有姓名与年龄规则、可搜索的国籍列表以及身高设置,随后服务器的服装脚本会自动打开。槽位可通过 Tebex 出售:买家凭交易 ID 即可解锁。玩家使用 /logout 切换角色。自动识别框架、服装脚本、背包、出生点选择器与加载界面;旧版 multicharacter 的现有角色、游玩时长与已购槽位均可直接继承。支持 QBCore、Qbox、ESX 或自带角色存储的完全 standalone 模式,支持 25 种语言,配色自动匹配服务器 Logo。
客户端导出
IsOpen()True while the character selection is open.
OpenSelection()Opens the selection, for example from your own logout button.
服务端导出
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.
事件
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
配备实时镜头的 FiveM 出生点选择器。当玩家浏览时,镜头会掠过 Los Santos 上空飞向每个地点;选定地点后,镜头将从空中俯冲过渡至角色。提供最后位置、带有注释的单列表公共出生点、仅特定角色可见的职业与帮派出生点、角色拥有或持有钥匙的每一处 Agency Housing 房屋、qb-apartments 以及新角色的固定初始到达点。玩家可以开启在最后位置自动出生。完美响应 qb-spawn 与公寓事件,因此大多数 multicharacter 脚本无需改动即可直接调用,并能与 Agency Multicharacter 无缝配合。支持 QBCore、Qbox、ESX 或 standalone,支持 25 种语言,配色自动匹配服务器 Logo。
客户端导出
Open(options)Opens the selector. options.isNew = true sends new characters to the arrival point.
IsOpen()True while the selector is open.
事件
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
适用于 FiveM 的数据库驱动房屋系统。可自动检测 QBCore、QBox 和 ESX,也可以完全独立运行,无需任何框架。房屋通过游戏内的分步创建器建造,而不是配置文件:室内空间、外壳、MLO 以及整栋公寓楼(最多 40 套公寓共用一个大门),每块地皮都由从空中标记的产权边界围住。玩家可以购买房屋、互相出售、出租和租房,浏览市场上的所有房源,并提前支付租金。玩家离线期间到账的款项会在其下次上线时支付。包含钥匙、MLO 门锁(支持自动上锁和门铃)、来自超过 1,300 件道具目录的家具、监控摄像头和内置衣柜;Housing 应用可在 Agency Phone、Agency Pad、lb-phone 和 qs-smartphone-pro 上提供门锁控制和实时摄像头。背包、服装和车库脚本会被自动识别,数据库自动更新,所有数据都保存在 MySQL 中。
客户端导出
IsInsideHouse()玩家在房屋内时返回 true。
GetCurrentHouse()玩家当前所在的房屋,没有则为 nil。
LeaveHouse()让玩家从入口回到室外。
GetHouseAtPoint(coords)地产边界包含此地面的第一栋房屋。
GetHousesAtPoint(coords)包含此地面的所有房屋,适用于公寓楼这类重叠地块。
GetCurrentProperty()玩家当前所站的地块,没有则为 nil。
IsOnProperty(houseId)玩家是否站在该房屋的地产范围内。
GetHouseZone(houseId)房屋已保存的边界形状。
GetAccent()玩家在 Housing > 设置中选择的强调色。
GetAppUrl(theme)Housing 应用页面的地址,用于将该应用添加到其他任何手机上。传入 'light' 或 'dark' 可强制使用某个主题。
GetAppData()Housing 应用显示的所有内容:玩家拥有、租住或持有钥匙的房屋。
AppAction(action, houseId)对某栋房屋执行一个应用操作:'waypoint'、'lock' 或 'cams'。
服务端导出
GetHouses()服务器上的所有房屋,以 id 为键。
GetPlayerHouses(source)该玩家拥有的房屋。
HasHouseAccess(source, houseId)该玩家是否拥有这栋房屋或持有其钥匙。
GetHouseAtPoint(coords)地产边界包含此地面的第一栋房屋。
GetHousesAtPoint(coords)包含此地面的所有房屋,适用于重叠地块。
GetHouseZone(houseId)房屋已保存的边界形状。
事件
agency-housing:client:enteredZone玩家踏入地产范围时触发,参数为 (houseId, house),职业或抢劫脚本无需轮询。
agency-housing:client:leftZone玩家离开地产范围时触发,参数为 (houseId, house)。
agency-housing:garage:open当使用房屋车库且 Config.Garage.script 为 'event' 时,以 (houseId, houseName) 触发,以便你自己的车库脚本打开它。
23Agency-Banking
一套完整的 FiveM 银行系统,可运行于 QBCore、Qbox、ESX,也可完全独立运行。玩家拥有包含银行存款与现金的钱包、四种主题的银行卡、按 ID 或向附近玩家转账、利率只由服务端决定的定期存款、股票与加密货币交易、ATM PIN 以及完整的交易记录。没有框架时,银行会管理自己的账户,其他资源也可以通过服务端导出把它当作资金系统使用。此外还有两种菜单设计、13 种语言、标记点或 qb-target / ox_target、每位玩家可调的显示尺寸滑块、首次启动时自动创建的数据表,以及免费的 Agency Companion 应用,让玩家随时查看余额、转账、管理定期存款和银行卡。
客户端导出
OpenBank()为本地玩家打开银行,无论其位于何处。
OpenATM()为本地玩家打开 ATM 的 PIN 界面。玩家需要先在银行设置 PIN。
服务端导出
GetBankBalance(source)返回玩家的银行余额,适用于所有框架及独立运行。
GetCashBalance(source)返回玩家的现金。
AddBankMoney(source, amount, reason)向银行余额加款。成功时返回 true,已打开的银行界面会自动刷新。
RemoveBankMoney(source, amount, reason)从银行余额扣款。余额不足时返回 false,此时不会扣任何钱。
AddCashMoney(source, amount, reason)增加现金。成功时返回 true。
RemoveCashMoney(source, amount, reason)扣除现金。现金不足时返回 false,此时不会扣任何钱。
AddTransaction(identifier, type, amount, reason)按标识符向玩家的交易记录写入一条记录(QBCore 和 Qbox 为 citizenid,ESX 为 identifier,独立运行为 license)。
GetFramework()返回银行识别到的框架:qbcore、esx 或 standalone。
事件
agency_banking:client:OpenBank从服务端触发,为该玩家打开银行。
agency_banking:client:MoneyChanged在其他脚本修改玩家资金后从服务端触发,已打开的银行界面会刷新。
看完本页仍未解决?接下来由我们的支持团队接手。