1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-07-09 14:25:50 +02:00
parent 9b77c2d36a
commit e4383f34d2
3902 changed files with 27282 additions and 525887 deletions

View file

@ -1,14 +0,0 @@
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
this_is_a_map "yes"
data_file 'AUDIO_GAMEDATA' 'audio/cinecar_audio_door_game.dat'
files {
'audio/cinecar_audio_door_game.dat151.rel',
'stream/*'
}
dependency '/assetpacks'

View file

@ -1,180 +0,0 @@
ALTER TABLE
`users`
ADD
IF NOT EXISTS `inside` VARCHAR(50) NULL DEFAULT '';
INSERT IGNORE INTO
`addon_inventory` (name, label, shared)
VALUES
('propery', 'Property', 0);
INSERT IGNORE INTO
`datastore` (name, label, shared)
VALUES
('propery', 'Property', 0);
CREATE TABLE IF NOT EXISTS `houselocations` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
`label` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`coords` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`owned` TINYINT(2) NULL DEFAULT NULL,
`price` INT(11) NULL DEFAULT NULL,
`defaultPrice` INT(11) NULL DEFAULT NULL,
`tier` TINYINT(2) NULL DEFAULT NULL,
`garage` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`garageShell` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`creator` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`mlo` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`ipl` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`console` INT(11) NULL DEFAULT NULL,
`board` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`for_sale` INT(11) NULL DEFAULT '1',
`extra_imgs` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`description` TEXT NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
`creatorJob` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`blip` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`upgrades` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`apartmentCount` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`name`) USING BTREE,
INDEX `name` (`name`) USING BTREE,
INDEX `id` (`id`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
CREATE TABLE IF NOT EXISTS `player_houses` (
`id` INT(255) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`citizenid` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`owner` VARCHAR(46) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`keyholders` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`stash` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`outfit` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`logout` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`decorateStash` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`charge` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`credit` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`creditPrice` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`console` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`decorateCoords` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`rented` INT(11) NULL DEFAULT NULL,
`rentPrice` INT(11) NULL DEFAULT NULL,
`rentable` INT(11) NULL DEFAULT NULL,
`purchasable` INT(11) NULL DEFAULT NULL,
`vaultCodes` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`id`) USING BTREE,
INDEX `house` (`house`) USING BTREE,
INDEX `owner` (`owner`) USING BTREE,
INDEX `citizenid` (`citizenid`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3
;
CREATE TABLE IF NOT EXISTS `house_rents` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
`identifier` VARCHAR(80) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
`payed` INT(11) NOT NULL DEFAULT '0',
`date` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`) USING BTREE
) COLLATE = 'utf8mb4_general_ci' ENGINE = InnoDB AUTO_INCREMENT = 1;
CREATE TABLE IF NOT EXISTS `house_objects` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`creator` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci',
`model` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci',
`coords` TEXT NOT NULL COLLATE 'latin1_swedish_ci',
`house` VARCHAR(80) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`construction` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`created` TIMESTAMP NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
ALTER TABLE `house_objects`
ADD IF NOT EXISTS `construction` VARCHAR(50) NULL DEFAULT NULL,
ADD IF NOT EXISTS `created` TIMESTAMP NULL DEFAULT current_timestamp()
;
DROP TABLE IF EXISTS `house_plants`;
CREATE TABLE IF NOT EXISTS `house_plants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`building` varchar(50) DEFAULT NULL,
`stage` varchar(50) DEFAULT 'stage-a',
`sort` varchar(50) DEFAULT NULL,
`gender` varchar(50) DEFAULT NULL,
`food` int(11) DEFAULT 100,
`health` int(11) DEFAULT 100,
`progress` int(11) DEFAULT 0,
`coords` text DEFAULT NULL,
`plantid` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `building` (`building`),
KEY `plantid` (`plantid`)
) ENGINE = InnoDB AUTO_INCREMENT = 7123 DEFAULT CHARSET = utf8mb4;
ALTER TABLE `player_houses`
CHANGE COLUMN IF EXISTS `identifier` `owner` VARCHAR(46) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci';
ALTER TABLE `houselocations`
ADD IF NOT EXISTS `blip` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `upgrades` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `apartmentCount` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `creatorGotMoney` TINYINT(1) NOT NULL DEFAULT '0'
;
ALTER TABLE `player_houses`
ADD IF NOT EXISTS `rented` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `rentPrice` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `rentable` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `purchasable` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `console` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `decorateCoords` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `vaultCodes` TEXT NULL DEFAULT NULL
;
ALTER TABLE `houselocations`
DROP IF EXISTS `houseID`
;
ALTER TABLE `player_houses`
DROP IF EXISTS `houseID`,
DROP IF EXISTS `timer`,
DROP IF EXISTS `insideId`
;
ALTER TABLE `houselocations`
CHANGE COLUMN `tier` `tier` SMALLINT NULL DEFAULT NULL;
CREATE TABLE IF NOT EXISTS `house_decorations` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`creator` VARCHAR(70) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
`modelName` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
`coords` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`rotation` TEXT NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
`inStash` TINYINT(1) NOT NULL DEFAULT '0',
`inHouse` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
`uniq` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`created` TIMESTAMP NULL DEFAULT NULL,
`lightData` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
PRIMARY KEY (`id`) USING BTREE,
INDEX `id` (`id`, `house`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

View file

@ -1,3 +0,0 @@
Please search for the items and follow all the documentation.
docs.quasar-store.com

View file

@ -1,7 +0,0 @@
-- IF YOU ARE NOT UPDATING YOUR OLD QS-HOUSING, MAKE SURE YOU READ THIS SQL!
DROP TABLE IF EXISTS `houselocations`;
DROP TABLE IF EXISTS `player_houses`;
DROP TABLE IF EXISTS `house_rents`;
DROP TABLE IF EXISTS `house_objects`;
DROP TABLE IF EXISTS `house_plants`;

View file

@ -1,170 +0,0 @@
ALTER TABLE
`players`
ADD
IF NOT EXISTS `inside` VARCHAR(50) NULL DEFAULT '';
CREATE TABLE IF NOT EXISTS `houselocations` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
`label` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`coords` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`owned` TINYINT(2) NULL DEFAULT NULL,
`price` INT(11) NULL DEFAULT NULL,
`defaultPrice` INT(11) NULL DEFAULT NULL,
`tier` TINYINT(2) NULL DEFAULT NULL,
`garage` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`garageShell` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`creator` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`mlo` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`ipl` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`console` INT(11) NULL DEFAULT NULL,
`board` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`for_sale` INT(11) NULL DEFAULT '1',
`extra_imgs` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`description` TEXT NOT NULL DEFAULT '' COLLATE 'latin1_swedish_ci',
`creatorJob` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`blip` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`upgrades` TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`apartmentCount` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`name`) USING BTREE,
INDEX `name` (`name`) USING BTREE,
INDEX `id` (`id`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
CREATE TABLE IF NOT EXISTS `player_houses` (
`id` INT(255) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`citizenid` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`owner` VARCHAR(46) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`keyholders` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`stash` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`outfit` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`logout` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`decorateStash` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`charge` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`credit` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`creditPrice` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`console` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`decorateCoords` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`rented` INT(11) NULL DEFAULT NULL,
`rentPrice` INT(11) NULL DEFAULT NULL,
`rentable` INT(11) NULL DEFAULT NULL,
`purchasable` INT(11) NULL DEFAULT NULL,
`vaultCodes` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`id`) USING BTREE,
INDEX `house` (`house`) USING BTREE,
INDEX `owner` (`owner`) USING BTREE,
INDEX `citizenid` (`citizenid`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3
;
CREATE TABLE IF NOT EXISTS `house_rents` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
`identifier` VARCHAR(80) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
`payed` INT(11) NOT NULL DEFAULT '0',
`date` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`) USING BTREE
) COLLATE = 'utf8mb4_general_ci' ENGINE = InnoDB AUTO_INCREMENT = 1;
CREATE TABLE IF NOT EXISTS `house_objects` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`creator` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci',
`model` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'latin1_swedish_ci',
`coords` TEXT NOT NULL COLLATE 'latin1_swedish_ci',
`house` VARCHAR(80) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`construction` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`created` TIMESTAMP NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
ALTER TABLE `house_objects`
ADD IF NOT EXISTS `construction` VARCHAR(50) NULL DEFAULT NULL,
ADD IF NOT EXISTS `created` TIMESTAMP NULL DEFAULT current_timestamp()
;
DROP TABLE IF EXISTS `house_plants`;
CREATE TABLE IF NOT EXISTS `house_plants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`building` varchar(50) DEFAULT NULL,
`stage` varchar(50) DEFAULT 'stage-a',
`sort` varchar(50) DEFAULT NULL,
`gender` varchar(50) DEFAULT NULL,
`food` int(11) DEFAULT 100,
`health` int(11) DEFAULT 100,
`progress` int(11) DEFAULT 0,
`coords` text DEFAULT NULL,
`plantid` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `building` (`building`),
KEY `plantid` (`plantid`)
) ENGINE = InnoDB AUTO_INCREMENT = 7123 DEFAULT CHARSET = utf8mb4;
ALTER TABLE `player_houses`
CHANGE COLUMN IF EXISTS `identifier` `owner` VARCHAR(46) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci';
ALTER TABLE `houselocations`
ADD IF NOT EXISTS `blip` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `upgrades` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `apartmentCount` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `creatorGotMoney` TINYINT(1) NOT NULL DEFAULT '0'
;
ALTER TABLE `player_houses`
ADD IF NOT EXISTS `rented` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `rentPrice` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `rentable` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `purchasable` INT(11) NULL DEFAULT NULL,
ADD IF NOT EXISTS `console` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `decorateCoords` TEXT NULL DEFAULT NULL,
ADD IF NOT EXISTS `vaultCodes` TEXT NULL DEFAULT NULL
;
ALTER TABLE `houselocations`
DROP IF EXISTS `houseID`
;
ALTER TABLE `player_houses`
DROP IF EXISTS `houseID`,
DROP IF EXISTS `timer`,
DROP IF EXISTS `insideId`
;
ALTER TABLE `houselocations`
CHANGE COLUMN `tier` `tier` SMALLINT NULL DEFAULT NULL;
CREATE TABLE IF NOT EXISTS `house_decorations` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`house` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`creator` VARCHAR(70) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
`modelName` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
`coords` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`rotation` TEXT NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
`inStash` TINYINT(1) NOT NULL DEFAULT '0',
`inHouse` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
`uniq` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`created` TIMESTAMP NULL DEFAULT NULL,
`lightData` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
PRIMARY KEY (`id`) USING BTREE,
INDEX `id` (`id`, `house`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

Binary file not shown.

View file

@ -0,0 +1 @@
Please follow the instructions: https://docs.brutalscripts.com

View file

@ -0,0 +1,241 @@
ESX = Core
QBCore = Core
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
if Config.BrutalNotify then
exports['brutal_notify']:SendAlert(title, text, time, type)
else
-- Put here your own notify and set the Config.BrutalNotify to false
SetNotificationTextEntry("STRING")
AddTextComponentString(text)
DrawNotification(0,1)
-- Default ESX Notify:
--TriggerEvent('esx:showNotification', text)
-- Default QB Notify:
--TriggerEvent('QBCore:Notify', text, 'info', 5000)
-- OKOK Notify:
-- exports['okokNotify']:Alert(title, text, time, type, false)
end
end
function TextUIFunction(type, text)
if type == 'open' then
if Config.TextUI:lower() == 'ox_lib' then
lib.showTextUI(text)
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Open(text, 'darkblue', 'right')
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.TextUI(text)
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:DrawText(text,'left')
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Open(text, "blue")
end
elseif type == 'hide' then
if Config.TextUI:lower() == 'ox_lib' then
lib.hideTextUI()
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Close()
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.HideUI()
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:HideText()
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Close()
end
end
end
function AbleToOpenThePropertiesMenu()
local able = true
if Config.BrutalPoliceJob and GetResourceState("brutal_policejob") == "started" then
if exports.brutal_policejob:IsHandcuffed() then
able = false
end
end
if Config['Core']:upper() == 'QBCORE' then
if GetResourceState("qb-policejob") == "started" then
if exports["qb-policejob"]:IsHandcuffed() then
able = false
end
end
end
-- other blacklists can be added.
return able
end
function OpenDressingMenu()
if Config.Wardrobe == 'ak47_clothing' then
exports['ak47_clothing']:openOutfit() -- if it doesn't work with this export use other event
-- TriggerEvent('ak47_clothing:openOutfitMenu') -- Use this only if the first export doesn't work, depend of you'r version
elseif Config.Wardrobe == 'codem_apperance' then
TriggerEvent('codem-apperance:OpenWardrobe')
elseif Config.Wardrobe == 'fivem_appearance' then
exports['fivem-appearance']:openWardrobe()
elseif Config.Wardrobe == 'illenium_appearance' then
TriggerEvent('illenium-appearance:client:openOutfitMenu')
elseif Config.Wardrobe == 'qb_clothing' then
TriggerEvent('qb-clothing:client:openOutfitMenu')
elseif Config.Wardrobe == 'raid_clothes' then
TriggerEvent('raid_clothes:openmenu')
elseif Config.Wardrobe == 'rcore_clothes' then
TriggerEvent('rcore_clothes:openOutfits')
elseif Config.Wardrobe == 'rcore_clothing' then
TriggerEvent('rcore_clothing:openChangingRoom')
elseif Config.Wardrobe == 'sleek_clothestore' then
exports['sleek-clothestore']:OpenWardrobe()
elseif Config.Wardrobe == 'tgiann_clothing' then
TriggerEvent('tgiann-clothing:openOutfitMenu')
end
end
function setPlayerSkin(skinTable)
if Config['Core']:upper() == 'ESX' then
TriggerEvent('skinchanger:loadSkin', skinTable.skin)
elseif Config['Core']:upper() == 'QBCORE' then
TriggerEvent("qb-clothes:loadSkin", false, tonumber(skinTable.model), skinTable.skin)
TriggerServerEvent("brutal_housing:server:qbcore-loadPlayerSkin", tonumber(skinTable.model), skinTable.skin)
end
end
function MiniGames(type, propertyID)
if type == "raid" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:Circle(function(success)
TriggerEvent('brutal_housing:client:raidMinigame', propertyID, success)
end, 3, 10)
else
TriggerEvent('brutal_housing:client:raidMinigame', propertyID, true)
end
elseif type == "server-destroy" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:Scrambler(function(success)
TriggerEvent('brutal_housing:client:serverdestroy', propertyID, success)
end, "alphanumeric", 60, 2)
else
TriggerEvent('brutal_housing:client:serverdestroy', propertyID, true)
end
elseif type == "house-break-in-level_0" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:Scrambler(function(success)
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, success)
end, "alphanumeric", 60, 2)
else
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, true)
end
elseif type == "house-break-in-level_1" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:VarHack(function(success)
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, success)
end, 10, 30)
else
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, true)
end
elseif type == "house-break-in-level_2" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:Thermite(function(success)
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, success)
end, 30, 6, 10)
else
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, true)
end
elseif type == "house-break-in-level_3" then
if GetResourceState("ps-ui") == "started" then
exports['ps-ui']:Thermite(function(success)
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, success)
end, 30, 6, 10)
else
TriggerEvent('brutal_housing:client:breakInMinigame', propertyID, true)
end
end
end
function PoliceBurglarNotify(x,y,z, address)
if Config.BrutalPoliceJob and GetResourceState("brutal_policejob") == "started" then
TriggerServerEvent('brutal_policejob:server:citizencall', 'create', Config.Locales.BreakIn, {x,y,z}, address)
else
SendNotify(66)
end
end
function InventoryOpenFunction(propertyID, objectID)
if Config.Inventory:lower() == 'ox_inventory' then
if exports.ox_inventory:openInventory('stash', { id = "stash_"..propertyID.."_"..objectID}) == false then
TriggerServerEvent('brutal_housing:server:loadStash', propertyID, objectID)
exports.ox_inventory:openInventory('stash', { id = "stash_"..propertyID.."_"..objectID})
end
elseif Config.Inventory:lower() == 'qb_inventory_old' then
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..propertyID.."_"..objectID, {label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots})
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..propertyID.."_"..objectID)
elseif Config.Inventory:lower() == 'qb_inventory_new' then
TriggerServerEvent("brutal_housing:qb-inventory:server:OpenInventory", "stash_"..propertyID.."_"..objectID, {label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots})
elseif Config.Inventory:lower() == 'quasar_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..propertyID.."_"..objectID, { label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots })
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..propertyID.."_"..objectID)
elseif Config.Inventory:lower() == 'codem_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..propertyID.."_"..objectID, { label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots })
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..propertyID.."_"..objectID)
elseif Config.Inventory:lower() == 'chezza_inventory' then
TriggerEvent('inventory:openStorage', Config.Locales.Stash, "stash_"..propertyID.."_"..objectID, 1000, 1000)
elseif Config.Inventory:lower() == 'core_inventory' then
TriggerServerEvent('core_inventory:server:openInventory', "stash_"..propertyID.."_"..objectID, "big_storage")
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:openInventory("stash", "stash_"..propertyID.."_"..objectID, {label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots})
elseif Config.Inventory:lower() == 'ps-inventory' then
if GetResourceState('ps-inventory') == "started" then
TriggerServerEvent("ps-inventory:server:OpenInventory", "stash_"..propertyID.."_"..objectID, {label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots})
TriggerEvent("ps-inventory:client:SetCurrentStash", "stash_"..propertyID.."_"..objectID)
else
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..propertyID.."_"..objectID, {label = Config.Locales.Stash, maxweight = Config.Stash.Weight, slots = Config.Stash.Slots})
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..propertyID.."_"..objectID)
end
end
end
RegisterNetEvent('brutal_housing:client:utils:CreateVehicle')
AddEventHandler('brutal_housing:client:utils:CreateVehicle', function(Vehicle)
SetVehicleFuelLevel(Vehicle, 100.0)
DecorSetFloat(Vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(Vehicle))
if Config['Core']:upper() == 'QBCORE' then
TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(Vehicle))
end
end)
RegisterNetEvent('brutal_housing:client:utils:DeleteVehicle')
AddEventHandler('brutal_housing:client:utils:DeleteVehicle', function(Vehicle)
DeleteEntity(Vehicle)
end)
function OpenMenuUtil()
InMenu = true
SetNuiFocus(true, true)
Citizen.CreateThread(function()
while InMenu do
N_0xf4f2c0d4ee209e20() -- it's disable the AFK camera zoom
Citizen.Wait(15000)
end
end)
DisplayRadar(false)
end
function DisableMinimap()
DisplayRadar(false)
-- Here you can add a trigger to hide your HUD system
end
function EnableMinimap()
DisplayRadar(true)
-- Here you can add a trigger to enable your HUD system
end

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,3 @@
-- Object placement system partially based on Object Gizmo by DemiAutomatic
-- Source: https://github.com/DemiAutomatic/object_gizmo
-- Licensed under the MIT License

View file

@ -0,0 +1,155 @@
-- Credit: https://github.com/citizenfx/lua/blob/luaglm-dev/cfx/libs/scripts/examples/dataview.lua
local dataView = setmetatable({
EndBig = ">",
EndLittle = "<",
Types = {
Int8 = { code = "i1" },
Uint8 = { code = "I1" },
Int16 = { code = "i2" },
Uint16 = { code = "I2" },
Int32 = { code = "i4" },
Uint32 = { code = "I4" },
Int64 = { code = "i8" },
Uint64 = { code = "I8" },
Float32 = { code = "f", size = 4 }, -- a float (native size)
Float64 = { code = "d", size = 8 }, -- a double (native size)
LuaInt = { code = "j" }, -- a lua_Integer
UluaInt = { code = "J" }, -- a lua_Unsigned
LuaNum = { code = "n" }, -- a lua_Number
String = { code = "z", size = -1, }, -- zero terminated string
},
FixedTypes = {
String = { code = "c" }, -- a fixed-sized string with n bytes
Int = { code = "i" }, -- a signed int with n bytes
Uint = { code = "I" }, -- an unsigned int with n bytes
},
}, {
__call = function(_, length)
return dataView.ArrayBuffer(length)
end
})
dataView.__index = dataView
--[[ Create an ArrayBuffer with a size in bytes --]]
function dataView.ArrayBuffer(length)
return setmetatable({
blob = string.blob(length),
length = length,
offset = 1,
cangrow = true,
}, dataView)
end
--[[ Wrap a non-internalized string --]]
function dataView.Wrap(blob)
return setmetatable({
blob = blob,
length = blob:len(),
offset = 1,
cangrow = true,
}, dataView)
end
--[[ Return the underlying bytebuffer --]]
function dataView:Buffer() return self.blob end
function dataView:ByteLength() return self.length end
function dataView:ByteOffset() return self.offset end
function dataView:SubView(offset, length)
return setmetatable({
blob = self.blob,
length = length or self.length,
offset = 1 + offset,
cangrow = false,
}, dataView)
end
--[[ Return the Endianness format character --]]
function ef(big) return (big and dataView.EndBig) or dataView.EndLittle end
--[[ Helper function for setting fixed datatypes within a buffer --]]
function packblob(self, offset, value, code)
-- If cangrow is false the dataview represents a subview, i.e., a subset
-- of some other string view. Ensure the references are the same before
-- updating the subview
local packed = self.blob:blob_pack(offset, code, value)
if self.cangrow or packed == self.blob then
self.blob = packed
self.length = packed:len()
return true
else
return false
end
end
--[[
Create the API by using dataView.Types
--]]
for label,datatype in pairs(dataView.Types) do
if not datatype.size then -- cache fixed encoding size
datatype.size = string.packsize(datatype.code)
elseif datatype.size >= 0 and string.packsize(datatype.code) ~= datatype.size then
local msg = "Pack size of %s (%d) does not match cached length: (%d)"
error(msg:format(label, string.packsize(datatype.code), datatype.size))
return nil
end
dataView["Get" .. label] = function(self, offset, endian)
offset = offset or 0
if offset >= 0 then
local o = self.offset + offset
local v,_ = self.blob:blob_unpack(o, ef(endian) .. datatype.code)
return v
end
return nil
end
dataView["Set" .. label] = function(self, offset, value, endian)
if offset >= 0 and value then
local o = self.offset + offset
local v_size = (datatype.size < 0 and value:len()) or datatype.size
if self.cangrow or ((o + (v_size - 1)) <= self.length) then
if not packblob(self, o, value, ef(endian) .. datatype.code) then
error("cannot grow subview")
end
else
error("cannot grow dataview")
end
end
return self
end
end
for label,datatype in pairs(dataView.FixedTypes) do
datatype.size = -1 -- Ensure cached encoding size is invalidated
dataView["GetFixed" .. label] = function(self, offset, typelen, endian)
if offset >= 0 then
local o = self.offset + offset
if (o + (typelen - 1)) <= self.length then
local code = ef(endian) .. "c" .. tostring(typelen)
local v,_ = self.blob:blob_unpack(o, code)
return v
end
end
return nil -- Out of bounds
end
dataView["SetFixed" .. label] = function(self, offset, typelen, value, endian)
if offset >= 0 and value then
local o = self.offset + offset
if self.cangrow or ((o + (typelen - 1)) <= self.length) then
local code = ef(endian) .. "c" .. tostring(typelen)
if not packblob(self, o, value, code) then
error("cannot grow subview")
end
else
error("cannot grow dataview")
end
end
return self
end
end
return dataView

View file

@ -0,0 +1,4 @@
The original source code for freecam by Deltanic is available at this repository:
https://github.com/Deltanic/fivem-freecam/
This code contains modifications and performance improvements, and is re-released under the MIT license.

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Deltanic
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,417 @@
----------------------------------------------------------------------------------------------
-------------------------------------| BRUTAL HOUSING :) |------------------------------------
----------------------------------------------------------------------------------------------
--[[
Hi, thank you for buying our script, We are very grateful!
For help join our Discord server: https://discord.gg/85u2u5c8q9
More informations about the script: https://docs.brutalscripts.com
--]]
Config = {
Core = 'ESX', -- 'ESX' / 'QBCORE' | Other core setting on the 'core' folder.
VoiceSytem = 'pma-voice', -- "pma-voice" / "mumble" / "SaltyChat"
Inventory = 'ox_inventory', -- 'ox_inventory' / 'qb_inventory_old'/ 'qb_inventory_new' / 'quasar_inventory' / 'chezza_inventory' / 'codem_inventory' / 'core_inventory' // Custom can be add in the cl_utils.lua!!!
Wardrobe = 'default', -- 'default' / 'ak47_clothing' / 'codem_apperance' / 'fivem_appearance' / 'illenium_appearance' / 'qb_clothing' / 'raid_clothes' / 'rcore_clothes' / 'rcore_clothing' / 'sleek_clothestore' / 'tgiann_clothing' // Custom can be add in the cl_utils.lua!!!
TextUI = 'brutal_textui', -- false / 'brutal_textui' / 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
BrutalKeys = true, -- Buy here: https://store.brutalscripts.com
BrutalPoliceJob = true, -- Buy here: https://store.brutalscripts.com | Better connection
BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
SteamName = false, -- true = Steam name | false = character name
AdminGroups = {'superadmin', 'admin', 'mod', 'god'},
HousingDataPrint = true, -- Server side print, like that: Brutal Housing: Houses: 1 Apartments: 97 Garages: 9
DataStorage = {
--[[
optimized = Saves the data when the script is restarted, the server is shut down or restarted, or during a scheduled server restart.
events: "txAdmin:events:serverShuttingDown" & "txAdmin:events:scheduledRestart" or fixed restart times.
resource_heavy = all data will be saved immediately, this is very stressful for the server so we don't recommend using this, but the choice is up to you.
]]--
Type = "resource_heavy", -- "optimized" / "resource_heavy"
Restarts = {}, -- example: "11:59" | Save the data 1 minute before restart. Save data at 15:59 instead of 16:00
},
Blips = {
available = true,
availableHouse = {label = "Available House", size = 0.7, sprite = 40, color = 2},
availableGarage = {label = "Available Garage", size = 0.7, sprite = 357, color = 2},
owned = true,
myHouse = {label = "My House", size = 0.7, sprite = 40, color = 53},
myGarage = {label = "My Garage", size = 0.7, sprite = 357, color = 53},
hasKeyHouse = {label = "House", size = 0.7, sprite = 40, color = 53},
hasKeyGarage = {label = "House", size = 0.7, sprite = 40, color = 53},
ownedHouse = {label = "House", size = 0.7, sprite = 40, color = 1},
ownedGarage = {label = "Garage", size = 0.7, sprite = 357, color = 1},
police = true,
burglarAlarm = {label = "Burglar alarm", size = 1.0, sprite = 161, color = 1},
},
MaxProperties = 12, -- Maximum number of properties a player can own
MaxObject = 50, -- Maximum placing object, 50-50 by default, outside and inside separately
MaxBargainPercent = 5, -- Maximum bargain rate in percentage | Bargain rate i random between 0 and this value
MaxOutsideFurnitureDistance = 50.0, -- Maximum Outside furniture distance from the door
MaxDoorlockDistance = 50.0, -- Max doorlock distance from the property's door.
StashLimit = 3, -- Maximum stash per property.
InstantSalePurchasePrice = 0.9, -- 100 000$ * 0.9 = 90 000$ | The player can immediately sell his property for this much compared to the base price.
DelayedSalePurchasePrice = 1.2, -- 100 000$ * 1.2 = 120 000$ | This is the maximum price a player can sell the house he has bought.
DeleteInactiveProperty = {use = true, days = 45}, -- -- If use is true, the property will be deleted if the player does not use it for X days. | Only the owned ones.
CopJobs = {"police", "sheriff"}, -- Cop jobs
GarageUpgrade = {
Repair = {use = true, time = 48, price = 25000}, -- The car stored in the garage will be repaired after 48hours.
Clean = {use = true, time = 24, price = 5000} -- The car stored in the garage will be cleaned after 24hours.
},
ForeclosureDebtThreshold = 1000, -- If the owner's debt exceeds $1000, the property will go into foreclosure.
Utilities = {
BillingCycle = 7, -- The default billing cycle for utilities is every 7 days.
RentalPrice = 0.004, -- 0.4% rental fee based on property price | 100,000$ * 0.004 = 400$
ElectricityPrice = 0.0005,
GasPrice = 0.00025,
WaterPrice = 0.0001,
WifiUnlockPrice = 5000, -- One-time fee
WifiPrice = 70, -- Fix price
},
NewKeyPrice = 25,
LockReplacementPrice = 100,
CCTVStationRepairPrice = 250,
Stash = {
Slots = 100,
Weight = 1000000,
},
Security = {
DatabaseDesroyEnabled = true, -- true / false
Objects = {
cameras = {"prop_cs_cctv", "prop_cctv_cam_01b"},
databases = {"hei_prop_heist_pc_01", "prop_dyn_pc", "prop_dyn_pc_02", "prop_pc_01a", "prop_pc_02a"}
},
Levels = {
[0] = {
alertToPolice = false,
maxAttempts = 6,
showIntruderName = false
},
[1] = {
price = 4750,
alertToPolice = true,
maxAttempts = 4,
showIntruderName = false
},
[2] = {
price = 9500,
alertToPolice = true,
maxAttempts = 2,
showIntruderName = true
},
[3] = {
price = 25000,
alertToPolice = true,
maxAttempts = 0, -- if it is 0, there is no chance to break into the house
showIntruderName = true
},
},
},
BreakIn = {
use = true,
minimumCopsCount = 0,
requiredItem = 'lockpick',
removeItem = true
},
Raid = {
use = true,
allowedJobs = {
{ job = "police", minGrade = 0 },
}
},
RealEstateagents = {
ProfitRatioPercent = 6, -- Profit share of the real estate agency based on the purchase price | 6 = 6% of the property price
Jobs = {
["dynasty"] = { -- job name
[0] = {
label = 'Trainee', -- Rank name
permissions = { -- Permissions
canManageProperties = false, -- Created property management
balanceMenu = false -- Balance Menu
}
},
[1] = {
label = 'Agent',
permissions = {
canManageProperties = true,
balanceMenu = false
}
},
[2] = {
label = 'Senior Agent',
permissions = {
canManageProperties = true,
balanceMenu = true
}
}
},
-- you can add more jobs too.
}
},
Commands = {
MyProperties = {
Command = 'myproperties',
Suggestion = 'To manage your propertys',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
},
ServerDestroy = {
Command = 'serverdestroy',
Suggestion = 'To destroy the camera server',
requiredItem = 'laptop'
},
GetHousingVehicleBack = {
Command = 'gethousingvehicleback', -- /gethousingvehicleback all | /gethousingvehicleback DHR 432
Suggestion = 'To get back your vehicle(s)',
},
-- Admin / Real Estate --
StaffMode = {
Command = 'hstaff',
Suggestion = 'To switch Housing Staff mode',
},
Properties = {
Command = 'properties',
Suggestion = 'To open the propertys menu',
},
CreateHouse = {
Command = 'createhouse',
Suggestion = 'To create a house',
},
CreateGarage = {
Command = 'creategarage',
Suggestion = 'To create a garage',
},
},
-----------------------------------------------------------
-----------------------| TRANSLATE |-----------------------
-----------------------------------------------------------
NUILanguage = "en", -- "en", "es", "fr", "de", "pt", "it", "pl", "nl", "ru", "tr", "hu", "ro", "cs", "sv", "ar"
MoneyForm = '$', -- Money form
Locales = {
Stash = "Stash",
None = "None",
AdminRemoved = "Admin removed",
ShellPlacement = "Shell Placement",
DoorLocation = "Door Location",
VehiclePlacement = "Vehicle Placement",
FurniturePlacement = "Furniture Placement",
NewCoords = "Set the new coords",
MovingFreecam = "Moving Freecam",
GoBack = "Go Back",
ObjectMovement = "Object movement",
ObjectVertical = "Object Vertical Movement",
ObjectRotate = "Object Rotate",
FinishEditing = "Finish Editing",
TranslateMode = "Translate Mode",
CameraFix = "Camera Fix",
DoneEditing = "Done Editing",
BreakIn = "A burglar broke into the house! Go to the designated place!",
Messages = {
Rent = {title = "Rent", message = "You have started renting the property."},
StopRent = {title = "Rental stopped", message = "The rental of the property has been stopped."},
Purchase = {title = "Purchase", message = "You have purchased the property."},
LevelUpgrade = {title = "Level Upgrade", message = "Success upgrade: Level"},
BrakeIn = {title = "Break-in", message = "Someone has broken into the property:"},
Raid = {title = "Raid", message = "Police raided the property."},
WifiUnlock = {title = "Wifi", message = "The Wifi has been connected!"},
CleaningUnlock = {title = "Cleaning", message = "Vehicle cleaning function now available"},
RepairingUnlock = {title = "Repairing", message = "Vehicle repairing function now available"},
DoorLockReplacement = {title = "Lock replacement", message = "You have successfully changed the lock on your property!"},
Rename = {title = "Property renaming", message = "New name of the property:"},
Unknown = "Unknown",
},
CCTV = "BACK: ~INPUT_CELLPHONE_CANCEL~\nUP/DOWN: ~INPUT_CELLPHONE_UP~ & ~INPUT_CELLPHONE_DOWN~\nLEFT/RIGHT: ~INPUT_CELLPHONE_LEFT~ & ~INPUT_CELLPHONE_RIGHT~",
CCTVSetup = "BACK: ~INPUT_CELLPHONE_CANCEL~\nUP/DOWN: ~INPUT_CELLPHONE_UP~ & ~INPUT_CELLPHONE_DOWN~\nLEFT/RIGHT: ~INPUT_CELLPHONE_LEFT~ & ~INPUT_CELLPHONE_RIGHT~\nSETUP: ~INPUT_FRONTEND_RDOWN~",
},
Texts = {
[1] = {'[E] - Storage', 38},
[2] = {'[E] - Wardrobe', 38},
},
DoorTexts = {
["entry"] = {'E', 'Entry', 38},
["leave"] = {'E', 'Leave', 38},
["garage"] = {'X', 'Garage', 73},
["house"] = {'X', 'House', 73},
["open"] = {'G', 'Open the door', 47},
["close"] = {'G', 'Close the door', 47},
["purchase"] = {'E', 'Purchase menu', 38},
["knock"] = {'E', 'Knocking', 38},
["raid"] = {'G', 'Raid', 47},
["breakin"] = {'G', 'Break In', 47},
["inforeclosure"] = {'E', 'In foreclosure', 38}
},
-- Notify function EDITABLE >> cl_utils.lua
Notify = {
[1] = {"Housing", "You can only enter with your own car!", 5000, "error"},
[2] = {"Housing", "No more space in the garage!", 5000, "error"},
[3] = {"Housing", "The door is closed!", 5000, "error"},
[4] = {"Housing", "You already have a property near you, move away!", 5000, "error"},
[5] = {"Housing", "The property name must be 3-16 characters long!", 5000, "error"},
[6] = {"Housing", "The URL must start with 'http://' or 'https://'", 5000, "error"},
[7] = {"Housing", "The price must be more than ZERO!", 5000, "error"},
[8] = {"Housing", "You have entered an invalid or already used garage id!", 5000, "error"},
[9] = {"Housing", "You have successfully created it!", 5000, "success"},
[10] = {"Housing", "Invalid property ID!", 5000, "error"},
[11] = {"Housing", "You don't have enough money!", 5000, "error"},
[12] = {"Housing", "You can sell it for a maximum of 20% more than what you bought it for!", 5000, "error"},
[13] = {"Housing", "You don't own it, so you can't sell it!", 5000, "error"},
[14] = {"Housing", "You have successfully purchased!", 5000, "success"},
[15] = {"Housing", "The house owner is currently unavailable. Please contact them by phone!", 5000, "error"},
[16] = {"Housing", "You cannot park this vehicle in the garage!", 5000, "error"},
[17] = {"Housing", "Successful payment!", 5000, "success"},
[18] = {"Housing", "Successful upgrade!", 5000, "success"},
[19] = {"Housing", "Someone knocked on the door!", 5000, "info"},
[20] = {"Housing", "You knocked on the door!", 5000, "success"},
[21] = {"Housing", "You have paid the outstanding debt on the property:", 5000, "error"},
[22] = {"Housing", "You have successfully sold the property:", 5000, "success"},
[23] = {"Housing", "The garage door cannot be more than 50 metres from the entrance to the house.", 5000, "error"},
[24] = {"Housing", "Not enough money for the real estate agency!", 5000, "error"},
[25] = {"Housing", "You do not have permission!", 5000, "error"},
[26] = {"Housing", "You can only connect a house and a garage!", 5000, "error"},
[27] = {"Housing", "The property is already connected!", 5000, "error"},
[28] = {"Housing", "These two properties are not connected!", 5000, "error"},
[29] = {"Housing", "Successful connection!", 5000, "success"},
[30] = {"Housing", "You have successfully detached the garage!", 5000, "success"},
[31] = {"Housing", "You've got it back:", 5000, "success"},
[32] = {"Housing", "No vehicle to get back!", 5000, "error"},
[33] = {"Housing", "There was a problem loading the IPL/Shell.", 5000, "error"},
[34] = {"Housing", "You spammed the housing system, so you have been put on a 3-minute cooldown.", 5000, "error"},
[35] = {"Housing", "You can now use the housing system again.", 5000, "success"},
[36] = {"Housing", "Please avoid doing this again in the future.", 5000, "info"},
[37] = {"Housing", "You cannot buy/rent more property! Maximum quantity:", 5000, "error"},
[38] = {"Housing", "You have to wait 2 minutes because you've failed the minigame!", 5000, "error"},
[39] = {"Housing", "You have successfully completed the minigame! The door is open!", 5000, "success"},
[40] = {"Housing", "You failed to complete the minigame!", 5000, "error"},
[41] = {"Housing", "You have successfully completed the minigame!", 5000, "success"},
[42] = {"Housing", "This house has too good security, you can't break in!", 5000, "error"},
[43] = {"Housing", "You have reached the maximum attempt!", 5000, "error"},
[44] = {"Housing", "Not enough police in the city!", 5000, "error"},
[45] = {"Housing", "You need a lockpick item!", 5000, "error"},
[46] = {"Housing", "You need a laptop item!", 5000, "error"},
[47] = {"Housing", "Invalid Player ID!", 5000, "error"},
[48] = {"Housing", "Invalid Identifier!", 5000, "error"},
[49] = {"Housing", "Successful modification!", 5000, "success"},
[50] = {"Housing", "This address already exist!", 5000, "error"},
[51] = {"Housing", "The two properties must be owned by the same person/job!", 5000, "error"},
[52] = {"Housing", "The amount you offered is too low!", 5000, "error"},
[53] = {"Housing", "The spawn coordinates of the vehicle must be within 15 meters of the garage door!", 5000, "error"},
[54] = {"Housing", "You don't have property!", 5000, "error"},
[55] = {"Housing", "Staff mode: ON", 5000, "success"},
[56] = {"Housing", "Staff mode: OFF", 5000, "error"},
[57] = {"Housing", "You have started to rent the property!", 5000, "success"},
[58] = {"Housing", "You've put your property up for sale!", 5000, "success"},
[59] = {"Housing", "You cancelled the sale!", 5000, "info"},
[60] = {"Housing", "Invalid Price!", 5000, "error"},
[61] = {"Housing", "You cannot buy your own property! You can cancel the sale in the Myproperties menu!", 5000, "error"},
[62] = {"Housing", "You have stopped to rent the property!", 5000, "info"},
[63] = {"Housing", "There is not that much money in the account!", 5000, "error"},
[64] = {"Housing", "Successful deposit:", 5000, "success"},
[65] = {"Housing", "Successful withdrawal:", 5000, "success"},
[66] = {"Housing", "A burglar broke into the house! Go to the designated place!", 5000, "info"},
[67] = {"Housing", "You have successfully deleted it!", 5000, "success"},
[68] = {"Housing", "You cannot add a garage to an apartment/mlo!", 5000, "error"},
[69] = {"Housing", "You cannot place objects here!", 5000, "error"},
[70] = {"Housing", "You cannot create a house/garage near Apartment buildings!", 5000, "error"},
[71] = {"Housing", "You have successfully renamed the property!", 5000, "success"},
[72] = {"Housing", "You have successfully replaced the door lock!", 5000, "success"},
[73] = {"Housing", "You have successfully bought a new key!", 5000, "success"},
[74] = {"Housing", "Place %d car spawn coordinates inside the shell!", 5000, "info"},
[75] = {"Housing", "You can't put a door lock that far away!", 5000, "error"},
[76] = {"Housing", "You paid for furniture:", 5000, "info"},
[77] = {"Housing", "You sold furniture for:", 5000, "info"},
[78] = {"Housing", "You are too far from the object!", 5000, "error"},
[79] = {"Housing", "You have successfully destroyed it, the owner has lost the camera data!", 5000, "error"},
[80] = {"Housing", "You can't sit in a car!", 5000, "error"},
[81] = {"Housing", "There is no database near you!", 5000, "error"},
[82] = {"Housing", "This has already been destroyed!", 5000, "error"},
[83] = {"Housing", "You have successfully repaired it!", 5000, "success"},
[84] = {"Housing", "You cannot open the menu now!", 5000, "error"},
[85] = {"Housing", "The property is in foreclosure! The owner must pay the bills before we can use it.", 5000, "error"},
[86] = {"Housing", "This car is out of the garage!", 5000, "error"},
[87] = {"Housing", "The maximum number of objects you can place:", 5000, "error"},
[88] = {"Housing", "The garage must be empty if you want to sell the property!", 5000, "error"},
[89] = {"Housing", "You have reached the maximum number of stashes you can place!", 5000, "error"},
[90] = {"Housing", "You cannot put the object so far away!", 5000, "error"},
[91] = {"Housing", "The house you were in has been deleted, so you have been teleported here!", 10000, "info"},
},
Webhooks = {
Locale = {
['houseCreateTitle'] = "🆕 House created...",
['houseCreateSubtitle'] = "created a house.",
['garageCreateTitle'] = "🆕 Garage created...",
['garageCreateSubtitle'] = "created a garage.",
['deleteTitle'] = "❌ Deleted property...",
['deleteSubtitle'] = "deleted a property.",
['purchaseTitle'] = "💵 Purchased property...",
['purchaseSubtitle'] = "purchased a property.",
['rentTitle'] = "💵 Rented property...",
['rentSubtitle'] = "rented a property.",
['newOwnerTitle'] = "🔄 Change of owner...",
['newOwnerSubtitle'] = "changed the property owner.",
['Identifier'] = "Identifier",
['PropertyID'] = "Property ID",
['Type'] = "Type",
['Price'] = "Price",
['Rent'] = "Rent",
['Coords'] = "Coords",
['Address'] = "Address",
['Garage'] = "Garage",
['Reason'] = "Reason",
['PreviousOwner'] = "Previous Owner",
['NewOwner'] = "New Owner",
['Inactivity'] = "Since Config.DeleteInactiveProperty.use is true, this property is deleted due to inactivity.",
['Time'] = "Time ⏲️"
},
-- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
Colors = {
['houseCreateTitle'] = 65280,
['garageCreateTitle'] = 255,
['deleteTitle'] = 16711680,
['purchaseTitle'] = 16776960,
['rentTitle'] = 65535,
['newOwnerTitle'] = 16711935,
}
},
}

View file

@ -0,0 +1,245 @@
Config.Apartments = {
["eclipse_tower"] = {
Label = "Eclipse Tower",
Address = "South Mo Milton Dr. 1.",
SelectPanelCoords = vector4(-773.8490, 311.1882, 85.7982, 180.0),
Coords = vector4(-773.8356, 309.6247, 85.6981, 177.2697),
Blip = {use = true, size = 0.75, sprite = 475, color = 26},
Apartments = {
{
price = 230000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 230000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 240000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 240000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 250000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 250000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 260000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 260000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 270000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 270000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 280000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 280000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 290000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 290000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 300000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 300000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
}
},
["maze_bank_tower"] = {
Label = "Maze Bank Tower",
Address = "South Mo Milton Dr. 1.",
SelectPanelCoords = vector4(-68.8102, -801.5714, 44.2273, 338.2512),
Coords = vector4(-67.5983, -798.7274, 44.2273, 330.9335),
Blip = {use = true, size = 0.75, sprite = 475, color = 26},
Apartments = {
{
price = 230000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 230000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 240000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 240000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 250000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 250000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 260000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 260000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 270000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 270000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 280000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 280000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 290000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 290000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 300000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
{
price = 300000,
rentable = true,
ipl = "luxury_apartment",
basicTheme = 0
},
}
},
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,390 @@
Config.Interiors = {
Houses = {
IPL = {
["luxury_apartment"] = {
label = "Luxury Apartment",
themes = {
[0] = {label = "Modern", ipl = "apa_v_mp_h_01_c", interiorId = 227841, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/KjrkDYcB/image.png", teleportToDoor = false},
[1] = {label = "Moody", ipl = "apa_v_mp_h_02_c", interiorId = 228609, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/bcGH7W4/1.png", teleportToDoor = false},
[2] = {label = "Vibrant", ipl = "apa_v_mp_h_03_c", interiorId = 229377, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/kVWqh6Qm/2.png", teleportToDoor = false},
[3] = {label = "Sharp", ipl = "apa_v_mp_h_04_c", interiorId = 230145, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/wh1qcnQ9/3.png", teleportToDoor = false},
[4] = {label = "Monochrome", ipl = "apa_v_mp_h_05_c", interiorId = 230913, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/chmmS3HH/4.png", teleportToDoor = false},
[5] = {label = "Seductive", ipl = "apa_v_mp_h_06_c", interiorId = 231681, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/sJpwb8f6/5.png", teleportToDoor = false},
[6] = {label = "Regal", ipl = "apa_v_mp_h_07_c", interiorId = 232449, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/TMhwQNgK/6.png", teleportToDoor = false},
[7] = {label = "Aqua", ipl = "apa_v_mp_h_08_c", interiorId = 233217, price = 5000, coords = vector4(-787.1503, 315.7941, 187.9134, 269.1841), link = "https://i.ibb.co/4ZbxmWvs/7.png", teleportToDoor = false},
},
},
-- Apartments NO IPL --
["ipl_01"] = {
label = "Low End Apartment",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(261.4586, -998.8196, -99.00863, 20.0), teleportToDoor = false},
}
},
["ipl_02"] = {
label = "Medium End Apartment",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(347.2686, -999.2955, -99.19622, 20.0), teleportToDoor = false},
}
},
["ipl_03"] = {
label = "4 Integrity Way, Apt 28",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-18.07856, -583.6725, 79.46569, 20.0), teleportToDoor = false},
}
},
["ipl_04"] = {
label = "4 Integrity Way, Apt 30",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-35.31277, -580.4199, 88.71221, 20.0), teleportToDoor = false},
}
},
["ipl_05"] = {
label = "Dell Perro Heights, Apt 4",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-1468.14, -541.815, 73.4442, 20.0), teleportToDoor = false},
}
},
["ipl_06"] = {
label = "Dell Perro Heights, Apt 7",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-1477.14, -538.7499, 55.5264, 20.0), teleportToDoor = false},
}
},
["ipl_07"] = {
label = "Richard Majestic, Apt 2",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-915.811, -379.432, 113.6748, 20.0), teleportToDoor = false},
}
},
["ipl_08"] = {
label = "Tinsel Towers, Apt 42",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-614.86, 40.6783, 97.60007, 20.0), teleportToDoor = false},
}
},
["ipl_09"] = {
label = "Eclipse Towers, Apt 3",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-773.407, 341.766, 211.397, 20.0), teleportToDoor = false},
}
},
["ipl_10"] = {
label = "3655 Wild Oats Drive",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-169.286, 486.4938, 137.4436, 20.0), teleportToDoor = false},
}
},
["ipl_11"] = {
label = "2044 North Conker Avenue",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(340.9412, 437.1798, 149.3925, 20.0), teleportToDoor = false},
}
},
["ipl_12"] = {
label = "2045 North Conker Avenue",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(373.023, 416.105, 145.7006, 20.0), teleportToDoor = false},
}
},
["ipl_13"] = {
label = "2862 Hillcrest Avenue",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-676.127, 588.612, 145.1698, 20.0), teleportToDoor = false},
}
},
["ipl_14"] = {
label = "2868 Hillcrest Avenue",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-763.107, 615.906, 144.1401, 20.0), teleportToDoor = false},
}
},
["ipl_15"] = {
label = "2874 Hillcrest Avenue",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-857.798, 682.563, 152.6529, 20.0), teleportToDoor = false},
}
},
["ipl_16"] = {
label = "2677 Whispymound Drive",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(120.5, 549.952, 184.097, 20.0), teleportToDoor = false},
}
},
["ipl_17"] = {
label = "2133 Mad Wayne Thunder",
themes = {
[0] = {label = "Basic", ipl = "", interiorId = nil, coords = vector4(-1288, 440.748, 97.69459, 20.0), teleportToDoor = false},
}
}
},
SHELL = {
-- [FREE] K4mbi starter housing shells | Download: https://k4mb1maps.com/product/5015840
["shell_1"] = {
label = "Standard Motel",
shell = "standardmotel_shell",
zOffset = 0.0,
},
["shell_2"] = {
label = "Warehouse 1",
shell = "shell_warehouse1",
zOffset = 0.0,
},
["shell_3"] = {
label = "V16 mid",
shell = "shell_v16mid",
zOffset = 0.0,
},
["shell_4"] = {
label = "V16 low",
shell = "shell_v16low",
zOffset = 1.0,
},
["shell_5"] = {
label = "Trevor",
shell = "shell_trevor",
zOffset = 0.0,
},
["shell_6"] = {
label = "Trailer",
shell = "shell_trailer",
zOffset = 0.0,
},
["shell_7"] = {
label = "Store 1",
shell = "shell_store1",
zOffset = 0.0,
},
["shell_8"] = {
label = "Ranch",
shell = "shell_ranch",
zOffset = 1.0,
},
["shell_9"] = {
label = "Office 1",
shell = "shell_office1",
zOffset = 1.25,
},
["shell_10"] = {
label = "Michael",
shell = "shell_michael",
zOffset = 3.75,
},
["shell_11"] = {
label = "Lester",
shell = "shell_lester",
zOffset = 0.0,
},
["shell_12"] = {
label = "Frankaunt",
shell = "shell_frankaunt",
zOffset = 0.0,
},
["shell_13"] = {
label = "Modern Hotel",
shell = "modernhotel_shell",
zOffset = 0.5,
},
["shell_14"] = {
label = "Furnitured Midapart",
shell = "furnitured_midapart",
zOffset = 0.0,
},
["shell_15"] = {
label = "Container",
shell = "container_shell",
zOffset = 0.0,
},
-- [FREE] Lynx housing shells | Download: https://github.com/Lynxist/lynx_shells
["shell_16"] = {
label = "T1 Furn",
shell = "t1_furn_shell",
zOffset = -0.75,
},
["shell_17"] = {
label = "T2 Furn",
shell = "t2_furn_shell",
zOffset = -1.5,
},
["shell_18"] = {
label = "T3 Furn",
shell = "t3_furn_shell",
zOffset = -1.5,
},
["shell_19"] = {
label = "T1 Unfurn",
shell = "t1_unfurn_shell",
zOffset = -0.75,
},
["shell_20"] = {
label = "T2 Unfurn",
shell = "t2_unfurn_shell",
zOffset = -1.5,
},
["shell_21"] = {
label = "T3 Unfurn",
shell = "t3_unfurn_shell",
zOffset = -1.5,
},
},
},
Garages = {
IPL = {
["garage_1"] = {
label = "Garage I.",
themes = {
[0] = {
label = "Basic",
ipl = "",
interiorId = nil,
coords = vector4(178.9558, -1005.3951, -99.0000, 21.3123),
teleportToDoor = false,
vehicleCoords = {
[1] = vector4(175.1855, -1003.7393, -99.4123, 181.5427),
[2] = vector4(171.8091, -1003.7794, -99.4124, 181.3861),
}
},
}
},
["garage_2"] = {
label = "Garage II.",
themes = {
[0] = {
label = "Basic",
ipl = "",
interiorId = nil,
coords = vector4(206.9773, -1018.5231, -99.0000, 87.2694),
teleportToDoor = false,
vehicleCoords = {
[1] = vector4(194.1104, -1016.6121, -99.4099, 182.7991),
[2] = vector4(198.2034, -1016.4313, -99.4171, 183.3609),
[3] = vector4(203.5549, -1016.4313, -99.4116, 184.7148),
[4] = vector4(194.4705, -1023.3527, -99.4167, 183.4615),
[5] = vector4(198.7118, -1023.0986, -99.4170, 183.6204),
[6] = vector4(203.6475, -1022.9459, -99.4167, 180.2281),
}
},
}
},
["garage_3"] = {
label = "Garage III.",
themes = {
[0] = {
label = "Basic",
ipl = "",
interiorId = nil,
coords = vector4(204.5689, -999.7145, -99.0000, 96.2213),
teleportToDoor = false,
vehicleCoords = {
[1] = vector4(203.1431, -997.8181, -99.4099, 180.8668),
[2] = vector4(198.3203, -998.0093, -99.4160, 180.2940),
[3] = vector4(194.2100, -997.9175, -99.4168, 182.2399),
[4] = vector4(194.3332, -1004.3503, -99.4171, 181.8376),
[5] = vector4(198.4779, -1004.2313, -99.4099, 179.6543),
[6] = vector4(203.1758, -1004.1754, -99.4172, 181.2833),
}
},
}
},
["garage_4"] = {
label = "Garage IV.",
themes = {
[0] = {
label = "Basic",
ipl = "",
interiorId = nil,
coords = vector4(240.6632, -1004.8735, -99.0000, 20.0),
teleportToDoor = false,
vehicleCoords = {
[1] = vector4(233.8019, -1002.8353, -99.5624, 98.0763),
[2] = vector4(233.7039, -999.4944, -99.5624, 98.7875),
[3] = vector4(233.8993, -996.0872, -99.5627, 102.9313),
[4] = vector4(233.8264, -992.7466, -99.5623, 105.2041),
[5] = vector4(233.9019, -989.3083, -99.5627, 112.1547),
[6] = vector4(233.6418, -986.1068, -99.5621, 112.8488),
[7] = vector4(233.5690, -982.7154, -99.5625, 119.0502),
[8] = vector4(223.4754, -977.2686, -99.4134, 239.5003),
[9] = vector4(223.2184, -981.4578, -99.5619, 237.0337),
[10] = vector4(223.2762, -985.4167, -99.5619, 238.9182),
[11] = vector4(223.5789, -989.1111, -99.5622, 242.2118),
[12] = vector4(223.3941, -992.6294, -99.5619, 245.8700),
[13] = vector4(223.2339, -996.2072, -99.5625, 245.0806),
[14] = vector4(223.2626, -999.9703, -99.5627, 248.0285),
[15] = vector4(223.0869, -1003.8400, -99.5619, 246.7725),
}
},
}
},
["arcadius_garage"] = {
label = "Arcadius Garage",
themes = {
[0] = {
label = "Basic",
ipl = "imp_dt1_02_cargarage_a",
interiorId = nil,
coords = vector4(-198.1888, -580.6741, 136.0006, 283.6408),
teleportToDoor = false,
vehicleCoords = {
[1] = vector4(-173.0641, -583.9653, 135.5904, 76.3288),
[2] = vector4(-173.9179, -577.0183, 135.5862, 119.9366),
[3] = vector4(-179.1989, -573.1927, 135.5891, 164.5817),
[4] = vector4(-186.1283, -573.6585, 135.5884, 205.5771),
[5] = vector4(-190.6035, -578.9037, 135.5905, 247.4073),
[6] = vector4(-172.9172, -584.2977, 140.9358, 74.9734),
[7] = vector4(-173.7856, -577.0521, 140.9302, 118.4581),
[8] = vector4(-179.3282, -572.5753, 140.9300, 162.7588),
[9] = vector4(-186.5548, -573.2651, 140.9356, 209.7426),
[10] = vector4(-190.8909, -579.0132, 140.9296, 251.7935),
[11] = vector4(-172.5084, -583.9584, 146.2755, 75.6867),
[12] = vector4(-173.6930, -577.0157, 146.2758, 118.3053),
[13] = vector4(-179.3384, -572.6110, 146.2757, 164.0221),
[14] = vector4(-186.6965, -573.4319, 146.2755, 211.0180),
[15] = vector4(-190.7574, -579.1912, 146.2754, 252.5850),
}
},
}
},
},
SHELL = {
["shell_1"] = {
label = "GarageM",
shell = "shell_garagem",
maxVehicle = 8,
zOffset = 0.0,
},
},
},
}

View file

@ -0,0 +1,73 @@
Core = nil
defaultVoiceChannel = 0
if Config.VoiceSytem:upper() == 'SALTYCHAT' then
defaultVoiceChannel = "ingame"
end
if Config['Core']:upper() == 'ESX' then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ then
Core = exports['es_extended']:getSharedObject()
else
while Core == nil do
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
Citizen.Wait(0)
end
end
LoadedEvent = 'esx:playerLoaded'
ReviveEvent = 'esx_ambulancejob:revive'
JobUpdateEvent = 'esx:setJob'
TSCB = Core.TriggerServerCallback
function GetPlayerJobDatas()
return Core.GetPlayerData().job
end
function GetPlayersFunction()
return Core.Game.GetPlayers()
end
function GetVehiclePropertiesFunction(vehicle)
return Core.Game.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFunction(vehicle, properties)
return Core.Game.SetVehicleProperties(vehicle, properties)
end
function GetClosestVehicleFunction(coords, modelFilter)
return Core.Game.GetClosestVehicle(coords, modelFilter)
end
elseif Config['Core']:upper() == 'QBCORE' then
Core = exports['qb-core']:GetCoreObject()
LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
ReviveEvent = 'hospital:client:Revive'
JobUpdateEvent = 'QBCore:Client:OnJobUpdate'
TSCB = Core.Functions.TriggerCallback
function GetPlayerJobDatas()
return Core.Functions.GetPlayerData().job
end
function GetPlayersFunction()
return Core.Functions.GetPlayers()
end
function GetVehiclePropertiesFunction(vehicle)
return Core.Functions.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFunction(vehicle, properties)
return Core.Functions.SetVehicleProperties(vehicle, properties)
end
function GetClosestVehicleFunction(coords, modelFilter)
return Core.Functions.GetClosestVehicle(coords, modelFilter)
end
end

View file

@ -0,0 +1,274 @@
Core = nil
if Config['Core']:upper() == 'ESX' then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ == 'new' then
Core = exports['es_extended']:getSharedObject()
else
Core = nil
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
while Core == nil do
Citizen.Wait(0)
end
end
RESCB = Core.RegisterServerCallback
GETPFI = Core.GetPlayerFromId
RUI = Core.RegisterUsableItem
SetJobEvent = 'esx:setJob'
onPlayerDeath = 'esx:onPlayerDeath'
SQLData = {
users = 'users',
job = 'job',
jobs = 'jobs',
}
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.identifier
end
function GetPlayerByIdentifier(identifier)
return Core.GetPlayerFromIdentifier(identifier)
end
function GetAccountMoney(source,account)
local xPlayer = GETPFI(source)
if account == 'bank' then
return xPlayer.getAccount(account).money
elseif account == 'money' then
return xPlayer.getMoney()
end
end
function AddMoneyFunction(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.addAccountMoney('bank', amount)
elseif account == 'money' then
xPlayer.addMoney(amount)
end
end
function RemoveAccountMoney(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.removeAccountMoney('bank', amount)
elseif account == 'money' then
xPlayer.removeMoney(amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
return xPlayer.getInventoryItem(item).count
else
if string.sub(item, 0, 6):lower() == 'weapon' then
local loadoutNum, weapon = xPlayer.getWeapon(item:upper())
if weapon then
return true
else
return false
end
else
return xPlayer.getInventoryItem(item).count
end
end
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.removeInventoryItem(item, amount)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.removeWeapon(item)
else
xPlayer.removeInventoryItem(item, amount)
end
end
end
function AddItem(source, item, count, info)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.addInventoryItem(item, count, info)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.addWeapon(item, 90)
else
xPlayer.addInventoryItem(item, count)
end
end
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source) or 'No Data'
else
local xPlayer = GETPFI(source)
name = xPlayer.getName() or 'No Data'
end
return name
end
function GetPlayerJob(source)
local xPlayer = GETPFI(source)
return xPlayer.job.name
end
function CreateCoreJob(name, label, grades)
Core.CreateJob(name, label, grades)
end
function SetCoreJob(source, job, grade)
local xPlayer = GETPFI(source)
xPlayer.setJob(job, grade)
end
function SetCoreJobOffline(identifier, job, grade)
MySQL.update('UPDATE users SET job = ?, job_grade = ? WHERE identifier = ?', {job, grade, identifier})
end
function GetPlayersFunction()
return Core.GetPlayers()
end
elseif Config['Core']:upper() == 'QBCORE' then
Core = exports['qb-core']:GetCoreObject()
RESCB = Core.Functions.CreateCallback
GETPFI = Core.Functions.GetPlayer
RUI = Core.Functions.CreateUseableItem
SetJobEvent = 'QBCore:Server:SetGang'
onPlayerDeath = GetResourceState("brutal_ambulancejob") == "started" and 'onPlayerDeath' or 'hospital:server:SetDeathStatus'
SQLData = {
players = 'players',
}
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.PlayerData.citizenid
end
function GetPlayerByIdentifier(identifier)
return Core.Functions.GetPlayerByCitizenId(identifier)
end
function GetAccountMoney(source, account)
local xPlayer = GETPFI(source)
if account == 'bank' then
return xPlayer.PlayerData.money.bank
elseif account == 'money' then
return xPlayer.PlayerData.money.cash
end
end
function AddMoneyFunction(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.Functions.AddMoney('bank', amount)
elseif account == 'money' then
xPlayer.Functions.AddMoney('cash', amount)
end
end
function RemoveAccountMoney(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.Functions.RemoveMoney('bank', amount)
elseif account == 'money' then
xPlayer.Functions.RemoveMoney('cash', amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
local items = xPlayer.Functions.GetItemByName(item)
local item_count = 0
if items ~= nil then
item_count = items.amount
else
item_count = 0
end
return item_count
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
xPlayer.Functions.RemoveItem(item, amount)
end
function AddItem(source, item, count, info)
local xPlayer = GETPFI(source)
xPlayer.Functions.AddItem(item, count, nil, info)
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source)
else
local xPlayer = GETPFI(source)
name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname
end
return name
end
function GetPlayerJob(source)
local xPlayer = GETPFI(source)
return xPlayer.PlayerData.gang.name
end
function CreateCoreJob(name, label, grades)
Core.Functions.AddGang(name,
{
label = label,
grades = grades,
})
end
function UpdateCoreJob(name, label, grades)
Core.Functions.UpdateGang(name, {
label = label,
grades = grades,
})
end
function RemoveCoreJob(name)
Core.Functions.RemoveGang(name)
end
function SetCoreJob(source, job, grade)
local xPlayer = GETPFI(source)
xPlayer.Functions.SetGang(job, grade)
end
function SetCoreJobOffline(identifier, job)
local joblabel = "None"
if Gangs[job] ~= nil and Gangs[job].label ~= nil then
joblabel = Gangs[job].label
end
MySQL.update('UPDATE players SET gang = ? WHERE citizenid = ?', {json.encode({grade = {level = 0, name = "Member"}, name = job, isboss = false, label = joblabel}), identifier})
end
function GetPlayersFunction()
return Core.Functions.GetPlayers()
end
end

View file

@ -0,0 +1,72 @@
fx_version 'cerulean'
games { 'gta5' }
lua54 'yes'
author 'Keres & Dév'
description 'Brutal Housing - store.brutalscripts.com'
version '1.1.5'
client_scripts {
'config.lua',
'configs/furnitures.lua',
'configs/interiors.lua',
'configs/apartments.lua',
'core/client-core.lua',
'cl_utils.lua',
'client/*.lua',
'client/object_placing/gizmo.lua',
'client/vendor/freecam/utils.lua',
'client/vendor/freecam/config.lua',
'client/vendor/freecam/main.lua',
'client/vendor/freecam/camera.lua'
}
server_scripts {
'@mysql-async/lib/MySQL.lua',
'config.lua',
'configs/furnitures.lua',
'configs/interiors.lua',
'configs/apartments.lua',
'core/server-core.lua',
'sv_utils.lua',
'server/*.lua',
}
shared_script {
'@ox_lib/init.lua'
}
ui_page "html/index.html"
files {
"html/index.html",
"html/style.css",
"html/script.js",
"html/assets/**",
'locales/*.json',
'client/object_placing/dataview.lua'
}
export 'hasKeyToHouse'
export 'getPropertyID'
dependencies {
'ox_lib', -- https://github.com/overextended/ox_lib/releases/latest/download/ox_lib.zip
'/server:5181', -- ⚠PLEASE READ⚠; Requires at least SERVER build 5181
'/gameBuild:2189', -- ⚠PLEASE READ⚠; Requires at least GAME build 2189.
}
escrow_ignore {
'config.lua',
'cl_utils.lua',
'sv_utils.lua',
'core/client-core.lua',
'core/server-core.lua',
'stream/*.ydr',
'stream/*.ytyp',
'client/object_placing/dataview.lua',
'configs/furnitures.lua',
'configs/interiors.lua',
'configs/apartments.lua'
}
dependency '/assetpacks'

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,3 @@
<svg width="343" height="73" viewBox="0 0 343 73" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 36.5V17C1 8.16344 8.16344 1 17 1H86.25M342 36.5V56C342 64.8366 334.837 72 326 72H256.75" stroke="white" stroke-width="2" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 263 B

View file

@ -0,0 +1,52 @@
<svg width="54" height="35" viewBox="0 0 54 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_229_133)">
<mask id="path-1-inside-1_229_133" fill="white">
<path d="M6 17.5L17.5 6L29 17.5L17.5 29L6 17.5Z"/>
</mask>
<path d="M29 17.5L30.4142 18.9142C31.1953 18.1332 31.1953 16.8668 30.4142 16.0858L29 17.5ZM16.0858 7.41421L27.5858 18.9142L30.4142 16.0858L18.9142 4.58579L16.0858 7.41421ZM27.5858 16.0858L16.0858 27.5858L18.9142 30.4142L30.4142 18.9142L27.5858 16.0858Z" fill="#65C95B" mask="url(#path-1-inside-1_229_133)"/>
</g>
<g filter="url(#filter1_d_229_133)">
<mask id="path-3-inside-2_229_133" fill="white">
<path d="M15.752 17.5L27.252 6L38.752 17.5L27.252 29L15.752 17.5Z"/>
</mask>
<path d="M38.752 17.5L40.1662 18.9142C40.9472 18.1332 40.9472 16.8668 40.1662 16.0858L38.752 17.5ZM25.8377 7.41421L37.3377 18.9142L40.1662 16.0858L28.6662 4.58579L25.8377 7.41421ZM37.3377 16.0858L25.8377 27.5858L28.6662 30.4142L40.1662 18.9142L37.3377 16.0858Z" fill="#65C95B" mask="url(#path-3-inside-2_229_133)"/>
</g>
<g filter="url(#filter2_d_229_133)">
<mask id="path-5-inside-3_229_133" fill="white">
<path d="M25.5039 17.5L37.0039 6L48.5039 17.5L37.0039 29L25.5039 17.5Z"/>
</mask>
<path d="M48.5039 17.5L49.9181 18.9142C50.6992 18.1332 50.6992 16.8668 49.9181 16.0858L48.5039 17.5ZM35.5897 7.41421L47.0897 18.9142L49.9181 16.0858L38.4181 4.58579L35.5897 7.41421ZM47.0897 16.0858L35.5897 27.5858L38.4181 30.4142L49.9181 18.9142L47.0897 16.0858Z" fill="#65C95B" mask="url(#path-5-inside-3_229_133)"/>
</g>
<defs>
<filter id="filter0_d_229_133" x="0.7" y="0.7" width="33.6" height="33.6" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="2.65"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.395215 0 0 0 0 0.7875 0 0 0 0 0.357656 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_229_133"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_229_133" result="shape"/>
</filter>
<filter id="filter1_d_229_133" x="10.452" y="0.7" width="33.6" height="33.6" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="2.65"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.395215 0 0 0 0 0.7875 0 0 0 0 0.357656 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_229_133"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_229_133" result="shape"/>
</filter>
<filter id="filter2_d_229_133" x="20.2039" y="0.7" width="33.6" height="33.6" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="2.65"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.395215 0 0 0 0 0.7875 0 0 0 0 0.357656 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_229_133"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_229_133" result="shape"/>
</filter>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Some files were not shown because too many files have changed in this diff Show more