--[[ migrations/qb_inventory_items.lua Every wd_phone item for qb-inventory (QBCore), in one file. COPY THESE ENTRIES into the QBShared.Items table of: qb-core/shared/items.lua and copy inventory/*.png to qb-inventory/html/images/ (one image per item, named after it; all SIMs share nova_sim.png). Do NOT require/import this file and do NOT let wd_phone overwrite qb-core files. This is a copy/paste installation snippet only. It mirrors migrations/ox_inventory_items.lua (a test keeps the two in step). Core items (phones and SIMs) are required. The groups after them are optional: leave a group out if you disable that feature in its config. Item names must match the configs: phones in config/devices.lua, SIMs in config/sims.lua, NovaBuds in Config.NovaPods.models (config/novapods.lua), speakers in Config.Speakers.models (config/speakers.lua). Items with their own identity (phones, SIMs, NovaBuds, speakers, routers, power banks) are unique = true: their metadata (`info`) carries it. useable = true items are registered by wd_phone itself (QBCore.Functions.CreateUseableItem, bridge/inventory/qb_inventory.lua) when Config.Inventory selects qb-inventory; nothing else to add. Needs qb-inventory 2.1.0 or newer. ]] -- ========================================================================= -- CORE: Phones -- ========================================================================= -- Using one opens the phone (wd_phone.usePhone). Wolfden Phone and Wolfden Phone Pro are one item per -- colour (nova_phone_ocean, nova_business_rosegold, ...) and the phone's frame -- always matches it; Wolfden Phone Secure is the single black nova_secure. nova_secure = { name = 'nova_secure', label = 'Wolfden Phone Secure', weight = 175, type = 'item', image = 'nova_secure.png', unique = true, useable = true, shouldClose = true, description = 'A rugged Wolfden Phone Secure field terminal with cameras and a green tactical display.', }, -- One item per colour: the phone's finish (on-screen frame and side buttons) -- is the item's colour. Names match config/devices.lua and the image files. nova_phone_midnight = { name = 'nova_phone_midnight', label = 'Wolfden Phone (Midnight Black)', weight = 180, type = 'item', image = 'nova_phone_midnight.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Midnight Black.', }, nova_phone_pearl = { name = 'nova_phone_pearl', label = 'Wolfden Phone (Pearl White)', weight = 180, type = 'item', image = 'nova_phone_pearl.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Pearl White.', }, nova_phone_titanium = { name = 'nova_phone_titanium', label = 'Wolfden Phone (Titanium Grey)', weight = 180, type = 'item', image = 'nova_phone_titanium.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Titanium Grey.', }, nova_phone_rosegold = { name = 'nova_phone_rosegold', label = 'Wolfden Phone (Rose Gold)', weight = 180, type = 'item', image = 'nova_phone_rosegold.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Rose Gold.', }, nova_phone_ocean = { name = 'nova_phone_ocean', label = 'Wolfden Phone (Ocean Blue)', weight = 180, type = 'item', image = 'nova_phone_ocean.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Ocean Blue.', }, nova_phone_violet = { name = 'nova_phone_violet', label = 'Wolfden Phone (Violet)', weight = 180, type = 'item', image = 'nova_phone_violet.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Violet.', }, nova_phone_red = { name = 'nova_phone_red', label = 'Wolfden Phone (Red)', weight = 180, type = 'item', image = 'nova_phone_red.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Red.', }, nova_phone_forest = { name = 'nova_phone_forest', label = 'Wolfden Phone (Forest Green)', weight = 180, type = 'item', image = 'nova_phone_forest.png', unique = true, useable = true, shouldClose = true, description = 'A modern NovaOS smartphone in Forest Green.', }, nova_business_midnight = { name = 'nova_business_midnight', label = 'Wolfden Phone Pro (Midnight Black)', weight = 190, type = 'item', image = 'nova_business_midnight.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Midnight Black.', }, nova_business_pearl = { name = 'nova_business_pearl', label = 'Wolfden Phone Pro (Pearl White)', weight = 190, type = 'item', image = 'nova_business_pearl.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Pearl White.', }, nova_business_titanium = { name = 'nova_business_titanium', label = 'Wolfden Phone Pro (Titanium Grey)', weight = 190, type = 'item', image = 'nova_business_titanium.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Titanium Grey.', }, nova_business_rosegold = { name = 'nova_business_rosegold', label = 'Wolfden Phone Pro (Rose Gold)', weight = 190, type = 'item', image = 'nova_business_rosegold.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Rose Gold.', }, nova_business_ocean = { name = 'nova_business_ocean', label = 'Wolfden Phone Pro (Ocean Blue)', weight = 190, type = 'item', image = 'nova_business_ocean.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Ocean Blue.', }, nova_business_violet = { name = 'nova_business_violet', label = 'Wolfden Phone Pro (Violet)', weight = 190, type = 'item', image = 'nova_business_violet.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Violet.', }, nova_business_red = { name = 'nova_business_red', label = 'Wolfden Phone Pro (Red)', weight = 190, type = 'item', image = 'nova_business_red.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Red.', }, nova_business_forest = { name = 'nova_business_forest', label = 'Wolfden Phone Pro (Forest Green)', weight = 190, type = 'item', image = 'nova_business_forest.png', unique = true, useable = true, shouldClose = true, description = 'NovaOS with a dedicated work profile, in Forest Green.', }, -- ========================================================================= -- CORE: SIM cards -- ========================================================================= -- Each activated SIM is uniquely identifiable (unique = true). Only nova_sim / -- nova_business_sim open the SIM details on use (wd_phone.useSim). A blank SIM -- is activated at a carrier shop. nova_sim_blank = { name = 'nova_sim_blank', label = 'Blank Nova SIM', weight = 5, type = 'item', image = 'nova_sim.png', unique = true, useable = false, shouldClose = true, description = 'An inactive SIM. Activate it at a carrier shop.', }, nova_sim = { name = 'nova_sim', label = 'Nova SIM', weight = 5, type = 'item', image = 'nova_sim.png', unique = true, useable = true, shouldClose = true, description = 'An activated Nova SIM card.', }, nova_business_sim = { name = 'nova_business_sim', label = 'Nova Business SIM', weight = 5, type = 'item', image = 'nova_sim.png', unique = true, useable = true, shouldClose = true, description = 'A business-tier Nova SIM card.', }, -- ========================================================================= -- OPTIONAL: Charging (config/charging.lua) -- ========================================================================= -- - nova_car_charger: using it in a vehicle with the engine running plugs a -- phone / NovaBuds in (or unplugs). It unplugs when you get out. -- - nova_power_bank: unique = true (each bank has its own charge, shown in its -- description). Using it plugs a phone / NovaBuds in. Recharge it on a -- charging pad. -- - nova_charging_pad: using it starts placement (scroll rotates, E places, -- Backspace cancels). Put a phone, NovaBuds or a power bank on it with -- ox_target (or the [E] prompt). Only its owner can pick it up again, when it is empty. nova_car_charger = { name = 'nova_car_charger', label = 'Car Phone Charger', weight = 120, type = 'item', image = 'nova_car_charger.png', unique = false, useable = true, shouldClose = true, description = 'Use it in a vehicle with the engine running to charge your phone or NovaBuds.', }, nova_power_bank = { name = 'nova_power_bank', label = 'Power Bank', weight = 250, type = 'item', image = 'nova_power_bank.png', unique = true, useable = true, shouldClose = true, description = 'Charges your phone or NovaBuds on the go. Recharge it on a charging pad.', }, nova_charging_pad = { name = 'nova_charging_pad', label = 'Charging Pad', weight = 400, type = 'item', image = 'nova_charging_pad.png', unique = false, useable = true, shouldClose = true, description = 'Place it, then put a phone, NovaBuds or a power bank on it to charge.', }, -- ========================================================================= -- OPTIONAL: Wi-Fi router (config/wifi.lua) -- ========================================================================= -- A picked-up router keeps its network, password and package in its metadata -- `routerId`. Using it starts placement (wd_phone.useRouter): scroll rotates, -- E places, Backspace cancels. Only its owner can pick it up again. nova_router = { name = 'nova_router', label = 'Wi-Fi Router', weight = 800, type = 'item', image = 'nova_router.png', unique = true, useable = true, shouldClose = true, description = 'Place it to share Wi-Fi nearby. Manage it in the Routers app.', }, -- ========================================================================= -- OPTIONAL: NovaBuds and Nova Studio (config/novapods.lua) -- ========================================================================= -- Each pair has its own `novapodsId`, pairing and battery. Using one puts it -- on / takes it off (wd_phone.useNovaPods). Pair them to a phone in -- Settings -> Bluetooth. novapods_white = { name = 'novapods_white', label = 'NovaBuds · White', weight = 60, type = 'item', image = 'novapods_white.png', unique = true, useable = true, shouldClose = true, description = 'Wireless earbuds. Use to put them in; pair them in Settings -> Bluetooth.', }, novapods_black = { name = 'novapods_black', label = 'NovaBuds · Black', weight = 60, type = 'item', image = 'novapods_black.png', unique = true, useable = true, shouldClose = true, description = 'Wireless earbuds. Use to put them in; pair them in Settings -> Bluetooth.', }, novapods_max_silver = { name = 'novapods_max_silver', label = 'Nova Studio · Silver', weight = 380, type = 'item', image = 'novapods_max_silver.png', unique = true, useable = true, shouldClose = true, description = 'Over-ear wireless headphones. Worn around the neck; use to put them on. Pair them in Settings -> Bluetooth.', }, novapods_max_spacegray = { name = 'novapods_max_spacegray', label = 'Nova Studio · Space Gray', weight = 380, type = 'item', image = 'novapods_max_spacegray.png', unique = true, useable = true, shouldClose = true, description = 'Over-ear wireless headphones. Worn around the neck; use to put them on. Pair them in Settings -> Bluetooth.', }, novapods_max_skyblue = { name = 'novapods_max_skyblue', label = 'Nova Studio · Sky Blue', weight = 380, type = 'item', image = 'novapods_max_skyblue.png', unique = true, useable = true, shouldClose = true, description = 'Over-ear wireless headphones. Worn around the neck; use to put them on. Pair them in Settings -> Bluetooth.', }, novapods_max_pink = { name = 'novapods_max_pink', label = 'Nova Studio · Pink', weight = 380, type = 'item', image = 'novapods_max_pink.png', unique = true, useable = true, shouldClose = true, description = 'Over-ear wireless headphones. Worn around the neck; use to put them on. Pair them in Settings -> Bluetooth.', }, novapods_max_green = { name = 'novapods_max_green', label = 'Nova Studio · Green', weight = 380, type = 'item', image = 'novapods_max_green.png', unique = true, useable = true, shouldClose = true, description = 'Over-ear wireless headphones. Worn around the neck; use to put them on. Pair them in Settings -> Bluetooth.', }, -- ========================================================================= -- OPTIONAL: Bluetooth speakers (config/speakers.lua) -- ========================================================================= -- Each speaker has its own `speakerId`, pairing and battery. Using one sets it -- down (wd_phone.useSpeaker). Pair it in Settings -> Bluetooth, then pick it as -- Music's output (Now Playing or Control Center). The Nova Mini also plays -- from your hip while you carry it. nova_speaker_mini = { name = 'nova_speaker_mini', label = 'Nova Mini Speaker', weight = 450, type = 'item', image = 'nova_speaker_mini.png', unique = true, useable = true, shouldClose = true, description = 'Portable Bluetooth speaker. Plays your phone\'s music while you carry it, or use it to set it down. Pair it in Settings -> Bluetooth.', }, nova_speaker_boom = { name = 'nova_speaker_boom', label = 'Nova Boom Speaker', weight = 3200, type = 'item', image = 'nova_speaker_boom.png', unique = true, useable = true, shouldClose = true, description = 'Loud party speaker. Use it to set it down, then play your phone\'s music on it. Pair it in Settings -> Bluetooth.', }, -- ========================================================================= -- OPTIONAL: SD card (Config.MobileShops.sdCard) -- ========================================================================= -- A blank memory card, sold at the phone stores. Not used on its own. sd_card = { name = 'sd_card', label = 'SD Card', weight = 10, type = 'item', image = 'sd_card.png', unique = false, useable = false, shouldClose = true, description = 'A blank memory card.', }, -- ========================================================================= -- OPTIONAL: Shade (config/shade.lua) -- ========================================================================= -- - shade_sdcard: Shade is not in the Nova Store. Using the card installs -- Shade on the phone you are using and uses it up (Config.Shade.install). -- - shade_key: a physical key to a Shade room, cut by its owner in the app. -- unique = true: each key carries its room's signed `shadeKeyId`. Carrying -- it opens that room; it is not used. shade_sdcard = { name = 'shade_sdcard', label = 'Unmarked SD Card', weight = 10, type = 'item', image = 'shade_sdcard.png', unique = false, useable = true, shouldClose = true, description = 'A blank-looking memory card. Something is on it.', }, shade_key = { name = 'shade_key', label = 'Shade Key', weight = 15, type = 'item', image = 'shade_key.png', unique = true, useable = false, shouldClose = true, description = 'A small encrypted key. It opens a room on Shade.', }, -- ========================================================================= -- OPTIONAL: Racing (config/racing.lua) -- ========================================================================= -- - racing_usb: carrying it opens the underground races in the Racing app -- (Config.Racing.underground.item, re-checked on every underground list, -- join and bet). It is not used. Sold by the black-market dealer. racing_usb = { name = 'racing_usb', label = 'Racing USB', weight = 20, type = 'item', image = 'racing_usb.png', unique = false, useable = false, shouldClose = true, description = 'A scuffed USB-C flash drive that plugs into a phone, with a checkered flag scratched into it.', },