Партнёрам-разработчикам
Подключение к скриптам Agency
Пишете свой скрипт для FiveM и хотите связать его с нашими? Здесь перечислены все открытые экспорты и события, к каждому приложен кусок Lua, который можно просто скопировать.
Через экспорты ваш скрипт вызывает функцию в нашем: exports['script-name']:FunctionName(args), одинаково на клиенте и на сервере. События работают в обратную сторону: их вызывают через TriggerEvent или TriggerServerEvent, а слушают через RegisterNetEvent.
01Agency-Phone
Полнофункциональный мульти-фреймворк телефон с SMS, звонками, соцлентой, почтой, камерой, кошельком и оплатой AgencyPay.
Используй в любом скрипте магазина/ограбления/работы, когда нужен аккуратный платёжный флоу в телефоне вместо мгновенного списания денег. Также идеально для игровых уведомлений с принять/отклонить (например, заказы такси, dispatch-вызовы).
Экспорты на клиенте
IsPhoneOpen()Возвращает true, если UI телефона сейчас открыт.
Показать пример
Не открывает меню, если телефон уже на экране.
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()Возвращает handle сущности удерживаемого пропа телефона или 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()Возвращает true, если у игрока активен data plan оператора.
Показать пример
Предупреждает игрока, если нет активного тарифа на данные.
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 для безопасной оплаты картой.
Показать пример
Открывает телефон и запускает небольшой чек чаевых через 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)Запускает 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)Отправляет mail игроку (онлайн или офлайн).
Показать пример
Отправляет письмо-чек игроку по его основному идентификатору.
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)Публикует сообщение в feed 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)Хук ox_inventory регистрируется при обнаружении ESX+ox_inventory; открывает phone владельцу.
Показать пример
Подключается к usingItem ox_inventory для открытия телефона.
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)Проверяет на сервере, что этот игрок оплатил счёт Agency Pay с этим id за последние 60 секунд и не меньше minAmount, и списывает платёж, чтобы он засчитался только один раз. В requestId передаётся id из StartAgencyPayCheckout. Возвращает 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).
Показать пример
Быстро отправляет SMS на целевой номер из чата.
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).
Показать пример
Покупает выбранный игроком тариф после выбора в кастомном UI.
AddEventHandler('myresource:client:onPlanSelected', function(plan)
TriggerServerEvent('agency-phone:server:buyDataPlan', plan.price, plan.name)
end)agency-phone:dispatch:createСоздаёт phone dispatch из экстренного вызова/SMS.
Показать пример
Создаёт запись диспетчерской из входящего экстренного вызова.
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.
Идеально для админ-дашбордов, бизнес-менеджмент приложений, карт территорий банд или любого custom UI, который нужен игрокам в GTA, живёт в красивой оболочке планшета без лишней работы.
Экспорты на клиенте
IsPadOpen()Возвращает true, если UI планшета открыт (проверь состояние планшета перед показом UI).
Показать пример
Не открывает свой UI планшета, если он уже открыт.
RegisterCommand('opentablet', function()
if exports['agency-pad']:IsPadOpen() then
return
end
TriggerEvent('myresource:openTablet')
end)IsPadPoweredOn()Возвращает 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()Возвращает полную client-side таблицу PadData.
Показать пример
Печатает полную таблицу данных планшета на клиенте.
RegisterCommand('paddebug', function()
local data = exports['agency-pad']:GetPadData()
print(json.encode(data, { indent = true }))
end)GetPadPropEntity()Возвращает handle сущности удерживаемого пропа планшета или 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()Возвращает true, если у игрока активен data plan оператора на планшете.
Показать пример
Предупреждает игрока, если на планшете нет активного тарифа.
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()Возвращает таблицу { 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()Возвращает true, если у игрока в инвентаре есть настроенный предмет планшета.
Показать пример
Блокирует UI диспетчерской без планшета в инвентаре.
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)Регистрирует runtime 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)Удаляет ранее зарегистрированный Agency Pay terminal по id.
Показать пример
Удаляет точку оплаты планшета, когда место закрывается.
AddEventHandler('myresource:onLocationClosed', function(locationId)
exports['agency-pad']:RemoveAgencyPayPoint(locationId)
end)StartAgencyPayCheckout(data)Открывает планшет (при необходимости) и запускает Agency Pay checkout с заданным payload оплаты.
Показать пример
Открывает планшет и запускает Agency Pay для оплаты налога.
RegisterCommand('paybill', function()
exports['agency-pad']:StartAgencyPayCheckout({
amount = 1500,
receiver = 'gov_taxes',
label = 'Property tax',
memo = 'Quarterly tax'
})
end)StartCall(contactData)Запускает исходящий вызов с планшета указанному контакту ({ 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)Отправляет mail в основной почтовый ящик игрока по identifier (возвращает 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)Хук ox_inventory регистрируется при обнаружении ESX+ox_inventory; открывает планшет владельцу.
Показать пример
Подключается к 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)Хук ox_inventory для legacy id предмета phone; открывает планшет владельцу.
Показать пример
Перенаправляет старый предмет phone на открытие UI планшета.
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()Возвращает текущие цены акций и криптовалют, по идентификатору рынка.
PushPadData(source)Отправляет на планшет этого игрока свежую копию его данных. Возвращает false, если собрать её не удалось.
События
agency-pad:client:notifyПоказывает уведомление планшета (title, text, icon, color, timeout, silent).
Показать пример
Показывает неблокирующий тост планшета о новой миссии.
TriggerEvent('agency-pad:client:notify', 'Job update', 'New mission unlocked', 'briefcase', '#22cc88', 5000, false)agency-pad:client:usePadItemОткрывает планшет при использовании предмета инвентаря.
Показать пример
Перенаправляет своё событие использования предмета в открытие планшета.
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 о ежечасном событии paycheck бизнеса.
Показать пример
Реагирует на событие почасовой бизнес-зарплаты с планшета.
AddEventHandler('agency-pad:client:hourlyPaycheck', function(payload)
print(('Hourly paycheck: $%s from %s'):format(payload.amount, payload.businessName))
end)agency-pad:server:requestPadDataЗапрашивает свежую синхронизацию данных планшета для вызывающего игрока.
Показать пример
Просит сервер прислать свежие данные синхронизации планшета.
RegisterCommand('refreshpad', function()
TriggerServerEvent('agency-pad:server:requestPadData')
end)agency-pad:server:sendMessageОтправляет SMS-сообщение (newMsg, targetNumber).
Показать пример
Отправляет SMS с планшета своей командой и номером.
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 оператора для игрока.
Показать пример
Покупает выбранный тариф для планшета из кастомного UI.
AddEventHandler('myresource:client:padPlanSelected', function(plan)
TriggerServerEvent('agency-pad:server:buyDataPlan', plan.price, plan.name)
end)agency-pad:dispatch:createСоздаёт tablet dispatch из экстренного вызова/SMS.
Показать пример
Создаёт запись диспетчерской планшета из экстренного вызова.
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 для гражданина из своего net event.
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 / standalone, десять языков.
Экспорты на клиенте
OpenWatch(mitte)Открывает часы. Передайте true, чтобы открыть их по центру экрана, а не в настроенном углу.
CloseWatch()Закрывает часы и снимает фокус NUI.
ToggleWatch()Закрывает часы, если они открыты, иначе открывает.
IsWatchOpen()Возвращает true, пока интерфейс часов на экране.
IsWatchLinked()Возвращает false, если игрок отключил связь с Agency Phone в центре управления.
RunWatchAction()Запускает то, что назначено на оранжевую кнопку действия (Config.ActionButton).
GetWatchSettings()Возвращает полную таблицу настроек, из которой строится интерфейс часов (тема, циферблат, размер, приложения, язык).
SetWatchSetting(key, value)Задаёт одну настройку, сохраняет её для персонажа и сразу применяет.
SetWatchSettings(table)Задаёт несколько настроек сразу и перестраивает интерфейс один раз, а не для каждого значения.
RequestWatchPairing()Запрашивает у сервера код привязки для приложения Companion. Ответ приходит событием, а не возвращаемым значением.
ShowUpdate()Открывает экран обновления ПО AgencyOS.
HandlesDeath()Возвращает true, если часы показывают экстренный экран при смерти. Agency Phone проверяет это, чтобы оба устройства никогда не показывали его одновременно.
GetFitness()Возвращает текущие показатели активности за день: шаги, расстояние, активные минуты и калории.
SetWatchAppInstalled(id, on)Устанавливает или удаляет одно приложение для этого игрока. То же, что делает App Store, чтобы сервер мог выдать приложение как награду.
FindWatch()Заставляет часы звонить и светиться, как функция поиска в приложении Companion.
StopFindWatch()Останавливает звонок раньше, чем он закончится сам.
IsWatchRinging()Возвращает true, пока часы звонят.
Экспорты на сервере
IsPremium(src)Возвращает true, если часы этого игрока работают в версии Pro. Решение принимается по рукопожатию с подлинным Agency Phone, а не на клиенте.
04Agency-Zero
Беспилотный электрический четырёхместный автомобиль для FiveM, бесплатно. Project 0 представляет собой собственную машину, созданную с нуля в Blender с Sollumz: без дверных ручек, с дверями, которые открываются волной, настоящим рулём и педалями для ручного управления. Игроки вызывают её с Agency Phone, Agency Pad или из приложения Agency Companion на своём настоящем телефоне, и она приезжает и паркуется у бордюра рядом, а не уезжает искать место. Внутри AgencyOS27 работает на планшете в приборной панели и в меню Z: карта, по которой можно нажать, Angy, встроенный ассистент, работающий по фиксированным правилам и без ИИ, с которым говорят простыми словами, шесть ассистентов водителя с одним главным выключателем, чип-тюнинг по ступеням, звуковые чипы и статистика по машине и по владельцу. У каждой машины свой номер, привязанный к владельцу в базе данных, поэтому владение, тюнинг и все настройки переживают перезапуск. QBCore, Qbox и ESX определяются автоматически, работает и в standalone, а все тексты поставляются на 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)Возвращает true, если Zero этого игрока работает в версии Pro. Решение принимается по HMAC-рукопожатию с подлинным Agency Phone, а не на клиенте.
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
Рекламное агентство города: объявления игроков на всех экранах с категориями, продвижением, планированием, черновиками, проверкой, работой для сотрудников, ИИ-помощником по написанию текстов и приложением для 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()Открывает приложение на ленте объявлений.
Показать пример
Открывает live feed, например, у газетного киоска.
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)Возвращает true, если игрок является администратором Lifeinvader по ACE, группе или идентификатору.
Показать пример
Использует права администратора 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Локальное событие на сервере при каждом запуске объявления, содержит объявление в формате ленты. Подходит для логов или webhook в Discord.
Показать пример
Записывает в журнал каждое объявление, опубликованное на сервере.
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.
Показать пример
Устанавливает уровень, например, через вашу собственную админ-панель.
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, если у игрока есть ключ от этого номера: owner, shared или temporary. Служебные автомобили открываются по модели и здесь не учитываются.
Показать пример
Проверяет наличие ключа, прежде чем ваш скрипт позволит игроку воспользоваться автомобилем.
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)Выдаёт ключ. Режим 'temp' (по умолчанию) выдаёт временный ключ, при необходимости на указанное количество часов, а 'perm' , постоянный ключ, который сохраняется. Можно указать source или identifier.
Показать пример
Выдаёт временный ключ, например, когда автомобиль арендуют или выдают в рамках задания.
-- a rental that lasts two hours
exports['Agency-Vehiclekeys']:GiveKeys(source, plate, 'temp', 2)RemoveKeys(source, plate)Забирает выданный ключ shared или temporary. Возвращает 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)Назначает игрока владельцем автомобиля с указанным номером для гаражей и магазинов на standalone-серверах. Предыдущий владелец теряет ключ.
Показать пример
Назначает покупателя владельцем автомобиля на серверах без фреймворка.
-- your standalone vehicle shop, after the purchase
exports['Agency-Vehiclekeys']:SetOwner(source, plate)RemoveOwner(plate)Удаляет владельца номера, сохранённого этим скриптом.
Показать пример
Удаляет сохранённые данные о владельце, когда автомобиль продают или утилизируют.
exports['Agency-Vehiclekeys']:RemoveOwner(plate)GetOwner(plate)Идентификатор владельца и источник данных: 'framework' для принадлежащих игрокам автомобилей в QBCore, Qbox или ESX, '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Вызывается на клиенте, когда двигатель запускают или глушат ключом, чтобы HUD, например Agency-Hud, мог отслеживать состояние двигателя.
Показать пример
Позволяет HUD реагировать на запуск и остановку двигателя ключом.
AddEventHandler('simple_carkeys:client:toggleEngine', function()
-- update the engine icon of your HUD
end)10Agency-Vending
Торговые автоматы с владением игроками, оплатой наличными или картой AgencyPay.
Сочетайте с AgencyPay-экспортом Agency-Phone для оплаты картой. Используйте в работах, где игроки владеют точками vending (заправки, офисы, квартиры) для пассивного дохода.
События
agency-vending:notifyObshchiy server-upravlyaemyy dispetcher uvedomleniy dlya vending-resursa.
Показать пример
Otpravlyaet igroku obshcheye vending uvedomlenie posle pokupki.
-- Plug a vending receipt into a custom logger via notify event
TriggerClientEvent('agency-vending:notify', src, 'success', 'Receipt #4821 saved to wallet')agency-vending:startAgencyPayInitsiiruet oplatu cherez AgencyPay s integratsiyey agency-phone i metadannymi prodavtsa.
Показать пример
Zapuskaet Agency Pay platezh cherez telefon s dannymi prodavtsa kioska.
-- 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:buyMachineResultRezultat pokupki avtomata, peresylaetsya v NUI dlya obratnoy svyazi.
Показать пример
Peredaet rezultat pokupki avtomata v polzovatelskiy shop NUI dlya otzyva.
-- Forward buy-machine outcome to a custom shop UI
TriggerClientEvent('agency-vending:buyMachineResult', src, { success = true, machineId = 102 })agency-vending:machineCreatedBroadcast o sozdanii novogo igrokom-vladeemogo avtomata; obnovlyaet lokalnyy kesh i uvedomlyaet vladeltsa.
Показать пример
Translyiruet vsem klientam svezho sozdannyy igrokom torgovyy avtomat.
-- Cache new owner-machine instantly when business script registers it
TriggerClientEvent('agency-vending:machineCreated', -1, { id = 142, owner = identifier, type = 'sprunk' })agency-vending:openManagementVerifiedServer-proverennoye otkrytiye menyu vladeltsa s predmetami, zarabotkom i metkoy.
Показать пример
Otkryvaet proverennyy UI upravleniya s tovarami, dokhodom i etiketkoy posle avtorizatsii.
-- 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:openOwnedListOtkryvaet NUI obzora vladeltsa so vsemi avtomatami igroka i nazvaniyami ulits.
Показать пример
Otkryvaet NUI obzora vladelitsa so spiskom vsekh avtomatov igroka.
-- Hotkey opens the owner overview NUI listing all owned machines
TriggerClientEvent('agency-vending:openOwnedList', src)agency-vending:spawnMachineCreatedBroadcast admin-spaunera o sozdanii novoy zaspaunenoy entity avtomata.
Показать пример
Uvedomlyaet vsekh klientov, chto admin spauni novyy torgovyy avtomat.
-- 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 admin-spaunera ob udalenii zaspaunenoy entity avtomata.
Показать пример
Soobshchayet vsem klientam, chto admin udalil ranee spaunennyy avtomat.
-- Mapping tool removes a deleted spawned machine from cache
TriggerClientEvent('agency-vending:spawnMachineDeleted', -1, 7)agency-vending:openSpawnerUIOtkryvaet NUI admin-spaunera posle uspeshnoy proverki prav na servere.
Показать пример
Otkryvaet NUI admin spaunera dlya razmeshcheniya mirovykh avtomatov.
-- Custom command opens the admin spawner UI after permission passes
TriggerClientEvent('agency-vending:openSpawnerUI', src)agency-vending:buyMachineIgrok pokupaet vending-avtomat zadannogo tipa po ukazannym coords/heading.
Показать пример
Igrok pokupayet sprunk avtomat u NPC na svoikh tekushchikh koordinatakh.
-- Custom NPC sells vending machines via dialog
local coords = GetEntityCoords(PlayerPedId())
local heading = GetEntityHeading(PlayerPedId())
TriggerServerEvent('agency-vending:buyMachine', 'sprunk', coords, heading)agency-vending:requestOwnedListVyzyvayushchiy zaprashivaet spisok svoikh avtomatov dlya UI obzora vladeltsa.
Показать пример
Zaprashivaet u servera spisok prinadlezhashchikh igroku avtomatov.
-- Refresh owner overview after a balance/restock action elsewhere
TriggerServerEvent('agency-vending:requestOwnedList')agency-vending:requestMachinesVyzyvayushchiy zaprashivaet u servera polnuyu sinkhronizatsiyu vsekh igrokom-vladeemikh avtomatov.
Показать пример
Zaprashivaet u servera polnuyu sinkhronizatsiyu vsekh avtomatov igrokov.
-- Scan for nearby machines after teleport finished
TriggerServerEvent('agency-vending:requestMachines')agency-vending:requestManagementServer-proverennoye otkrytiye UI upravleniya dlya vladeemogo avtomata.
Показать пример
Zaprashivaet proverennyy serverom UI upravleniya dlya vybrannogo avtomata.
-- Owner UI requests verified management menu for a clicked machine
TriggerServerEvent('agency-vending:requestManagement', machineId)agency-vending:requestSpawnedMachinesVyzyvayushchiy zaprashivaet spisok admin-spaunenykh avtomatov dlya UI spaunera.
Показать пример
Zaprashivaet spisok vsekh admin-spaunennykh avtomatov dlya spaunera UI.
-- Admin spawner UI fetches all currently spawned machines
TriggerServerEvent('agency-vending:requestSpawnedMachines')agency-vending:adminSpawnMachineAdmin razmeshchaet novyy prop vending-avtomata na servere posle proverki prav.
Показать пример
Admin sozdaet novyy prop snack avtomata posle proverki razresheniy.
-- Admin places a snack machine via custom slash command
TriggerServerEvent('agency-vending:adminSpawnMachine', 'snack', vector3(120.5, -1280.7, 29.3), 90.0)agency-vending:adminDeleteSpawnedAdmin udalyaet na servere ranee zaspaunenyy prop vending-avtomata.
Показать пример
Admin udalyaet na storone servera ranee spaunennyy prop avtomata.
-- Admin removes a misplaced machine via map editor button
TriggerServerEvent('agency-vending:adminDeleteSpawned', spawnedId)11Agency-Admin
Полнофункциональная админ-панель со стеклянным UI, чатом AgencyAI и 60+ инструментами.
События идеальны как "примитивы" для анти-чита, модерационных ботов или автоматических инструментов, вызывайте их из серверного скрипта для freeze/kick/notify без написания своего UI.
События
agency-admin:client:refreshStaffRanksZastavlyaet kliyenta povtorno zagruzit dannye rangov personala.
Показать пример
Obnovlyaet kesh rangov shtaba dlya vseh administratorov posle povysheniya.
-- 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:freezeTimeZamorazhivaet ili razmorazhivaet vremya mira na kliyente v zadannyy chas/minutu.
Показать пример
Anticheat zamorazhivaet mirovoe vremya v polden vo vremya proverki igroka.
-- 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:dashboardValueOtpravlyaet odno znachenie kartochki dashborda (zhivoy schetchik) v UI paneli.
Показать пример
Otpravlyaet aktualnoe chislo igrokov onlayn na kartu admin paneli.
-- Stream live online player count to admin dashboard cards
local count = #GetPlayers()
TriggerClientEvent('agency-admin:client:dashboardValue', adminSrc, 'players_online', count)agency-admin:client:teleportToCoordsTeleportiruet vyzyvayushchego na zadannye mirovye koordinaty.
Показать пример
Teleportiruet igroka na sokhranennye koordinaty posle sobytiya vozrozhdeniya.
-- 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Показывает баннер объявления на весь сервер.
Показать пример
Translyiruet banner ob'yavleniya po vsemu serveru ot imenovannogo otpravitelya.
-- 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Отправляет уведомление конкретному админу.
Показать пример
Otpravlyaet stilizovannoe uvedomlenie igroku, kogda ego zayavka odobrena.
-- Whitelist bot informs a player they passed the application
TriggerClientEvent('agency-admin:client:notify', src, 'Whitelist', 'Application approved!', 'success', 8000)agency-admin:client:freezeЗамораживает целевого игрока на месте.
Показать пример
Zamorazhivaet podozritelnogo igroka, chtoby personal mog provesti rassledovanie.
-- Anti-cheat freezes a suspect player while staff investigates
TriggerClientEvent('agency-admin:client:freeze', suspectSrc, true)agency-admin:client:healВосстанавливает HP/броню цели.
Показать пример
Polnostyu istselyaet patsiyenta posle zaversheniya RP meditsinskoy obrabotki.
-- Medic job script fully heals the player after RP treatment ends
TriggerClientEvent('agency-admin:client:heal', patientSrc)agency-admin:client:reviveВоскрешает целевого игрока.
Показать пример
Vozrozhdaet pavshego igroka posle uspeshnogo zaversheniya EMS mini-igry.
-- EMS revive minigame succeeds, server marks player alive again
TriggerClientEvent('agency-admin:client:revive', downedSrc)agency-admin:client:teleportTeleportiruet lokalnogo igroka v ukazannyy vektor koordinat.
Показать пример
Teleportiruet lokalnogo igroka na zadannye koordinaty.
-- 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-разрешение).
Показать пример
Otkryvaet osnovnoy interfeys admin paneli dlya sotrudnika pri zastuplenii.
-- Auto-open admin panel for staff right after they switch on duty
TriggerClientEvent('agency-admin:client:openMenu', src)agency-admin:client:openToolsMenuServer-trigger dlya otkrytiya podmenyu admin instrumentov.
Показать пример
Otkryvaet podmenu admin instrumentov pri nazhatii goryachey klavishi.
-- Quick-action keybind opens the admin tools sub-menu
TriggerClientEvent('agency-admin:client:openToolsMenu', src)agency-admin:client:closeMenuServer-trigger dlya zakrytiya UI admin paneli.
Показать пример
Prinuditelno zakryvaet admin panel UI, kogda admina rassleduyut.
-- Force-close the panel when admin gets reported themselves
TriggerClientEvent('agency-admin:client:closeMenu', adminSrc)agency-admin:client:openClothingMenuServer-trigger dlya otkrytiya vnutriigrovogo menyu odezhdy dlya igroka.
Показать пример
Otkryvaet menyu odezhdy posle pokupki naryada u portnogo.
-- Tailor NPC opens clothing menu after a uniform purchase
TriggerClientEvent('agency-admin:client:openClothingMenu', src)agency-admin:server:requestPlayersZaprashivaet tekushchiy spisok onlayn igrokov dlya admin paneli.
Показать пример
Zaprashivaet u servera aktualnyy spisok igrokov onlayn dlya paneli.
-- Custom dashboard widget refreshes its players list
TriggerServerEvent('agency-admin:server:requestPlayers')agency-admin:server:requestPanelPermissionsZaprashivaet tablitsu razresheniy paneli dlya redaktora rangov.
Показать пример
Zaprashivaet u servera tablitsu razresheniy paneli dlya redaktora rangov.
-- Permission editor needs the latest panel permission map
TriggerServerEvent('agency-admin:server:requestPanelPermissions')agency-admin:server:requestStaffRanksZaprashivaet nabor dannykh rangov personala dlya paneli.
Показать пример
Zaprashivaet polnyy nabor dannykh rangov shtaba dlya CRM vidzheta.
-- Sync staff ranks dataset into a custom CRM widget
TriggerServerEvent('agency-admin:server:requestStaffRanks')agency-admin:server:createRankSozdaet novyy rang personala s metadannymi i razresheniyami.
Показать пример
Sozdaet novyy rang shtaba iz sinkhronizatsii vneshnego HR portala.
-- 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:requestMyPermissionsVyzyvayushchiy zaprashivaet svoy razreshennyy nabor pravil paneli.
Показать пример
Zaprashivaet svoy razreshennyy nabor pravil paneli pri otkrytii UI.
-- Fetch caller's resolved permission set before showing dev tools
TriggerServerEvent('agency-admin:server:requestMyPermissions')agency-admin:server:requestSyncVyzyvayushchiy prosit server otpravit standartnuyu sync nagruzku (sluzhba/prava/etc.).
Показать пример
Zastavlyaet server otpravit standartnyy duty/perms sync paket vyzyvayushchemu.
-- Force a fresh sync after the player reconnects
TriggerServerEvent('agency-admin:server:requestSync')agency-admin:server:requestDutyRankVyzyvayushchiy zaprashivaet svoi tekushchiye dannye admin-duty ranga.
Показать пример
Zaprashivaet tekushchiy admin-duty rang vyzyvayushchego dlya HUD overleya.
-- Display admin's duty rank on a custom HUD overlay
TriggerServerEvent('agency-admin:server:requestDutyRank')agency-admin:server:requestSpawnedObjectsVyzyvayushchiy zaprashivaet spisok mirovykh obyektov, sozdannykh adminom.
Показать пример
Zaprashivaet spisok ob'yektov mira ot adminov dlya overlej minikarty.
-- Map editor needs to draw all admin-spawned objects on a minimap
TriggerServerEvent('agency-admin:server:requestSpawnedObjects')12Agency-Anticheat
Античит для FiveM, который изучает ваш сервер. Он проверяет каждого игрока на стороне сервера, где чит не спрячется: годмод, суперпрыжок, множители урона, телепорты и запрещённое оружие считываются из синхронизированного состояния игры. Перекрёстные проверки ловят то, что пропускают отдельные значения: смертельный удар, который жертва пережила, убийство из пистолета с 500 метров, статистику прицеливания и несколько слабых сигналов, которые вместе складываются в закономерность. Защита мира отменяет созданные танки, взрывы, огонь и спам частицами, прежде чем их кто-либо увидит. Баны охватывают идентификаторы и аппаратные токены, поэтому новый аккаунт на том же ПК остаётся за дверью, а локдаун сам закрывает сервер, когда атакуют сразу несколько читеров. Свежая установка работает 48 часов в режиме Learning и никого не наказывает. Собственная внутриигровая панель (/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)Запускает или завершает lockdown.
IsExempt(source: number)Возвращает, исключён ли игрок из проверок.
IsKnownPlayer(source: number)Возвращает, играл ли игрок здесь достаточно долго без срабатываний, чтобы считаться известным.
GetStatus()Возвращает всё, что показывает панель: режим, слои, знания, сегодняшние цифры, нагрузку сервера и каждое обнаружение с его правилом.
GetDetections(limit?: number)Возвращает последние обнаружения, сначала самые новые.
GetBans()Возвращает каждый активный бан с его доказательствами.
GetPlayers()Возвращает игроков онлайн с оценкой риска и открытыми страйками, сначала с наибольшим риском.
События
Agency-Anticheat:detectionСрабатывает при каждом попадании с игроком, обнаружением, деталями, действием и страйками.
Agency-Anticheat:bannedСрабатывает после каждого бана с полной записью о бане.
Agency-Anticheat:unbannedСрабатывает после снятия бана.
Agency-Anticheat:lockdownСрабатывает, когда lockdown начинается или заканчивается.
Agency-Anticheat:learnedСрабатывает, когда античит выучил новую точку телепортации вашего сервера.
13Agency-Reports V2
Современная система репортов с живым чатом и ответами с поддержкой ИИ.
Используйте как основу "тикет-системы" для всего сервера. Ваши скрипты могут автоматически открывать репорты при сбоях (застрявшие машины, дублированные предметы, неудачные SQL-сохранения) для проверки админами.
События
agency-reports:client:notifyОтправляет уведомление "новый репорт" конкретному админу.
Показать пример
Servernoe uvedomlenie s uchetom predpochteniy UI igroka.
-- 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 репорта со стороны игрока.
Показать пример
Otkryvaet UI otchetov s kategoriyami, otkrytymi otchetami i nastroykami AI/Discord.
-- Open the player report UI on a custom keybind
local categories = { 'Bug', 'Player report', 'Stuck' }
TriggerEvent('agency-reports:client:openPlayerUI', categories, {}, {}, {})agency-reports:client:openAdminUIОткрывает список репортов со стороны админа.
Показать пример
Otkryvaet admin-panel otchetov s polnym naborom dannykh.
-- Force-open the admin reports dashboard from a staff command
TriggerEvent('agency-reports:client:openAdminUI', { reports = {}, total = 0 })agency-reports:client:teleportTeleportiruet vyzyvayushchego admina na zadannye koordinaty (dlya goto deystviy).
Показать пример
Teleportiruet admina na ukazannye koordinaty dlya deystviy 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:healSelfPolnostyu istselyaet pedа vyzyvayushchego admina.
Показать пример
Polnost'yu izlechivaet peda admina posle obrabotki otcheta.
-- Heal admin after a hostile scene to keep them in service
TriggerEvent('agency-reports:client:healSelf')agency-reports:server:submitReportОтправляет новый репорт извне UI.
Показать пример
Igrok otpravlyaet novyy otchet s nazvaniyem, kategoriey i opisaniyem v BD.
-- 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:requestPlayerDataVyzyvayushchiy zaprashivaet sobstvennyy report payload; oprtsionalno otkryvaet UI igroka pri otvete.
Показать пример
Vyzyvayushchiy zaprashivaet svoi dannye otchetov, opciya: otkryt UI igroka.
-- Pull fresh data and (optionally) auto-open the player UI
TriggerServerEvent('agency-reports:server:requestPlayerData', true)agency-reports:server:requestAdminDataAdmin zaprashivaet polnyy nabor dannykh reports i otkryvaet admin dashboard pri razreshenii.
Показать пример
Admin zaprashivaet polnyy nabor otchetov i otkryvaet dashboard, esli razresheno.
-- Admin staff opens the dashboard after going on duty
TriggerServerEvent('agency-reports:server:requestAdminData')agency-reports:server:sendChatMessageОтправляет сообщение чата в открытый репорт.
Показать пример
Otpravlyaet soobschenie v chat konkretnoy temy otcheta dlya admina ili igroka.
-- 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.
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 с приборной панелью, статус-барами, спидометром и интеграцией ремня.
Если у вас своя экономика или система потребностей, управляйте 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()Возвращает строку фреймворка ("qb", "esx", "standalone"), автоматически определённого HUD.
Показать пример
Считывает ключ обнаруженного фреймворка для ветвления пользовательской логики 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 (требуется разрешение).
Показать пример
Открывает NUI меню админа HUD у принимающего клиента.
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 процентов.
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 игрока (позиция, цвет, масштаб, стиль) из БД в клиент.
Показать пример
Загружает сохранённые настройки UI прогресс бара при спавне.
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Progressbar:LoadSettings')
end)agency-progressbar:client:startЗапускает прогресс-бар на принимающем клиенте с указанными данными.
Показать пример
Запускает отменяемый 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:useFoodInventory-мост для потребления продукта питания (анимация + защищённое применение на server).
Показать пример
Запускает мост еды инвентаря для потребления сэндвича.
TriggerEvent('agency:consumables:useFood', 'sandwich')agency:consumables:useDrinkInventory-мост для потребления напитка (анимация + защищённое применение на 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Серверный триггер для запуска прогресс-бара на цели (или себе).
Показать пример
Триггер сервера для запуска 6-секундного прогресс бара загрузки ящика на целевом игроке.
RegisterCommand('movecrate', function(source)
TriggerEvent('agency-progressbar:server:start', source, {
label = 'Loading crate onto truck',
duration = 6000
})
end, false)agency-progressbar:server:stopСерверный триггер для остановки прогресс-бара на цели (или себе).
Показать пример
Триггер сервера для остановки прогресс бара цели со статусом отмены.
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Проверяет инвентарь, удаляет один предмет и применяет прирост голода/жажды.
Показать пример
Просит сервер удалить продукт и применить прирост уровня голода.
RegisterNetEvent('food:onEatStart', function(itemName)
TriggerServerEvent('agency:consumables:apply', itemName)
end)17Agency-Notify V2
Sistema uvedomleniy so stilyami V1/V2, umnym prioritetom AgencyAI, zashchitoy ot spama i sokhraneniem v baze dannykh.
Zamenite lyuboy drugoy resurs uvedomleniy na vashem servere (qb-notify, esx_notify, mythic_notify, okok-notify i t.d.) edinym soglasovannym vidom. Sistema prioritetov AgencyAI avtomaticheski ogranichivayet spam-uvedomleniya.
Экспорты на клиенте
Notify(data: { title, text, type, duration, ... })Pokazyvaet uvedomlenie. Prinimayet { 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:SendTo zhe samoe, chto i export, pozvolyaet ispolzovat staryy shablon na osnove Trigger.
Показать пример
Устаревшее клиентское событие v1, отображающее ту же полезную нагрузку, что и экспорт.
TriggerEvent('Agency:Notify:Send', {
title = 'Old Notify',
text = 'Legacy v1 entry point still works',
type = 'info'
})Agency:Notify:LoadSettingsПрименяет сохранённые на server настройки UI игрока (позиция, цвет, масштаб, стиль).
Показать пример
Загружает сохранённые UI-настройки notify для игрока при спавне.
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
Remen bezopasnosti s fizikoy vybrasyvaniya, 3D-zvukami, podderzhkoy neskolkikh passazhirov i integratsiey s HUD.
Podklyuchite sostoyanie k svoyemu HUD ili prinuditelno vklyuchite v nachale politseyskoy pogoni / pobega s ogrableniya. Eksporty force-enable/disable otlichno podkhodyat dlya RP-momentov.
Экспорты на клиенте
isSeatbeltOn()Vozvrashchayet true, yesli u igroka v dannyy moment pristegnut remen.
Показать пример
Отключает управление выходом, пока ремень пристёгнут.
if exports['Agency-Seatbelt']:isSeatbeltOn() then
DisableControlAction(0, 75, true)
endenableSeatbelt()Prinuditelno vklyuchayet remen bezopasnosti (napr., pri politseyskom areste).
Показать пример
Пристёгивает ремень локального игрока с HUD и звуковой обратной связью.
RegisterNetEvent('vehicle:autoBuckle', function()
if IsPedInAnyVehicle(PlayerPedId(), false) then
exports['Agency-Seatbelt']:enableSeatbelt()
end
end)disableSeatbelt()Prinuditelno otklyuchayet remen (kat-stseny, RP-stsenarii).
Показать пример
Отстёгивает ремень локального игрока при выходе из автомобиля.
RegisterNetEvent('vehicle:onExit', function()
exports['Agency-Seatbelt']:disableSeatbelt()
end)toggleSeatbelt()Pereklyuchayet remen (eto delayet klavisha po umolchaniyu).
Показать пример
Переключает состояние ремня локального игрока при нажатии клавиши.
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)Сообщает, пристёгивает ли эта машина пассажиров сама, по списку моделей или state bag agAuto.
openSettings()Открывает карточку настроек.
closeSettings()Закрывает карточку настроек.
isSettingsOpen()Сообщает, открыта ли карточка настроек.
Экспорты на сервере
isSeatbeltOn(source: number)Возвращает на сервере состояние ремня игрока, считанное из реплицируемого state bag.
getBuckledPlayers()Возвращает серверные id всех игроков, которые сейчас пристёгнуты.
setSeatbelt(source: number, on: boolean)Пристёгивает или отстёгивает ремень игрока с сервера.
События
Agency-HUD:seatbeltStateChangedСрабатывает при каждом изменении с новым состоянием. Его слушает Agency-HUD, и любой другой ресурс тоже может.
19Agency-Elevator
Realistichnaya sistema liftov s Liquid Glass UI i konfiguratorom.
Idealno podkhodit dlya skriptov kvartir/zhilya, politseyskogo shtaba, bolnitsy ili lyubogo mnogoetazhnogo intererla. Ispolzuyte konfigurator dlya vizualnogo razmeshcheniya liftov bez izmeneniya config-faylov.
События
Agency-Elevator:server:requestTravelServer-validirovannyy zapros na peremeshchenie mezhdu etazhami.
Показать пример
Просит сервер проверить доступ и отправиться на 3 этаж лифта.
TriggerServerEvent('Agency-Elevator:server:requestTravel', 'lspd-tower-1', 3)Agency-Elevator:server:travelCompleteПодтверждает прибытие клиента и отправляет уведомление 'прибыл на этаж'.
Показать пример
Сообщает серверу о прибытии игрока на 3 этаж для отправки уведомления.
TriggerServerEvent('Agency-Elevator:server:travelComplete', 'lspd-tower-1', 3)Agency-Elevator:server:requestElevatorsСинхронизирует загруженный список лифтов из базы данных с запрашивающим клиентом.
Показать пример
Запрашивает с сервера полный список лифтов при инициализации клиента.
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-Elevator:server:requestElevators')
end
end)Agency-Elevator:server:saveElevatorUpsert лифта (id/label/floors) в 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:loadElevatorSozdaet/zagruzhaet sokhrannenyy lift iz bazy dannykh.
Показать пример
Загружает данные одного лифта в NUI конфигуратора для редактирования.
TriggerServerEvent('Agency-Elevator:server:loadElevator', 'lspd-tower-1')Agency-Elevator:server:saveSettingsСохраняет настройки UI (позиция/масштаб/акцентный цвет) в MySQL и пересинхронизирует всех клиентов.
Показать пример
Сохраняет положение UI, акцентный цвет и масштаб и пересинхронизирует всех клиентов.
TriggerServerEvent('Agency-Elevator:server:saveSettings', {
position = 'top-right',
accent = '#22c55e',
scale = 1.0
})Agency-Elevator:client:startTravelZapuskayet kat-stsenu poyezdki na lifte dlya igroka.
Показать пример
Воспроизводит fade и анимацию, затем телепортирует пед на 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:openConfiguratorOtkryvayet vnutriigrovoy konfigurator liftov (tolko dlya admina).
Показать пример
Открывает 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. Каждый персонаж стоит в сцене, соответствующей его работе: полиция у патрульного автомобиля, медики у скорой помощи, механики в мастерской, в сохраненном наряде, с собственным портретом, работой, бандой, наличными, банком, номером телефона, временем в игре и последним местоположением на аккуратной карточке. Для новых персонажей действуют правила имени и возраста, доступен поиск по списку национальностей и рост, после чего clothing script сервера открывается автоматически. Слоты можно продавать через Tebex: покупатели активируют их с помощью transaction id. Игроки переключают персонажей через /logout. Framework, clothing script, инвентарь, spawn selector и loading screen определяются автоматически; существующие персонажи, время в игре и купленные слоты из старого multicharacter переносятся. QBCore, Qbox, ESX или полностью standalone с собственным хранилищем персонажей, 25 языков, цвет подстраивается под логотип сервера.
Экспорты на клиенте
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
Spawn selector с живой камерой для FiveM. Пока игрок выбирает локацию, камера пролетает над Los Santos к каждой точке; выбор переносит игрока с неба прямо к персонажу. Доступны последнее местоположение, публичные спавны из списка с комментариями, спавны для работ и банд, видимые только соответствующим персонажам, каждый дом Agency Housing, которым владеет персонаж или к которому у него есть ключи, qb-apartments и фиксированная точка прибытия для новых персонажей. Игроки могут включить auto spawn на последнем месте выхода. Скрипт обрабатывает события qb-spawn и apartment, поэтому большинство multicharacter скриптов открывают его без изменений, и он слаженно работает вместе с Agency Multicharacter. QBCore, Qbox, ESX или standalone, 25 языков, цвет подстраивается под логотип сервера.
Экспорты на клиенте
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Срабатывает с параметрами (houseId, houseName), когда используется гараж дома и Config.Garage.script равен 'event', чтобы ваш собственный скрипт гаража мог его открыть.
23Agency-Banking
Полноценный банк для FiveM, который работает на QBCore, Qbox, ESX или полностью в режиме standalone. У игроков есть кошелёк с банковским счётом и наличными, банковские карты в четырёх оформлениях, переводы по ID или игрокам рядом, срочные вклады с процентами, которые задаёт только сервер, торговля акциями и криптовалютой, PIN банкомата и полная история операций. Без фреймворка банк ведёт собственные счета, а другие ресурсы могут использовать его как денежную систему через серверные экспорты. Кроме того: два дизайна меню, 13 языков, маркеры или qb-target / ox_target, ползунок размера окна для каждого игрока, таблицы, которые создаются сами при первом запуске, и бесплатное приложение Agency Companion для баланса, переводов, вкладов и карт в дороге.
Экспорты на клиенте
OpenBank()Открывает банк локальному игроку, где бы он ни находился.
OpenATM()Открывает локальному игроку экран PIN банкомата. Сначала игрок должен задать PIN в отделении банка.
Экспорты на сервере
GetBankBalance(source)Возвращает баланс банковского счёта игрока на любом фреймворке и в standalone.
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)Добавляет запись в историю операций игрока по идентификатору (citizenid в QBCore и Qbox, identifier в ESX, лицензия в standalone).
GetFramework()Возвращает фреймворк, который определил банк: qbcore, esx или standalone.
События
agency_banking:client:OpenBankВызовите с сервера, чтобы открыть банк этому игроку.
agency_banking:client:MoneyChangedВызовите с сервера после того, как другой скрипт изменил деньги игрока, и открытый банк обновится.
После этой страницы всё ещё не получается? Дальше подключается наша поддержка.