Bronie i amunicja ox_inventory: data/weapons.lua i bronie znikające

Bronie znikają po ponownym połączeniu z ox_inventory? Jak bronie pracują jako przedmioty: data/weapons.lua, przedmioty amunicji, trwałość, AddItem dla WEAPON_PISTOL, i attachmenty.

Dajesz graczowi pistolet za pomocą menu admina lub skryptu pracy. Rozłączają się, wracają, i pistolet znika. Z ox_inventory, bronie nie są osobnym ekwipunkiem: to przedmioty, i cokolwiek co nie jest przedmiotem jest usuwane. Ten artykuł wyjaśnia jak bronie i amunicja pracują, jak je prawidłowo dać, i gdzie dostroić trwałość i attachmenty.

Bronie są przedmiotami

W ox_inventory nazwa przedmiotu broni to jej nazwa hash, na przykład WEAPON_PISTOL. Są zdefiniowane w ox_inventory/data/weapons.lua, nie w items.lua. Plik zwraca trzy grupy:

lua
return {
    Weapons = {
        ['WEAPON_PISTOL'] = {
            label = 'Pistol',
            weight = 1130,
            durability = 0.1,
        },
        -- ...
    },
    Components = {
        -- attachments
    },
    Ammo = {
        -- ammo definitions
    },
}

Otwórz plik w twoim instalowaniu: każda domyślna broń ma gotowy wpis, i to jest referencja dla dokładnych pól twojej wersji. Broń brakująca z Weapons to po prostu nie ważny przedmiot.

Dlaczego bronie znikają na ponownym połączeniu

Stare skrypty ESX i QBCore dają bronie z natywami takimi jak GiveWeaponToPed, lub z xPlayer.addWeapon ESX. To umieszcza broń w rękach peda dla tej sesji, ale to nie jest przedmiot i nic go nie ratuje. ox_inventory także usuwa bronie które nie są w inwentarzu, więc znikają na ponownym połączeniu lub nawet szybciej.

Naprawą jest danie broni jako przedmiotu, z serwera:

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

Zastąp każde wołanie skryptu które przyznaje broń z nativem, addWeapon lub Player.Functions.AddItem('weapon_pistol', ...) wołaniem AddItem z wielką literą nazwa broni. Skrypt który tylko pracuje poprzez nativa, takie jak sklep który spawn'uje broń w ręce, potrzebuje tej zmiany zanim pracuje na serwerze używającym ox_inventory.

Porada: nazwy broni są wrażliwe na wielkość liter w listach przedmiotów, i WEAPON_PISTOL to forma którą ox_inventory używa. Stary skrypt który wysyła weapon_pistol może nie powiedzie się z tego powodu.

Przedmioty amunicji

Amunicja jest przedmiotem też. Typ amunicji jest nazwany przez ammoname broni w jej wpisie, na przykład ammo-9 dla 9 mm:

lua
exports.ox_inventory:AddItem(source, 'ammo-9', 60)

Gdy gracz używa przedmiotu amunicji z wyposażoną bronią która go akceptuje, ox_inventory ładuje to do broni, i broń trzyma swój własny licznik amunicji w metadanych. Amunicja pokazuje się jako przedmiot w inwentarzu gdy nie jest załadowana.

Sprawdź nazwy przedmiotów na twojej wersji w data/items.lua i data/weapons.lua. Wzór to ammo-<type>, na przykład ammo-9, ammo-rifle, ammo-shotgun, i przedmiot który nie istnieje nie może być dodany.

Trwałość i degradacja

Bronie się zużywają gdy są wypalane. Wartość durability w wpisie broni ustala jak szybko: wyższa liczba oznacza że degraduje się szybciej. Broń na zerowej trwałości nie pracuje aż do naprawy.

lua
['WEAPON_PISTOL'] = {
    label = 'Pistol',
    weight = 1130,
    durability = 0.05,
},

Obniż liczbę aby broń trwała dłużej. Naprawa to wybór gameplaya: wiele serwerów używa przedmiotu naprawy, przepisu craftu lub mechanika, i możesz ustawić trwałość z powrotem za pomocą SetMetadata (patrz metadane przedmiotu w ox_inventory).

Attachmenty (komponenty)

Attachmenty takie jak latarka, tłumik lub magazynek to przedmioty wymienione w grupie Components, i mają swoje własne wpisy w items.lua. Gracz umieszcza jeden przez użycie go podczas gdy broń jest wyposażona. Komponent jest przechowywany na przedmiocie broni, więc przetrwa ponowne połączenie.

Jeśli attachment nic nie robi, sprawdź te trzy rzeczy:

  • przedmiot komponentu istnieje w data/items.lua
  • jest wymieniony dla tej broni w data/weapons.lua
  • broń jest wyposażona gdy komponent jest używany

Możesz także dodać komponent z serwera poprzez metadane broni, na przykład gdy sprzedajesz przedbudowaną broń, ale testuj to z normalnym pistoletem najpierw, ponieważ format metadanych zależy od twojej wersji.

Sprzedawanie broni w sklepach

Bronie pojawiają się w sklepie jak każdy przedmiot, z tą samą nazwą:

lua
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },

Patrz sklepy ox_inventory dla reszty formatu sklepu. Jeśli skrypt sklepu wciąż daje bronie przez nativa, potrzebuje zmiany pokazanej powyżej.

Inne skrypty które dotykają broni

Menu admina, skrypty policji, skrypty ekwipunku i systemy gangów często używają natywów. Przeszukaj swoje zasoby dla tych wołań i zamień je:

lua
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)

Przeszukaj folder zasobów dla addWeapon i GiveWeaponToPed, potem zmień każdy hit na exports.ox_inventory:AddItem. Jeśli to zrobisz dla wszystkich na raz, bronie przestają znikać.

Checklist

Objaw Naprawić
Broń znika na ponownym połączeniu To nie był przedmiot; daj to za pomocą exports.ox_inventory:AddItem
AddItem zwraca false Nieznana nazwa, inwentarz pełny, lub zbyt ciężki
Broń nie pracuje Nazwa musi być wielkie litery, na przykład WEAPON_PISTOL, i istnieje w data/weapons.lua
Bez amunicji po użyciu Sprawdź ammoname broni i nazwę przedmiotu amunicji
Broń psuje się zbyt szybko Obniż durability w data/weapons.lua
Attachment nic nie robi Przedmiot komponentu i wpis broni muszą pasować, broń wyposażona

Szybkie odpowiedzi

Dlaczego moje bronie znikają gdy się ponownie połączę z ox_inventory?

Broń została dana pedowi za pomocą nativa, nie jako przedmiot. ox_inventory trzyma tylko bronie które są przedmiotami w twoim inwentarzu, więc cokolwiek dane w inny sposób jest tracone.

Jak dam broń graczowi z ox_inventory?

Użyj exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) na serwerze. Nazwa broni to nazwa przedmiotu, wielkimi literami.

Gdzie zmieniam wagę broni lub trwałość?

W ox_inventory/data/weapons.lua. Każda broń ma wpis z jej etykietą, wagą i trwałością, i amunicja i komponenty są zdefiniowane w tym samym pliku.

Skrypty bez tego problemu

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

Czytaj dalej