Jak dodać pracę na QBCore: shared/jobs.lua, oceny i /setjob
Dodaj niestandardową pracę do QBCore lub QBox: struktura shared/jobs.lua z defaultDuty, offDutyPay i ocenami, komenda /setjob i odczytywanie Player.PlayerData.job.
Na QBCore praca to blok w jednym pliku Lua, nie wiersz bazy danych. Dodajesz blok, restartujesz core i ustawiasz pracę dla gracza. Ten przewodnik pokazuje strukturę, polecenie i jak czytać pracę w kodzie, dla QBCore i QBox.
Struktura
Otwórz qb-core/shared/jobs.lua. Prace są wpisami w tabeli QBShared.Jobs, kluczem po nazwie pracy. Dodaj swoją:
['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 },
},
},Co oznacza każda część:
| Pole | Znaczenie |
|---|---|
Klucz (mechanic) |
Nazwa pracy używana w kodzie i /setjob: małe litery, bez spacji |
label |
Nazwa widoczna dla graczy |
defaultDuty |
true jeśli gracze zaczynają na obowiązku, gdy otrzymają pracę |
offDutyPay |
true jeśli praca płaci nawet wtedy, gdy gracz nie pełni obowiązków |
grades |
Rangi, kluczem po ich poziomie |
name |
Nazwa wyświetlana rangi |
payment |
Płaca tej rangi na każdy czek |
isboss |
true oznacza rangę jako rangę szefa |
Dwie reguły:
- Klucze ocen to ciągi na QBCore:
['0'],['1']. Zacznij od'0'bez luk. - Spójrz na prace już w pliku, takie jak
police, i skopiuj ich kształt. Niektóre prace noszą dodatkowe poletype, które inne skrypty używają do ich grupowania, i plik pokazuje, co obsługuje twoja wersja.
Ostrzeżenie: brakujący przecinek lub nawias w
jobs.luazatrzymuje ładowanie qb-core i każdy skrypt, który od niego zależy.
Uruchom ponownie i ustaw pracę
Core czyta plik przy starcie:
restart qb-coreNastępnie, jako admin, w grze lub konsoli:
/setjob <player id> mechanic 1Wartości to identyfikator gracza, klucz pracy i numer oceny. Jeśli polecenie jest odrzucone, brakuje ci uprawnień admina: zobacz uprawnienia ACE dla adminów.
Odczytaj pracę w skryptach
Na serwerze:
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 przechowuje name, label, onduty, isboss, payment i tabelę grade z name rangi i level. Dla numeru rangi użyj job.grade.level.
Aby zmienić pracę z kodu:
Player.Functions.SetJob('mechanic', 1)Jeśli QBCore to nil tutaj, zobacz attempt to index a nil value (global 'QBCore').
Na kliencie
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)Odczytywanie GetPlayerData().job przed załadowaniem gracza daje nil, więc czekaj na OnPlayerLoaded i utrzymuj pracę świeżą za pomocą OnJobUpdate.
Na QBox
Core QBox to qbx_core, a plik prac to qbx_core/shared/jobs.lua. Struktura jest taka sama: etykieta, defaultDuty, offDutyPay i grades. Otwórz plik i postępuj zgodnie z wpisami już w nim, ponieważ plik QBox może różnić się szczegółami, takimi jak sposób zapisywania kluczy ocen, a nowe wersje mogą dodawać pola.
Uruchom ponownie qbx_core po edycji. Dla kodu, warstwa kompatybilności wciąż odpowiada exports['qb-core']:GetCoreObject(), a własny export QBox to:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.job.name)
endMenu szefa i fundusze
Ocena z isboss = true to tylko flaga. Menu, które pozwala szefowi zatrudniać ludzi i używać konta firmy, pochodzi z twojego zasobu zarządzania, który zwykle ma własną listę prac do skonfigurowania. Jeśli menu szefa się nie otwiera dla twojej nowej pracy, sprawdź konfigurację tego zasobu pod kątem nazwy pracy.
Typowe problemy
- Praca nie znaleziona przez
/setjob. Core nie został uruchomiony ponownie, lub klucz jest źle napisany. - Core zawala się po edycji. Błąd składni w
jobs.lua. Przeczytaj pierwszą czerwoną linię w konsoli, a jak czytać błąd skryptu pomaga z plikiem i linią. - Płaca nie jest otrzymywana.
offDutyPay = falseoznacza, że gracz musi być na obowiązku, a interwał czeku pochodzi z konfiguracji core.
Lista kontrolna
| Symptom | Naprawa |
|---|---|
| Praca nie znaleziona | Dodaj ją do shared/jobs.lua i uruchom ponownie qb-core lub qbx_core |
| Core nie chce się uruchomić | Błąd składni w jobs.lua; sprawdź przecinki i nawiasy |
| Zła ranga | Klucze ocen to ciągi zaczynające się od '0' na QBCore |
| Brak płacy poza obowiązkami | Ustaw offDutyPay = true lub przejdź na obowiązek |
| Praca to nil na kliencie | Czekaj na QBCore:Client:OnPlayerLoaded |
| Brak menu szefa | Ustaw isboss = true i dodaj pracę do zasobu zarządzania |
Szybkie odpowiedzi
Gdzie są zdefiniowane prace QBCore?
W qb-core/shared/jobs.lua, jako wpisy QBShared.Jobs. Na QBox plik to qbx_core/shared/jobs.lua.
Dlaczego /setjob mówi, że praca nie istnieje?
Core czyta plik, gdy się uruchamia. Uruchom ponownie qb-core (lub qbx_core) po edycji i sprawdź, czy nazwa pracy i numer oceny istnieje w pliku.
Co robi isboss?
Oznacza ocenę jako ocenę szefa. Menu szefa i skrypty zarządzania sprawdzają tę flagę, aby zdecydować, kto może wynajmować, zwalniać i używać funduszy pracy.


