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)
 |