172 lines
5.0 KiB
Lua
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)
|