193 lines
5.9 KiB
Lua
193 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)
|