forked from Simnation/Main
148 lines
6 KiB
Lua
148 lines
6 KiB
Lua
---@param _type? 'lockpick' | 'police'
|
|
function OpenApartmentMenu(_type)
|
|
local apartmentDatas = TriggerServerCallbackSync('housing:getApartmentsData', CurrentHouse)
|
|
if not apartmentDatas or not next(apartmentDatas) then return Notification(Lang('HOUSING_NOTIFICATION_NO_APARTMENTS'), 'error') end
|
|
local data = {}
|
|
for k, v in pairs(apartmentDatas) do
|
|
local description = Lang('HOUSING_MENU_APARTMENT_SALES')
|
|
local houseData = Config.Houses[v.house]
|
|
if v.ownedByMe and v.haskey then
|
|
description = Lang('HOUSING_MENU_APARTMENT_OWN')
|
|
elseif v.haskey then
|
|
description = Lang('HOUSING_MENU_APARTMENT_NO_KEY')
|
|
elseif v.purchasable then
|
|
description = Lang('HOUSING_MENU_APARTMENT_SALES')
|
|
elseif v.rentable then
|
|
description = Lang('HOUSING_MENU_APARTMENT_RENT')
|
|
elseif not houseData.locked then
|
|
description = Lang('HOUSING_MENU_APARTMENT_NOT_LOCKED')
|
|
elseif v.isOwned then
|
|
description = Lang('HOUSING_MENU_APARTMENT_OWNED')
|
|
end
|
|
table.insert(data, {
|
|
title = v.ownedByMe and Lang('HOUSING_MENU_APARTMENT_SELECT_YOUR') .. k or Lang('HOUSING_MENU_APARTMENT_SELECT') .. k,
|
|
description = description,
|
|
onSelect = function(args)
|
|
if _type == 'lockpick' then
|
|
LockPick(v.house)
|
|
return
|
|
elseif _type == 'police' then
|
|
RamDoor(v.house)
|
|
return
|
|
end
|
|
if not v.isOwned or v.rentable or v.purchasable then
|
|
OpenApartmentBuyMenu(v)
|
|
return
|
|
elseif v.haskey or not houseData.locked then
|
|
CurrentHouseData = v
|
|
CurrentHouse = v.house
|
|
TriggerEvent('qb-houses:client:EnterHouse', houseData.ipl, v.house, v)
|
|
return
|
|
end
|
|
Notification(Lang('HOUSING_NOTIFICATION_YOU_RING_DOOR'), 'inform')
|
|
TriggerServerEvent('qb-houses:server:RingDoor', v.house)
|
|
end,
|
|
disabled = (_type == 'lockpick' or _type == 'police') and (not v.isOwned or not houseData.locked)
|
|
})
|
|
end
|
|
lib.registerContext({
|
|
id = 'apartment_menu',
|
|
title = Lang('HOUSING_MENU_APARTMENT_TITLE'),
|
|
options = data
|
|
})
|
|
lib.showContext('apartment_menu')
|
|
end
|
|
|
|
function OpenApartmentBuyMenu(apartment)
|
|
local data = {}
|
|
if apartment.rentable then
|
|
table.insert(data, {
|
|
title = Lang('HOUSING_MENU_APARTMENT_RENT_TITLE'),
|
|
-- description = 'Rent',
|
|
onSelect = function(args)
|
|
CurrentApartment = apartment
|
|
TriggerServerEvent('qb-houses:server:viewHouse', apartment.house, true)
|
|
end
|
|
})
|
|
else
|
|
table.insert(data, {
|
|
title = Lang('HOUSING_MENU_APARTMENT_BUY_TITLE'),
|
|
-- description = 'Buy',
|
|
onSelect = function(args)
|
|
CurrentApartment = apartment
|
|
TriggerServerEvent('qb-houses:server:viewHouse', apartment.house)
|
|
end
|
|
})
|
|
end
|
|
local houseData = Config.Houses[apartment.house]
|
|
table.insert(data, {
|
|
title = Lang('HOUSING_MENU_APARTMENT_INSPECT_TITLE'),
|
|
-- description = 'Inspect',
|
|
onSelect = function(args)
|
|
InspectHouse(houseData, apartment.house)
|
|
end
|
|
})
|
|
lib.registerContext({
|
|
id = 'apartment_buy_interactions',
|
|
title = Lang('HOUSING_MENU_APARTMENT_INTERACTIONS'),
|
|
options = data
|
|
})
|
|
lib.showContext('apartment_buy_interactions')
|
|
end
|
|
|
|
function OpenMyApartments()
|
|
local apartmentDatas = TriggerServerCallbackSync('housing:getApartmentsData', CurrentHouse)
|
|
if not apartmentDatas or not next(apartmentDatas) then return Notification(Lang('HOUSING_NOTIFICATION_NO_APARTMENTS'), 'error') end
|
|
local data = {}
|
|
for k, v in pairs(apartmentDatas) do
|
|
if not v.ownedByMe then goto continue end
|
|
local houseData = Config.Houses[v.house]
|
|
table.insert(data, {
|
|
title = Lang('HOUSING_MENU_APARTMENT_SELECT_YOUR') .. k,
|
|
--- description = 'Your Apartment',
|
|
onSelect = function(args)
|
|
v.currentHouse = CurrentHouse
|
|
v.currentHouseData = CurrentHouseData
|
|
CurrentApartment = v
|
|
CurrentHouse = v.house
|
|
CurrentHouseData = v
|
|
houseData.name = Lang('HOUSING_MENU_APARTMENT_SELECT_YOUR') .. k
|
|
GetDecorations(CurrentHouse)
|
|
OpenManagement(houseData)
|
|
end,
|
|
})
|
|
::continue::
|
|
end
|
|
if #data == 0 then return Notification(Lang('HOUSING_NOTIFICATION_NO_OWNED_APARTMENTS'), 'error') end
|
|
lib.registerContext({
|
|
id = 'my_apartment_menu',
|
|
title = Lang('HOUSING_MENU_MY_APARTMENT'),
|
|
options = data
|
|
})
|
|
lib.showContext('my_apartment_menu')
|
|
end
|
|
|
|
function OpenHireApartments()
|
|
local apartmentDatas = TriggerServerCallbackSync('housing:getApartmentsData', CurrentHouse, true)
|
|
if not apartmentDatas or not next(apartmentDatas) then return Notification(Lang('HOUSING_NOTIFICATION_NO_APARTMENTS'), 'error') end
|
|
apartmentDatas = table.filter(apartmentDatas, function(v)
|
|
return v.rented
|
|
end)
|
|
if #apartmentDatas == 0 then return Notification(Lang('HOUSING_NOTIFICATION_NO_RENTED_APARTMENTS'), 'error') end
|
|
local data = {}
|
|
for k, v in pairs(apartmentDatas) do
|
|
table.insert(data, {
|
|
title = Lang('HOUSING_MENU_HIRE_APARTMENT_NUMBER') .. ' ' .. k,
|
|
onSelect = function(args)
|
|
TriggerServerEvent('housing:hireRenter', v.house)
|
|
end,
|
|
})
|
|
end
|
|
if #data == 0 then return Notification(Lang('HOUSING_NOTIFICATION_NO_RENTED_APARTMENTS'), 'error') end
|
|
lib.registerContext({
|
|
id = 'hire_apartment_menu',
|
|
title = Lang('HOUSING_MENU_HIRE_APARTMENT'),
|
|
options = data
|
|
})
|
|
lib.showContext('hire_apartment_menu')
|
|
end
|