Main
return {
-- Locale Configuration
-- Defines which language file to use from the locales folder
-- Available: 'en' for English, 'de' for German (Deutsch)
Locale = 'en',
-- Enable debug prints and polyzones
Debug = false,
-- Saving Configuration
-- All shop data is automatically saved when the server shuts down/restarts via txAdmin.
-- Enable interval saving if you also want periodic saves while the server is running,
-- as a safety net against crashes or unexpected shutdowns.
-- Warning: There is a LOT of data to save. I'd recommend keeping this disabled and if you do want ie enabled, make sure the interval isn't super frequent.
Saving = {
enabled = false, -- Enable periodic saving while the server is running
interval = 30, -- How often to save (in minutes)
},
-- Weapon Serial Number Configuration
-- When enabled, weapons purchased from shops will receive a unique serial number as metadata
-- Default format mirrors ox_inventory: [6-digit-number][3-letter-code][6-digit-number]
-- Example: 482917ABK637201
WeaponSerial = {
enabled = true, -- Enable/disable serial number generation for weapons
registerToOwner = true, -- If true, weapon metadata will include the buyer's character name
-- Serial Format Configuration
-- Controls how the serial number is generated
-- Default values match ox_inventory's format
serialFormat = {
digitCount = 6, -- Number of random digits on each side (default: 6, produces 100000-999999)
letterCount = 3, -- Number of random uppercase letters in the middle (default: 3)
excludedTexts = { 'POL', 'EMS' }, -- Letter combinations that won't be randomly generated (reserved for prefixes)
},
-- Optional: Define a default serial prefix (used as the middle letter block instead of random letters)
-- Must be <= letterCount characters. Set to nil to generate random letters
serialPrefix = nil,
-- Per-shop-type serial prefixes (overrides the global serialPrefix for specific shop types)
-- Useful for police armories, military shops, etc.
shopTypePrefixes = {
['police_armory'] = 'POL', -- Police armory weapons get POL prefix (e.g., 482917POL637201)
-- ['military'] = 'MIL',
},
-- Weapon items that should receive a serial number
-- Only items in this list will get serials. Items not listed (melee, throwables, utility) are skipped.
-- If an item has the WEAPON_ prefix but is NOT in this list, it will NOT receive a serial.
-- This list is based on ox_inventory's weapon data (firearms + stungun).
-- You can add or remove items as needed for your server.
serialWeapons = {
-- Pistols
'WEAPON_PISTOL',
'WEAPON_PISTOL_MK2',
'WEAPON_PISTOL50',
'WEAPON_PISTOLXM3',
'WEAPON_APPISTOL',
'WEAPON_CERAMICPISTOL',
'WEAPON_COMBATPISTOL',
'WEAPON_DOUBLEACTION',
'WEAPON_GADGETPISTOL',
'WEAPON_HEAVYPISTOL',
'WEAPON_MARKSMANPISTOL',
'WEAPON_NAVYREVOLVER',
'WEAPON_REVOLVER',
'WEAPON_REVOLVER_MK2',
'WEAPON_SNSPISTOL',
'WEAPON_SNSPISTOL_MK2',
'WEAPON_VINTAGEPISTOL',
'WEAPON_FLAREGUN',
'WEAPON_TECPISTOL',
-- SMGs
'WEAPON_SMG',
'WEAPON_SMG_MK2',
'WEAPON_ASSAULTSMG',
'WEAPON_COMBATPDW',
'WEAPON_MACHINEPISTOL',
'WEAPON_MICROSMG',
'WEAPON_MINISMG',
-- Shotguns
'WEAPON_ASSAULTSHOTGUN',
'WEAPON_AUTOSHOTGUN',
'WEAPON_BULLPUPSHOTGUN',
'WEAPON_COMBATSHOTGUN',
'WEAPON_DBSHOTGUN',
'WEAPON_HEAVYSHOTGUN',
'WEAPON_PUMPSHOTGUN',
'WEAPON_PUMPSHOTGUN_MK2',
'WEAPON_SAWNOFFSHOTGUN',
'WEAPON_MUSKET',
-- Rifles
'WEAPON_ADVANCEDRIFLE',
'WEAPON_ASSAULTRIFLE',
'WEAPON_ASSAULTRIFLE_MK2',
'WEAPON_BATTLERIFLE',
'WEAPON_BULLPUPRIFLE',
'WEAPON_BULLPUPRIFLE_MK2',
'WEAPON_CARBINERIFLE',
'WEAPON_CARBINERIFLE_MK2',
'WEAPON_COMPACTRIFLE',
'WEAPON_HEAVYRIFLE',
'WEAPON_MILITARYRIFLE',
'WEAPON_SPECIALCARBINE',
'WEAPON_SPECIALCARBINE_MK2',
'WEAPON_TACTICALRIFLE',
-- Machine Guns
'WEAPON_COMBATMG',
'WEAPON_COMBATMG_MK2',
'WEAPON_GUSENBERG',
'WEAPON_MG',
'WEAPON_MINIGUN',
-- Sniper Rifles
'WEAPON_HEAVYSNIPER',
'WEAPON_HEAVYSNIPER_MK2',
'WEAPON_MARKSMANRIFLE',
'WEAPON_MARKSMANRIFLE_MK2',
'WEAPON_PRECISIONRIFLE',
'WEAPON_SNIPERRIFLE',
-- Heavy / Launchers
'WEAPON_COMPACTLAUNCHER',
'WEAPON_EMPLAUNCHER',
'WEAPON_FIREWORK',
'WEAPON_GRENADELAUNCHER',
'WEAPON_HOMINGLAUNCHER',
'WEAPON_RAILGUN',
'WEAPON_RAILGUNXM3',
'WEAPON_RPG',
'WEAPON_SNOWLAUNCHER',
-- Energy / Sci-Fi
'WEAPON_RAYCARBINE',
'WEAPON_RAYMINIGUN',
-- Special (no ammo but gets serial in ox_inventory)
'WEAPON_STUNGUN',
},
},
-- Global Item Metadata
-- When enabled, applies metadata to items purchased from any shop without configuring each item individually.
-- Define groups with different metadata for different sets of items.
-- Per-item metadata (from BaseProducts or shop items) overrides group values if the same key exists.
-- Weapon serial metadata (serial, registered) always takes highest priority.
-- You can define metadata and display metadata for each item in Config.BaseProducts[type].items (just below) and also in each individual shop (shops.lua)
--
-- Each group has:
-- applyTo → 'all' (every item) or a list of item names
-- metadata → the metadata table to apply
--
-- Groups are processed in order. Later groups override earlier groups for the same key.
-- This means you can set a default for 'all', then override specific items in a later group.
--
-- Priority order: groups (earliest → latest) → per-item metadata → weapon metadata (highest)
--
-- displayMetadata (ox_inventory only):
-- Maps metadata keys to display labels shown in the item tooltip.
-- Uses ox_inventory's exports.ox_inventory:displayMetadata() on startup.
-- Only keys listed here will be visible in the tooltip; unlisted keys are still stored but hidden.
--
-- Value types:
-- String form: key = 'Label' → booleans display as "Yes"/"No"
-- Table form: key = { label = 'Label', trueValue = '...', falseValue = '...' } → booleans display as custom text
-- Number metadata values are displayed as-is (e.g., quality = 80 → "Quality: 80").
--
-- DO NOT add these keys — ox_inventory already displays them by default:
-- durability, description, ammo, serial, components, weapontint, type, label
-- Adding them here will cause duplicate entries in the tooltip.
--
-- Example:
-- groups = {
-- { applyTo = 'all', metadata = { durability = 100 } }, -- All items get durability 100 (displayed by ox_inventory automatically)
-- { applyTo = { 'lockpick', 'screwdriver' }, metadata = { durability = 50 } }, -- These get durability 50 instead
-- { applyTo = { 'bandage', 'firstaid' }, metadata = { sterile = true } }, -- These also get sterile = true (plus durability 100 from 'all')
-- }
-- displayMetadata = {
-- sterile = 'Sterile', -- Shows "Sterile: Yes" in the tooltip
-- -- OR with custom boolean text:
-- -- sterile = { label = 'Sterile', trueValue = 'Sanitized', falseValue = 'Contaminated' },
-- }
ApplyMetadata = {
enabled = false,
groups = {
{ applyTo = 'all', metadata = { durability = 100 } },
{ applyTo = { 'lockpick', 'screwdriver' }, metadata = { durability = 50 } },
{ applyTo = { 'bandage', 'firstaid' }, metadata = { sterile = true } },
},
displayMetadata = {
-- Map metadata keys to their display labels (ox_inventory only).
-- Do NOT add: durability, description, ammo, serial, components, weapontint, type, label, these will be ignored as ox_inventory handles them already.
-- String form: key = 'Label' (booleans → "Yes"/"No", numbers → as-is)
-- Table form: key = { label = 'Label', trueValue = 'Custom Yes', falseValue = 'Custom No' }
sterile = 'Sterile',
-- sterile = { label = 'Sterile', trueValue = 'Sanitized', falseValue = 'Contaminated' }, -- Custom boolean display
},
},
-- Ped spawn distance (distance at which peds will spawn/despawn)
PedSpawnDistance = 50.0,
-- Interaction distance
InteractionDistance = 2.0,
-- Society Payment System Configuration
-- Allows players to purchase items using their job society funds
SocietyPayments = {
enabled = true, -- Set to false to completely disable society payments in shops
-- Define which societies/jobs can use society funds and what grade is required
-- Format: ['society_name'] = { minGrade = 0, label = 'Display Name' }
allowedSocieties = {
['police'] = {
minGrade = 2, -- Minimum job grade required to use society funds (sergeant and above)
label = 'Police Society'
},
['ambulance'] = {
minGrade = 2, -- Minimum grade to use EMS funds
label = 'Ambulance Society'
},
['mechanic'] = {
minGrade = 1, -- Mechanics can use society funds from grade 1+
label = 'Mechanic Society'
},
-- Add more societies as needed
-- ['realestate'] = {
-- minGrade = 3,
-- label = 'Real Estate Agency'
-- },
}
},
-- Unowned Shop Stock Configuration
-- Controls starting stock levels for shops that don't have an owner
-- This allows you to configure whether unowned shops have infinite stock or limited, tracked stock
UnownedShopStock = {
-- Global settings (can be overridden per shop type below)
default = {
infinite = true, -- If true, unowned shops have infinite stock (999)
startingStock = 50, -- If infinite = false, this is the starting stock amount per item
},
-- Per-shop-type overrides (optional)
-- If not specified for a shop type, it will use the default settings above
['247store'] = {
infinite = true,
startingStock = 50,
},
-- Example: liquorstore could have different settings
-- ['liquorstore'] = {
-- infinite = true,
-- startingStock = 0, -- Ignored when infinite = true
-- },
},
-- Coupon system, these are the default coupons that are usable, if shops are ownable, owners can make these freely.
Coupons = {
['WELCOME10'] = {
discount = 10, -- 10% off
description = 'Welcome discount'
},
['SUMMER20'] = {
discount = 20, -- 20% off
description = 'Summer sale'
},
['VIP25'] = {
discount = 25, -- 25% off
description = 'VIP discount'
},
['GRANDOPENING'] = {
discount = 15, -- 15% off
description = 'Grand opening special'
}
},
-- Loyalty System Configuration
LoyaltySystem = {
enabled = true, -- Set to false to completely disable loyalty system (This setting also applies to the management menu, i.e. if false, even owned shops can't have loyalty system)
requireUpgrade = true, -- If true, shops must purchase the loyalty_program upgrade to use it
-- If false and enabled = true, loyalty is always available to all shops
pointsPerDollar = 1, -- How many loyalty points earned per dollar spent (by default)
},
-- Default Loyalty Rewards (for non-owned shops)
-- These are the default rewards shown when a shop isn't owned
DefaultLoyaltyRewards = {
{
id = 'default_reward_1',
name = '5% Off Coupon',
description = 'Get 5% off your next purchase',
type = 'coupon',
cost = 100,
icon = '🎫',
discountPercent = 5
},
{
id = 'default_reward_2',
name = '10% Off Coupon',
description = 'Get 10% off your next purchase',
type = 'coupon',
cost = 250,
icon = '🎟️',
discountPercent = 10
},
{
id = 'default_reward_3',
name = '15% Off Coupon',
description = 'Get 15% off your next purchase',
type = 'coupon',
cost = 500,
icon = '🏷️',
discountPercent = 15
},
{
id = 'default_reward_4',
name = '20% Off Coupon',
description = 'Get 20% off your next purchase',
type = 'coupon',
cost = 1000,
icon = '🏷️',
discountPercent = 20
},
},
-- Shop Type Display Configuration
-- Define the icon and color scheme for each shop type
-- Icons: Use ANY icon name from https://lucide.dev/icons (use the kebab-case format shown on the site)
-- Available colors: emerald, purple, orange, red, slate, blue, green, yellow, pink, indigo,
-- cyan, teal, lime, amber, rose, fuchsia, violet, sky, gray, zinc, neutral, stone
ShopTypeDisplay = {
['247store'] = {
icon = 'shopping-cart',
color = 'emerald'
},
['liquorstore'] = {
icon = 'wine',
color = 'purple'
},
['hardware'] = {
icon = 'wrench',
color = 'orange'
},
['pharmacy'] = {
icon = 'heart',
color = 'red'
},
['gunstore'] = {
icon = 'crosshair',
color = 'red'
},
['pawn'] = {
icon = 'hand-coins',
color = 'amber'
},
['item'] = { icon = 'Gem', color = 'purple' }
},
-- Global Product Categories
-- Centralized category definitions used across all shops
-- Each category defines its title, color, and which shop types use it
-- Categories can be referenced by their key (e.g., 'food', 'medical') in product definitions
Categories = {
colorsEnabled = true, -- Set to false to disable category colors/badges globally
['food'] = {
title = 'Food & Drinks',
color = 'green',
types = {'247store', 'liquorstore'}, -- Shop types that use this category (MAKE EMPTY ARRAY IF CATEGORY SHOULD APPLY TO ALL TYPES)
items = {'water', 'sandwich', 'coffee', 'burger', 'cola', 'sprunk', 'tosti', 'twerks_candy', 'cigarette', 'beer', 'vodka', 'whiskey', 'wine', 'tequila', 'champagne', 'rum'} -- Items belonging to this category
},
['alcohol'] = {
title = 'Alcohol',
color = 'orange',
types = {'liquorstore'},
items = {'beer', 'vodka', 'whiskey', 'wine', 'tequila', 'champagne', 'rum'}
},
['snacks'] = {
title = 'Snacks',
color = 'yellow',
types = {'liquorstore'},
items = {'chips', 'chocolate', 'peanuts'}
},
['medical'] = {
title = 'Medical',
color = 'red',
types = {'247store', 'pharmacy'},
items = {'bandage', 'painkillers', 'firstaid', 'medicalbag', 'vicodin', 'morphine', 'antibiotics'}
},
['tools'] = {
title = 'Tools',
color = 'blue',
types = {'247store', 'hardware', 'pawn'},
items = {'lighter', 'weapon_flashlight', 'repairkit', 'lockpick', 'rolling_paper', 'scratchcard', 'id_card', 'driver_license', 'advancedlockpick', 'screwdriverset', 'drill', 'powersaw', 'welding_torch', 'advancedrepairkit', 'cleaningkit'}
},
['electronics'] = {
title = 'Electronics',
color = 'cyan',
types = {'247store', 'hardware', 'pawn'},
items = {'phone', 'radio', 'electronickit', 'radiocell', 'binoculars'}
},
['valuables'] = {
title = 'Valuables',
color = 'amber',
types = {'pawn'},
items = {'goldbar', 'diamond', 'rolex', 'goldchain', 'jewelry', 'necklace', 'ring', 'bracelet', 'watch'}
},
['weapons'] = {
title = 'Weapons',
color = 'red',
types = {'weaponshop', 'gunstore'},
items = {'WEAPON_PISTOL', 'WEAPON_COMBATPISTOL', 'WEAPON_APPISTOL', 'WEAPON_PISTOL50', 'WEAPON_SNSPISTOL', 'WEAPON_HEAVYPISTOL', 'WEAPON_VINTAGEPISTOL', 'WEAPON_CERAMICPISTOL', 'WEAPON_PISTOLXM3', 'WEAPON_SMG', 'WEAPON_MICROSMG', 'WEAPON_MINISMG', 'WEAPON_PUMPSHOTGUN', 'WEAPON_SAWNOFFSHOTGUN', 'WEAPON_DBSHOTGUN'}
},
['ammo'] = {
title = 'Ammunition',
color = 'orange',
types = {'weaponshop', 'gunstore'},
items = {'ammo-9', 'ammo-45', 'ammo-50', 'ammo-shotgun', 'ammo-22', 'ammo-38', 'ammo-rifle', 'ammo-rifle2', 'ammo-sniper'}
},
['attachments'] = {
title = 'Attachments',
color = 'purple',
types = {'weaponshop', 'gunstore'},
items = {'at_flashlight', 'at_suppressor_light', 'at_suppressor_heavy', 'at_grip', 'at_scope_small', 'at_scope_holo', 'at_scope_medium', 'at_clip_extended_pistol', 'at_clip_extended_smg', 'at_clip_extended_shotgun', 'at_clip_extended_rifle'}
},
['clothing'] = {
title = 'Clothing',
color = 'pink',
types = {'clothingstore'},
items = {} -- Add clothing items as needed
},
['accessories'] = {
title = 'Accessories',
color = 'cyan',
types = {'clothingstore'},
items = {} -- Add accessory items as needed
},
['automotive'] = {
title = 'Automotive',
color = 'gray',
types = {'hardware'},
items = {} -- Add automotive items as needed
},
['hardware'] = {
title = 'Hardware',
color = 'blue',
types = {'hardware'},
items = {} -- Add hardware-specific items as needed
},
['materials'] = {
title = 'Materials',
color = 'gray',
types = {'hardware', 'pawn'},
items = {'metalscrap', 'plastic', 'copper', 'iron', 'aluminium', 'glass', 'rubber', 'wood', 'wood_planks', 'md_nails', 'md_screw'}
},
['supplies'] = {
title = 'Supplies',
color = 'pink',
types = {'pharmacy'},
items = {'gauze', 'icepack', 'heatpack'}
},
},
-- Base Products Configuration
-- When enabled, all shops of a type will use these items and prices
-- This replaces the individual shop item definitions
-- When disabled, falls back to using individual shop item definitions from Config.Shops[shopId].items
-- If a type of store is used in Config.Shops[shopId] that isn't defined here, it'll fall back to using the individual shop item definitions.
--
-- PER-ITEM CURRENCY OVERRIDE (currencyItem):
-- Any item can use currencyItem to require an item instead of cash. The price becomes the quantity needed.
-- This works in both BaseProducts and individual shop items (Config.Shops[shopId].items).
-- Example: { item = 'iron', price = 5, currencyItem = 'metalscrap' } -- Costs 5 metalscrap instead of $5
--
-- ITEM DISPLAY OVERRIDES (label, description, image):
-- Any item can override its display name, description, and image in the shop UI.
-- These work in both BaseProducts and individual shop items (Config.Shops[shopId].items).
-- label → Custom display name (overrides the auto-fetched inventory label)
-- description → Custom description text (overrides the auto-fetched inventory description)
-- image → Custom image. Either a filename (e.g., 'lockpick.png') resolved via your inventory's
-- image directory, or a full path (e.g., 'nui://my_resource/images/custom.png' or a URL).
-- Examples:
-- { item = 'water', price = 5, label = 'Spring Water', description = 'Freshly sourced spring water.' }
-- { item = 'lockpick', price = 50, image = 'lockpick_gold.png' } -- Uses inventory image directory
-- { item = 'radio', price = 250, image = 'nui://my_resource/radio.png' } -- Full NUI path
--
-- ITEM METADATA:
-- Any item can include an optional 'metadata' table that gets passed to the inventory system on purchase.
-- This works in both BaseProducts and individual shop items (Config.Shops[shopId].items).
-- For weapons, configured metadata is merged with weapon serial metadata (weapon fields take priority).
--
-- DISPLAY METADATA (ox_inventory only):
-- Items can include a 'displayMetadata' table to register custom metadata keys for ox_inventory tooltip display.
-- Do NOT add ox_inventory built-in keys (durability, description, ammo, serial, components,
-- weapontint, type, label) — they are already displayed and will be filtered out automatically.
--
-- Display value format:
-- String form: key = 'Label' → booleans show "Yes"/"No", numbers show as-is
-- Table form: key = { label = 'Label', trueValue = '...', falseValue = '...' } → booleans show custom text
--
-- Examples:
-- displayMetadata = { sterile = 'Sterile' } → "Sterile: Yes"
-- displayMetadata = { sterile = { label = 'Sterile', trueValue = 'Sanitized', falseValue = 'Dirty' } } → "Sterile: Sanitized"
-- displayMetadata = { quality = 'Quality' } (with metadata = { quality = 80 }) → "Quality: 80"
--
-- Full item example:
-- { item = 'bandage', price = 15, label = 'First Aid Bandage', description = 'Medical-grade bandage.', metadata = { durability = 100, sterile = true }, displayMetadata = { sterile = { label = 'Sterile', trueValue = 'Sanitized', falseValue = 'Contaminated' } } }
-- → In the ox_inventory tooltip: "Durability: 100" (built-in) + "Sterile: Sanitized" (from displayMetadata)
BaseProducts = {
enabled = true, -- Set to false to use individual shop item definitions instead
-- 24/7 Store Configuration
['247store'] = {
items = {
{ item = 'water', price = 2 },
{ item = 'water', price = 5, label = 'Premium Spring Water', description = 'Imported artisan spring water.', image = 'lockpick.png', metadata = { quality = 100, purified = true }, displayMetadata = { quality = 'Quality', purified = { label = 'Purified', trueValue = 'Yes', falseValue = 'No' } } },
{ item = 'coffee', price = 4 },
{ item = 'burger', price = 8 },
{ item = 'cola', price = 3 },
{ item = 'sprunk', price = 3 },
{ item = 'tosti', price = 5 },
{ item = 'bandage', price = 15, --[[label = 'First Aid Bandage', description = 'Medical-grade bandage.', image = 'custom_bandage.png', metadata = { durability = 100, sterile = true }, displayMetadata = { sterile = { label = 'Sterile', trueValue = 'Sanitized', falseValue = 'Contaminated' } } ]] },
{ item = 'painkillers', price = 10 },
{ item = 'firstaid', price = 50 },
{ item = 'phone', price = 350 },
{ item = 'radio', price = 250, --[[ image = 'nui://ox_inventory/web/images/custom_bandage_image.png' ]] }, -- Example: full NUI path image override
{ item = 'lighter', price = 2 },
{ item = 'weapon_flashlight', price = 20 },
{ item = 'repairkit', price = 50 },
{ item = 'lockpick', price = 25 },
{ item = 'rolling_paper', price = 2 },
{ item = 'id_card', price = 100 },
{ item = 'driver_license', price = 150 }
}
},
-- Liquor Store Configuration
['liquorstore'] = {
items = {
{ item = 'water', price = 2 },
{ item = 'beer', price = 5 },
{ item = 'vodka', price = 15 },
{ item = 'whiskey', price = 20 },
{ item = 'wine', price = 18 },
{ item = 'tequila', price = 22 },
{ item = 'champagne', price = 30 },
{ item = 'rum', price = 16 },
{ item = 'chips', price = 3 },
{ item = 'chocolate', price = 4 },
{ item = 'peanuts', price = 3 }
}
},
-- Hardware Store Configuration
['hardware'] = {
items = {
{ item = 'lockpick', price = 50 },
{ item = 'advancedlockpick', price = 150 },
{ item = 'screwdriverset', price = 75 },
{ item = 'drill', price = 200 },
{ item = 'powersaw', price = 300 },
{ item = 'welding_torch', price = 250 },
{ item = 'repairkit', price = 100 },
{ item = 'advancedrepairkit', price = 200 },
{ item = 'cleaningkit', price = 50 },
{ item = 'electronickit', price = 150 },
{ item = 'metalscrap', price = 10 },
{ item = 'plastic', price = 8 },
{ item = 'copper', price = 15 },
--{ item = 'iron', price = 12 },
-- Example: this item costs 5 metalscrap instead of cash (per-item currency override)
{ item = 'iron', price = 5, currencyItem = 'metalscrap' },
{ item = 'aluminium', price = 10 },
{ item = 'glass', price = 5 },
{ item = 'rubber', price = 8 },
{ item = 'wood', price = 5 },
{ item = 'wood_planks', price = 10 },
{ item = 'md_nails', price = 2 },
{ item = 'md_screw', price = 2 },
{ item = 'radio', price = 250 },
{ item = 'radiocell', price = 15 },
{ item = 'binoculars', price = 100 },
{ item = 'lighter', price = 2 },
{ item = 'bandage', price = 15 },
}
},
-- Pharmacy Configuration
['pharmacy'] = {
items = {
{ item = 'bandage', price = 15 },
{ item = 'painkillers', price = 10 },
{ item = 'firstaid', price = 50 },
{ item = 'medicalbag', price = 150 },
{ item = 'vicodin', price = 30 },
{ item = 'morphine', price = 50 },
{ item = 'antibiotics', price = 25 },
{ item = 'gauze', price = 8 },
{ item = 'icepack', price = 10 },
{ item = 'heatpack', price = 10 }
}
},
-- Gun Store Configuration
['gunstore'] = {
items = { -- You can remove the license param entirely and then that item won't be locked behind the license requirement.
-- Pistols (require weapon license)
{ item = 'WEAPON_PISTOL', price = 5000, license = 'weapon' },
{ item = 'WEAPON_COMBATPISTOL', price = 6500, license = 'weapon' },
-- Ammunition (no license required)
{ item = 'ammo-9', price = 25 },
-- Attachments (no license required)
{ item = 'at_flashlight', price = 150 },
{ item = 'at_suppressor_light', price = 800 },
{ item = 'at_clip_extended_pistol', price = 300 },
}
},
-- ============================================================================
-- PAWN SHOP CONFIGURATION (Hardcoded Shop Type)
-- ============================================================================
-- Pawn shops are a special hardcoded shop type that BUYS items FROM players.
-- Unlike regular shops where players buy items, pawn shops pay players for their items.
--
-- HOW IT WORKS:
-- - Players bring items from their inventory to sell
-- - The pawn shop displays only items the player has that match the list below
-- - The 'price' is what the PLAYER RECEIVES for selling the item
-- - Players select items and quantities, then receive cash payment
--
-- To create a pawn shop, set shopType = 'pawn' in your shop definition (shops.lua)
-- ============================================================================
['pawn'] = {
items = {
-- Electronics (common items players find/buy)
{ item = 'phone', price = 100 },
{ item = 'radio', price = 75 },
{ item = 'electronickit', price = 50 },
-- Jewelry & Valuables (high value items)
{ item = 'goldbar', price = 500 },
{ item = 'diamond', price = 750 },
{ item = 'rolex', price = 1000 },
{ item = 'goldchain', price = 350 },
-- Raw Materials (from jobs/gathering)
{ item = 'metalscrap', price = 5 },
{ item = 'copper', price = 8 },
{ item = 'iron', price = 6 },
{ item = 'aluminium', price = 5 },
{ item = 'glass', price = 2 },
-- Tools (used items players want to offload)
{ item = 'lockpick', price = 10 },
{ item = 'advancedlockpick', price = 50 },
{ item = 'repairkit', price = 25 },
{ item = 'drill', price = 75 },
-- Miscellaneous
{ item = 'lighter', price = 1 },
{ item = 'binoculars', price = 30 },
}
},
-- Police Armory Configuration
['police_armory'] = {
items = {
-- Protective Equipment
{ item = 'armour', price = 500 },
{ item = 'heavyarmor', price = 1500 },
-- Medical Supplies
{ item = 'bandage', price = 25 },
{ item = 'painkillers', price = 20 },
{ item = 'firstaid', price = 75 },
{ item = 'medicalbag', price = 200 },
-- Tools & Equipment
{ item = 'radio', price = 100 },
{ item = 'weapon_flashlight', price = 50 },
{ item = 'handcuffs', price = 75 },
{ item = 'binoculars', price = 150 },
-- Weapons
{ item = 'WEAPON_PISTOL', price = 500 },
{ item = 'WEAPON_COMBATPISTOL', price = 750 },
{ item = 'WEAPON_STUNGUN', price = 350 },
{ item = 'WEAPON_PUMPSHOTGUN', price = 1500 },
{ item = 'WEAPON_CARBINERIFLE', price = 2500 },
{ item = 'WEAPON_SMG', price = 1800 },
{ item = 'WEAPON_NIGHTSTICK', price = 100 },
-- Ammunition
{ item = 'ammo-9', price = 15 },
{ item = 'ammo-rifle', price = 25 },
{ item = 'ammo-shotgun', price = 20 },
}
}
},
}
Last updated