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:
-- 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:
-- 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ś:
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:
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ć:
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ą:
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:
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:
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.

