Как добавить работу на QBCore: shared/jobs.lua, grades и /setjob
Добавьте пользовательскую работу в QBCore или QBox: структура shared/jobs.lua с defaultDuty, offDutyPay и grades, команда /setjob и чтение Player.PlayerData.job.
На QBCore работа — это блок в одном файле Lua, а не строка в базе данных. Вы добавляете блок, перезагружаете ядро и устанавливаете работу игроку. Это руководство показывает структуру, команду и как прочитать работу в коде, для QBCore и QBox.
Структура
Откройте qb-core/shared/jobs.lua. Работы — это записи в таблице QBShared.Jobs, ключом которых является имя работы. Добавьте свою:
['mechanic'] = {
label = 'Mechanic',
defaultDuty = true,
offDutyPay = false,
grades = {
['0'] = { name = 'Recruit', payment = 50 },
['1'] = { name = 'Mechanic', payment = 75 },
['2'] = { name = 'Boss', payment = 120, isboss = true },
},
},Что означает каждая часть:
| Поле | Значение |
|---|---|
Ключ (mechanic) |
Имя работы, используемое в коде и /setjob: нижний регистр, без пробелов |
label |
Имя, которое видят игроки |
defaultDuty |
true, если игроки начинают на дежурстве, когда получают работу |
offDutyPay |
true, если работа платит даже когда игрок не на дежурстве |
grades |
Ранги, ключом которых является их уровень |
name |
Отображаемое имя ранга |
payment |
Зарплата этого ранга при каждой выплате |
isboss |
true помечает ранг как ранг босса |
Два правила:
- Ключи степеней — это строки на QBCore:
['0'],['1']. Начните с'0'без пропусков. - Посмотрите на работы, уже находящиеся в файле, такие как
police, и скопируйте их форму. Некоторые работы имеют дополнительное полеtype, которое другие скрипты используют для группировки их, и файл показывает, что поддерживает ваша версия.
Внимание: отсутствующая запятая или скобка в
jobs.luaостанавливает загрузку qb-core и каждый скрипт, который на него полагается.
Перезагрузка и установка работы
Ядро читает файл при запуске:
restart qb-coreЗатем, как администратор, в игре или консоли:
/setjob <player id> mechanic 1Значения — это id игрока, ключ работы и номер степени. Если команда отклоняется, вам не хватает прав администратора: смотрите ACE разрешения для администраторов.
Прочитайте работу в скриптах
На сервере:
local QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('my_script:doWork', function()
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local job = Player.PlayerData.job
if job.name ~= 'mechanic' then
return TriggerClientEvent('QBCore:Notify', src, 'You are not a mechanic', 'error')
end
if not job.onduty then
return TriggerClientEvent('QBCore:Notify', src, 'Go on duty first', 'error')
end
-- allowed
end)Player.PlayerData.job содержит name, label, onduty, isboss, payment и таблицу grade с name и level ранга. Для номера ранга используйте job.grade.level.
Для изменения работы из кода:
Player.Functions.SetJob('mechanic', 1)Если QBCore равен nil здесь, смотрите attempt to index a nil value (global 'QBCore').
На клиенте
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = {}
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
PlayerData = QBCore.Functions.GetPlayerData()
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
PlayerData.job = job
end)Чтение GetPlayerData().job перед загрузкой игрока дает nil, поэтому дождитесь OnPlayerLoaded и держите работу свежей с OnJobUpdate.
На QBox
Ядро QBox — это qbx_core, и файл работ — это qbx_core/shared/jobs.lua. Структура одинакова: метка, defaultDuty, offDutyPay и grades. Откройте файл и следуйте записям, уже находящимся в нем, так как файл QBox может отличаться в деталях, таких как способ написания ключей степеней, и новые версии могут добавлять поля.
Перезагрузите qbx_core после редактирования. Для кода слой совместимости по-прежнему отвечает exports['qb-core']:GetCoreObject(), а собственный экспорт QBox:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.job.name)
endМеню босса и средства
Степень с isboss = true — это только флаг. Меню, которое позволяет боссу нанимать людей и использовать счет компании, исходит из вашего ресурса управления, который обычно имеет свой собственный список работ для настройки. Если меню босса не открывается для вашей новой работы, проверьте имя работы в файле конфигурации этого ресурса.
Распространенные проблемы
- Работа не найдена /setjob. Ядро не было перезагружено или ключ неправильно написан.
- Ядро не запускается после редактирования. Ошибка синтаксиса в
jobs.lua. Прочитайте первую красную строку в консоли, и как читать ошибку скрипта помогает с файлом и строкой. - Оплата не получена.
offDutyPay = falseозначает, что игрок должен быть на дежурстве, и интервал выплаты исходит из конфига ядра.
Контрольный список
| Симптом | Исправление |
|---|---|
| Работа не найдена | Добавьте её в shared/jobs.lua и перезагрузите qb-core или qbx_core |
| Ядро не запустится | Ошибка синтаксиса в jobs.lua; проверьте запятые и скобки |
| Неправильный ранг | Ключи степеней — это строки, начинающиеся с '0' на QBCore |
| Нет оплаты не дежурстве | Установите offDutyPay = true или перейти на дежурство |
| Работа равна nil на клиенте | Дождитесь QBCore:Client:OnPlayerLoaded |
| Нет меню босса | Установите isboss = true и добавьте работу в ресурс управления |
Короткие ответы
Где определяются работы QBCore?
В qb-core/shared/jobs.lua, как записи QBShared.Jobs. На QBox файл находится в qbx_core/shared/jobs.lua.
Почему /setjob говорит, что работа не существует?
Ядро читает файл при запуске. Перезагрузите qb-core (или qbx_core) после редактирования и проверьте, что имя работы и номер степени существуют в файле.
Что делает isboss?
Он помечает степень как степень босса. Меню босса и скрипты управления проверяют этот флаг, чтобы решить, кто может нанимать, увольнять и использовать средства компании.
Скрипты без этой проблемы
Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →
Pawn Shop AppЛомбард между игроками прямо в lb-phone.Смотреть скрипт →