154 lines
4.4 KiB
Lua
154 lines
4.4 KiB
Lua
if Config.HouseScript ~= 'ps-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
|
|
|
|
local enterCoords = coordsData and coordsData.enter or { x = 0, y = 0 }
|
|
|
|
formattedHouses[#formattedHouses + 1] = {
|
|
id = house.id,
|
|
citizenid = house.citizenid,
|
|
identifier = house.property_id,
|
|
uniqueHouse = house.property_id,
|
|
label = house.label,
|
|
tier = house.tier,
|
|
owned = house.owned,
|
|
locked = house.locked or false,
|
|
keyholders = keys,
|
|
coords = {
|
|
x = enterCoords.x or 0,
|
|
y = enterCoords.y or 0
|
|
}
|
|
}
|
|
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)
|
|
local houseID = houseData.uniqueHouse
|
|
if not houseID then
|
|
return {
|
|
success = false,
|
|
message = "Invalid house ID"
|
|
}
|
|
end
|
|
|
|
local result = RPC.execute('codem-phone:home:toggleLock', {
|
|
houseID = houseID
|
|
})
|
|
|
|
return result
|
|
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
|
|
|
|
return {
|
|
success = false,
|
|
message = "Failed to add key holder"
|
|
}
|
|
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 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
|
|
|
|
return {
|
|
success = false,
|
|
message = "Failed to remove key holder"
|
|
}
|
|
end
|