Description
WaveProperties is an amazing ESX & QBCore ready resource, allowing you to create properties including garages.With WaveProperties your players can manage anything imaginable.
( see video ) Every features is configurable and can be adapted to all your tastes!
I highly recommmand you to read available features ^^
Showcase
Watch the new new update showcase
Watch the Old Showcase !
Tebex
Features
- resmon : 0.0ms Closed, 0.3ms opened
- Property Creator
- Set up Name,Price, Max number of owners
- *Set garage limited vehicle spots
- *~40 ready Interiors ( shells, IPls, default GTA )
- Store money, items, weapons ( or use your own system )
- Save, Equip your outfits ( or use your own system )
- You can add your own properties shells, ipls or locations !
- Garage System
- GTA:O style, using scaleforms to display stats & upgrades
- Upgrades are saved
- Configure if they keep damages or not
- Enable/Disable Storage of stolen or NPC vehicles
- Enable or not vehicle trackers
- You can add your own garages shells, ipls or locations !
- Keys System
- Give and Delete Keys that you gave
- Manage tenants accesses ( Garage,Storage,Dressing)
- If they have the key, they can have access to your saved datas ( if you allowed them )
- Furnitures System
- *You can buy furnishs and place them where you want in the property
- You can add your own objects hashes, already +100 ready
- Properties System
- Visit Properties & Garages before buy
- Rent the property, you pay each day lower amount but limited permisisons
- Resell properties with taxes
- Purchase Properties
- You can ring the doorbell
- Others
- Set max number of properties a player can purchase
- You can use a job OR whitelist players to create, edit, or delete properties
- Money can go in job society money if enabled
- Refresh & Save Properties Commands
- Anti-Glitchs ( no duplication )
- Nice Blips ( shows you if you own or if the property is for sale )
- *Customizable Notifications & Markers
- built-in RageUI edited
- Multiples Languages supported
- ESX & QBUS Ready
- And more…
Config Example
waveProperties = {
MenuColor = {R = 0, G = 0, B = 0},
frameWork = 'ESX', -- ESX / QBCORE ||| VRP not supported yet
getSharedObject = "esx:getSharedObject", --may be QBCore:GetObject too
Language = "EN", --FR/EN/DE/ES
OpenKey = "INSERT", -- https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Currency = "$",
getSkinEvent = 'skinchanger:getSkin',
setClothesEvent = "skinchanger:loadClothes",
enableJobSystem = true,
jobName = "realestateagent",
enableSocietyMoney = true,
giveSocietyMoneyFunc = function(money) --server side function, argument money type int
end,
removeSocietyMoneyFunc = function(money) --server side function, argument money type int
end,
InteriorList = { --you can include shell & other interiors objects
-- 3 types: shell = streamed textures, ipl = ipl, position = default gta map
[1] = {type = "shell",label = "Trevor",name = "shell_trevor",offset = vector3(0.17, -3.51, -1.39)},
[2] = {type = "shell",label = "v16 mid",name = "shell_v16mid",offset = vector3(1.37, -14.0, -1.0)},
[3] = {type = "shell",label = "Lester",name = "shell_lester",offset = vector3(-1.58, -5.84, -1.36)},
[4] = {type = "shell",label = "Ranch",name = "shell_ranch",offset = vector3(-0.741, -9.142, -2.41)},
[5] = {type = "shell",label = "Trailer",name = "shell_trailer",offset = vector3(-1.4, -1.7, -1.0)},
[6] = {type = "shell",label = "v16 Low",name = "shell_v16low",offset = vector3(4.6, -5.7, -2.0)},
[7] = {type = "shell",label = "High End",name = "shell_highend",offset = vector3(-22.0, -0.4, 6.0)},
[8] = {type = "shell",label = "High End v2",name = "shell_highendv2",offset = vector3(-10.0, 0.87, 1.0)},
[9] = {type = "shell",label = "Michael",name = "shell_michael",offset = vector3(-8.7, 5.571, -4.92)},
--ipl
[10] = {type = "ipl",label = "Modern 1 Apartment",name = "apa_v_mp_h_01_a",position = vector3(-786.8663, 315.7642, 217.6385), offset = vector3(0.0,0.0,0.0)},
[11] = {type = "ipl",label = "Modern 2 Apartment",name = "apa_v_mp_h_01_c",position = vector3(-786.9563, 315.6229, 187.9136), offset = vector3(0.0,0.0,0.0)},
[12] = {type = "ipl",label = "Modern 3 Apartment",name = "apa_v_mp_h_01_b",position = vector3(-774.0126, 342.0428, 196.6864), offset = vector3(0.0,0.0,0.0)},
[13] = {type = "ipl",label = "Mody 1 Apartment",name = "apa_v_mp_h_02_a",position = vector3(-787.0749, 315.8198, 217.6386), offset = vector3(0.0,0.0,0.0)},
[14] = {type = "ipl",label = "Mody 2 Apartment",name = "apa_v_mp_h_02_c",position = vector3(-786.8195, 315.5634, 187.9137), offset = vector3(0.0,0.0,0.0)},
[15] = {type = "ipl",label = "Mody 3 Apartment",name = "apa_v_mp_h_02_b",position = vector3(-774.1382, 342.0316, 196.6864), offset = vector3(0.0,0.0,0.0)},
[16] = {type = "ipl",label = "Vibrant 1 Apartment",name = "apa_v_mp_h_03_a",position = vector3(-786.6245, 315.6175, 217.6385), offset = vector3(0.0,0.0,0.0)},
[17] = {type = "ipl",label = "Vibrant 2 Apartment",name = "apa_v_mp_h_03_c",position = vector3(-786.9584, 315.7974, 187.9135), offset = vector3(0.0,0.0,0.0)},
[18] = {type = "ipl",label = "Vibrant 3 Apartment",name = "apa_v_mp_h_03_b",position = vector3(-774.0223, 342.1718, 196.6863), offset = vector3(0.0,0.0,0.0)},
[19] = {type = "ipl",label = "Sharp 1 Apartment",name = "apa_v_mp_h_04_a",position = vector3(-787.0902, 315.7039, 217.6384), offset = vector3(0.0,0.0,0.0)},
[20] = {type = "ipl",label = "Sharp 2 Apartment",name = "apa_v_mp_h_04_c",position = vector3(-787.0155, 315.7071, 187.9135), offset = vector3(0.0,0.0,0.0)},
[21] = {type = "ipl",label = "Sharp 3 Apartment",name = "apa_v_mp_h_04_b",position = vector3(-773.8976, 342.1525, 196.6863), offset = vector3(0.0,0.0,0.0)},
[22] = {type = "ipl",label = "Monochrome 1 Apartment",name = "apa_v_mp_h_05_a",position = vector3(-786.9887, 315.7393, 217.6386), offset = vector3(0.0,0.0,0.0)},
[23] = {type = "ipl",label = "Monochrome 2 Apartment",name = "apa_v_mp_h_05_c",position = vector3(-786.8809, 315.6634, 187.9136), offset = vector3(0.0,0.0,0.0)},
[24] = {type = "ipl",label = "Monochrome 3 Apartment",name = "apa_v_mp_h_05_b",position = vector3(-774.0675, 342.0773, 196.6864), offset = vector3(0.0,0.0,0.0)},
[25] = {type = "ipl",label = "Seductive 1 Apartment",name = "apa_v_mp_h_06_a",position = vector3(-787.1423, 315.6943, 217.6384), offset = vector3(0.0,0.0,0.0)},
[26] = {type = "ipl",label = "Seductive 2 Apartment",name = "apa_v_mp_h_06_c",position = vector3(-787.0961, 315.815, 187.9135), offset = vector3(0.0,0.0,0.0)},
[27] = {type = "ipl",label = "Seductive 3 Apartment",name = "apa_v_mp_h_06_b",position = vector3(-773.9552, 341.9892, 196.6862), offset = vector3(0.0,0.0,0.0)},
[28] = {type = "ipl",label = "Regal 1 Apartment",name = "apa_v_mp_h_07_a",position = vector3(-787.029, 315.7113, 217.6385), offset = vector3(0.0,0.0,0.0)},
[29] = {type = "ipl",label = "Regal 2 Apartment",name = "apa_v_mp_h_07_c",position = vector3(-787.0574, 315.6567, 187.9135), offset = vector3(0.0,0.0,0.0)},
[30] = {type = "ipl",label = "Regal 3 Apartment",name = "apa_v_mp_h_07_b",position = vector3(-774.0109, 342.0965, 196.6863), offset = vector3(0.0,0.0,0.0)},
[31] = {type = "ipl",label = "Aqua 1 Apartment",name = "apa_v_mp_h_08_a",position = vector3(-786.9469, 315.5655, 217.6383), offset = vector3(0.0,0.0,0.0)},
[32] = {type = "ipl",label = "Aqua 2 Apartment",name = "apa_v_mp_h_08_c",position = vector3(-786.9756, 315.723, 187.9134), offset = vector3(0.0,0.0,0.0)},
[33] = {type = "ipl",label = "Aqua 3 Apartment",name = "apa_v_mp_h_08_b",position = vector3(-774.0349, 342.0296, 196.6862), offset = vector3(0.0,0.0,0.0)},
[34] = {type = "position",label = "Low End Apartment",name = "no_ipl",position = vector3(261.4586, -998.8196, -99.00863), offset = vector3(0.0,0.0,0.0)},
[35] = {type = "position",label = "4 Integrity Way, Apt 28",name = "no_ipl",position = vector3(-18.07856, -583.6725, 79.46569), offset = vector3(0.0,0.0,0.0)},
[36] = {type = "position",label = "4 Integrity Way, Apt 30",name = "no_ipl",position = vector3(-35.31277, -580.4199, 88.71221), offset = vector3(0.0,0.0,0.0)},
[37] = {type = "position",label = "Dell Perro Heights, Apt 4",name = "no_ipl",position = vector3(-1468.14, -541.815, 73.4442), offset = vector3(0.0,0.0,0.0)},
[38] = {type = "position",label = "Dell Perro Heights, Apt 7",name = "no_ipl",position = vector3(-1477.14, -538.7499, 55.5264), offset = vector3(0.0,0.0,0.0)},
[39] = {type = "position",label = "Richard Majestic, Apt 2",name = "no_ipl",position = vector3(-915.811, -379.432, 113.6748), offset = vector3(0.0,0.0,0.0)},
[40] = {type = "position",label = "Tinsel Towers, Apt 42",name = "no_ipl",position = vector3(-614.86, 40.6783, 97.60007), offset = vector3(0.0,0.0,0.0)},
[41] = {type = "position",label = "EclipseTowers, Apt 3",name = "no_ipl",position = vector3(-773.407, 341.766, 211.397), offset = vector3(0.0,0.0,0.0)},
[42] = {type = "position",label = "3655 Wild Oats Drive",name = "no_ipl",position = vector3(-169.286, 486.4938, 137.4436), offset = vector3(0.0,0.0,0.0)},
[43] = {type = "position",label = "2044 North Conker Avenue",name = "no_ipl",position = vector3(340.9412, 437.1798, 149.3925), offset = vector3(0.0,0.0,0.0)},
[44] = {type = "position",label = "2045 North Conker Avenue",name = "no_ipl",position = vector3(373.023, 416.105, 145.7006), offset = vector3(0.0,0.0,0.0)},
[45] = {type = "position",label = "2862 Hillcrest Avenue",name = "no_ipl",position = vector3(-676.127, 588.612, 145.1698), offset = vector3(0.0,0.0,0.0)},
[46] = {type = "position",label = "2868 Hillcrest Avenue",name = "no_ipl",position = vector3(-763.107, 615.906, 144.1401), offset = vector3(0.0,0.0,0.0)},
[47] = {type = "position",label = "2874 Hillcrest Avenue",name = "no_ipl",position = vector3(-857.798, 682.563, 152.6529), offset = vector3(0.0,0.0,0.0)},
[48] = {type = "position",label = "2677 Whispymound Drive",name = "no_ipl",position = vector3(120.5, 549.952, 184.097), offset = vector3(0.0,0.0,0.0)},
[49] = {type = "position",label = "2133 Mad Wayne Thunder",name = "no_ipl",position = vector3(-1288, 440.748, 97.69459), offset = vector3(0.0,0.0,0.0)},
},
GarageList = {
-- 3 types: shell = streamed textures, ipl = ipl, position = default gta map
[1] = {type="position",label = "2 Places",ipl = "no_ipl",position = vector3(179.04, -1005.456, -99.65707),offset = vector3(0.0,0.0,0.0),parking = {
{vector = vector3(171.63,-1003.75,-99.99), heading = 180.0},
{vector = vector3(174.92,-1003.75,-99.99), heading = 180.0},
}},
[2] = {type="position",label = "6 Places",ipl = "no_ipl",position = vector3(206.99,-998.994, -99.66071),offset = vector3(0.0,0.0,0.0),parking = {
{vector = vector3(193.36,-997.2,-99.99), heading = 180.0},
{vector = vector3(198.0,-997.2,-99.99), heading = 180.0},
{vector = vector3(202.62,-997.2,-99.99), heading = 180.0},
{vector = vector3(193.36,-1002.477,-99.99), heading = 180.0},
{vector = vector3(198.0,-1002.477,-99.99), heading = 180.0},
{vector = vector3(202.62,-1002.477,-99.99), heading = 180.0},
}},
[3] = {type="position",label = "10 Places",name = "no_ipl",position = vector3(240.67, -1004.76, -99.66071),offset = vector3(0.0,0.0,0.0),parking = {
{vector = vector3(223.19,-998.74,-99.99), heading = 320.0},
{vector = vector3(223.19,-994.58,-99.99), heading = 320.0},
{vector = vector3(223.19,-990.58,-99.99), heading = 320.0},
{vector = vector3(223.19,-986.6,-99.99), heading = 320.0},
{vector = vector3(223.19,-982.6,-99.99), heading = 320.0},
{vector = vector3(233.03,-998.74,-99.99), heading = 130.0},
{vector = vector3(233.03,-994.58,-99.99), heading = 130.0},
{vector = vector3(233.03,-990.58,-99.99), heading = 130.0},
{vector = vector3(233.03,-986.6,-99.99), heading = 130.0},
{vector = vector3(233.03,-982.6,-99.99), heading = 130.0},
}},
[4] = {type="ipl",label = "Garage CEO",name = "imp_dt1_02_cargarage_a",props = {"garage_decor_01","numbering_style01_n1","lighting_option01"},place = 10,position = vector3(-191.0133, -579.1428, 135.0000),offset = vector3(0.0,0.0,0.0),parking = {
--vehicles positions in garage
--{vector = vector3(0.0,0.0,0.0), heading = 0.0},
}},
[5] = {type="ipl",label = "Garage ImpExp",name = "imp_impexp_interior_placement_interior_1_impexp_intwaremed_milo_",props = {"branded_style_set","car_floor_hatch","door_blocker"},place = 10,position = vector3(994.5925, -3002.594, -39.64699),offset = vector3(0.0,0.0,0.0),parking = {
--vehicles positions in garage
--{vector = vector3(0.0,0.0,0.0), heading = 0.0},
}},
},
furnitureMenuCommand = "furniture",
ObjectsList = { --https://gtahash.ru/
--you can add infinite number of props and categories
["Seating"] = {
{label = "Seating 1", name = "prop_couch_lg_07",price=0},
{label = "Seating 2", name = "prop_yaught_sofa_01",price=0},
{label = "Seating 3", name = "prop_couch_sm2_07",price=0},
{label = "Seating 4", name = "prop_couch_lg_02",price=0},
{label = "Seating 5", name = "prop_couch_sm_05",price=0},
{label = "Seating 6", name = "prop_couch_lg_05",price=0},
{label = "Seating 7", name = "prop_yaught_chair_01",price=0},
{label = "Seating 8", name = "prop_couch_lg_06",price=0},
{label = "Seating 9", name = "prop_couch_lg_08",price=0},
{label = "Seating 10", name = "prop_couch_sm_06",price=0},
{label = "Seating 11", name = "prop_couch_01",price=0},
{label = "Seating 12", name = "prop_couch_03",price=0},
{label = "Seating 13", name = "prop_couch_04",price=0},
{label = "Seating 14", name = "prop_gc_chair02",price=0},
{label = "Seating 15", name = "prop_armchair_01",price=0},
{label = "Seating 16", name = "prop_couch_sm1_07",price=0},
{label = "Seating 17", name = "prop_couch_sm_02",price=0},
{label = "Seating 18", name = "prop_couch_sm_02",price=0},
{label = "Seating 19", name = "prop_table_04_chr",price=0},
{label = "Seating 20", name = "prop_table_07",price=0},
{label = "Seating 21", name = "prop_chair_01a",price=0},
{label = "Seating 22", name = "prop_clown_chair",price=0},
{label = "Seating 23", name = "prop_chateau_chair_01",price=0},
{label = "Seating 24", name = "prop_chair_02",price=0},
{label = "Seating 25", name = "prop_chair_05",price=0},
{label = "Seating 26", name = "prop_chair_07",price=0},
{label = "Seating 27", name = "prop_table_01_chr_a",price=0},
{label = "Seating 28", name = "prop_chair_pile_01",price=0},
{label = "Seating 29", name = "prop_stool_01",price=0},
{label = "Seating 30", name = "prop_table_02_chr",price=0},
{label = "Seating 31", name = "prop_chair_10",price=0},
{label = "Seating 32", name = "prop_table_08",price=0},
},
["Tables"] = {
{label = "Table 1", name = "prop_yacht_table_01",price=0},
{label = "Table 2", name = "prop_yacht_table_02",price=0},
{label = "Table 3", name = "prop_yacht_table_03",price=0},
{label = "Table 4", name = "prop_ld_farm_table02",price=0},
{label = "Table 5", name = "prop_ld_farm_table01",price=0},
{label = "Table 6", name = "prop_table_05",price=0},
{label = "Table 7", name = "prop_table_07",price=0},
{label = "Table 8", name = "prop_table_03",price=0},
{label = "Table 9", name = "prop_table_03b",price=0},
{label = "Table 10", name = "prop_table_02",price=0},
{label = "Table 11", name = "prop_chateau_table_01",price=0},
{label = "Table 12", name = "prop_table_06",price=0},
{label = "Table 13", name = "prop_tablesmall_01",price=0},
{label = "Table 14", name = "prop_rub_table_02",price=0},
{label = "Table 15", name = "prop_pooltable_3b",price=0},
{label = "Table 16", name = "prop_table_tennis",price=0},
{label = "Table 17", name = "prop_pooltable_02",price=0},
},
["Beds"] = {
{label = "Bed 1", name = "p_lestersbed_s",price=0},
{label = "Bed 2", name = "p_mbbed_s",price=0},
{label = "Bed 3", name = "p_v_res_tt_bed_s",price=0},
{label = "Bed 4", name = "v_res_msonbed_s",price=0},
},
["Kitchen"] = {
{label = "Kitchen 1", name = "v_ret_fh_plate4",price=0},
{label = "Kitchen 2", name = "v_res_mchopboard",price=0},
{label = "Kitchen 3", name = "prop_micro_01",price=0},
{label = "Kitchen 4", name = "v_res_fa_potcof",price=0},
{label = "Kitchen 5", name = "v_ret_fh_fry02",price=0},
{label = "Kitchen 6", name = "v_res_mcofcupdirt",price=0},
{label = "Kitchen 7", name = "v_ind_cfcup",price=0},
{label = "Kitchen 8", name = "prop_knife",price=0},
{label = "Kitchen 9", name = "prop_pot_05",price=0},
{label = "Kitchen 10", name = "prop_utensil",price=0},
{label = "Kitchen 11", name = "prop_whisk",price=0},
{label = "Kitchen 12", name = "prop_fridge_01",price=0},
{label = "Kitchen 13", name = "v_res_tt_mug2",price=0},
{label = "Kitchen 14", name = "v_res_mutensils",price=0},
{label = "Kitchen 15", name = "prop_copper_pan",price=0},
{label = "Kitchen 16", name = "v_res_mbowl",price=0},
{label = "Kitchen 17", name = "prop_kitch_juicer",price=0},
{label = "Kitchen 18", name = "prop_micro_02",price=0},
{label = "Kitchen 19", name = "prop_washer_03",price=0},
{label = "Kitchen 20", name = "v_res_fridgemoda",price=0},
{label = "Kitchen 21", name = "v_res_pestle",price=0},
{label = "Kitchen 22", name = "v_ret_fh_pot05",price=0},
{label = "Kitchen 23", name = "v_res_cakedome",price=0},
{label = "Kitchen 24", name = "v_res_fridgemodsml",price=0},
{label = "Kitchen 25", name = "prop_pot_rack",price=0},
{label = "Kitchen 26", name = "prop_kitch_pot_huge",price=0},
{label = "Kitchen 27", name = "v_ret_fh_washmach",price=0},
{label = "Kitchen 28", name = "prop_toaster_01",price=0},
{label = "Kitchen 29", name = "v_res_mkniferack",price=0},
{label = "Kitchen 30", name = "v_res_tre_fridge",price=0},
{label = "Kitchen 31", name = "v_ret_ta_paproll2",price=0},
},
},
Blips = {
myProperty = {
Sprite = 40,
Color = 2,
Scale = 0.7,
},
forSaleProperties = {
Sprite = 411,
Color = 26,
Scale = 0.7,
}
},
Markers = {
useCustom = false,--if u want to use your marker function
customMarkerFunction = function(coords)
--DrawMarker
end,
markerDistance = 25.0,
enableText = true,
textDistance = 10.0,
notificationDistance = 5.0,
menuDrawDistanceFromMarker = 5.0,
floatingNotification = true,
helpNotification = false,
},
Notifications = {
useCustom = false,--if u want to use your notification function
customNotificationFunction = function(title,message)
--redirect to your notification event for example
end,
},
maxNumberOfPropertiesCanBePurchasedFromPlayer = 5, -- maximum number of properties that can be purchased by the same player
resellPropertyRate = 0.5, --BETWEEN 0.0 AND 1.0 (0% - 100%) ex 0.5 = 50% of the sell price
canSellToPlayers = true,
acceptSellCommand = "accept",
declineSellCommand = "decline",
canStoreNpcVehicles = false,
canStoreStolenVehicles = false,
vehicleTracker = true,
maxNumberOutfits = 10,
maxNumberOfKeysOwner = 3, --max number of players that can have keys of a same property
enableRents = true,
RentDivider = 200, --he will pay property price divided by this number evey days
payRentHour = 22,
payRentFunc = function(license,amount) -- rockstar license and rent amount
MySQL.Async.execute('UPDATE users SET bank = bank - @bank WHERE identifier = @identifier', {
['@bank'] = amount,
['@identifier'] = license
}) -- you need to edit this function, depends of your framework
end,
enableRobberies = true,
useCustomStorage = false, --enable if you want to use inventory hud for example
storageFunctionWhenPressedOpenKey = function(propertyID) -- function when the player press the key to open storage, u need to use propertyID
end,
useCustomWardRobe = false, --enable if you want to use your own wardrob, but it will not be synced with the property
customWardRobeFunction = function(propertyID) -- propertyID is optional here
end,
ringingAcceptKey = "Y",
ringingRefuseKey = "X",
KeepVehicleDamages = true,
AuthorizedStaffs = {
["license:171a23d246444c95bd897754beb26aa197ab3570"] = true,
},
savingTimer = 1, --save every 1 minute , recommanded
refreshPropertiesCommandName = "refreshproperties",
savePropertiesCommandName = "saveproperties",
}
Check out our other resources
WaveSkills - Skills & Abilities
WavePlayTimeRewards - Rewards your players for their playtime
Animated Weapons Skins w/ URL
WaveWZ-Hud -WarZone Based HUD
WaveVehiclesPreview - Vehicles Catalog & Exhibitions
Automatic Map Cleaning