Как добавить работу на 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, ключом которых является имя работы. Добавьте свою:

lua
['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 и каждый скрипт, который на него полагается.

Перезагрузка и установка работы

Ядро читает файл при запуске:

text
restart qb-core

Затем, как администратор, в игре или консоли:

text
/setjob <player id> mechanic 1

Значения — это id игрока, ключ работы и номер степени. Если команда отклоняется, вам не хватает прав администратора: смотрите ACE разрешения для администраторов.

Прочитайте работу в скриптах

На сервере:

lua
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.

Для изменения работы из кода:

lua
Player.Functions.SetJob('mechanic', 1)

Если QBCore равен nil здесь, смотрите attempt to index a nil value (global 'QBCore').

На клиенте

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

lua
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.Смотреть скрипт →

Читайте также