Agency Docs

Партнёрам-разработчикам

Подключение к скриптам 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:adminCreate

Admin создаёт 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:mdtCreateInvoice

MDT создаёт штраф/счёт для гражданина.

Показать пример

Создаёт штраф/счёт 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) end
GetAd(id)

Одно объявление в том же формате, что и в ленте, или nil.

Показать пример

Находит объявление по его номеру.

local ad = exports['Agency-LifeinvaderV3']:GetAd(412) if ad then print(ad.text) end
IsAdmin(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 end
SetReputation(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)) end
AddCredit(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') end
StartFlashSale(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 end
IsWorking()

True, пока игрок добывает руду или ограняет самоцвет.

Показать пример

Не позволяет вашему скрипту прерывать анимацию добычи или огранки.

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

Уровень добычи игрока.

Показать пример

Получает уровень игрока, например, для 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 end
GetProgress(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 end
GetVehicleCondition(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))) end
OpenMenu()

Открывает меню /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)) end
GiveKit(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 end
GetKits()

Каждый настроенный набор с его предметом, названием, типом работы и длительностью.

Показать пример

Выводит список всех наборов с их предметом и названием.

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

Экспорт предмета для 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 end
GetKeys()

Все ключи игрока в виде списка { plate, kind }. Значение kind: owner, shared или temp.

Показать пример

Показывает все ключи игрока, например, для приложения в телефоне.

for _, key in ipairs(exports['Agency-Vehiclekeys']:GetKeys()) do print(key.plate, key.kind) end
ToggleLock(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 end
useLockpick()

Начинает попытку взлома замка автомобиля перед игроком или заводит автомобиль напрямую, если игрок на водительском сиденье. Предназначено для предметов 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 end
SetOwner(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) end
SetVehicleLocked(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 end
GetFramework()

Фреймворк, обнаруженный скриптом: 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:notify

Obshchiy 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:startAgencyPay

Initsiiruet 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:buyMachineResult

Rezultat 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:machineCreated

Broadcast 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:openManagementVerified

Server-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:openOwnedList

Otkryvaet 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:spawnMachineCreated

Broadcast 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:spawnMachineDeleted

Broadcast 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:openSpawnerUI

Otkryvaet 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:buyMachine

Igrok 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:requestOwnedList

Vyzyvayushchiy 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:requestMachines

Vyzyvayushchiy 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:requestManagement

Server-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:requestSpawnedMachines

Vyzyvayushchiy 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:adminSpawnMachine

Admin 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:adminDeleteSpawned

Admin 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:refreshStaffRanks

Zastavlyaet 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)) end
agency-admin:client:freezeTime

Zamorazhivaet 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:dashboardValue

Otpravlyaet 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:teleportToCoords

Teleportiruet 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:teleport

Teleportiruet 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:openToolsMenu

Server-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:closeMenu

Server-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:openClothingMenu

Server-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:requestPlayers

Zaprashivaet 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:requestPanelPermissions

Zaprashivaet 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:requestStaffRanks

Zaprashivaet 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:createRank

Sozdaet 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:requestMyPermissions

Vyzyvayushchiy 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:requestSync

Vyzyvayushchiy 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:requestDutyRank

Vyzyvayushchiy 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:requestSpawnedObjects

Vyzyvayushchiy 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:teleport

Teleportiruet 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:healSelf

Polnostyu 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:requestPlayerData

Vyzyvayushchiy 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:requestAdminData

Admin 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) end
GetAllDoors()

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')) end
GetDoorCoords(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) end
GetPlayerAccess(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) end
IsReady()

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:accessChanged

Fired 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) end
IsProgressActive()

Возвращает 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:useFood

Inventory-мост для потребления продукта питания (анимация + защищённое применение на server).

Показать пример

Запускает мост еды инвентаря для потребления сэндвича.

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

Inventory-мост для потребления напитка (анимация + защищённое применение на server).

Показать пример

Запускает мост напитков инвентаря для потребления чашки кофе.

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

Проверяет и сохраняет настройки UI прогресс-бара игрока в БД.

Показать пример

Сохраняет настройки UI прогресс бара игрока в базу данных.

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

Серверный триггер для запуска прогресс-бара на цели (или себе).

Показать пример

Триггер сервера для запуска 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:Send

To 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) end
enableSeatbelt()

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:requestTravel

Server-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:saveElevator

Upsert лифта (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:loadElevator

Sozdaet/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:startTravel

Zapuskayet 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:openConfigurator

Otkryvayet 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:loaded

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

agency-multicharacter:server:deleted

A character was deleted (source, charid).

agency:selection

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

21Agency-Spawn

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:spawned

The character landed (id, kind).

agency-spawn:server:spawned

A player spawned (source, id, kind).

qb-spawn:client:setupSpawns / openUI

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

22Agency-Housing

Система жилья на основе базы данных для 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

Вызовите с сервера после того, как другой скрипт изменил деньги игрока, и открытый банк обновится.

После этой страницы всё ещё не получается? Дальше подключается наша поддержка.

После этой страницы всё ещё не получается? Дальше подключается наша поддержка.