Browse docs
Inventory items
Install the four weapons and the three ammunition items below. Choose the tab
matching the inventory configured in Sky Base. Merge missing entries into the
existing tables; keep their other entries and do not paste a second return wrapper.
Weapons and ammunition belong in different tables in some inventories. Follow the destination shown in each block. QBCore and native ESX also need the weapon catalogue entries under Framework weapon catalogues.
The pack consumes one arrow, bolt or stone on the server for an authorized shot.
Do not add an inventory ammo-item link, automatic reload consumption or a separate
ammunition-use callback. In particular, leave ammoname unset. The Spear has no
ammunition item: throwing removes the weapon, and recovery returns it.
Weapons
Use the inventory's normal weapon equip action. Keep these entries as weapons, with one weapon per inventory slot.
-- Add inside Weapons in ox_inventory/data/weapons.lua.
["WEAPON_SKY_BOW"] = {
label = "Recurve Bow",
weight = 1400,
durability = 0,
anim = { "sky_hunting_archery", "idle", 200, "sky_hunting_archery", "lower", 400 },
client = { image = "WEAPON_SKY_BOW.png" },
},
["WEAPON_SKY_CROSSBOW"] = {
label = "Crossbow",
weight = 3200,
durability = 0,
client = { image = "WEAPON_SKY_CROSSBOW.png" },
},
["WEAPON_SKY_SPEAR"] = {
label = "Spear",
weight = 1400,
durability = 0,
description = "A steel-tipped ash spear for thrusting and throwing.",
client = { image = "WEAPON_SKY_SPEAR.png" },
},
["WEAPON_SKY_SLINGSHOT"] = {
label = "Slingshot",
weight = 240,
durability = 0,
anim = { "sky_slingshot_body", "idle", 200, "sky_slingshot_body", "lower", 400 },
client = { image = "WEAPON_SKY_SLINGSHOT.png" },
},
-- Merge into the active QS weapon-item catalogue for your framework.
["weapon_sky_bow"] = {
name = "weapon_sky_bow",
label = "Recurve Bow",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_BOW.png",
unique = true,
useable = false,
shouldClose = true,
description = "A recurve bow for drawing and releasing arrows.",
},
["weapon_sky_crossbow"] = {
name = "weapon_sky_crossbow",
label = "Crossbow",
weight = 3200,
type = "weapon",
image = "WEAPON_SKY_CROSSBOW.png",
unique = true,
useable = false,
shouldClose = true,
description = "A crossbow that fires one bolt before reloading.",
},
["weapon_sky_spear"] = {
name = "weapon_sky_spear",
label = "Spear",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_SPEAR.png",
unique = true,
useable = false,
shouldClose = true,
description = "A steel-tipped ash spear for thrusting and throwing.",
},
["weapon_sky_slingshot"] = {
name = "weapon_sky_slingshot",
label = "Slingshot",
weight = 240,
type = "weapon",
image = "WEAPON_SKY_SLINGSHOT.png",
unique = true,
useable = false,
shouldClose = true,
description = "A handheld slingshot for launching stones.",
},
-- Add inside QBCore.Shared.Items in qb-core/shared/items.lua.
["weapon_sky_bow"] = {
name = "weapon_sky_bow",
label = "Recurve Bow",
weight = 1400,
type = "weapon",
ammotype = nil,
image = "WEAPON_SKY_BOW.png",
unique = true,
useable = false,
description = "A recurve bow for drawing and releasing arrows.",
},
["weapon_sky_crossbow"] = {
name = "weapon_sky_crossbow",
label = "Crossbow",
weight = 3200,
type = "weapon",
ammotype = nil,
image = "WEAPON_SKY_CROSSBOW.png",
unique = true,
useable = false,
description = "A crossbow that fires one bolt before reloading.",
},
["weapon_sky_spear"] = {
name = "weapon_sky_spear",
label = "Spear",
weight = 1400,
type = "weapon",
ammotype = nil,
image = "WEAPON_SKY_SPEAR.png",
unique = true,
useable = false,
description = "A steel-tipped ash spear for thrusting and throwing.",
},
["weapon_sky_slingshot"] = {
name = "weapon_sky_slingshot",
label = "Slingshot",
weight = 240,
type = "weapon",
ammotype = nil,
image = "WEAPON_SKY_SLINGSHOT.png",
unique = true,
useable = false,
description = "A handheld slingshot for launching stones.",
},
-- Add to the weapon definitions in tgiann-inventory/items/weapons.lua.
["weapon_sky_bow"] = {
label = "Recurve Bow",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_BOW.png",
unique = true,
hasMetadata = true,
description = "A recurve bow for drawing and releasing arrows.",
},
["weapon_sky_crossbow"] = {
label = "Crossbow",
weight = 3200,
type = "weapon",
image = "WEAPON_SKY_CROSSBOW.png",
unique = true,
hasMetadata = true,
description = "A crossbow that fires one bolt before reloading.",
},
["weapon_sky_spear"] = {
label = "Spear",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_SPEAR.png",
unique = true,
hasMetadata = true,
description = "A steel-tipped ash spear for thrusting and throwing.",
},
["weapon_sky_slingshot"] = {
label = "Slingshot",
weight = 240,
type = "weapon",
image = "WEAPON_SKY_SLINGSHOT.png",
unique = true,
hasMetadata = true,
description = "A handheld slingshot for launching stones.",
},
-- Add to jaksam_inventory/_data/items.lua. Weights are kilograms.
["WEAPON_SKY_BOW"] = {
label = "Recurve Bow",
weight = 1.400,
stackable = false,
maxStack = 1,
type = "weapon",
rarity = "common",
image = "WEAPON_SKY_BOW.png",
description = "A recurve bow for drawing and releasing arrows.",
},
["WEAPON_SKY_CROSSBOW"] = {
label = "Crossbow",
weight = 3.200,
stackable = false,
maxStack = 1,
type = "weapon",
rarity = "common",
image = "WEAPON_SKY_CROSSBOW.png",
description = "A crossbow that fires one bolt before reloading.",
},
["WEAPON_SKY_SPEAR"] = {
label = "Spear",
weight = 1.400,
stackable = false,
maxStack = 1,
type = "weapon",
rarity = "common",
image = "WEAPON_SKY_SPEAR.png",
description = "A steel-tipped ash spear for thrusting and throwing.",
},
["WEAPON_SKY_SLINGSHOT"] = {
label = "Slingshot",
weight = 0.240,
stackable = false,
maxStack = 1,
type = "weapon",
rarity = "common",
image = "WEAPON_SKY_SLINGSHOT.png",
description = "A handheld slingshot for launching stones.",
},
-- Add to codem-inventory/config/itemlist.lua.
["weapon_sky_bow"] = {
name = "weapon_sky_bow",
label = "Recurve Bow",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_BOW.png",
unique = true,
useable = false,
description = "A recurve bow for drawing and releasing arrows.",
},
["weapon_sky_crossbow"] = {
name = "weapon_sky_crossbow",
label = "Crossbow",
weight = 3200,
type = "weapon",
image = "WEAPON_SKY_CROSSBOW.png",
unique = true,
useable = false,
description = "A crossbow that fires one bolt before reloading.",
},
["weapon_sky_spear"] = {
name = "weapon_sky_spear",
label = "Spear",
weight = 1400,
type = "weapon",
image = "WEAPON_SKY_SPEAR.png",
unique = true,
useable = false,
description = "A steel-tipped ash spear for thrusting and throwing.",
},
["weapon_sky_slingshot"] = {
name = "weapon_sky_slingshot",
label = "Slingshot",
weight = 240,
type = "weapon",
image = "WEAPON_SKY_SLINGSHOT.png",
unique = true,
useable = false,
description = "A handheld slingshot for launching stones.",
},
-- Add inside Weapons in codem-inventoryv2/data/weapons.lua.
["WEAPON_SKY_BOW"] = {
type = "weapon",
label = "Recurve Bow",
weight = 1400,
durability = 0,
client = { image = "WEAPON_SKY_BOW.png" },
},
["WEAPON_SKY_CROSSBOW"] = {
type = "weapon",
label = "Crossbow",
weight = 3200,
durability = 0,
client = { image = "WEAPON_SKY_CROSSBOW.png" },
},
["WEAPON_SKY_SPEAR"] = {
type = "weapon",
label = "Spear",
weight = 1400,
durability = 0,
client = { image = "WEAPON_SKY_SPEAR.png" },
},
["WEAPON_SKY_SLINGSHOT"] = {
type = "weapon",
label = "Slingshot",
weight = 240,
durability = 0,
client = { image = "WEAPON_SKY_SLINGSHOT.png" },
},
For native ESX, weapons are loadout entries rather than ordinary database items.
Use the ESX weapon catalogue below and add only the ammunition rows to the item
database. For inventory versions with an additional custom-weapon registry or
validation list, include all four WEAPON_SKY_* identifiers in that provider's
normal weapon setup.
Ammunition
These are ordinary stackable items, not inventory reload items. They do not need
a client event or export. Keep the identifiers aligned with arrowItem, boltItem
and stoneItem in config/weapons/ if you customize them.
-- Add inside the existing return table in ox_inventory/data/items.lua.
["hunting_arrow"] = {
label = "Bow Arrow",
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
weight = 25,
stack = true,
close = false,
client = { image = "hunting_arrow.png" },
},
["crossbow_bolt"] = {
label = "Crossbow Bolt",
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
weight = 35,
stack = true,
close = false,
client = { image = "crossbow_bolt.png" },
},
["slingshot_stone"] = {
label = "Slingshot Stone",
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
weight = 20,
stack = true,
close = false,
client = { image = "slingshot_stone.png" },
},
-- Merge into the active QS ordinary-item catalogue.
["hunting_arrow"] = {
name = "hunting_arrow",
label = "Bow Arrow",
weight = 25,
type = "item",
image = "hunting_arrow.png",
unique = false,
rare = "common",
useable = false,
shouldClose = false,
combinable = nil,
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
},
["crossbow_bolt"] = {
name = "crossbow_bolt",
label = "Crossbow Bolt",
weight = 35,
type = "item",
image = "crossbow_bolt.png",
unique = false,
rare = "common",
useable = false,
shouldClose = false,
combinable = nil,
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
},
["slingshot_stone"] = {
name = "slingshot_stone",
label = "Slingshot Stone",
weight = 20,
type = "item",
image = "slingshot_stone.png",
unique = false,
rare = "common",
useable = false,
shouldClose = false,
combinable = nil,
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
},
-- Add inside QBCore.Shared.Items in qb-core/shared/items.lua.
["hunting_arrow"] = {
name = "hunting_arrow",
label = "Bow Arrow",
weight = 25,
type = "item",
image = "hunting_arrow.png",
unique = false,
useable = false,
shouldClose = false,
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
},
["crossbow_bolt"] = {
name = "crossbow_bolt",
label = "Crossbow Bolt",
weight = 35,
type = "item",
image = "crossbow_bolt.png",
unique = false,
useable = false,
shouldClose = false,
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
},
["slingshot_stone"] = {
name = "slingshot_stone",
label = "Slingshot Stone",
weight = 20,
type = "item",
image = "slingshot_stone.png",
unique = false,
useable = false,
shouldClose = false,
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
},
-- Add to the ordinary item definitions in tgiann-inventory/items/.
["hunting_arrow"] = {
label = "Bow Arrow",
weight = 25,
type = "item",
image = "hunting_arrow.png",
hasMetadata = false,
useable = false,
shouldClose = false,
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
},
["crossbow_bolt"] = {
label = "Crossbow Bolt",
weight = 35,
type = "item",
image = "crossbow_bolt.png",
hasMetadata = false,
useable = false,
shouldClose = false,
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
},
["slingshot_stone"] = {
label = "Slingshot Stone",
weight = 20,
type = "item",
image = "slingshot_stone.png",
hasMetadata = false,
useable = false,
shouldClose = false,
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
},
-- Add to jaksam_inventory/_data/items.lua. Weights are kilograms.
["hunting_arrow"] = {
label = "Bow Arrow",
weight = 0.025,
stackable = true,
maxStack = 100,
close = false,
type = "item",
rarity = "common",
image = "hunting_arrow.png",
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
},
["crossbow_bolt"] = {
label = "Crossbow Bolt",
weight = 0.035,
stackable = true,
maxStack = 100,
close = false,
type = "item",
rarity = "common",
image = "crossbow_bolt.png",
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
},
["slingshot_stone"] = {
label = "Slingshot Stone",
weight = 0.020,
stackable = true,
maxStack = 100,
close = false,
type = "item",
rarity = "common",
image = "slingshot_stone.png",
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
},
-- Add to codem-inventory/config/itemlist.lua.
["hunting_arrow"] = {
name = "hunting_arrow",
label = "Bow Arrow",
weight = 25,
type = "item",
image = "hunting_arrow.png",
unique = false,
useable = false,
shouldClose = false,
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
},
["crossbow_bolt"] = {
name = "crossbow_bolt",
label = "Crossbow Bolt",
weight = 35,
type = "item",
image = "crossbow_bolt.png",
unique = false,
useable = false,
shouldClose = false,
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
},
["slingshot_stone"] = {
name = "slingshot_stone",
label = "Slingshot Stone",
weight = 20,
type = "item",
image = "slingshot_stone.png",
unique = false,
useable = false,
shouldClose = false,
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
},
-- Add inside the existing return table in codem-inventoryv2/data/items.lua.
["hunting_arrow"] = {
label = "Bow Arrow",
description = "Arrow for the Recurve Bow. Consumed when the string is released.",
weight = 25,
stack = true,
close = false,
},
["crossbow_bolt"] = {
label = "Crossbow Bolt",
description = "A steel-tipped bolt for the Crossbow. Consumed when fired.",
weight = 35,
stack = true,
close = false,
},
["slingshot_stone"] = {
label = "Slingshot Stone",
description = "A smooth stone for the Slingshot. Consumed when the pouch is released.",
weight = 20,
stack = true,
close = false,
},
INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('hunting_arrow', 'Bow Arrow', 25, 0, 1),
('crossbow_bolt', 'Crossbow Bolt', 35, 0, 1),
('slingshot_stone', 'Slingshot Stone', 20, 0, 1);
Framework weapon catalogues
QBCore
For QB inventories, also merge these hash-keyed entries into
QBCore.Shared.Weapons in qb-core/shared/weapons.lua. Keep ammotype = nil;
the pack handles its projectiles separately from inventory reloads.
[joaat("WEAPON_SKY_BOW")] = { name = "weapon_sky_bow", label = "Recurve Bow", weapontype = "Rifle", ammotype = nil, damagereason = "Recurve Bow" },
[joaat("WEAPON_SKY_CROSSBOW")] = { name = "weapon_sky_crossbow", label = "Crossbow", weapontype = "Rifle", ammotype = nil, damagereason = "Crossbow" },
[joaat("WEAPON_SKY_SPEAR")] = { name = "weapon_sky_spear", label = "Spear", weapontype = "Melee", ammotype = nil, damagereason = "Spear" },
[joaat("WEAPON_SKY_SLINGSHOT")] = { name = "weapon_sky_slingshot", label = "Slingshot", weapontype = "Pistol", ammotype = nil, damagereason = "Slingshot" },
Native ESX
When Sky Base uses native ESX loadout weapons, add these entries inside
Config.Weapons in es_extended/config.weapons.lua before framework startup.
These entries do not belong in the SQL items table. An ESX server using an
item-based inventory follows that inventory's weapon tab instead.
{ name = "WEAPON_SKY_BOW", label = "Recurve Bow", components = {} },
{ name = "WEAPON_SKY_CROSSBOW", label = "Crossbow", components = {} },
{ name = "WEAPON_SKY_SPEAR", label = "Spear", components = {} },
{ name = "WEAPON_SKY_SLINGSHOT", label = "Slingshot", components = {} },
Inventory images
Copy the PNGs from sky_primitive_weapons/config/images/ into your inventory's
image directory. All seven images are directly inside this folder.
Keep the supplied filenames and their letter case; the definitions above map
the weapon icons explicitly.
| Inventory | Image directory |
|---|---|
| ox_inventory | ox_inventory/web/images/ |
| QS inventory | The image directory configured by your installed QS version |
| QB inventories | The selected inventory's html/images/ directory |
| Tgiann inventory | inventory_images/images/ |
| Jaksam inventory | jaksam_inventory/_images/ |
| CodeM inventory | codem-inventory/html/itemimages/ |
| CodeM Inventory V2 | The separate codem-inventory-images resource configured by CodeM V2 |
| Native ESX | The image directory used by your ESX inventory interface, if it displays icons |
| Weapon or ammunition | Image filename |
|---|---|
| Recurve Bow | WEAPON_SKY_BOW.png |
| Crossbow | WEAPON_SKY_CROSSBOW.png |
| Spear | WEAPON_SKY_SPEAR.png |
| Slingshot | WEAPON_SKY_SLINGSHOT.png |
| Bow Arrow | hunting_arrow.png |
| Crossbow Bolt | crossbow_bolt.png |
| Slingshot Stone | slingshot_stone.png |
Apply the definitions
Fully restart the server after installing the weapon definitions and reconnect with a fresh FiveM client. Then grant each weapon and its matching ammunition through your normal inventory administration tools. Confirm that each weapon equips, one authorized shot removes one matching ammunition item, and a thrown Spear can be recovered once. Existing installations can keep their saved item contents when these identifiers are unchanged.