Как добавить работу на ESX Legacy: jobs и job_grades SQL, setjob
Добавьте пользовательскую работу к ESX Legacy двумя вставками SQL в jobs и job_grades, установите ее с помощью /setjob, прочитайте в скриптах с xPlayer.job и свяжите ее с обществом счетом.
ESX не имеет файла работ. Работа — это строки в вашей базе данных: одна в jobs и одна за ранг в job_grades. Это руководство добавляет работу, дает ее игроку, читает ее в коде и связывает ее со счетом общества.
1. Вставьте работу
Таблица jobs содержит саму работу, а job_grades содержит ее ранги. Запустите это в HeidiSQL, phpMyAdmin или MySQL CLI на базе данных вашего сервера:
INSERT INTO `jobs` (`name`, `label`) VALUES
('mechanic2', 'Mechanic');
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
('mechanic2', 0, 'recruit', 'Recruit', 200, '{}', '{}'),
('mechanic2', 1, 'novice', 'Novice', 300, '{}', '{}'),
('mechanic2', 2, 'boss', 'Boss', 500, '{}', '{}');Важные правила:
name— это кодовое имя: в нижнем регистре, без пробелов и везде одинаково.label— то, что видят игроки.job_nameвjob_gradesдолжна равнятьсяnameработы.- Ранг
0должен существовать, потому что новые игроки работы начинают с него. Нумеруйте ранги без пропусков. salaryвыплачивается в каждый интервал оплаты, если ваши чеки работают.- Работа, отсутствующая в
job_grades, нарушает/setjobи может вызвать ошибки при загрузке игрока.
Столбцы могут немного отличаться между версиями ESX, поэтому откройте job_grades в вашем инструменте и сопоставьте список столбцов с таблицей, которую вы видите. Если вставка не удалась, ошибки импорта рассмотрены в Unknown column and table errors.
2. Перезагрузитесь, чтобы ESX перезагрузила работы
ESX читает работы из базы данных при запуске es_extended, поэтому новая строка невидима до тех пор:
restart es_extendedНа живом сервере перезагрузка ядра может сломать скрипты, которые от него зависят, поэтому в спокойное время перезагрузите весь сервер, если вы не уверены.
3. Дайте работу игроку
В игре или из консоли как администратор:
/setjob <player id> mechanic2 0Три значения — это id игрока, name работы и номер ранга. Если это не сработает, проверьте правописание в таблице jobs и что ранг существует, затем смотрите ACE permissions for admins, если команда отклонена.
4. Прочитайте работу в ваших скриптах
На сервере получите игрока и прочитайте работу:
local ESX = exports['es_extended']:getSharedObject()
RegisterNetEvent('my_script:doWork', function()
local xPlayer = ESX.GetPlayerFromId(source)
if not xPlayer then return end
local job = xPlayer.getJob()
if job.name ~= 'mechanic2' then
return xPlayer.showNotification('You are not a mechanic')
end
if job.grade < 1 then
return xPlayer.showNotification('You need a higher rank')
end
-- allowed
end)xPlayer.getJob() возвращает таблицу, и xPlayer.job содержит те же данные. Поля, которые вы будете использовать больше всего, это name, label, grade, grade_name и grade_label.
Чтобы изменить работу игрока из кода:
xPlayer.setJob('mechanic2', 1)Если ESX равна nil в вашем скрипте, сначала исправьте это с помощью ESX is nil: fixing esx:getSharedObject.
На клиенте
local ESX = exports['es_extended']:getSharedObject()
local function isMechanic()
local data = ESX.GetPlayerData()
return data.job and data.job.name == 'mechanic2'
end
RegisterNetEvent('esx:setJob', function(job)
-- job changed while the player is online
print(job.name, job.grade)
end)Событие esx:setJob срабатывает при изменении работы, поэтому держите свою собственную копию в актуальном состоянии вместо того, чтобы спрашивать каждый кадр.
5. Счета общества с esx_society
Если работа нуждается в общем счете банка, меню босса или складе, она опирается на esx_society. Работа с обществом нуждается в:
- Ранг босса. Верхний ранг называется
boss, как в вставке выше. Меню босса ищет это имя. - Счет общества. Деньги общества живут в таблице
addon_account, на счете называемомsociety_плюс имя работы, напримерsociety_mechanic2. Добавьте строку для этого и для его инвентаря и хранилища, если ваша работа их использует. - Регистрация. Сам скрипт работы регистрирует общество с esx_society на сервере при запуске, используя то же имя работы.
Где живет регистрация, зависит от скрипта, который запускает работу. Проверьте, как существующая работа на вашем сервере это делает, такая как полиция или работа механика, и отразите это для вашей.
Совет: если меню босса открывается пусто или деньги не двигаются, имя счета общества не совпадает точно с
society_плюс имя работы.
Контрольный список
| Симптом | Исправление |
|---|---|
| Работа не найдена /setjob | Перезагрузите es_extended после вставки |
| Ошибки при загрузке игрока | Работа не имеет ранга 0 в job_grades |
| Несоответствие имен | job_name должна равняться работе name, в нижнем регистре |
| Неправильный ранг оплачен | Проверьте salary этого grade |
| Нет меню босса | Назовите верхний ранг boss и зарегистрируйте общество |
| Деньги общества отсутствуют | Создайте society_<job> в addon_account с точным именем работы |
Короткие ответы
Где хранятся работы ESX?
В базе данных: таблица jobs содержит работу, а таблица job_grades содержит ее ранги с зарплатой каждого. Нет файла работ для редактирования на ESX Legacy.
Почему /setjob говорит, что работа не существует?
ESX загружает работы, когда es_extended запускается. Перезагрузите его после вставки и проверьте, что имя работы и номер ранга существуют в job_grades.
Как получить меню босса для моей работы?
Назовите верхний ранг boss. esx_society проверяет это имя ранга для меню босса, и ему также нужен счет общества для работы.
Скрипты без этой проблемы
Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →
Pawn Shop AppЛомбард между игроками прямо в lb-phone.Смотреть скрипт →