Jak dodać przedmioty na QBCore: items.lua, obrazy, CreateUseableItem
Dodaj niestandardowy przedmiot do QBCore: wpis qb-core/shared/items.lua i jego pola, obraz w qb-inventory, danie to i uczynienie go użytecznym za pomocą CreateUseableItem.
Dodałeś przedmiot do serwera QBCore, i albo on nie istnieje w grze, nie ma ikony, albo nic się nie dzieje gdy jest używany. Oto pełna ścieżka: wpis elementu, obraz, danie to i uczynienie go użytecznym.
1. Wpis elementu
Otwórz qb-core/shared/items.lua. Elementy to wpisy w tabeli QBShared.Items, kluczem po nazwie. Dodaj swoje, z przecinkiem po poprzednim wpisie:
['burger'] = {
['name'] = 'burger',
['label'] = 'Burger',
['weight'] = 220,
['type'] = 'item',
['image'] = 'burger.png',
['unique'] = false,
['useable'] = true,
['shouldClose'] = true,
['description'] = 'A warm burger.',
},Co robi każde pole:
| Pole | Znaczenie |
|---|---|
name |
Nazwa elementu; musi pasować do klucza, małe litery, bez spacji |
label |
Nazwa pokazana graczom |
weight |
Waga jednego przedmiotu |
type |
item dla normalnych przedmiotów, weapon dla broni |
image |
Nazwa pliku ikony, rozszerzenie wliczane |
unique |
true jeśli każda kopia jest własnym slottem (może mieć dane) |
useable |
true jeśli gracze mogą go użyć |
shouldClose |
true zamyka inventorz przy użyciu |
description |
Tekst pod etykietą |
Skopiuj sąsiadujący element w tym samym pliku, gdy jesteś niepewny: plik pokazuje dokładnie pola, które twoja wersja oczekuje.
Ostrzeżenie: jeden brakujący przecinek lub nawias w
items.luazatrzymuje ładowanie qb-core, a razem z nim każdy skrypt, który od niego zależy. Jeśli wszystko się psuje po edycji, najpierw spójrz na ostatni wpis.
2. Obraz
Umieść .png z nazwą z pola image w folderze obrazów inventorium:
qb-inventory/html/images/burger.pngFolder jest taki sam niezależnie od tego, czy element jest jedzeniem, narzędziem czy dokumentem. W przypadku innego zasobu inventorium użyj zamiast tego własnego folderu obrazów. Brakujący plik pokazuje pustą ikonę, a nazwa musi dokładnie pasować do pola image, rozszerzenie wliczane.
3. Uruchom ponownie i testuj
items.lua jest czytana przez qb-core, gdy się uruchamia. W konsoli serwera:
restart qb-coreUruchomienie ponownie qb-core, podczas gdy gracze są online, może rozłączyć lub złamać skrypty, które od niego zależą, więc na żywym serwerze zrób to o cichym czasie, lub uruchom ponownie cały serwer. Następnie daj sobie przedmiot za pomocą komendy admina:
/giveitem <player id> burger 1Ze skryptu, po stronie serwera:
local QBCore = exports['qb-core']:GetCoreObject()
local Player = QBCore.Functions.GetPlayer(source)
if Player then
Player.Functions.AddItem('burger', 1)
endJeśli QBCore to nil tutaj, przeczytaj attempt to index a nil value (global 'QBCore').
4. Uczyń go użytecznym
Ustawienie useable = true pozwala tylko na użycie. Musisz również powiedzieć, co się dzieje, na serwerze:
local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateUseableItem('burger', function(source, item)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return end
if Player.Functions.RemoveItem('burger', 1) then
TriggerClientEvent('QBCore:Notify', source, 'You ate the burger', 'success')
-- your effect here: heal, hunger, an animation event
end
end)Callback otrzymuje id gracza i dane elementu. Usuń element sam, jeśli użycie powinno go zużyć, jak powyżej.
Jeśli restart skryptu powoduje, że przedmiot przestaje działać, pamiętaj, że rejestracja odbywa się po uruchomieniu skryptu. Uruchom ponownie skrypt, który zawiera CreateUseableItem, a nie tylko qb-inventory.
Przedmioty, które noszą dane
W przypadku przedmiotów, które noszą informacje, takich jak notatka z tekstem lub bilet z kodem, ustaw unique na true. Każda kopia może wtedy przechowywać własne dane w tabeli info, którą dajesz podczas dodawania elementu:
Player.Functions.AddItem('ticket', 1, false, { code = 'A12' })Typowe problemy
- Niezgodność nazwy elementu. Klucz, pole
name, nazwa obrazu i nazwa, którą przekazujesz doAddItem, muszą być tym samym słowem. - Element dodany do innego pliku. Niektóre skrypty proszą, abyś dodał ich elementy do kopii listy wewnątrz skryptu. Sprawdź jego notatki instalacyjne i dodaj elementy w
qb-core/shared/items.lua, chyba że powiedziano inaczej. - Stary inventorz. Starsze wersje qb-inventory przechowują oddzielną kopię niektórych danych elementu we własnym folderze. Jeśli element pokazuje złą etykietę, sprawdź, czy nic innego go nie definiuje.
W QBox
QBox używa ox_inventory zamiast qb-inventory, a jego przedmioty żyją w ox_inventory/data/items.lua. Format jest inny, a tak są wezwania przedmiotów użytecznych. Postępuj zgodnie z dodawaniem przedmiotów do ox_inventory.
Dodaj przedmioty bez edytowania plików
Zmiana items.lua i restart core dla każdego nowego elementu jest powolną częścią. Item Creator pozwala ci zamiast tego tworzyć elementy w grze.
Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.od 18,15 €Zobacz skrypt →
Lista kontrolna
| Symptom | Naprawa |
|---|---|
| Element nie znaleziony | Dodaj go do qb-core/shared/items.lua i restart qb-core |
| Wszystko psuje się po edycji | Błąd składni w items.lua; sprawdź przecinki i nawiasy |
| Pusta ikona | Dodaj burger.png do qb-inventory/html/images, pasując do pola image |
| Element nic nie robi | Ustaw useable = true i zarejestruj QBCore.Functions.CreateUseableItem |
| Nazwa nie pasuje | Użyj jednej identycznej nazwy w kluczu, name, obrazie i kodzie |
| Serwer QBox | Zamiast tego użyj ox_inventory data/items.lua |
Szybkie odpowiedzi
Gdzie są elementy zdefiniowane w QBCore?
W qb-core/shared/items.lua. Każdy element to tabela w QBShared.Items, kluczem jest jego nazwa, a ikona to .png o tej samej nazwie w folderze obrazów inventorium.
Czy QBox używa qb-core/shared/items.lua?
Nie. QBox używa ox_inventory, gdzie przedmioty żyją w ox_inventory/data/items.lua. Patrz przewodnik ox_inventory połączony w tym artykule.
Dlaczego mój przedmiot nie jest użyteczny?
Albo useable jest false w wpisie elementu, albo żaden kod go nie zarejestrował. Ustaw useable = true i zarejestruj go za pomocą QBCore.Functions.CreateUseableItem na serwerze.
