2026-04-14 17:41:39 +02:00

172 lines
5.0 KiB
Lua

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)