Przechowywanie ox_inventory: RegisterStash, openInventory i przechowywanie pracy

Jak utworzyć przechowywanie w ox_inventory: zarejestruj na serwerze, otwórz z klienta lub ox_target, uczyń go osobistym dla każdego gracza, lub zablokuj na pracę.

Potrzebujesz miejsca do przechowywania rzeczy: sejfu dowodów policji, osobistej szafy, sejfu w domu. Z ox_inventory to przechowywanie: nazwany inwentarz z własnymi slotami i limitem wagi, przechowywane w bazie danych. Ten artykuł obejmuje rejestrowanie przechowywania na serwerze, otwieranie go z klienta, uczynienie go osobistym, ograniczenie go do pracy, i dołączenie go do strefy ox_target.

Zarejestruj przechowywanie na serwerze

Przechowywanie musi istnieć na serwerze zanim ktokolwiek je otworzy. Zarejestruj to raz, gdy twój zasób się uruchamia:

lua
-- server.lua
exports.ox_inventory:RegisterStash('police_evidence', 'Evidence locker', 100, 500000, false)

Argumenty, w kolejności:

Argument Znaczenie
id Unikalny string. Używany do otwarcia przechowywania i jako jego klucz w bazie danych
label Nazwa pokazana na górze przechowywania
slots Liczba slotów
maxWeight Limit wagi, w gramach (500000 to 500 kg)
owner false dla współdzielonego przechowywania, true dla jednego na gracza, lub stały identyfikator
groups Opcjonalna tabela prac dozwolonych do otwarcia
coords Opcjonalna pozycja którą gracz musi być blisko

Tylko pierwsze cztery są wymagane. Zawartość jest zapisywana przez ox_inventory, więc przetrwają restarty twojego skryptu i serwera.

Ostrzeżenie: id to tożsamość przechowywania. Jeśli zmienisz 'police_evidence' na inny string później, stara zawartość zostaje w bazie danych pod starym id i nowe przechowywanie rozpoczyna się puste.

Otwórz to z klienta

Na kliencie, otwórz przechowywanie z exportem i tym samym id:

lua
-- client.lua
exports.ox_inventory:openInventory('stash', 'police_evidence')

Serwer sprawdza groups i coords gdy żądanie przybywa, więc klient nie może ich pominąć. Jeśli id przechowywania nigdy nie było zarejestrowane, nic się nie otwiera.

Możesz także otworzyć przechowywanie dla gracza z serwera, na przykład z komendy lub zdarzenia które już walidowałeś:

lua
exports.ox_inventory:forceOpenInventory(source, 'stash', 'police_evidence')

Osobiste przechowywanie: owner = true

Dla szafy lub szafki gdzie każdy gracz ma swoją zawartość, użyj owner = true:

lua
exports.ox_inventory:RegisterStash('personal_locker', 'Personal locker', 50, 100000, true)

Id przechowywania jest takie samo dla wszystkich, ale ox_inventory dołącza identyfikator gracza do niego, więc każdy gracz otrzymuje osobny inwentarz. Na ESX to jest licencja lub identyfikator postaci, na QBox i QBCore obywatel id.

Możesz także przesłać stały owner, który jest przydatny dla domu gdzie tylko właściciel i osoby które decydujesz mogą to zobaczyć:

lua
local identifier = 'char1:abc123'
exports.ox_inventory:RegisterStash('house_' .. identifier, 'House storage', 80, 200000, identifier)

Gdy owner jest stringiem, każdy otwierający to przechowywanie jest dołączony do tego ownera, więc sprawdzenie dostępu powinno się stać w twoim własnym kodzie serwera zanim go otworzysz.

Przechowywanie pracy: groups

groups to tabela nazw prac, każda z minimalną klasą:

lua
exports.ox_inventory:RegisterStash(
    'police_armory',
    'Police armory',
    80,
    300000,
    false,
    { police = 0, sheriff = 2 }
)

Gracz z pracą police na klasie 0 lub wyższej może to otworzyć, i sheriff tylko z klasy 2. Wszyscy inni są odmówieni przez serwer. To pracuje z pracami ESX, pracami QBCore i pracami QBox, ponieważ ox_inventory je czyta z framework'u.

Aby także wymagać że gracz stoi przy przechowywaniu, przesyłaj coords jako ostatni argument:

lua
exports.ox_inventory:RegisterStash(
    'police_armory', 'Police armory', 80, 300000, false,
    { police = 0 }, vec3(452.1, -980.2, 30.7)
)

Otwórz to z ox_target

Przechowywanie jest zwykle otwierane z miejsca na świecie. Z ox_target, dodaj strefę która wołuje export:

lua
exports.ox_target:addSphereZone({
    coords = vec3(452.1, -980.2, 30.7),
    radius = 1.0,
    options = {
        {
            name = 'open_police_armory',
            icon = 'fa-solid fa-box-archive',
            label = 'Open armory',
            groups = { police = 0 },
            onSelect = function()
                exports.ox_inventory:openInventory('stash', 'police_armory')
            end,
        },
    },
})

groups tutaj tylko ukrywa opcję, która jest wygodą. Rzeczywiste sprawdzenie to jeden na RegisterStash. Dla stref w ogóle, patrz dodawanie strefy ox_target.

Przechowywanie zdefiniowane w pliku

Jeśli nie chcesz pisać kod, ox_inventory czyta przechowywanie z data/stashes.lua. Każdy wpis ma nazwę, etykietę, sloty, wagę, opcjonalny owner, groups, i lokalizację. Spójrz na wpisy przykładowe w tym pliku na twojej wersji, skopiuj jeden, i uruchom ponownie ox_inventory. Użyj rejestracji kodu gdy przechowywanie jest tworzone przez inny zasób, takie jak skrypt domu.

Porada: aby sprawdzić czy przechowywanie pracuje, otwórz to, umieść przedmiot, uruchom ponownie twój zasób, i otwórz ponownie. Jeśli przedmiot jest wciąż tam, id pasuje i zawartość jest zapisana.

Checklist

Objaw Naprawić
Przechowywanie się nie otwiera Zarejestruj to najpierw na serwerze, z dokładnie tym samym id
Przechowywanie jest puste po przemianie Id się zmieniło; stara zawartość jest pod starym id
Wszyscy dzielą to samo osobiste przechowywanie Zarejestruj z owner = true
Gracz bez pracy otwiera to Dodaj groups = { jobname = grade } w RegisterStash
Otwiera się z wszędzie Przesyłaj coords jako ostatni argument
Potrzebujesz przedmiotów aby dodać Patrz dodawanie przedmiotów do ox_inventory

Szybkie odpowiedzi

Jaka jest różnica między przechowywaniem a inwentarzem gracza w ox_inventory?

Przechowywanie to osobna magazynowanie z własnymi slotami i limitem wagi, identyfikowana przez string id. Należy do świata, pracy lub jednego gracza w zależności od owner i groups które dajesz.

Jak uczynić przechowywanie prywatnym dla każdego gracza?

Zarejestruj to z owner ustawiony na true. ox_inventory wtedy trzyma jedną osobną kopię przechowywania na gracza, więc dwaj gracze otwierający to samo id przechowywania widzą różną zawartość.

Dlaczego moje przechowywanie otwiera się puste lub nie otwiera się wcale?

Przechowywanie nie było zarejestrowane na serwerze, id się różni między wołaniem rejestru i wołaniem otwartym, lub gracz brakuje wymaganej pracy lub jest zbyt daleko od coords.

Skrypty bez tego problemu

Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.Zobacz skrypt →Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →

Czytaj dalej