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