FiveM полиция работа setup: ранги, duty, armory и полиция количество
Как установить полиция работу на FiveM сервере: работа и ранги, duty toggle, armory с магазином и stash, наручники и конвоирование, проверки полиция количества, MDT и dispatch.
Симптом: вы добавили полиция работу, но никто не может идти на duty, armory открыта всем, или грабежи говорят "недостаточно полиции" пока три офицера онлайн.
Работающая полиция работа это горсть маленьких кусочков которые должны согласиться на одно: имя работы и кто находится на duty. Эта статья проходит через каждый кусочек и где это обычно ломается.
Работа и её ранги
Работа это строка данных: имя, ярлык и список рангов (cadet, officer, sergeant, chief). Номер ранга это что вы проверяете позже, поэтому решите порядок сначала и держите его. Как создать работу в каждом фреймворке охватывается в добавление работы на ESX и добавление работы на QBCore. На QBox работа живёт в qbx_core разделённых данных вместо файла qb-core.
Два правила которые спасают боль:
- Используйте один внутренний вы везде, например
police. Каждый скрипт который говорит "только полиция" сравнивает против этой строки. - Дайте рангу босса флаг который ваш фреймворк использует для боссов, так что общество и управление меню работают.
Duty toggle
Быть полицейским офицером и быть на duty не одно и то же. Грабежи, dispatch и выплаты должны считать только офицеров на duty.
- QBCore и QBox держат поле
ondutyна работе, и toggle меняет его. Работа может быть установлена чтобы запустить на duty или off duty по умолчанию. - ESX не имеет поле duty в базовой работе. Многие setup используют вторую off-duty работу, или флаг который ваш полиция ресурс держит, поэтому проверьте как ваш делает это перед тем как вы напишете любой подсчёт.
Что бы фреймворк ни делал, toggle должен запускаться на сервере, и сервер решает значение. Событие клиента которое говорит "я на duty" без проверки это exploit.
Armory: магазин или stash
Не раздавайте оружие из события клиента. Используйте собственные инструменты вашего инвентаря. С ox_inventory вы можете ограничить магазин или stash к работе и минимальному рангу, что это самый чистый armory:
-- shop entry (in the ox_inventory shops data)
PoliceArmory = {
name = 'Police Armory',
groups = { police = 0 }, -- job name and minimum grade
inventory = {
{ name = 'radio', price = 0 },
{ name = 'handcuffs', price = 0 },
},
locations = { vec3(452.6, -980.0, 30.7) },
}Stash работает так же для доказательственных шкафчиков и разделённого хранилища. Смотрите ox_inventory магазины и ox_inventory stashes. Держите имена groups и проверку ранга так же как имя вашей работы, или armory остаётся заблокирован для всех.
Наручники и конвоирование
Наручники это набор маленьких кусочков, не одна функция:
- Офицер воспроизводит анимацию и сервер проверяет цель близко и офицер имеет работу.
- Цель получает состояние наручников, анимацию наручников и отключенные управления (нет стрельбы, нет бега, нет входа в машины сами по себе).
- Конвоирование присоединяет цель к офицеру, или следует за ними, до освобождения.
Держите флаг наручников как state bag так что каждый клиент его видит, и так что игроки которые стримят позже его видят также. Проверьте расстояние и работу на сервере, способом который защита вашего сервер события описывает. Помните очистить флаг когда игрок освобождается, умирает или уходит.
Полиция количество для грабежей
Грабежи, heists и некоторые drug работы спрашивают "сколько офицеров на duty". Ответ должен придти с сервера:
-- ESX (server)
local function policeOnline()
local count = 0
for _, xPlayer in pairs(ESX.GetExtendedPlayers('job', 'police')) do
count += 1
end
return count
end-- QBCore (server)
local function policeOnline()
local count = 0
for _, player in pairs(QBCore.Functions.GetQBPlayers()) do
local job = player.PlayerData.job
if job.name == 'police' and job.onduty then
count += 1
end
end
return count
endНа QBox, недавние версии qbx_core также отправляют duty-count exports, поэтому проверьте её документацию перед написанием вашего собственного цикла. Если вы используете пару off-duty работ на ESX, считайте только on-duty имя.
Всегда считайте на сервере, и считайте снова когда грабёж запускается, не только когда игрок подходит. Смотрите грабёж скрипты для полного потока.
MDT и dispatch отдельные
Полиция работа даёт вам работу и количество. Это обычно другие ресурсы:
- MDT: записи, ордера, граждане и поиск машин.
- Dispatch: 911 звонки, alert blips, статус офицера.
- Доказательства и impound: часто их собственные скрипты снова.
Проверьте конфиг каждого для имени работы. Dispatch который никогда не показывает alerts почти всегда настроен для другого имени работы чем то которое вы создали.
Контрольный список
| Симптом | Решение |
|---|---|
| Armory открыта для всех | Добавьте имя работы и минимальный ранг в магазин или stash groups |
| Armory заблокирована для офицеров | Имя работы в armory не совпадает с именем работы которое вы создали |
| Грабёж говорит нет полиции, офицеры онлайн | Считайте только on-duty офицеров, с точным именем работы, на сервере |
| Dispatch показывает нет alerts | Установите имя полиция работы в конфиге dispatch |
| Игрок остаётся наручниках после освобождения | Очистите состояние наручников при освобождении, смерти и отключении |
| Кто-либо может идти на duty | Делайте toggle на сервере и проверьте работу сначала |
Короткие ответы
Как я считаю количество полицейских онлайн?
На сервере, пройдите через подключённых игроков и посчитайте тех чья работа это ваша полиция работа и кто находится на duty. Делайте это на сервере, никогда не на клиенте, потому что грабежи и heists верят этому числу.
Включает ли полиция работа MDT и dispatch?
Обычно нет. Сама работа это только работа, ранги, duty и armory. MDT (записи, ордера) и dispatch (звонки, blips) это отдельные ресурсы которые читают работу игрока.
Где я даю полиции оружие?
Поместите их в armory: инвентарь магазин или stash ограниченный на полиция работу и на минимальный ранг. Не давайте оружие из события клиента.

