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

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 },
    },
},

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 pole type, 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.lua zatrzymuje ładowanie qb-core i każdy skrypt, który od niego zależy.

Uruchom ponownie i ustaw pracę

Core czyta plik przy starcie:

text
restart qb-core

Następnie, jako admin, w grze lub konsoli:

text
/setjob <player id> mechanic 1

Wartoś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:

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

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

Jeśli QBCore to nil tutaj, zobacz attempt to index a nil value (global 'QBCore').

Na kliencie

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)

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:

lua
local player = exports.qbx_core:GetPlayer(source)
if player then
    print(player.PlayerData.job.name)
end

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 = false oznacza, ż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.

Skrypty bez tego problemu

Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →Pawn Shop AppLombard między graczami wewnątrz lb-phone.Zobacz skrypt →

Czytaj dalej