Main/resources/[housing]/qs-housing/shared/config.lua

1646 lines
46 KiB
Lua
Raw Normal View History

2025-06-09 23:54:46 +02:00
--[[
Welcome to the qs-housing configuration guide!
Before you dive into setting up your new asset, make sure to read this guide carefully.
We'll explain each key part of the configuration, step by step, so that you can
customize everything to fit your server perfectly.
Important configuration sections will be clearly marked, like this one you're reading now.
These sections will guide you through each setting available in this file.
Flexibility is a big part of this setup. Most settings can be adapted to work with
your specific framework (ESX, QBCore, etc.), so feel free to tweak them as needed.
Youll find all the customizable files under client/custom/* or server/custom/*.
Before you get started, check out our detailed documentation for full guidance:
https://docs.quasar-store.com/information/welcome
This resource offers full customization, making it easy to adjust features to your servers needs.
Take your time to explore and enjoy building your housing system!
IMPORTANT
In the new version, the database of furniture has been changed and the problem of furniture disappearing has been solved.
However, players' old furniture has disappeared. To bring back the destroyed furniture,
use the `/revert_decorations` command and restart the script. This will restore the furniture to the database.
This command can be use only on cmd
DO NOT FORGET TO BACKUP YOUR SERVER BEFORE RUNNING THIS COMMAND! IT IS A ONE-TIME COMMAND
]]
---@generic T
---@param data {[string]: string}
---@return string | false
local function dependencyCheck(data)
for k, v in pairs(data) do
if GetResourceState(k):find('started') ~= nil then
return v
end
end
return false
end
Config = {}
Locales = {}
--[[
Choose your preferred language!
In this section, you can select the main language for your asset. We have a wide
selection of default languages available, located in the locales/* folder.
If your language is not listed, don't worry! You can easily create a new one
by adding a new file in the locales folder and customizing it to your needs.
Default languages available:
'ar' -- Arabic
'bg' -- Bulgarian
'ca' -- Catalan
'cs' -- Czech
'da' -- Danish
'de' -- German
'el' -- Greek
'en' -- English
'es' -- Spanish
'fa' -- Persian
'fr' -- French
'hi' -- Hindi
'hu' -- Hungarian
'it' -- Italian
'ja' -- Japanese
'ko' -- Korean
'nl' -- Dutch
'no' -- Norwegian
'pl' -- Polish
'pt' -- Portuguese
'ro' -- Romanian
'ru' -- Russian
'sl' -- Slovenian
'sv' -- Swedish
'th' -- Thai
'tr' -- Turkish
'zh-CN' -- Chinese (Simplified)
'zh-TW' -- Chinese (Traditional)
After selecting your preferred language, be sure to save your changes and test
the asset to ensure everything works as expected!
]]
Config.Language = 'de'
--[[
Framework Detection System:
This script automatically detects if you're using 'es_extended' (ESX), 'qb-core' (QBCore),
or 'qbx_core' frameworks. It configures itself based on the detected framework.
If you've renamed your framework or are using a custom version, do NOT remove the value
from `Config.Framework`. Instead, follow these steps:
1. **Create a new framework file**:
- Add your custom framework logic by creating new files in the following directories:
- `client/custom/framework/`
- `server/custom/framework/`
2. **Modify the detection logic**:
- You can then adapt the framework detection and customization logic within those files
to match your specific framework setup.
Remember: This detection is automatic and should not be edited unless you are certain of the
changes you're making. Incorrect modifications could cause issues with the functionality.
]]
local frameworks = {
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb'
}
Config.Framework = dependencyCheck(frameworks) or 'standalone'
Config.FiveGuard = false -- Your fiveguard script name if exists, if not false.
--[[
Inventory System Integration:
This feature allows you to add a personalized stash for each property in the housing asset.
The system is designed to automatically detect which inventory system your server uses.
Supported inventory systems include popular frameworks such as ESX, QBCore, and others.
If your inventory system is not on the supported list, don't worry! You can manually configure
your inventory by editing the files located in:
`client/custom/inventory/*.lua`
If you need further assistance or run into issues, feel free to contact the seller of the asset
for guidance and support.
]]
local inventories = {
['qs-inventory'] = 'qs-inventory',
['qb-inventory'] = 'qb-inventory',
['ps-inventory'] = 'ps-inventory',
['ox_inventory'] = 'ox_inventory',
['core_inventory'] = 'core_inventory',
['codem-inventory'] = 'codem-inventory',
['inventory'] = 'inventory',
['origen_inventory'] = 'origen_inventory',
['tgiann-inventory'] = 'tgiann-inventory',
}
Config.Inventory = dependencyCheck(inventories) or 'default'
--[[
Dispatch System Integration:
This feature allows you to customize how calls and alerts are managed for each supported
dispatch resource within this asset. The system is designed to automatically detect which
dispatch system is currently in use on your server.
Supported dispatch systems include popular frameworks. The detection is done automatically
based on the resource state.
If your dispatch system is not listed or automatically detected, you can manually configure it
by editing the files located in:
`client/custom/dispatch/*.lua`
For any questions or concerns, please contact the seller of the asset for further assistance.
]]
local dispatch = {
['qs-dispatch'] = 'ps-dispatch'
}
Config.Dispatch = dependencyCheck(dispatch) or 'default'
--[[
Phone System Integration:
This feature allows us to manage phone-related functions for the asset's sale board,
ensuring smooth communication and interaction with players. The system is designed
to automatically detect which phone system is currently in use.
Popular phone systems are automatically detected based on your server configuration.
If your phone system is not listed or detected, you can manually configure it by editing
the necessary files located in:
`server/custom/phone/*.lua`
For any questions or support, feel free to contact the seller of this asset for further assistance.
]]
local phones = {
['qs-smartphone-pro'] = 'qs-smartphone-pro',
['qs-smartphone'] = 'qs-smartphone',
['lb-phone'] = 'lb-phone',
['gksphone'] = 'gksphone',
['okokPhone'] = 'okokPhone',
['roadphone'] = 'roadphone'
}
Config.Phone = dependencyCheck(phones) or 'default'
--[[
Wardrobe System Integration:
This function is responsible for the automated configuration of the wardrobe system,
detecting which wardrobe system is currently in use on your server and setting it
automatically for this asset.
If your wardrobe system is not detected or listed here, you can manually configure it
by editing the relevant files located in:
`client/custom/wardrobe/*.lua`
If you have any questions or need assistance, please contact the seller of your asset for support.
]]
local wardrobes = {
['qs-appearance'] = 'qs-appearance',
['qb-clothing'] = 'qb-clothing',
['codem-appearance'] = 'codem-appearance',
['ak47_clothing'] = 'ak47_clothing',
['fivem-appearance'] = 'fivem-appearance',
['illenium-appearance'] = 'illenium-appearance',
['raid_clothes'] = 'raid_clothes',
['rcore_clothes'] = 'rcore_clothes',
['rcore_clothing'] = 'rcore_clothing',
['sleek-clothestore'] = 'sleek-clothestore',
['tgiann-clothing'] = 'tgiann-clothing',
}
Config.Wardrobe = dependencyCheck(wardrobes) or 'default'
--[[
Garage System Configuration:
This function handles the automatic configuration of the garage system on the server.
If your server does not use a compatible garage system, or if you haven't created
a compatible custom garage system in the server files, the option to use garages
will automatically be disabled.
To enable garages, you can create or configure a compatible system by editing the files located in:
`server/custom/garage/*.lua`
If you have any questions or need help configuring your garage system, contact the seller
of your asset for further assistance.
]]
local garages = {
['qb-garages'] = 'qb-garages',
['qs-advancedgarages'] = 'qs-advancedgarages',
['jg-advancedgarages'] = 'jg-advancedgarages',
['cd_garage'] = 'cd_garage',
['okokGarage'] = 'okokGarage',
['loaf_garage'] = 'loaf_garage',
['rcore_garage'] = 'rcore_garage',
['zerio-garage'] = 'zerio-garage',
['codem-garage'] = 'codem-garage',
['ak47_garage'] = 'ak47_garage',
['ak47_qb_garage'] = 'ak47_qb_garage',
['vms_garagesv2'] = 'vms_garagesv2',
['cs-garages'] = 'cs-garages',
['msk_garage'] = 'msk_garage',
['RxGarages'] = 'RxGarages'
}
Config.Garage = dependencyCheck(garages) or 'standalone'
--[[
General Configuration Overview:
This section outlines the basic and advanced settings for the asset. It allows you to customize
key elements such as the use of a targeting system (qb-target or ox_target), property upgrades
(like security systems), and house creation jobs. It also provides options to manage the
currency format, house ownership limits, and the in-game menus for interacting with houses.
You can adjust these settings to fit your server's needs, whether it's tweaking commissions,
limiting the number of houses a player can own, or enabling/disabling the sales board.
]]
Config.NeedToBeInsidePoints = {
['customHouse'] = false,
['shell'] = false -- Force shell to be inside of the poly points
}
Config.UseTarget = false -- Set true/false (only qb-target or ox_target)
Config.TargetLength = 5.0
Config.TargetWidth = 5.0
Config.Upgrades = {
{
name = 'alarm',
title = 'Security Alarm',
price = 10000,
icon = 'alarmImage'
},
{
name = 'camera',
title = 'Security Cameras',
price = 35000,
icon = 'cameraImage'
},
{
name = 'sensor',
title = 'Motion Sensor',
price = 45000,
icon = 'motionImage'
},
{
name = 'vault',
title = 'Vault Lock',
price = 50000,
icon = 'vaultImage'
}
}
Config.Society = 'esx_society' -- select you society: ('none','esx_society','ap-government','esx_society','qb-management','qb-banking','qs-banking','renewed-banking','okokbanking','zpx-banking', 'tgg-banking', 'crm-banking')
Config.SocietyCommision = 0.3 -- Percentage of the commission for the company (%30 of house price)
-- Taxes configuration
Config.BankFee = function(price) return price / 100 * 10 end
Config.BrokerFee = function(price) return price / 100 * 5 end
Config.Taxes = function(price) return price / 100 * 5 end
Config.UseMathCeilOnFees = true
Config.CreatorJobs = { -- Choose the jobs suitable for creating houses
'realestate',
2025-06-09 23:56:12 +02:00
'admin',
2025-06-09 23:54:46 +02:00
'realestatejob'
}
Config.TestRemTime = 1 -- Visiting time inside the house (1 = 1 minute)
Config.MinZOffset = 30 -- Minimum shell spawn offset
Config.CreatorAlpha = 200 -- Ignore this if you don't want to edit the Alpha
Config.SignTextScale = 0.6 -- Sale poster text size
Config.TimeInterior = 23 -- This is the time it will be when entering the shells (to avoid alternating shadows)
Config.HideOwnedHouses = false -- Hide owned houses from the map
Config.GroupBlips = false -- Hide address on the blips (Short blips)
Config.MaxOwnedHouses = 15 -- Limit of houses per player (5 default)
Config.SellObjectCommision = 0.3 -- Commission that will be charged when selling a piece of furniture
Config.EnableBoard = true -- Enable or disable the sales board
Config.BoardObject = 'qs_salesign_01' -- House for sale sign prop (edit it for another one if you want)
Config.BoardSpawnDistance = 35.0
Config.UseDrawTextOnBoard = true -- Use DrawText3D on the sales board
Config.MaxApartmentCount = 50 -- Maximum number of apartments per house (Remember that every apartment is a house, so make sure you keep this at a low value so that it doesn't adversely affect the performance of your server.)
Config.DefaultLightIntensity = 20.0
Config.MaxVaultCodes = 3 -- Select the number of vaults that each home can have
Config.MinPointLength = 70.0 -- Minimum length of the poly points
-- Your currency symbol (https://www.telerik.com/blogs/javascript-intl-object)
Config.Intl = {
locales = 'en-US', -- 'en-US', 'pt-BR', 'es-ES', 'fr-FR', 'de-DE', 'ru-RU', 'zh-CN'
options = {
style = 'currency', -- 'decimal', 'currency', 'percent', 'unit'
currency = 'USD', -- 'USD', 'EUR', 'BRL', 'RUB', 'CNY'
minimumFractionDigits = 0 -- 0, 1, 2, 3, 4, 5
}
}
Config.Blip = {
forSale = {
enabled = true,
},
owned = {
enabled = true,
color = 3
},
ownedOther = {
enabled = true,
color = 3
},
officialOwned = { -- When put the rent the house you are official owner of the house
enabled = true,
color = 2
},
rentable = {
enabled = true,
color = 5
},
purchasable = {
enabled = true,
color = 4
}
}
Config.DisableAllHouseBlips = false -- Disable all blips on the map
Config.OpenHouseMenu = 'F3' -- Key to open the internal menu of the home
Config.OpenJobMenu = 'F7' -- Key to open the house creation menu
Config.DisableBuyableDecorationFromF3 = false -- Disable the purchase of decorations from the F3 menu (stonks for ikea)
--[[
Illegal System Configuration:
This section handles the configuration for the illegal system in the asset.
Make sure to carefully control this to avoid breaking the in-game economy
or disrupting player systems.
It is recommended to use mini-game scripts as part of the illegal system's operation.
You can find more details and the necessary dependencies for these scripts in the
documentation under the 'dependencies' section.
]]
2025-06-09 23:56:12 +02:00
Config.RequiredCop = 2 -- Number of police required (only for lockpicking)
2025-06-09 23:54:46 +02:00
Config.PoliceJobs = { -- Jobs that will be considered police
'realestate',
'police',
'realestatejob'
}
Config.EnableRobbery = true -- Enable or disable the usable item to initiate robberies
Config.EnableRaid = true -- Enable or disable the usable item to initiate raids
Config.RobberyItem = 'lockpick' -- Item to start the robbery of houses
Config.StomRamItem = 'police_stormram' -- Item to begin the search of a house
--[[
Rental and Mortgage System Configuration:
This section is dedicated to configuring the rental system for homes,
including how the rental process works and the duration of rental agreements.
It also handles the configuration of credit times for players purchasing homes through
mortgages, allowing you to set repayment schedules and terms.
Customize these settings to ensure the rental and mortgage system fits the economy
and gameplay style of your server.
]]
Config.CreditEnable = true -- Enable or disable the mortgage option in the house contract.
Config.CreditEq = 0.3 -- Collection percentage for bank loans (default 0.3)
Config.CreditTime = 5 -- Time interval to collect bank credit (5 = 5 minutes)
Config.HireRenterCommand = 'hireRenter' -- Command for the administrator to expel a tenant from the property (force eviction)
Config.RentTime = 5 -- Time interval to collect rent (5 = 5 minutes)
Config.EnableRentable = true -- Enable or disable the rental system
Config.CreatedRentableHousesManageable = false -- If you set this to false, realestate cannot cancel the lease or expel players.
--[[
Decoration and Stash Configuration:
This section allows you to configure the decoration and stash settings for each house.
You can specify whether only the owner of the house can decorate it, or if anyone
with keys has permission to do so. Additionally, this section manages the basic stash
system for each home, allowing for personal storage.
Adjust these settings based on the level of access you want to give to other players
who have access to the house.
]]
Config.SpawnDistance = 100.0 -- Distance in meters for spawning related objects/entities
Config.MaximumDistanceForDecorate = 350.0
Config.DecorateOnlyAccessForOwner = true -- Can anyone with a key decorate or only the owner?
Config.HideRadarInDecorate = true -- Disable radar in decorations?
Config.ModernDecorateMode = true -- Use the old keyboard and mouse decoration system (if you use true, you will use the modern method)
Config.DefaultStashData = {
maxweight = 1000000,
slots = 30,
}
Config.Music = 'building' -- You can set false if you don't want music
Config.MusicVolume = 0.01 -- Choose a volume for the songs
Config.HandleHud = {
enable = function()
Debug('Enable hud triggered')
-- Enable your hud
end,
disable = function()
Debug('Disable hud triggered')
-- Disable your hud
end
}
--[[
Shell and 3D Model Configuration:
This section is dedicated to configuring the shells (interior models) and 3D props
used for house creation. You can define the props you want to use or specify the
shell models in this configuration. There is no limit to the number of shells or models
you can add to this list.
If you're looking for additional shells, we recommend visiting our trusted partner at
https://www.k4mb1maps.com, known for providing some of the best FiveM shells.
Feel free to expand this list as needed to fit your server's requirements.
]]
Config.Shells = {
[1] = {
model = 'standardmotel_shell',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- }
},
[2] = {
model = 'modernhotel_shell',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[3] = {
model = 'furnitured_midapart',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[4] = {
model = 'shell_garagem',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[5] = {
model = 'shell_office1',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[6] = {
model = 'shell_store1',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[7] = {
model = 'shell_warehouse1',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[8] = {
model = 'container_shell',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[9] = {
model = 'shell_michael',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[10] = {
model = 'shell_frankaunt',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[11] = {
model = 'shell_ranch',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[12] = {
model = 'shell_trailer',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[13] = {
model = 'shell_lester',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[14] = {
model = 'shell_v16mid',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[15] = {
model = 'shell_trevor',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
[16] = {
model = 'shell_v16low',
stash = {
maxweight = 1000000,
slots = 5,
},
-- imgs = {
-- {
-- url = 'Add imagen here (optional, is only for future dlcs)',
-- label = 'Name room',
-- },
-- },
},
}
Config.MInsurance = GetResourceState('m-insurance') == 'started'
exports('getShells', function()
return Config.Shells
end)
Config.HouseObjects = {
[1] = { -- House 1
model = 'lf_house_04_',
},
[2] = { -- House 2
model = 'lf_house_05_',
},
[3] = { -- House 3
model = 'lf_house_07_',
},
[4] = { -- House 4
model = 'lf_house_08_',
},
[5] = { -- House 5
model = 'lf_house_09_',
},
[6] = { -- House 6
model = 'lf_house_10_',
},
[7] = { -- House 7
model = 'lf_house_11_',
},
[8] = { -- House 8
model = 'lf_house_13_',
},
[9] = { -- House 9
model = 'lf_house_15_',
},
[10] = { -- House 10
model = 'lf_house_16_',
},
[11] = { -- House 11
model = 'lf_house_17_',
},
[12] = { -- House 12
model = 'lf_house_18_',
},
[13] = { -- House 13
model = 'lf_house_19_',
},
[14] = { -- House 14
model = 'lf_house_20_',
},
}
Config.Islands = {
[1] = { -- Island 1
model = 'qs_pineisland_01',
},
[2] = { -- Island 2
model = 'qs_pineisland_02',
},
[3] = { -- Island 3
model = 'qs_pineisland_03',
},
[4] = { -- Island 4
model = 'qs_treeisland_01',
},
[5] = { -- Island 5
model = 'qs_treeisland_02',
},
[6] = { -- Island 6
model = 'qs_treeisland_03',
},
[7] = { -- Island 7
model = 'qs_tropiisland_01',
},
[8] = { -- Island 8
model = 'qs_tropiisland_02',
},
[9] = { -- Island 9
model = 'qs_tropiisland_03',
},
}
Config.IplData = {
{
-- Apartment
export = function()
return exports['bob74_ipl']:GetExecApartment1Object()
end,
defaultTheme = 'seductive',
themes = {
{ label = 'Modern', value = 'modern', price = 500, image = './assets/img/management/themes/apartment/modern.png' },
{ label = 'Moody', value = 'moody', price = 500, image = './assets/img/management/themes/apartment/moody.png' },
{ label = 'Vibrant', value = 'vibrant', price = 500, image = './assets/img/management/themes/apartment/vibrant.png' },
{ label = 'Monochrome', value = 'monochrome', price = 500, image = './assets/img/management/themes/apartment/monochrome.png' },
{ label = 'Seductive', value = 'seductive', price = 500, image = './assets/img/management/themes/apartment/seductive.png' },
{ label = 'Regal', value = 'regal', price = 500, image = './assets/img/management/themes/apartment/regal.png' },
{ label = 'Aqua', value = 'aqua', price = 500, image = './assets/img/management/themes/apartment/aqua.png' },
-- { label = 'Sharp', value = 'sharp', price = 500, image = './assets/img/management/themes/apartment/sharp.png' }
},
exitCoords = vec3(-787.44, 315.81, 217.64),
iplCoords = vec3(-787.78050000, 334.92320000, 215.83840000),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Office
export = function()
return exports['bob74_ipl']:GetFinanceOffice1Object()
end,
defaultTheme = 'warm',
themes = {
{ label = 'Warm', value = 'warm', price = 500, image = './assets/img/management/themes/office/warm.png' },
{ label = 'Classical', value = 'classical', price = 500, image = './assets/img/management/themes/office/classical.png' },
{ label = 'Vintage', value = 'vintage', price = 500, image = './assets/img/management/themes/office/vintage.png' },
{ label = 'Contrast', value = 'contrast', price = 500, image = './assets/img/management/themes/office/contrast.png' },
{ label = 'Rich', value = 'rich', price = 500, image = './assets/img/management/themes/office/rich.png' },
{ label = 'Cool', value = 'cool', price = 500, image = './assets/img/management/themes/office/cool.png' },
{ label = 'Ice', value = 'ice', price = 500, image = './assets/img/management/themes/office/ice.png' },
{ label = 'Conservative', value = 'conservative', price = 500, image = './assets/img/management/themes/office/conservative.png' },
{ label = 'Polished', value = 'polished', price = 500, image = './assets/img/management/themes/office/polished.png' }
},
exitCoords = vec3(-141.1987, -620.913, 168.8205),
iplCoords = vec3(-141.1987, -620.913, 168.8205),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Night Club
exitCoords = vec3(-1569.402222, -3017.604492, -74.413940),
iplCoords = vec3(-1604.664, -3012.583, -78.000),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Clubhouse 1
exitCoords = vec3(1121.037354, -3152.782471, -37.074707),
iplCoords = vec3(1107.04, -3157.399, -37.51859),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Clubhouse 2
exitCoords = vec3(997.028564, -3158.136230, -38.911377),
iplCoords = vec3(998.4809, -3164.711, -38.90733),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Cocaine Lab
exitCoords = vec3(1088.703247, -3187.463623, -38.995605),
iplCoords = vec3(1093.6, -3196.6, -38.99841),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Meth Lab
exitCoords = vec3(996.896729, -3200.914307, -36.400757),
iplCoords = vec3(1009.5, -3196.6, -38.99682),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Weed Lab
exitCoords = vec3(1066.298950, -3183.586914, -39.164062),
iplCoords = vec3(1056.975830, -3194.571533, -39.164062),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Counterfeit Cash Factory
exitCoords = vec3(1138.101074, -3199.107666, -39.669556),
iplCoords = vec3(1121.897, -3195.338, -40.4025),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Document Forgery
exitCoords = vec3(1173.7, -3196.73, -39.01),
iplCoords = vec3(1165, -3196.6, -39.01306),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Penthouse Casino
exitCoords = vec3(980.83, 56.51, 116.16),
iplCoords = vec3(976.636, 70.295, 115.164),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- NightClub Warehouse
exitCoords = vec3(-1520.88, -2978.54, -80.45),
iplCoords = vec3(-1505.783, -3012.587, -80.000),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- 2 Car
exitCoords = vec3(179.15, -1000.15, -99.0),
iplCoords = vec3(173.2903, -1003.6, -99.65707),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- 6 Car
exitCoords = vec3(212.4, -998.97, -99.0),
iplCoords = vec3(197.8153, -1002.293, -99.65749),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- 10 Car
exitCoords = vec3(240.67, -1004.69, -99.0),
iplCoords = vec3(229.9559, -981.7928, -99.66071),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Casino NightClub
exitCoords = vec3(1545.57, 254.22, -46.01),
iplCoords = vec3(1550.0, 250.0, -48.0),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Warehouse Small
exitCoords = vec3(1087.43, -3099.48, -39.0),
iplCoords = vec3(1094.988, -3101.776, -39.00363),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Warehouse Medium
exitCoords = vec3(1048.12, -3097.28, -39.0),
iplCoords = vec3(1056.486, -3105.724, -39.00439),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Warehouse Large
exitCoords = vec3(992.38, -3098.08, -39.0),
iplCoords = vec3(1006.967, -3102.079, -39.0035),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Vehicle Warehouse
exitCoords = vec3(956.12, -2987.24, -39.65),
iplCoords = vec3(994.5925, -3002.594, -39.64699),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Old Bunker Interior
exitCoords = vec3(899.5518, -3246.038, -98.04907),
iplCoords = vec3(899.5518, -3246.038, -98.04907),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Arcadius Garage 1
exitCoords = vec3(-198.666, -580.515, 136.00),
iplCoords = vec3(-191.0133, -579.1428, 135.0000),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Arcadius Mod Shop
exitCoords = vec3(-139.388, -587.917, 167.00),
iplCoords = vec3(-146.6166, -596.6301, 166.0000),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- 2133 Mad Wayne Thunder
exitCoords = vec3(-1289.89, 449.83, 97.9),
iplCoords = vec3(-1288, 440.748, 97.69459),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- 2868 Hillcrest Avenue
exitCoords = vec3(-753.04, 618.82, 144.14),
iplCoords = vec3(-763.107, 615.906, 144.1401),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- EclipseTowers, Apt 3
exitCoords = vec3(-785.12, 323.75, 212.0),
iplCoords = vec3(-773.407, 341.766, 211.397),
stash = {
maxweight = 1000000,
slots = 10,
},
},
{
-- Dell Perro Heights, Apt 7
exitCoords = vec3(-1453.86, -517.64, 56.93),
iplCoords = vec3(-1477.14, -538.7499, 55.5264),
stash = {
maxweight = 1000000,
slots = 10,
},
}
}
--[[
This script sets up a construction system for a FiveM server. It allows you to create interactive construction zones with NPCs working on them.
1. **Config.Construction**: Enables or disables the construction system.
2. **Config.Constructions**: A table of defined construction projects. Each entry includes:
- **duration**: Time in milliseconds for the construction to complete (e.g., 60 seconds here).
- **model**: Temporary construction model that replaces the final model during the building phase.
- **peds**: A list of NPCs with their models, positions, headings, and animations to simulate workers.
]]
Config.Construction = false -- Enable constructión timer/animations?
---@type table<string, Construction>
Config.Constructions = {
['lf_house_04_'] = {
duration = 10 * 60, -- 1 minute
model = 'prop_pighouse2', -- Construction model. When construction is done it will be change with original model
peds = { -- Your ped offsets you can add whatever you want
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_05_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_07_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_08_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_09_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_10_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_11_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_13_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_15_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_16_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_17_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_18_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_19_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
['lf_house_20_'] = {
duration = 10 * 60,
model = 'prop_pighouse2',
peds = {
{
model = 's_m_m_dockwork_01',
offsets = vec3(0.0, 0.3, 0.0),
heading = 65.54,
anim = 'base',
dict = 'anim@amb@office@boardroom@boss@male@',
},
{
model = 's_m_m_gardener_01',
offsets = vec3(1.0, 2.0, 0.0),
heading = 179.27,
anim = 'idle_a',
dict = 'amb@world_human_picnic@female@idle_a',
}
}
},
}
--[[
Shell/IPL/MLO General Controls Configuration:
This section allows you to configure the general controls and language settings
when modifying or creating shells, IPL (Interior Proxy Library), or MLO (Map Loaded Object) models.
You can adjust these controls to your preference, ensuring smooth operation when
handling interiors and models in your server.
Make sure to configure these settings carefully, as they will determine how you
interact with and customize interiors within the game.
]]
ActionControls = {
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 }
},
set_any = {
label = 'Set',
codes = { 24 }
},
undo_point = {
label = 'Undo Last',
codes = { 25 }
},
set_position = {
label = 'Set Position',
codes = { 24 }
},
add_garage = {
label = 'Add Garage',
codes = { 24 }
},
rotate_z = {
label = 'RotateZ +/-',
codes = { 20, 73 }
},
rotate_z_scroll = {
label = 'RotateZ +/-',
codes = { 17, 16 }
},
increase_z = {
label = 'Z Boundary +/-',
codes = { 180, 181 }
},
decrease_z = {
label = 'Z Boundary +/-',
codes = { 21, 180, 181 }
},
done = {
label = 'Done',
codes = { 191 }
},
change_player = {
label = 'Player +/-',
codes = { 82, 81 }
},
change_shell = {
label = 'Change Shell +/-',
codes = { 189, 190 }
},
select_player = {
label = 'Select Player',
codes = { 191 }
},
cancel = {
label = 'Cancel',
codes = { 194 }
},
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 }
},
}
Config.DoorDistance = 1.5 -- Distance to interact with doors
Config.DoorDuplicateDistance = 3.0 -- If door is closest by this distance it will be one door
Config.DynamicDoors = true -- Enable dynamic doors? needs `setr game_enableDynamicDoorCreation "true"`
Config.CreditToggleActiveInDefault = false -- Enable credit toggle active in default
CameraOptions = {
lookSpeedX = 500.0,
lookSpeedY = 500.0,
moveSpeed = 10.0,
climbSpeed = 10.0,
rotateSpeed = 50.0,
}
--[[
Custom House Creation Configuration:
This section allows you to manually create custom houses directly through the configuration
files without using the in-game creation system. This option is more complex and is recommended
only for experienced developers who are familiar with server-side modifications.
If you are not an experienced developer, we strongly advise using the in-game F7 menu
and the appropriate job role for creating and managing houses.
Manual configuration should only be done if you understand the process well to avoid issues.
]]
CreatingHouse = {}
Config.Houses = {
-- ['Test House'] = {
-- owned = 0,
-- price = 0,
-- locked = true,
-- address = 'Nikola p1',
-- tier = 1,
-- coords = {
-- enter = {
-- ['z'] = 71.46570587158203,
-- ['h'] = 311.8609924316406,
-- ['x'] = 1303.005859375,
-- ['y'] = -527.4683837890625
-- },
-- PolyZone = {
-- thickness = 25.0,
-- usePolyZone = true,
-- points = { {
-- ['x'] = 1303.5743408203125,
-- ['y'] = -500.41802978515625,
-- ['z'] = 71.0
-- }, {
-- ['x'] = 1293.0418701171875,
-- ['y'] = -537.6560668945312,
-- ['z'] = 71.0
-- }, {
-- ['x'] = 1311.5504150390625,
-- ['y'] = -544.9464721679688,
-- ['z'] = 71.0
-- }, {
-- ['x'] = 1327.7315673828125,
-- ['y'] = -498.835205078125,
-- ['z'] = 71.0
-- } }
-- },
-- cam = {
-- ['h'] = 311.8609924316406,
-- ['y'] = -527.4683837890625,
-- ['z'] = 71.46570587158203,
-- yaw = -10.0,
-- ['x'] = 1303.005859375
-- },
-- exit = {
-- ['z'] = 27.56341361999511,
-- ['h'] = 246.86099243164062,
-- ['x'] = 1264.6019287109375,
-- ['y'] = -545.8494262695312
-- },
-- interiorCoords = {
-- ['x'] = 1266.744384765625,
-- ['y'] = -544.3600463867188,
-- ['z'] = 26.55422592163086,
-- ['w'] = 311.8609924316406
-- },
-- shellCoords = {
-- ['z'] = 26.55422592163086,
-- ['h'] = 311.8609924316406,
-- ['x'] = 1266.744384765625,
-- ['y'] = -544.3600463867188
-- }
-- },
-- garage = {
-- max = 4, -- Maximum spawn point [max slot]
-- access = {},
-- slots = {
-- [1] = { -- Spawn Points
-- x = -125.64788055419922,
-- y = -1297.646728515625,
-- z = 29.44520378112793,
-- h = 93.55599975585938,
-- },
-- },
-- coords = {
-- -- Garage location
-- x = -228.8,
-- y = -990.41,
-- z = 29.34,
-- h = 267.02,
-- }
-- },
-- }
}
--[[
Free Mode Keys Configuration:
This configuration defines the key bindings for Free Mode, allowing users
to move, rotate, and manipulate objects within the environment. These keys
are mapped to specific functions to provide intuitive controls for object
placement and adjustments.
Each key binding corresponds to a particular action, such as increasing
speed, moving objects in specific directions, or rotating them for fine-tuning.
These bindings are essential for achieving precise placement and control
over objects in the environment.
Customizable Key Bindings:
- ChangeKey: Switches between different movement modes.
- Speed Adjustment: Controls the movement speed of objects.
- Directional Movement: Moves objects along the X, Y, and Z axes.
- Rotation: Rotates objects around their axes.
- Tilt: Tilts objects for angled adjustments.
- Stick to Ground: Aligns objects to the ground level.
Developers or server administrators can customize these keys to match their
preferences or to integrate seamlessly with other controls in their resource.
]]
Keys = { ['ESC'] = 322, ['F1'] = 288, ['F2'] = 289, ['F3'] = 170, ['F5'] = 166, ['F6'] = 167, ['F7'] = 168, ['F8'] = 169, ['F9'] = 56, ['F10'] = 57, ['~'] = 243, ['1'] = 157, ['2'] = 158, ['3'] = 160, ['4'] = 164, ['5'] = 165, ['6'] = 159, ['7'] = 161, ['8'] = 162, ['9'] = 163, ['-'] = 84, ['='] = 83, ['BACKSPACE'] = 177, ['TAB'] = 37, ['Q'] = 44, ['W'] = 32, ['E'] = 38, ['R'] = 45, ['T'] = 245, ['Y'] = 246, ['U'] = 303, ['P'] = 199, ['['] = 39, [']'] = 40, ['ENTER'] = 18, ['CAPS'] = 137, ['A'] = 34, ['S'] = 8, ['D'] = 9, ['F'] = 23, ['G'] = 47, ['H'] = 74, ['K'] = 311, ['L'] = 182, ['LEFTSHIFT'] = 21, ['Z'] = 20, ['X'] = 73, ['C'] = 26, ['V'] = 0, ['B'] = 29, ['N'] = 249, ['M'] = 244, [','] = 82, ['.'] = 81, ['LEFTCTRL'] = 36, ['LEFTALT'] = 19, ['SPACE'] = 22, ['RIGHTCTRL'] = 70, ['HOME'] = 213, ['PAGEUP'] = 10, ['PAGEDOWN'] = 11, ['DELETE'] = 178, ['LEFT'] = 174, ['RIGHT'] = 175, ['TOP'] = 27, ['DOWN'] = 173, ['NENTER'] = 201, ['N4'] = 108, ['N5'] = 60, ['N6'] = 107, ['N+'] = 96, ['N-'] = 97, ['N7'] = 117, ['N8'] = 61, ['N9'] = 118 }
Config.FreeModeKeys = {
ChangeKey = Keys['LEFTCTRL'],
MoreSpeed = Keys['.'],
LessSpeed = Keys[','],
MoveToTop = Keys['TOP'], -- Key to move the object upwards (Top Arrow)
MoveToDown = Keys['DOWN'], -- Key to move the object downwards (Down Arrow)
MoveToForward = Keys['TOP'], -- Key to move the object forward (Top Arrow)
MoveToBack = Keys['DOWN'], -- Key to move the object backward (Down Arrow)
MoveToRight = Keys['RIGHT'], -- Key to move the object to the right (Right Arrow)
MoveToLeft = Keys['LEFT'], -- Key to move the object to the left (Left Arrow)
RotateToTop = Keys['6'], -- Key to rotate the object to the top (Number 6)
RotateToDown = Keys['7'], -- Key to rotate the object downwards (Number 7)
RotateToLeft = Keys['8'], -- Key to rotate the object to the left (Number 8)
RotateToRight = Keys['9'], -- Key to rotate the object to the right (Number 9)
TiltToTop = Keys['Z'], -- Key to tilt the object to the top
TiltToDown = Keys['X'], -- Key to tilt the object downwards
TiltToLeft = Keys['C'], -- Key to tilt the object to the left
TiltToRight = Keys['V'], -- Key to tilt the object to the right
StickToTheGround = Keys['LEFTALT'], -- Key to stick the object to the ground (Left Alt)
}
--[[
Debug Mode:
This mode is designed to provide constant feedback and print information
from the system, which can be helpful for developers to understand how
the resource operates.
We do not recommend enabling debug mode unless you are a developer,
as it will flood your console with information, but it can be valuable
for troubleshooting and understanding the inner workings of the system.
]]
Config.Debug = true -- Enable or disable debug mode for general information and troubleshooting.
Config.ZoneDebug = false -- Enable or disable debug mode for zone-related actions and details.