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