197 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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)
 | 
