Jak dodać przedmioty do ox_inventory: items.lua, obrazy i użyteczne przedmioty

Dodaj niestandardowy przedmiot do ox_inventory: wpis data/items.lua, obraz w web/images, danie go za pomocą AddItem, i uczynienie go użytecznym za pomocą exportu klienta.

Chcesz nowy przedmiot na twoim serwerze: burger, wytrych, baterię telefonu. Z ox_inventory, który serwery ESX i QBox używają, przedmiot to jedna tabela Lua w jednym pliku. Ten artykuł obejmuje wpis, obraz, danie przedmiotu graczowi, i uczynienie go użytecznym.

1. Wpis przedmiotu

Otwórz ox_inventory/data/items.lua. Wewnątrz zwróconej tabeli, dodaj wpis. Klucz to nazwa przedmiotu: małe litery, bez spacji.

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
},

Co robią pola:

Pole Znaczenie
label Nazwa pokazana graczom
weight Waga jednego przedmiotu, w gramach
stack true jeśli kilka może dzielić slot, false jeśli każda bierze swój slot
close true zamyka inwentarz gdy przedmiot jest używany
description Tekst pod etykietą

Sprawdź inne przedmioty w tym samym pliku dla dokładnych pól których twoja wersja ox_inventory wspiera, i skopiuj ich styl. Plik to najlepsza referencja dla twojej instalacji.

Ostrzeżenie: błąd składni Lua w items.lua zatrzymuje ox_inventory od uruchamiania. Sprawdź brakujący przecinek między wpisami i brakujący nawias zamykający.

2. Obraz

ox_inventory szuka .png o nazwie po przedmiocie:

text
ox_inventory/web/images/burger.png

Nazwa musi dokładnie pasować do nazwy przedmiotu, a brakujący obraz pokazuje tylko pustą ikonę. Kwadratowy obraz około 100 na 100 pikseli lub większy, z przezroczystym tłem, wygląda najlepiej.

3. Przeładuj i daj sobie

Uruchom ponownie inwentarz aby przeczytał plik:

text
restart ox_inventory

Potem daj sobie przedmiot. Admini z właściwym uprawnieniem mogą użyć komendy /additem w grze lub konsoli:

text
additem <player id> burger 1

Jeśli komenda jest odrzucona, brakuje ci uprawnień admina, patrz ACE uprawnienia dla adminów.

4. Daj przedmiot ze skryptu

Po stronie serwera, użyj exportu:

lua
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
    print('Could not add the item: inventory full or unknown item')
end

AddItem bierze id gracza, nazwę przedmiotu, liczbę i opcjonalne metadane. Usunięcie i sprawdzenie pracują tak samo:

lua
exports.ox_inventory:RemoveItem(source, 'burger', 1)

local count = exports.ox_inventory:Search(source, 'count', 'burger')

Jeśli gracz nie może nosić przedmiotu z powodu wagi lub slotów, AddItem zwraca false. Możesz sprawdzić najpierw:

lua
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
    exports.ox_inventory:AddItem(source, 'burger', 1)
end

5. Uczyń przedmiot użytecznym

Przedmiot może uruchomić kod gdy gracz go używa. ox_inventory wspiera to w definicji przedmiotu, z blokiem client który wskazuje na export jednego z twoich zasobów:

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
    client = {
        export = 'my_script.burger',
    },
},

Wartość to resourceName.exportName. W my_script, zarejestruj export na kliencie:

lua
-- my_script/client.lua
exports('burger', function(data, slot)
    exports.ox_inventory:useItem(data, function(used)
        if used then
            print('Burger eaten')
        end
    end)
end)

useItem usuwa jeden przedmiot i uruchamia twoją funkcję tylko jeśli użycie przeszło. To standardowy sposób aby pozwolić ox_inventory obsługiwać animację, czas postępu i konsumpcję, gdy przedmiot ma je ustawione.

Ten sam blok może nosić wbudowane efekty zamiast exportu. Spójrz na jedzenie i przedmioty picia już w items.lua dla dostępnych opcji, na przykład status, anim i prop, i ponownie użyj tego kształtu dla twojego własnego przedmiotu jedzenia.

ESX i QBCore styl użyteczne przedmioty

Skrypty napisane dla framework'u rejestrują użyteczne przedmioty z ESX.RegisterUsableItem('burger', ...) lub QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory pracuje z tymi wywołaniami gdy biegnie z framework'iem, więc te skrypty nie potrzebują zmian, tak długo jak przedmiot istnieje w items.lua.

Tworzenie przedmiotów bez edytowania plików

Jeśli tworzysz przedmioty często, edytowanie plików i restarty stają się powolne. Item Creator pozwala ci tworzyć przedmioty w grze, więc nie dotykasz items.lua dla każdego.

Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.od 18,15 €Zobacz skrypt →

Na QBCore i QBox

ox_inventory to inwentarz QBox, więc wszystko powyżej dotyczy jak jest. Na QBCore, domyślnym inwentarzem jest qb-inventory zamiast, z przedmiotami w qb-core/shared/items.lua, objętymi w dodawanie przedmiotów na QBCore.

Checklist

Objaw Naprawić
Przedmiot nie istnieje Dodaj go do data/items.lua, potem restart ox_inventory
ox_inventory nie uruchomia się Błąd składni w items.lua; sprawdź przecinki i nawiasy
Pusta ikona Umieść <item name>.png w web/images
AddItem zwraca false Nieznana nazwa przedmiotu, inwentarz pełny, lub zbyt ciężki
Przedmiot nic nie robi gdy użyty Dodaj blok client z export, i zarejestruj ten export
Skrypt użytecznego przedmiotu ignorowany Nazwa przedmiotu w skrypcie musi pasować do klucza w items.lua

Szybkie odpowiedzi

Gdzie dodaję przedmioty w ox_inventory?

W ox_inventory/data/items.lua. Każdy przedmiot to tabela kluczona po jego nazwie, i ta sama nazwa to plik obrazu w web/images.

Dlaczego mój nowy przedmiot nie pokazuje ikony?

Obraz brakuje lub ma inną nazwę. Umieść <item name>.png w ox_inventory/web/images, z dokładną nazwą przedmiotu i małymi literami rozszerzenia.

Czy muszę uruchomić serwer ponownie po dodaniu przedmiotu?

Nie. Uruchom ponownie ox_inventory i nowy przedmiot jest załadowany. Jeśli skrypt go potrzebuje, uruchom ponownie też ten skrypt.

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