Browse docs
Inventory Items
Add the entries from your inventory's tab to its existing item catalogue. Update any entries with matching IDs in place. The item IDs in the catalogue and in your shops must match Phone.Item, Sim.RegisteredItem, and Sim.AnonymousItem in your active Phone configuration.
Register the phone for either device mode. With Phone.Unique = true, each handset needs its own inventory slot. With Phone.Unique = false, the phone item can stack. Add both SIM items when Sim.Enabled = true. Each physical SIM needs its own slot. Copy the matching PNGs from sky_phone/config/images/ to the image directory shown in your tab.
If you enable physical cell towers, also set up the physical tower items.
-- Adapter: ox; items: ox_inventory/data/items.lua; images: ox_inventory/web/images/
["phone"] = {
label = "iFruit Phone",
weight = 200,
stack = false,
close = true,
consume = 0,
client = { export = "sky_phone.UsePhoneItem" },
},
["sky_phone_sim_registered"] = {
label = "Registered SIM",
weight = 5,
stack = false,
close = true,
consume = 0,
client = { export = "sky_phone.UseSimItem" },
},
["sky_phone_sim_anonymous"] = {
label = "Anonymous SIM",
weight = 5,
stack = false,
close = true,
consume = 0,
client = { export = "sky_phone.UseSimItem" },
},
-- Optional repair item for physical cell towers. Reuse the existing lockpick item.
["radiotowerparts"] = {
label = "Radio tower parts",
weight = 1000,
stack = true,
close = true,
},
-- Adapter: tgiann; items: tgiann-inventory/items/; images: inventory_images/images/
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
hasMetadata = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
hasMetadata = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
hasMetadata = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Select the qb adapter. Merge into QBShared.Items in qb-core/shared/items.lua.
-- Copy the phone and SIM PNGs to qb-inventory/html/images/.
-- In character-based phone mode, set unique = false on the phone entry.
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Optional repair item for physical cell towers. Reuse the existing QB lockpick.
["radiotowerparts"] = {
name = "radiotowerparts",
label = "Radio tower parts",
weight = 1000,
type = "item",
image = "radiotowerparts.png",
unique = false,
useable = false,
shouldClose = false,
description = "Parts for repairing a radio tower",
},
-- Adapter: lj; items: qb-core/shared/items.lua; images: lj-inventory/html/images/
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Adapter: ps (QBCore); items: qb-core/shared/items.lua; images: ps-inventory/html/images/
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Adapter: jpr (QBCore); items: qb-core/shared/items.lua; images: jpr-inventory/html/images/
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Adapter: qs; items: qs-inventory/shared/items.lua (ESX) or qb-core/shared/items.lua (QB); images: qs-inventory/html/images/
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Adapter: codem; items: codem-inventory/config/itemlist.lua; images: configured mInventory image directory
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
description = "An anonymous physical SIM card",
},
-- Adapter: ak47; items: ak47_inventory/shared/items.lua; images: installed AK47 image directory
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
stacksize = 1,
close = true,
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
stacksize = 1,
close = true,
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
stacksize = 1,
close = true,
},
-- Adapter: jaksam; items: jaksam_inventory/_data/items.lua; images: jaksam_inventory/_images/
["phone"] = {
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
description = "A personal mobile phone",
stackable = false,
maxStack = 1,
close = true,
consume = 0,
},
["sky_phone_sim_registered"] = {
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
description = "A registered physical SIM card",
stackable = false,
maxStack = 1,
close = true,
consume = 0,
},
["sky_phone_sim_anonymous"] = {
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
description = "An anonymous physical SIM card",
stackable = false,
maxStack = 1,
close = true,
consume = 0,
},
-- Adapter: origen; items: origen_inventory/config/items.lua; images: installed Origen image directory
["phone"] = {
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
description = "A personal mobile phone",
stack = false,
close = true,
consume = 0,
},
["sky_phone_sim_registered"] = {
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
description = "A registered physical SIM card",
stack = false,
close = true,
consume = 0,
},
["sky_phone_sim_anonymous"] = {
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
description = "An anonymous physical SIM card",
stack = false,
close = true,
consume = 0,
},
-- Adapter: core; verify compatibility in the Phone installation guide.
-- qb-core/shared/items.lua: merge these items into QBShared.Items.
["phone"] = {
name = "phone",
label = "iFruit Phone",
weight = 200,
type = "item",
image = "phone.png",
unique = true,
useable = true,
shouldClose = true,
x = 1,
y = 1,
category = "sky_phone_devices",
description = "A personal mobile phone",
},
["sky_phone_sim_registered"] = {
name = "sky_phone_sim_registered",
label = "Registered SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_registered.png",
unique = true,
useable = true,
shouldClose = true,
x = 1,
y = 1,
category = "sky_phone_devices",
description = "A registered physical SIM card",
},
["sky_phone_sim_anonymous"] = {
name = "sky_phone_sim_anonymous",
label = "Anonymous SIM",
weight = 5,
type = "item",
image = "sky_phone_sim_anonymous.png",
unique = true,
useable = true,
shouldClose = true,
x = 1,
y = 1,
category = "sky_phone_devices",
description = "An anonymous physical SIM card",
},
Adapter: core (verify compatibility in the Phone installation guide)
Items: ESX items table using Core's installed schema, or enabled Core file mode
Images: installed Core image directory
Name Label Weight Dimensions Category
phone iFruit Phone 200 1 x 1 sky_phone_devices
sky_phone_sim_registered Registered SIM 5 1 x 1 sky_phone_devices
sky_phone_sim_anonymous Anonymous SIM 5 1 x 1 sky_phone_devices
Category sky_phone_devices: no stack property
CloseAfterUse: include all three item names
Adapter: one
Persistent editor: /inventory:manage (one_inventory.admin)
Images: one_inventory/web/images/ or editor upload
Name Label Weight Image
phone iFruit Phone 200 phone.png
sky_phone_sim_registered Registered SIM 5 sky_phone_sim_registered.png
sky_phone_sim_anonymous Anonymous SIM 5 sky_phone_sim_anonymous.png
All three: unique = true, close = true, consume = 0
Leave clientExport, serverExport, clientEvent and serverEvent unset.
Adapter: mf (ESX; verify callback compatibility in the installation guide)
Items: ESX items table after MF's schema installation
Images and weight units: installed MF configuration
Name Label unique degrademodifier
phone iFruit Phone 1 0.0
sky_phone_sim_registered Registered SIM 1 0.0
sky_phone_sim_anonymous Anonymous SIM 1 0.0
Adapter: smx (ESX)
Items: automatically registered by Phone's SMX adapter
Images: installed SMX configuration
Phone.Item: phone
Phone.Unique: false
Sim.Enabled: false
This bridge stores one identity per character and item name.
Use another provider for independently transferable phones and physical SIMs.
Adapter: hex (ESX)
Items: active ESX item catalogue
Images: installed inventory UI configuration
name: phone (or configured Phone.Item)
label: iFruit Phone
weight: your server's item weight convention
rare: 0 (if present in the installed schema)
can_remove: 1 (if present in the installed schema)
Phone.Unique and Sim.Enabled are automatically disabled for this adapter.
Adapter: esx (ESX)
Items: active ESX item catalogue
Images: installed inventory UI configuration
name: phone (or configured Phone.Item)
label: iFruit Phone
weight: your server's item weight convention
rare: 0 (if present in the installed schema)
can_remove: 1 (if present in the installed schema)
Phone.Unique and Sim.Enabled are automatically disabled for this adapter.
Physical tower items
Physical towers are disabled by default. You can enable them and check the item IDs in /phonepanel under Phone configurator → Cell towers → Physical towers, or under Config.CellTowers.Props in config/config.lua in file mode. Register the configured IDs in your active inventory and make the items available through your usual shops or item distribution. GitHub inventory setup
| Default item ID | Purpose | Setting |
|---|---|---|
lockpick | Opens a closed tower cabinet. Each unlock uses one lockpick. | CellTowers.Props.LockpickItem |
radiotowerparts | Repairs a damaged tower. A successful repair uses one part. | CellTowers.Props.RepairItem |
Reuse your inventory's existing lockpick entry. If you use a custom item ID, register it in the same catalogue. Sky Phone handles both items through the cabinet interaction in the world.
The qb-inventory and ox_inventory tabs include a copyable radiotowerparts entry. Copy radiotowerparts.png from sky_phone/config/images/ to the image directory shown in your tab. For release ZIPs that predate the icon, use the direct PNG download.
For other providers, register the tower materials as ordinary stackable items in the active catalogue. For an ESX database catalogue, add missing rows to items using your installed schema and weight convention.