134 lines
4.0 KiB
Lua
134 lines
4.0 KiB
Lua
if Config.HouseScript ~= 'bcs-housing' then
|
|
return
|
|
end
|
|
|
|
|
|
local function FormatHouseData(houseList)
|
|
local formattedHouses = {}
|
|
|
|
for _, house in ipairs(houseList) do
|
|
local coordsData = type(house.coords) == "string" and json.decode(house.coords) or house.coords
|
|
local keyholdersData = type(house.keyholders) == "string" and json.decode(house.keyholders) or house.keyholders
|
|
|
|
local keys = {}
|
|
if type(keyholdersData) == "table" then
|
|
for i = 1, #keyholdersData do
|
|
keys[i] = keyholdersData[i]
|
|
end
|
|
end
|
|
|
|
formattedHouses[#formattedHouses + 1] = {
|
|
id = house.id,
|
|
citizenid = house.citizenid,
|
|
identifier = house.identifier,
|
|
uniqueHouse = house.id,
|
|
label = house.label,
|
|
tier = house.tier,
|
|
owned = house.owned,
|
|
locked = exports.bcs_housing:isLocked(house.id),
|
|
keyholders = keys,
|
|
coords = {
|
|
x = coordsData.enter.x,
|
|
y = coordsData.enter.y
|
|
}
|
|
}
|
|
end
|
|
return {
|
|
success = true,
|
|
houses = formattedHouses
|
|
}
|
|
end
|
|
|
|
function GetPlayerHouses()
|
|
local result = RPC.execute('codem-phone:home:getHouse')
|
|
if result.success then
|
|
return FormatHouseData(result.houses or {})
|
|
end
|
|
return result
|
|
end
|
|
|
|
function GetPlayerHouseKeyHolders(keyholder)
|
|
local result = RPC.execute('codem-phone:home:getKeyHolders', keyholder)
|
|
return result
|
|
end
|
|
|
|
function SetPlayerHouseLockState(houseData)
|
|
exports.bcs_housing:LockHome(houseData.uniqueHouse)
|
|
return {
|
|
success = true,
|
|
locked = not houseData.locked
|
|
}
|
|
end
|
|
|
|
function AddKeyHolderHouse(data)
|
|
local targetID = data.targetId
|
|
local houseID = data.house.uniqueHouse
|
|
if not targetID or not houseID then
|
|
return {
|
|
success = false,
|
|
message = "Invalid data provided"
|
|
}
|
|
end
|
|
|
|
local result = RPC.execute('codem-phone:home:addkeyholderhouse', {
|
|
targetID = targetID,
|
|
houseID = houseID
|
|
})
|
|
if result.success then
|
|
Citizen.Wait(600)
|
|
local updatedHouses = GetPlayerHouses()
|
|
if updatedHouses.success then
|
|
for _, house in ipairs(updatedHouses.houses) do
|
|
if house.uniqueHouse == houseID then
|
|
local keyholders = GetPlayerHouseKeyHolders(house.keyholders or {})
|
|
if keyholders.success then
|
|
return {
|
|
success = true,
|
|
uniqueHouse = houseID,
|
|
keyholders = keyholders.keyholders
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function RemoveKeyHolderHouse(data)
|
|
local targetCitizenId = data.targetCitizenId
|
|
local houseID = data.house.uniqueHouse
|
|
if not targetCitizenId or not houseID then
|
|
return {
|
|
success = false,
|
|
message = "Invalid data provided"
|
|
}
|
|
end
|
|
|
|
local result = RPC.execute('codem-phone:home:removekeyholderhouse', {
|
|
targetCitizenId = targetCitizenId,
|
|
houseID = houseID
|
|
})
|
|
if result.success then
|
|
Citizen.Wait(600)
|
|
local result = GetPlayerHouses()
|
|
if result.success then
|
|
for _, house in ipairs(result.houses) do
|
|
if house.uniqueHouse == houseID then
|
|
local keyholders = GetPlayerHouseKeyHolders(house.keyholders or {})
|
|
if keyholders.success then
|
|
return {
|
|
success = true,
|
|
uniqueHouse = houseID,
|
|
keyholders = keyholders.keyholders
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return {
|
|
success = false,
|
|
message = "Failed to add key holder"
|
|
}
|
|
end
|
|
end
|