Configuration
This section includes all configurable files for the selected script. Most settings are configured automatically, but each config.lua file contains a header comment explaining the purpose and usage of every configuration type. Be sure to read the header of each file carefully to fully understand how to customize and adapt the system for QBCORE, ESX, or standalone environments, ensuring seamless integration with your server.
qs-shellcreator/config/main.lua
--[[
Welcome to the **qs-shellcreator configuration**!
This configuration file contains essential settings to customize and optimize your shellcreator system. Before making any changes, please ensure you've reviewed each section of the documentation linked below, as it provides step-by-step instructions and detailed explanations for every configurable option.
The settings in this file are built for flexibility. Feel free to adapt them to fit your server’s framework and create a seamless and immersive shellcreator experience for your players.
Editable configurations are primarily located in the **client/custom/** and **server/custom/** directories, keeping your changes clean and organized.
📄 **Direct Documentation Link:**
Refer to the official documentation for full setup instructions and best practices: https://docs.quasar-store.com/
]]
Config = {}
--[[
The first thing will be to choose our main language, here you can choose
between the default languages that you will find within locales/*,
if yours is not there, feel free to create it!
Languages available by default:
"ar", -- العربية
"bg", -- Български
"ca", -- Català
"cs", -- Čeština
"da", -- Dansk
"de", -- Deutsch
"el", -- Ελληνικά
"en", -- English
"es", -- Español
"fa", -- فارسی
"fr", -- Français
"hi", -- हिन्दी
"hu", -- Magyar
"it", -- Italiano
"ja", -- 日本語
"ko", -- 한국어
"nl", -- Nederlands
"no", -- Norsk
"pl", -- Polski
"pt", -- Português
"ro", -- Română
"ru", -- Русский
"sl", -- Slovenščina
"sv", -- Svenska
"th", -- ไทย
"tr", -- Türkçe
"zh-CN", -- 简体中文
]]
Config.Locale = 'en'
Config.Path = 'nui://qs-shellcreator/web/' -- [ADV] Base NUI path (keep if you didn't move /web).
Config.ImagePath = Config.Path .. 'images/' -- [ADV] Asset path for images.
--[[
The current system will detect if you use qb-core or es_extended,
but if you rename it, you can remove the value from Config.Framework
and add it yourself after you have modified the framework files inside
this script.
Please keep in mind that this code is automatic, do not edit if
you do not know how to do it.
]]
local frameworks = {
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb'
}
Config.Framework = DependencyCheck(frameworks) or 'none'
Config.TargetWidth = 5.0
Config.TargetHeight = 5.0
Config.UseTarget = false -- Set to true to enable targeting with either 'qb-target' or 'ox_target', or false to disable entirely.
-- Building Props Configuration
Config.Wall = joaat('qs_shellscreator_wall_01')
Config.Ground = joaat('qs_shellscreator_floor_01')
Config.Roof = joaat('qs_shellscreator_floor_01') -- Roof uses same model as floor but positioned higher
Config.DefaultFloorTexture = 'qs_shellscreator_floor_01' -- Default floor model name when no specific floor texture is set
Config.WallPrefix = 'qs_shellscreator_wall_'
Config.DefaultWallTexture = '01' -- Default wall texture suffix when no specific wall texture is set
-- Custom Texture Configuration (runtime PNG-based textures)
Config.CustomTexturePrefix = 'qs_shellscreator_custom_'
Config.CustomTextureEnabled = true -- Enable/disable custom texture system
-- If you have crash issues (pool size) you can reduce this value.
Config.MaxObjects = 800
Config.GridSystem = {
gridSize = 25,
gridSpacing = 2.07, -- (1.0 = 1x1, 2.0 = 2x2, 3.0 = 3x3)
gridCenter = vector3(-1559.933837890625, -2605.013427734375, 1213.0),
}
Config.Exports = {
['qs-housing-shell'] = {
label = 'QS Housing (Shell)',
export = [[{ model = '{MODEL}', stash = { maxweight = 1000000, slots = 5 } }]]
},
['qs-housing-ipl'] = {
label = 'QS Housing (IPL)',
export = [[{
exitCoords = {EXIT_COORDS},
iplCoords = {SPAWN_COORDS},
stash = { maxweight = 1000000, slots = 10 },
}]]
},
['default'] = {
label = 'Default',
export = [[{
spawnCoords = {SPAWN_COORDS},
enterCoords = {EXIT_COORDS},
}]],
}
}
Config.Debug = true
--──────────────────────────────────────────────────────────────────────────────
-- Shell / IPL / MLO Editor Controls [EDIT]
-- [INFO] Keybinds used in edit modes for interiors and placement tools.
--──────────────────────────────────────────────────────────────────────────────
ActionControls = {
leftClick = { label = 'Left Click', codes = { 24 } },
forward = { label = 'Forward +/-', codes = { 33, 32 } },
right = { label = 'Right +/-', codes = { 35, 34 } },
up = { label = 'Up +/-', codes = { 52, 51 } },
add_point = { label = 'Add Point', codes = { 24 } },
undo_point = { label = 'Undo Last', codes = { 25 } },
rotate_z = { label = 'RotateZ +/-', codes = { 20, 73 } },
rotate_z_scroll = { label = 'RotateZ +/-', codes = { 17, 16 } },
offset_z = { label = 'Offset Z +/-', codes = { 44, 46 } },
boundary_height = { label = 'Z Boundary +/-', codes = { 20, 73 } },
done = { label = 'Done', codes = { 191 } },
cancel = { label = 'Cancel', codes = { 194 } },
arrow_left = { label = 'Previous', codes = { 174 } },
arrow_right = { label = 'Next', codes = { 175 } },
-- Decorate (Modern Mode)
place_object_on_ground = { label = 'Place Object on Ground', codes = { 47 } },
toggle_free_mode = { label = 'Toggle Free Mode', codes = { 167 } },
toggle_cursor = { label = 'Toggle Cursor', codes = { 166 } },
toggle_editor_mode = { label = 'Toggle Translate/Rotate', codes = { 311 } },
toggle_gizmo_mode = { label = 'Toggle Gizmo Mode', codes = { 244 } },
toggle_free_camera = { label = 'Toggle Free Camera', codes = { 170 } },
focus_free_camera = { label = 'Focus Object', codes = { 49 } },
zoom = { label = 'Zoom +/-', codes = { 17, 16 } },
-- DEPREACTED NEED TO CHECK
set_any = { label = 'Set', codes = { 24 } },
set_position = { label = 'Set Position', codes = { 24 } },
add_garage = { label = 'Add Garage', codes = { 24 } },
increase_z = { label = 'Z Boundary +/-', codes = { 180, 181 } },
decrease_z = { label = 'Z Boundary +/-', codes = { 21, 180, 181 } },
change_player = { label = 'Player +/-', codes = { 82, 81 } },
change_shell = { label = 'Change Shell +/-', codes = { 189, 190 } },
select_player = { label = 'Select Player', codes = { 191 } },
change_outfit = { label = 'Outfit +/-', codes = { 82, 81 } },
delete_outfit = { label = 'Delete Outfit', codes = { 178 } },
select_vehicle = { label = 'Vehicle +/-', codes = { 82, 81 } },
spawn_vehicle = { label = 'Spawn Vehicle', codes = { 191 } },
leftApt = { label = 'Previous Apartment', codes = { 174 } },
rightApt = { label = 'Next Apartment', codes = { 175 } },
testPos = { label = 'Test Pos', codes = { 47 } },
}qs-shellcreator/config/builder.lua
Config.ObjectMap = {
style = { 'roofs', 'floors', 'walls', 'doors', 'windows', 'stairs' },
decorate = { 'bathroom', 'kitchen', 'lights' },
}
Config.Objects = {
constructions = {
{
label = 'Foundation',
model = 'foundation',
image = 'foundation'
},
{
label = 'Wall',
model = 'qs_shellscreator_wall_01',
image = 'wall_model'
},
{
label = 'Half wall',
model = 'qs_shellscreator_helf_wall_01',
image = 'half_wall_model'
},
{
label = 'Quarter Wall',
model = 'qs_shellscreator_quater_wall_01',
image = 'quarter_wall_model'
},
{
label = 'Doorway',
model = 'qs_shellscreator_doorway_01',
image = 'doorway_model'
},
{
label = 'Window Wall',
model = 'qs_shellscreator_wall_with_hole_01',
image = 'window_wall_model'
},
{
label = 'Spawnpoint',
model = 'spawnpoint'
}
}
}
Config.Objects.roofs = {
{
label = 'Roof 01',
model = 'qs_shellscreator_floor_01'
},
{
label = 'Roof 02',
model = 'qs_shellscreator_floor_02'
},
{
label = 'Roof 03',
model = 'qs_shellscreator_floor_03'
},
{
label = 'Roof 04',
model = 'qs_shellscreator_floor_04'
},
{
label = 'Roof 05',
model = 'qs_shellscreator_floor_05'
},
{
label = 'Roof 06',
model = 'qs_shellscreator_floor_06'
},
{
label = 'Roof 07',
model = 'qs_shellscreator_floor_07'
},
{
label = 'Roof 08',
model = 'qs_shellscreator_floor_08'
},
{
label = 'Roof 09',
model = 'qs_shellscreator_floor_09'
},
{
label = 'Roof 10',
model = 'qs_shellscreator_floor_10'
},
{
label = 'Roof 11',
model = 'qs_shellscreator_floor_11'
},
{
label = 'Roof 12',
model = 'qs_shellscreator_floor_12'
},
{
label = 'Roof 13',
model = 'qs_shellscreator_floor_13'
},
{
label = 'Roof 14',
model = 'qs_shellscreator_floor_14'
},
{
label = 'Roof 15',
model = 'qs_shellscreator_floor_15'
},
{
label = 'Roof 16',
model = 'qs_shellscreator_floor_16'
},
{
label = 'Roof 17',
model = 'qs_shellscreator_floor_17'
},
{
label = 'Roof 18',
model = 'qs_shellscreator_floor_18'
},
{
label = 'Roof 19',
model = 'qs_shellscreator_floor_19'
},
{
label = 'Roof 20',
model = 'qs_shellscreator_floor_20'
},
{
label = 'Roof 21',
model = 'qs_shellscreator_floor_21'
},
{
label = 'Roof 22',
model = 'qs_shellscreator_floor_22'
}
}
Config.Objects.stairs = {
{
label = 'Stairs 01',
model = 'qs_shellscreator_stairs_01'
},
{
label = 'Stairs 02',
model = 'qs_shellscreator_stairs_02'
},
{
label = 'Stairs 03',
model = 'qs_shellscreator_stairs_03'
}
}
Config.Objects.floors = {
{
label = 'Floor 01',
model = 'qs_shellscreator_floor_01'
},
{
label = 'Floor 02',
model = 'qs_shellscreator_floor_02'
},
{
label = 'Floor 03',
model = 'qs_shellscreator_floor_03'
},
{
label = 'Floor 04',
model = 'qs_shellscreator_floor_04'
},
{
label = 'Floor 05',
model = 'qs_shellscreator_floor_05'
},
{
label = 'Floor 06',
model = 'qs_shellscreator_floor_06'
},
{
label = 'Floor 07',
model = 'qs_shellscreator_floor_07'
},
{
label = 'Floor 08',
model = 'qs_shellscreator_floor_08'
},
{
label = 'Floor 09',
model = 'qs_shellscreator_floor_09'
},
{
label = 'Floor 10',
model = 'qs_shellscreator_floor_10'
},
{
label = 'Floor 11',
model = 'qs_shellscreator_floor_11'
},
{
label = 'Floor 12',
model = 'qs_shellscreator_floor_12'
},
{
label = 'Floor 13',
model = 'qs_shellscreator_floor_13'
},
{
label = 'Floor 14',
model = 'qs_shellscreator_floor_14'
},
{
label = 'Floor 15',
model = 'qs_shellscreator_floor_15'
},
{
label = 'Floor 16',
model = 'qs_shellscreator_floor_16'
},
{
label = 'Floor 17',
model = 'qs_shellscreator_floor_17'
},
{
label = 'Floor 18',
model = 'qs_shellscreator_floor_18'
},
{
label = 'Floor 19',
model = 'qs_shellscreator_floor_19'
},
{
label = 'Floor 20',
model = 'qs_shellscreator_floor_20'
},
{
label = 'Floor 21',
model = 'qs_shellscreator_floor_21'
},
{
label = 'Floor 22',
model = 'qs_shellscreator_floor_22'
},
{
label = 'Floor None',
model = 'floor_none'
}
}
Config.Objects.walls = {
{
label = 'Wall 01',
model = '01'
},
{
label = 'Wall 02',
model = '02'
},
{
label = 'Wall 03',
model = '03'
},
{
label = 'Wall 04',
model = '04'
},
{
label = 'Wall 05',
model = '05'
},
{
label = 'Wall 06',
model = '06'
},
{
label = 'Wall 07',
model = '07'
},
{
label = 'Wall 08',
model = '08'
},
{
label = 'Wall 09',
model = '09'
},
{
label = 'Wall 10',
model = '10'
},
{
label = 'Wall 11',
model = '11'
},
{
label = 'Wall 12',
model = '12'
},
{
label = 'Wall 13',
model = '13'
},
{
label = 'Wall 14',
model = '14'
},
{
label = 'Wall 15',
model = '15'
},
{
label = 'Wall 16',
model = '16'
},
{
label = 'Wall None',
model = 'wall_none'
}
}
Config.Objects.doors = {
{
label = 'Door 01',
model = 'v_ilev_ra_door2',
offset = vec3(0.0, 0.63, 0.0)
},
{
label = 'Door 02',
model = 'v_ilev_housedoor1',
offset = vec3(0.0, -0.67, 0.0)
},
{
label = 'Door 03',
model = 'v_ilev_janitor_frontdoor',
offset = vec3(0.0, 0.63, 0.0)
},
{
label = 'Door 04',
model = 'v_ilev_gtdoor02',
offset = vec3(0.0, 0.63, 0.0)
},
{
label = 'Door 05',
model = 'v_ilev_ph_gendoor002',
offset = vec3(0.0, -0.67, 0.0)
},
{
label = 'Door 06',
model = 'xm_prop_facility_door_01',
offset = vec3(0.0, 0.63, 0.0)
},
{
label = 'Door 07',
model = 'ba_prop_door_club_edgy_generic',
offset = vec3(0.0, 0.63, 0.0)
},
}
Config.Objects.windows = {
{
label = 'Window 01',
model = 'qs_shellscreator_window_01'
},
{
label = 'Window 02',
model = 'qs_shellscreator_window_02'
},
{
label = 'Window 03',
model = 'qs_shellscreator_window_03'
}
}
Config.Objects.furniture = {
-- Bathroom
{
label = 'Washing machine',
model = 'prop_washer_02',
category = 'bathroom'
},
{
label = 'Toilet',
model = 'qa_toilet_01',
category = 'bathroom',
offset = vec3(0.0, 0.0, 0.5)
},
{
label = 'Toilet 2',
model = 'qa_toilet_02',
category = 'bathroom',
offset = vec3(0.0, 0.0, 0.5)
},
{
label = 'Sink',
model = 'prop_sink_06',
category = 'bathroom'
},
{
label = 'Bath Tub',
model = 'qs_bathtub_prop_01',
category = 'bathroom'
},
{
label = 'Carpet 1',
model = 'qs_carpet_01',
category = 'bathroom'
},
{
label = 'Carpet 2',
model = 'qs_carpet_02',
category = 'bathroom'
},
{
label = 'Carpet 3',
model = 'qs_carpet_03',
category = 'bathroom'
},
{
label = 'Carpet 4',
model = 'qs_carpet_04',
category = 'bathroom'
},
{
label = 'Carpet 5',
model = 'qs_carpet_05',
category = 'bathroom'
},
{
label = 'Table 1',
model = 'qs_table_01',
category = 'bathroom'
},
{
label = 'Table 2',
model = 'qs_table_02',
category = 'bathroom'
},
{
label = 'Table 3',
model = 'qs_table_03',
category = 'bathroom'
},
{
label = 'Towel Rack 1',
model = 'qs_towel_rack_01',
category = 'bathroom'
},
{
label = 'Towel Rack 2',
model = 'qs_towel_rack_02',
category = 'bathroom'
},
{
label = 'Towel Rack 3',
model = 'qs_towel_rack_03',
category = 'bathroom'
},
{
label = 'Dryer',
model = 'v_ret_fh_dryer',
category = 'bathroom'
},
-- Kitchen
{
label = 'Kitchen Cooker',
model = 'qs_kitchen_cooker',
category = 'kitchen',
-- fixedPosition = true
},
{
label = 'Kitchen Corner',
model = 'qs_kitchen_corner',
category = 'kitchen',
-- fixedPosition = true,
-- offset = vec3(0.2, 0.0, 0.0)
},
{
label = 'Kitchen Fridge',
model = 'qs_kitchen_fridge',
category = 'kitchen',
-- fixedPosition = true
},
{
label = 'Kitchen Sink',
model = 'qs_kitchen_sink',
category = 'kitchen',
-- fixedPosition = true
},
{
label = 'Kitchen Bar Counter',
model = 'qs_bar_counter',
category = 'kitchen',
-- fixedPosition = true
},
{
label = 'Kitchen Bar Counter Corner',
model = 'qs_bar_counter_corner',
category = 'kitchen',
-- fixedPosition = true,
-- offset = vec3(0.2, 0.0, 0.0)
},
-- Lights
{
label = 'Light 01',
model = 'h4_prop_x17_sub_lampa_small_blue',
category = 'lights',
offset = vec3(0.0, 0.0, 2.80),
colors = true,
fixedPosition = {
centered = true
},
},
{
label = 'Light 02',
model = 'qs_custom_light_01',
category = 'lights',
offset = vec3(0.0, 0.0, 2.80),
colors = true,
fixedPosition = {
centered = true
},
},
{
label = 'Light 03',
model = 'qs_custom_light_02',
category = 'lights',
offset = vec3(0.0, 0.0, 1.85),
colors = true,
fixedPosition = {
centered = true
},
},
{
label = 'Light 04',
model = 'qs_custom_light_03',
category = 'lights',
offset = vec3(0.0, 0.0, 2.80),
colors = true,
fixedPosition = {
centered = true
},
},
{
label = 'Light 05',
model = 'qs_custom_light_04',
category = 'lights',
offset = vec3(0.0, 0.0, 2.80),
colors = true,
fixedPosition = {
centered = true
},
},
}
Config.ColorVariations = {
[0] = '#9c7b57',
[1] = '#b19e87',
[2] = '#503f30',
[3] = '#130e0d',
[4] = '#be945f',
[5] = '#674a24',
[6] = '#c12521',
[7] = '#1f1b6f',
[8] = '#d16647',
[9] = '#a8583f',
[10] = '#631613',
[11] = '#2c1119',
[12] = '#905432',
[13] = '#bc365b',
[14] = '#68b23f',
[15] = '#361441',
[16] = '#b35c5c',
[17] = '#862a36',
[18] = '#522025',
[19] = '#b57a35',
[20] = '#74582f',
[21] = '#d0b15b',
[22] = '#7da771',
[23] = '#043f43',
[24] = '#8d5b5c',
[25] = '#604446',
[26] = '#3b1a2c',
[27] = '#111326',
[28] = '#582e18',
[29] = '#7e5a36',
[30] = '#644c37',
[31] = '#a28b5e',
[32] = '#767352',
[33] = '#578056',
[34] = '#0d1f1f',
[35] = '#0e2122',
[36] = '#2e2016',
[37] = '#684421',
[38] = '#808059',
[39] = '#744434',
[40] = '#8f8354',
[41] = '#778849',
[42] = '#5d7e43',
[43] = '#1f431f',
[44] = '#ab7f51',
[45] = '#c47428',
[46] = '#93733c',
[47] = '#684829',
[48] = '#c29f54',
[49] = '#a7a64a',
[50] = '#49551c',
[51] = '#2f3310',
[52] = '#704321',
[53] = '#b96528',
[54] = '#bf9758',
[55] = '#c79e63',
[56] = '#cea761',
[57] = '#d9b469',
[58] = '#7a5927',
[59] = '#504123',
[60] = '#3b1f12',
[61] = '#6a3c13',
[62] = '#9f7f49',
[63] = '#ac8456',
}