1645 lines
		
	
	
	
		
			46 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			1645 lines
		
	
	
	
		
			46 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | ||
|     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.
 | ||
|     You’ll 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 server’s 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 = 'okokbanking' -- 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',
 | ||
| 	'police',
 | ||
| 	'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.
 | ||
| ]]
 | ||
| 
 | ||
| Config.RequiredCop = 0 -- Number of police required (only for lockpicking)
 | ||
| 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 = false         -- 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.
 | 
