if Config.UseTarget then return end local currentZone = nil local Zones = { Store = {}, ClothingRoom = {}, PlayerOutfitRoom = {} } local function RemoveZones() for i = 1, #Zones.Store do if Zones.Store[i]["remove"] then Zones.Store[i]:remove() end end for i = 1, #Zones.ClothingRoom do Zones.ClothingRoom[i]:remove() end for i = 1, #Zones.PlayerOutfitRoom do Zones.PlayerOutfitRoom[i]:remove() end end local function lookupZoneIndexFromID(zones, id) for i = 1, #zones do if zones[i].id == id then return i end end end local function onStoreEnter(data) local index = lookupZoneIndexFromID(Zones.Store, data.id) local store = Config.Stores[index] local jobName = (store.job and client.job.name) or (store.gang and client.gang.name) if jobName == (store.job or store.gang) then currentZone = { name = store.type, index = index } local prefix = Config.UseRadialMenu and "" or "[E] " if currentZone.name == "clothing" then lib.showTextUI(prefix .. string.format(_L("textUI.clothing"), Config.ClothingCost), Config.TextUIOptions) elseif currentZone.name == "barber" then lib.showTextUI(prefix .. string.format(_L("textUI.barber"), Config.BarberCost), Config.TextUIOptions) elseif currentZone.name == "tattoo" then lib.showTextUI(prefix .. string.format(_L("textUI.tattoo"), Config.TattooCost), Config.TextUIOptions) elseif currentZone.name == "surgeon" then lib.showTextUI(prefix .. string.format(_L("textUI.surgeon"), Config.SurgeonCost), Config.TextUIOptions) end Radial.AddOption(currentZone) end end local function onClothingRoomEnter(data) local index = lookupZoneIndexFromID(Zones.ClothingRoom, data.id) local clothingRoom = Config.ClothingRooms[index] local jobName = clothingRoom.job and client.job.name or client.gang.name if jobName == (clothingRoom.job or clothingRoom.gang) then if CheckDuty() or clothingRoom.gang then currentZone = { name = "clothingRoom", index = index } local prefix = Config.UseRadialMenu and "" or "[E] " lib.showTextUI(prefix .. _L("textUI.clothingRoom"), Config.TextUIOptions) Radial.AddOption(currentZone) end end end local function onPlayerOutfitRoomEnter(data) local index = lookupZoneIndexFromID(Zones.PlayerOutfitRoom, data.id) local playerOutfitRoom = Config.PlayerOutfitRooms[index] local isAllowed = IsPlayerAllowedForOutfitRoom(playerOutfitRoom) if isAllowed then currentZone = { name = "playerOutfitRoom", index = index } local prefix = Config.UseRadialMenu and "" or "[E] " lib.showTextUI(prefix .. _L("textUI.playerOutfitRoom"), Config.TextUIOptions) Radial.AddOption(currentZone) end end local function onZoneExit() currentZone = nil Radial.RemoveOption() lib.hideTextUI() end local function SetupZone(store, onEnter, onExit) if Config.RCoreTattoosCompatibility and store.type == "tattoo" then return {} end if Config.UseRadialMenu or store.usePoly then return lib.zones.poly({ points = store.points, debug = Config.Debug, onEnter = onEnter, onExit = onExit }) end return lib.zones.box({ coords = store.coords, size = store.size, rotation = store.rotation, debug = Config.Debug, onEnter = onEnter, onExit = onExit }) end local function SetupStoreZones() for _, v in pairs(Config.Stores) do Zones.Store[#Zones.Store + 1] = SetupZone(v, onStoreEnter, onZoneExit) end end local function SetupClothingRoomZones() for _, v in pairs(Config.ClothingRooms) do Zones.ClothingRoom[#Zones.ClothingRoom + 1] = SetupZone(v, onClothingRoomEnter, onZoneExit) end end local function SetupPlayerOutfitRoomZones() for _, v in pairs(Config.PlayerOutfitRooms) do Zones.PlayerOutfitRoom[#Zones.PlayerOutfitRoom + 1] = SetupZone(v, onPlayerOutfitRoomEnter, onZoneExit) end end local function SetupZones() SetupStoreZones() SetupClothingRoomZones() SetupPlayerOutfitRoomZones() end local function ZonesLoop() Wait(1000) while true do local sleep = 1000 if currentZone then sleep = 5 if IsControlJustReleased(0, 38) then if currentZone.name == "clothingRoom" then local clothingRoom = Config.ClothingRooms[currentZone.index] local outfits = GetPlayerJobOutfits(clothingRoom.job) TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits) elseif currentZone.name == "playerOutfitRoom" then local outfitRoom = Config.PlayerOutfitRooms[currentZone.index] OpenOutfitRoom(outfitRoom) elseif currentZone.name == "clothing" then TriggerEvent("illenium-appearance:client:openClothingShopMenu") elseif currentZone.name == "barber" then OpenBarberShop() elseif currentZone.name == "tattoo" then OpenTattooShop() elseif currentZone.name == "surgeon" then OpenSurgeonShop() end end end Wait(sleep) end end CreateThread(function() SetupZones() if not Config.UseRadialMenu then ZonesLoop() end end) AddEventHandler("onResourceStop", function(resource) if resource == GetCurrentResourceName() then RemoveZones() end end) RegisterNetEvent("illenium-appearance:client:OpenClothingRoom", function() local clothingRoom = Config.ClothingRooms[currentZone.index] local outfits = GetPlayerJobOutfits(clothingRoom.job) TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits) end) RegisterNetEvent("illenium-appearance:client:OpenPlayerOutfitRoom", function() local outfitRoom = Config.PlayerOutfitRooms[currentZone.index] OpenOutfitRoom(outfitRoom) end)