Scripts/resources/[qb]/[qb_core]/qb-target/init.lua

259 lines
7.3 KiB
Lua
Raw Normal View History

2024-12-29 20:03:28 +00:00
function Load(name)
local resourceName = GetCurrentResourceName()
local chunk = LoadResourceFile(resourceName, ('data/%s.lua'):format(name))
if chunk then
local err
chunk, err = load(chunk, ('@@%s/data/%s.lua'):format(resourceName, name), 't')
if err then
error(('\n^1 %s'):format(err), 0)
end
return chunk()
end
end
-------------------------------------------------------------------------------
-- Settings
-------------------------------------------------------------------------------
Config = {}
-- It's possible to interact with entities through walls so this should be low
Config.MaxDistance = 7.0
-- Enable debug options
Config.Debug = false
-- Supported values: true, false
Config.Standalone = false
-- Enable outlines around the entity you're looking at
Config.EnableOutline = false
-- Whether to have the target as a toggle or not
Config.Toggle = false
-- Draw a Sprite on the center of a PolyZone to hint where it's located
Config.DrawSprite = true -- TESTER KUN DENNE HER, DEN SKAL SLÅS FRA IGEN EFTER TEST
-- The default distance to draw the Sprite
Config.DrawDistance = 10.0
-- The color of the sprite in rgb, the first value is red, the second value is green, the third value is blue and the last value is alpha (opacity). Here is a link to a color picker to get these values: https://htmlcolorcodes.com/color-picker/
Config.DrawColor = {255, 255, 255, 255}
-- The color of the sprite in rgb when the PolyZone is targeted, the first value is red, the second value is green, the third value is blue and the last value is alpha (opacity). Here is a link to a color picker to get these values: https://htmlcolorcodes.com/color-picker/
Config.SuccessDrawColor = {30, 144, 255, 255}
-- The color of the outline in rgb, the first value is red, the second value is green, the third value is blue and the last value is alpha (opacity). Here is a link to a color picker to get these values: https://htmlcolorcodes.com/color-picker/
Config.OutlineColor = {255, 255, 255, 255}
-- Enable default options (Toggling vehicle doors)
Config.EnableDefaultOptions = true
-- Disable the target eye whilst being in a vehicle
Config.DisableInVehicle = false
-- Key to open the target eye, here you can find all the names: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Config.OpenKey = 'LMENU' -- Left Alt
-- Control for key press detection on the context menu, it's the Right Mouse Button by default, controls are found here https://docs.fivem.net/docs/game-references/controls/
Config.MenuControlKey = 238
-------------------------------------------------------------------------------
-- Target Configs
-------------------------------------------------------------------------------
-- These are all empty for you to fill in, refer to the .md files for help in filling these in
Config.CircleZones = {
}
Config.BoxZones = {
}
Config.PolyZones = {
}
Config.TargetBones = {
}
Config.TargetModels = {
["chickensell"] = {
models = {
"csb_chef",
},
options = {
{
type = "client",
event = "Chickens:sell",
icon = "fas fa-archive",
label = "Sælg kylling",
},
},
distance = 2.5,
},
}
Config.GlobalPedOptions = {
}
Config.GlobalVehicleOptions = {
}
Config.GlobalObjectOptions = {
}
Config.GlobalPlayerOptions = {
}
Config.Peds = {
{
model = `csb_chef`,
coords = vector4(-1178.16, -891.61, 12.76, 304.99),
gender = 'male',
freeze = true,
invincible = true,
blockevents = true,
},
}
-------------------------------------------------------------------------------
-- Functions
-------------------------------------------------------------------------------
local function JobCheck() return true end
local function GangCheck() return true end
local function ItemCheck() return true end
local function CitizenCheck() return true end
CreateThread(function()
local state = GetResourceState('qb-core')
if state ~= 'missing' then
if state ~= 'started' then
local timeout = 0
repeat
timeout += 1
Wait(0)
until GetResourceState('qb-core') == 'started' or timeout > 100
end
Config.Standalone = false
end
if Config.Standalone then
local firstSpawn = false
local event = AddEventHandler('playerSpawned', function()
SpawnPeds()
firstSpawn = true
end)
-- Remove event after it has been triggered
while true do
if firstSpawn then
RemoveEventHandler(event)
break
end
Wait(1000)
end
else
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = QBCore.Functions.GetPlayerData()
ItemCheck = function(items)
local isTable = type(items) == 'table'
local isArray = isTable and table.type(items) == 'array' or false
local finalcount = 0
local count = 0
if isTable then for _ in pairs(items) do finalcount += 1 end end
for _, v in pairs(PlayerData.items) do
if isTable then
if isArray then -- Table expected in this format {'itemName1', 'itemName2', 'etc'}
for _, item in pairs(items) do
if v and v.name == item then
count += 1
end
end
else -- Table expected in this format {['itemName'] = amount}
local itemAmount = items[v.name]
if itemAmount and v and v.amount >= itemAmount then
count += 1
end
end
if count == finalcount then -- This is to make sure it checks all items in the table instead of only one of the items
return true
end
else -- When items is a string
if v and v.name == items then
return true
end
end
end
return false
end
JobCheck = function(job)
if type(job) == 'table' then
job = job[PlayerData.job.name]
if job and PlayerData.job.grade.level >= job then
return true
end
elseif job == 'all' or job == PlayerData.job.name then
return true
end
return false
end
GangCheck = function(gang)
if type(gang) == 'table' then
gang = gang[PlayerData.gang.name]
if gang and PlayerData.gang.grade.level >= gang then
return true
end
elseif gang == 'all' or gang == PlayerData.gang.name then
return true
end
return false
end
CitizenCheck = function(citizenid)
return citizenid == PlayerData.citizenid or citizenid[PlayerData.citizenid]
end
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
PlayerData = QBCore.Functions.GetPlayerData()
SpawnPeds()
end)
RegisterNetEvent('QBCore:Client:OnPlayerUnload', function()
PlayerData = {}
DeletePeds()
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo)
PlayerData.job = JobInfo
end)
RegisterNetEvent('QBCore:Client:OnGangUpdate', function(GangInfo)
PlayerData.gang = GangInfo
end)
RegisterNetEvent('QBCore:Player:SetPlayerData', function(val)
PlayerData = val
end)
end
end)
function CheckOptions(data, entity, distance)
if distance and data.distance and distance > data.distance then return false end
if data.job and not JobCheck(data.job) then return false end
if data.gang and not GangCheck(data.gang) then return false end
if data.item and not ItemCheck(data.item) then return false end
if data.citizenid and not CitizenCheck(data.citizenid) then return false end
if data.canInteract and not data.canInteract(entity, distance, data) then return false end
return true
end