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:
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:
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')
endZastą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_PISTOLto forma którą ox_inventory używa. Stary skrypt który wysyławeapon_pistolmoż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:
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.
['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ą:
{ 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:
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.

