Skip to content

TrapsSpa

Luxury spa — desk, pool, saunas, bar, boss UI, snacks & supplies (qb-core).

Features

  • Multiple NUI pages (html/: desk, pool, asana, drinks, boss, etc.)
  • Pool / asana / snack flows split across client/ + server/
  • Soft compatibility with ox_inventory / qb-inventory (see manifest comments)

Dependencies

  • qb-core

Notes

  • Edit config.lua and config_blend.lua (both in escrow ignore list).
  • Supply / steal loops are server-driven — tune before going live.

Inventory items

Must match Config.Items (membership + minerals) and Config.Snacks ids. Add PNGs to your inventory icon path where required.

qb-inventory

Add to qb-core/shared/items.lua. Snacks should be useable (resource registers QBCore.Functions.CreateUseableItem on start).

["spa_membership"]             = { name = "spa_membership", label = "Spa membership", weight = 50, type = "item", image = "spa_membership.png", unique = true, useable = false, shouldClose = true, description = "Rockford Retreat visitor access (TrapsSpa)." },
["spa_mineral_magnesium"]      = { name = "spa_mineral_magnesium", label = "Spa mineral (magnesium)", weight = 200, type = "item", image = "spa_mineral_magnesium.png", unique = false, useable = false, shouldClose = false, description = "Blend mineral (TrapsSpa)." },
["spa_mineral_sulfur"]         = { name = "spa_mineral_sulfur", label = "Spa mineral (sulfur)", weight = 200, type = "item", image = "spa_mineral_sulfur.png", unique = false, useable = false, shouldClose = false, description = "Blend mineral (TrapsSpa)." },
["spa_mineral_lithium"]        = { name = "spa_mineral_lithium", label = "Spa mineral (lithium)", weight = 200, type = "item", image = "spa_mineral_lithium.png", unique = false, useable = false, shouldClose = false, description = "Blend mineral (TrapsSpa)." },
["spa_mineral_silica"]         = { name = "spa_mineral_silica", label = "Spa mineral (silica)", weight = 200, type = "item", image = "spa_mineral_silica.png", unique = false, useable = false, shouldClose = false, description = "Blend mineral (TrapsSpa)." },
["spa_snack_almonds"]          = { name = "spa_snack_almonds", label = "Salted almonds", weight = 80, type = "item", image = "spa_snack_almonds.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_trail_mix"]        = { name = "spa_snack_trail_mix", label = "Spa trail mix", weight = 90, type = "item", image = "spa_snack_trail_mix.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_fruit_cup"]        = { name = "spa_snack_fruit_cup", label = "Fresh fruit cup", weight = 120, type = "item", image = "spa_snack_fruit_cup.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_granola_bar"]      = { name = "spa_snack_granola_bar", label = "Honey granola bar", weight = 85, type = "item", image = "spa_snack_granola_bar.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_dark_chocolate"]   = { name = "spa_snack_dark_chocolate", label = "Dark chocolate square", weight = 40, type = "item", image = "spa_snack_dark_chocolate.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_rice_cakes"]       = { name = "spa_snack_rice_cakes", label = "Rice cakes", weight = 70, type = "item", image = "spa_snack_rice_cakes.png", unique = false, useable = true, shouldClose = true, description = "Spa snack (TrapsSpa)." },
["spa_snack_retreat_box"]      = { name = "spa_snack_retreat_box", label = "Rockford retreat box", weight = 350, type = "item", image = "spa_snack_retreat_box.png", unique = false, useable = true, shouldClose = true, description = "Premium spa snack box (TrapsSpa)." },
ox_inventory

Add to ox_inventory/data/items.lua. For snacks, wire the resource export (see server/snacks.lua):

server = { export = 'TrapsSpa.useSpaSnack' }

['spa_membership'] = {
    label = 'Spa membership',
    weight = 50,
    stack = false,
    close = true,
    description = 'Rockford Retreat visitor access (TrapsSpa).',
},

['spa_mineral_magnesium'] = {
    label = 'Spa mineral (magnesium)',
    weight = 200,
    stack = true,
    close = false,
    description = 'Blend mineral (TrapsSpa).',
},

['spa_mineral_sulfur'] = {
    label = 'Spa mineral (sulfur)',
    weight = 200,
    stack = true,
    close = false,
    description = 'Blend mineral (TrapsSpa).',
},

['spa_mineral_lithium'] = {
    label = 'Spa mineral (lithium)',
    weight = 200,
    stack = true,
    close = false,
    description = 'Blend mineral (TrapsSpa).',
},

['spa_mineral_silica'] = {
    label = 'Spa mineral (silica)',
    weight = 200,
    stack = true,
    close = false,
    description = 'Blend mineral (TrapsSpa).',
},

['spa_snack_almonds'] = {
    label = 'Salted almonds',
    weight = 80,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_trail_mix'] = {
    label = 'Spa trail mix',
    weight = 90,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_fruit_cup'] = {
    label = 'Fresh fruit cup',
    weight = 120,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_granola_bar'] = {
    label = 'Honey granola bar',
    weight = 85,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_dark_chocolate'] = {
    label = 'Dark chocolate square',
    weight = 40,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_rice_cakes'] = {
    label = 'Rice cakes',
    weight = 70,
    stack = true,
    close = true,
    description = 'Spa snack (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

['spa_snack_retreat_box'] = {
    label = 'Rockford retreat box',
    weight = 350,
    stack = false,
    close = true,
    description = 'Premium spa snack box (TrapsSpa).',
    server = { export = 'TrapsSpa.useSpaSnack' },
},

Installation

How to install

  1. Copy TrapsSpa to resources/TrapsSpa (exact name).
  2. Configure config.lua / config_blend.lua.
  3. ensure qb-core then TrapsSpa.
  4. Restart.

YouTube Video

YouTube Video