if Config.HouseScript ~= 'qb-houses' then return end local TotalHouses = {} 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.name, label = house.label, tier = house.tier, owned = house.owned, locked = TotalHouses[house.name] and TotalHouses[house.name].locked or false, 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) if not TotalHouses then return { success = false, message = 'home.housedataNotFound' } end if TotalHouses[houseData.uniqueHouse] then TriggerServerEvent("qb-houses:server:lockHouse", not houseData.locked, houseData.uniqueHouse) return { success = true, locked = not houseData.locked } end return { success = false, message = 'home.housedataNotFound' } end function AddKeyHolderHouse(data) local targetID = data.targetId local houseID = data.house.uniqueHouse if not targetID or not houseID then return { success = false, message = "home.invaliddata" } end TriggerServerEvent("qb-houses:server:giveHouseKey", tonumber(targetID), houseID) 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 = "home.failedToAddKeyHolder" } end function RemoveKeyHolderHouse(data) local targetCitizenId = data.targetCitizenId local houseID = data.house.uniqueHouse if not targetCitizenId or not houseID then return { success = false, message = "home.invaliddata" } end local TargetFirstName = "" local TargetLastName = "" for k, v in pairs(data.house.keyholders) do if v.citizenid == targetCitizenId then TargetFirstName = v.name:match("^(%S+)") TargetLastName = v.name:match("(%S+)$") break end end TriggerServerEvent("qb-houses:server:removeHouseKey", houseID, { citizenid = targetCitizenId, firstname = TargetFirstName, lastname = TargetLastName }) 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 = "home.failedToRemoveKeyHolder" } end RegisterNetEvent("qb-houses:client:setHouseConfig", function(houseConfig) TotalHouses = houseConfig end) RegisterNetEvent("qb-houses:client:lockHouse", function(lockState, house) if not TotalHouses[house] then return end TotalHouses[house].locked = lockState end) AddEventHandler('codem-phone:client:PhoneLoaded', function() TriggerServerEvent('qb-houses:server:setHouses') end)