192 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| if not Config.UseTarget then return end
 | |
| 
 | |
| local TargetPeds = {
 | |
|     Store = {},
 | |
|     ClothingRoom = {},
 | |
|     PlayerOutfitRoom = {}
 | |
| }
 | |
| 
 | |
| Target = {}
 | |
| 
 | |
| function Target.IsOX()
 | |
|     return GetResourceState("ox_target") ~= "missing"
 | |
| end
 | |
| 
 | |
| function Target.IsQB()
 | |
|     return GetResourceState("qb-target") ~= "missing"
 | |
| end
 | |
| 
 | |
| local function RemoveTargetPeds(peds)
 | |
|     for i = 1, #peds, 1 do
 | |
|         DeletePed(peds[i])
 | |
|     end
 | |
| end
 | |
| 
 | |
| local function RemoveTargets()
 | |
|     if Config.EnablePedsForShops then
 | |
|         RemoveTargetPeds(TargetPeds.Store)
 | |
|     else
 | |
|         for k, v in pairs(Config.Stores) do
 | |
|             Target.RemoveZone(v.type .. k)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     if Config.EnablePedsForClothingRooms then
 | |
|         RemoveTargetPeds(TargetPeds.ClothingRoom)
 | |
|     else
 | |
|         for k, v in pairs(Config.ClothingRooms) do
 | |
|             Target.RemoveZone("clothing_" .. (v.job or v.gang) .. k)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     if Config.EnablePedsForPlayerOutfitRooms then
 | |
|         RemoveTargetPeds(TargetPeds.PlayerOutfitRoom)
 | |
|     else
 | |
|         for k in pairs(Config.PlayerOutfitRooms) do
 | |
|             Target.RemoveZone("playeroutfitroom_" .. k)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| AddEventHandler("onResourceStop", function(resource)
 | |
|     if resource == GetCurrentResourceName() then
 | |
|         if Target.IsTargetStarted() then
 | |
|             RemoveTargets()
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| local function CreatePedAtCoords(pedModel, coords, scenario)
 | |
|     pedModel = type(pedModel) == "string" and joaat(pedModel) or pedModel
 | |
|     lib.requestModel(pedModel)
 | |
|     local ped = CreatePed(0, pedModel, coords.x, coords.y, coords.z - 0.98, coords.w, false, false)
 | |
|     TaskStartScenarioInPlace(ped, scenario, true)
 | |
|     FreezeEntityPosition(ped, true)
 | |
|     SetEntityVisible(ped, true)
 | |
|     SetEntityInvincible(ped, true)
 | |
|     PlaceObjectOnGroundProperly(ped)
 | |
|     SetBlockingOfNonTemporaryEvents(ped, true)
 | |
|     return ped
 | |
| end
 | |
| 
 | |
| local function SetupStoreTarget(targetConfig, action, k, v)
 | |
|     local parameters = {
 | |
|         options = {{
 | |
|             type = "client",
 | |
|             action = action,
 | |
|             icon = targetConfig.icon,
 | |
|             label = targetConfig.label
 | |
|         }},
 | |
|         distance = targetConfig.distance,
 | |
|         rotation = v.rotation
 | |
|     }
 | |
| 
 | |
|     if Config.EnablePedsForShops then
 | |
|         TargetPeds.Store[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
 | |
|         Target.AddTargetEntity(TargetPeds.Store[k], parameters)
 | |
|     elseif v.usePoly then
 | |
|         Target.AddPolyZone(v.type .. k, v.points, parameters)
 | |
|     else
 | |
|         Target.AddBoxZone(v.type .. k, v.coords, v.size, parameters)
 | |
|     end
 | |
| end
 | |
| 
 | |
| local function SetupStoreTargets()
 | |
|     for k, v in pairs(Config.Stores) do
 | |
|         local targetConfig = Config.TargetConfig[v.type]
 | |
|         local action
 | |
| 
 | |
|         if v.type == "barber" then
 | |
|             action = OpenBarberShop
 | |
|         elseif v.type == "clothing" then
 | |
|             action = function()
 | |
|                 TriggerEvent("illenium-appearance:client:openClothingShopMenu")
 | |
|             end
 | |
|         elseif v.type == "tattoo" then
 | |
|             action = OpenTattooShop
 | |
|         elseif v.type == "surgeon" then
 | |
|             action = OpenSurgeonShop
 | |
|         end
 | |
| 
 | |
|         if not (Config.RCoreTattoosCompatibility and v.type == "tattoo") then
 | |
|             SetupStoreTarget(targetConfig, action, k, v)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| local function SetupClothingRoomTargets()
 | |
|     for k, v in pairs(Config.ClothingRooms) do
 | |
|         local targetConfig = Config.TargetConfig["clothingroom"]
 | |
|         local action = function()
 | |
|             local outfits = GetPlayerJobOutfits(v.job)
 | |
|             TriggerEvent("illenium-appearance:client:openJobOutfitsMenu", outfits)
 | |
|         end
 | |
| 
 | |
|         local parameters = {
 | |
|             options = {{
 | |
|                 type = "client",
 | |
|                 action = action,
 | |
|                 icon = targetConfig.icon,
 | |
|                 label = targetConfig.label,
 | |
|                 canInteract = v.job and CheckDuty or nil,
 | |
|                 job = v.job,
 | |
|                 gang = v.gang
 | |
|             }},
 | |
|             distance = targetConfig.distance,
 | |
|             rotation = v.rotation
 | |
|         }
 | |
| 
 | |
|         local key = "clothing_" .. (v.job or v.gang) .. k
 | |
|         if Config.EnablePedsForClothingRooms then
 | |
|             TargetPeds.ClothingRoom[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
 | |
|             Target.AddTargetEntity(TargetPeds.ClothingRoom[k], parameters)
 | |
|         elseif v.usePoly then
 | |
|             Target.AddPolyZone(key, v.points, parameters)
 | |
|         else
 | |
|             Target.AddBoxZone(key, v.coords, v.size, parameters)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| local function SetupPlayerOutfitRoomTargets()
 | |
|     for k, v in pairs(Config.PlayerOutfitRooms) do
 | |
|         local targetConfig = Config.TargetConfig["playeroutfitroom"]
 | |
| 
 | |
|         local parameters = {
 | |
|             options = {{
 | |
|                 type = "client",
 | |
|                 action = function()
 | |
|                     OpenOutfitRoom(v)
 | |
|                 end,
 | |
|                 icon = targetConfig.icon,
 | |
|                 label = targetConfig.label,
 | |
|                 canInteract = function()
 | |
|                     return IsPlayerAllowedForOutfitRoom(v)
 | |
|                 end
 | |
|             }},
 | |
|             distance = targetConfig.distance,
 | |
|             rotation = v.rotation
 | |
|         }
 | |
| 
 | |
|         if Config.EnablePedsForPlayerOutfitRooms then
 | |
|             TargetPeds.PlayerOutfitRoom[k] = CreatePedAtCoords(v.targetModel or targetConfig.model, v.coords, v.targetScenario or targetConfig.scenario)
 | |
|             Target.AddTargetEntity(TargetPeds.PlayerOutfitRoom[k], parameters)
 | |
|         elseif v.usePoly then
 | |
|             Target.AddPolyZone("playeroutfitroom_" .. k, v.points, parameters)
 | |
|         else
 | |
|             Target.AddBoxZone("playeroutfitroom_" .. k, v.coords, v.size, parameters)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| local function SetupTargets()
 | |
|     SetupStoreTargets()
 | |
|     SetupClothingRoomTargets()
 | |
|     SetupPlayerOutfitRoomTargets()
 | |
| end
 | |
| 
 | |
| CreateThread(function()
 | |
|     if Config.UseTarget then
 | |
|         SetupTargets()
 | |
|     end
 | |
| end)
 | 
