Scripts/resources/[ps]/ps-housing/client/apartment.lua

172 lines
4.4 KiB
Lua
Raw Normal View History

2024-12-29 20:28:24 +00:00
-- TBH I should have learnt how lua inheritance worked instead of making a new class but oh well. Maybe next time
Apartment = {
apartmentData = {},
apartments = {},
entranceTarget = nil,
blip = nil,
}
Apartment.__index = Apartment
function Apartment:new(apartmentData)
local self = setmetatable({}, Apartment)
self.apartmentData = apartmentData
self.apartments = {}
self:RegisterPropertyEntrance()
self:CreateBlip()
return self
end
function Apartment:RegisterPropertyEntrance()
local door = self.apartmentData.door
local targetName = string.format("%s_apartment",self.apartmentData.label)
-- not sure why but referencing self directy runs it when registering the zones
local function enterApartment()
self:EnterApartment()
end
local function seeAll()
self:GetMenuForAll()
end
local function seeAllToRaid()
self:GetMenuForAllToRaid()
end
local size = vector3(door.length, door.width, 3.0)
local heading = door.h
Framework[Config.Target].AddApartmentEntrance(door, size, heading, self.apartmentData.label, enterApartment, seeAll, seeAllToRaid, targetName)
end
function Apartment:EnterApartment()
for propertyId, _ in pairs(self.apartments) do
local property = PropertiesTable[propertyId]
if property.owner then
TriggerServerEvent('ps-housing:server:enterProperty', propertyId)
return
end
end
Framework[Config.Notify].Notify("Du har ingen lejlighed her.", "error")
end
function Apartment:GetMenuForAll()
if next(self.apartments) == nil then
Framework[Config.Notify].Notify("Der er ingen lejligheder her.", "error")
return
end
local id = "apartments-" .. self.apartmentData.label
local menu = {
id = id,
title = "Lejligheder",
options = {}
}
for propertyId, _ in pairs(self.apartments) do
table.insert(menu.options,{
title = self.apartmentData.label .. " " .. propertyId,
onSelect = function()
TriggerServerEvent('ps-housing:server:enterProperty', propertyId)
end,
})
end
lib.registerContext(menu)
lib.showContext(id)
end
function Apartment:GetMenuForAllToRaid()
if next(self.apartments) == nil then
Framework[Config.Notify].Notify("Der er ingen lejligheder her.", "error")
return
end
local id = "apartments-" .. self.apartmentData.label
local menu = {
id = id,
title = "Lejligheder til ransagning",
options = {}
}
for propertyId, _ in pairs(self.apartments) do
table.insert(menu.options,{
title = "Ransag " .. self.apartmentData.label .. " " .. propertyId,
onSelect = function()
TriggerServerEvent("ps-housing:server:raidProperty", propertyId)
end,
})
end
lib.registerContext(menu)
lib.showContext(id)
end
function Apartment:CreateBlip(hasProperty)
self:DeleteBlip()
local door = self.apartmentData.door
local blip = AddBlipForCoord(door.x, door.y, door.z)
SetBlipSprite(blip, 475)
SetBlipScale(blip, 0.8)
if hasProperty then
SetBlipColour(blip, 2)
else
SetBlipColour(blip, 4)
end
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(self.apartmentData.label)
EndTextCommandSetBlipName(blip)
self.blip = blip
end
function Apartment:DeleteBlip()
if not self.blip then return end
RemoveBlip(self.blip)
self.blip = nil
end
function Apartment:AddProperty(propertyId)
self.apartments[propertyId] = true
local property = Property.Get(propertyId)
if property ~= nil and property.owner then
self:CreateBlip(true)
end
end
function Apartment:RemoveProperty(propertyId)
if not self:HasProperty(propertyId) then return end
self.apartments[propertyId] = nil
local property = Property.Get(propertyId)
if property.owner then
self:CreateBlip(false)
end
end
function Apartment:HasProperty(propertyId)
return self.apartments[propertyId] ~= nil
end
function Apartment:RemoveApartment()
local targetName = string.format("%s_apartment",self.apartmentData.label)
Framework[Config.Target].RemoveTargetZone(targetName)
self:DeleteBlip()
self = {}
end
function Apartment.Get(apartmentName)
return ApartmentsTable[apartmentName]
end