2026-04-14 17:41:39 +02:00

339 lines
9.8 KiB
Lua

PlayerLoaded = false
PlayerPedPreview = nil
CurrentClosestPedVehicle = nil
RegisterNetEvent("esx:playerLoaded")
AddEventHandler("esx:playerLoaded", function()
Wait(1000)
TriggerServerEvent('codem-inventory:server:loadPlayerInventory')
PlayerLoaded = true
SetPlayerJob()
spawnPed()
end)
RegisterNetEvent('QBCore:Client:OnGangUpdate')
AddEventHandler('QBCore:Client:OnGangUpdate', function(data)
Wait(1000)
SetPlayerJob()
end)
RegisterNetEvent("QBCore:Client:OnPlayerLoaded")
AddEventHandler("QBCore:Client:OnPlayerLoaded", function()
Wait(1000)
TriggerServerEvent('codem-inventory:server:loadPlayerInventory')
PlayerLoaded = true
SetPlayerJob()
spawnPed()
end)
CreateThread(function()
Core, Config.Framework = GetCore()
Config.OpenTrigger()
spawnPed()
end)
AddEventHandler("onResourceStop", function(resource)
if resource == GetCurrentResourceName() then
Remove2d()
end
end)
function WaitForModel(model)
if not IsModelValid(model) then
return
end
if not HasModelLoaded(model) then
RequestModel(model)
end
while not HasModelLoaded(model) do
Citizen.Wait(0)
end
end
AddEventHandler('onResourceStart', function(resourceName)
if (resourceName == GetCurrentResourceName()) then
TriggerServerEvent('codem-inventory:server:loadPlayerInventory')
SetPlayerJob()
ClearPedInPauseMenu()
SetFrontendActive(false)
local ped = PlayerPedId()
SetCurrentPedWeapon(ped, `WEAPON_UNARMED`, true)
RemoveAllPedWeapons(ped, true)
currentWeapon = nil
PlayerLoaded = true
end
end)
RegisterNetEvent("QBCore:Client:OnJobUpdate")
AddEventHandler("QBCore:Client:OnJobUpdate", function(data)
Wait(1000)
SetPlayerJob()
end)
RegisterNetEvent("esx:setJob")
AddEventHandler("esx:setJob", function(job)
Wait(1000)
SetPlayerJob()
end)
function WaitPlayer()
if Config.Framework == "esx" or Config.Framework == 'oldesx' then
while Core == nil do
Wait(0)
end
while Core.GetPlayerData() == nil do
Wait(0)
end
while Core.GetPlayerData().job == nil do
Wait(0)
end
else
while Core == nil do
Wait(0)
end
while Core.Functions.GetPlayerData() == nil do
Wait(0)
end
while Core.Functions.GetPlayerData().metadata == nil do
Wait(0)
end
end
end
function SetPlayerJob()
while Core == nil do
Wait(0)
end
Wait(500)
while not nuiLoaded and not PlayerLoaded do
Wait(50)
end
WaitPlayer()
if Config.Framework == 'esx' or Config.Framework == 'oldesx' then
local PlayerData = Core.GetPlayerData()
if next(PlayerData) == nil then
else
jobData.name = PlayerData.job.name
jobData.grade = PlayerData.job.grade
jobData.joblabel = PlayerData.job.label
jobData.gradename = PlayerData.job.grade_label
PlayerLoaded = true
end
else
local PlayerData = Core.Functions.GetPlayerData()
if next(PlayerData) == nil then
else
jobData.name = PlayerData["job"].name
jobData.grade = PlayerData["job"].grade.level
jobData.joblabel = PlayerData["job"].label
jobData.gradename = PlayerData["job"].grade.name
PlayerLoaded = true
end
end
end
function DrawText3Ds(x, y, z, text)
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextEntry("STRING")
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x, y, z, 0)
DrawText(0.0, 0.0)
local factor = string.len(text) / 370
DrawRect(0.0, 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
local isPedScreenActive = false
function CreatePedScreen()
if isPedScreenActive then
return
end
isPedScreenActive = true
if PlayerPedPreview then
DeleteEntity(PlayerPedPreview)
PlayerPedPreview = nil
end
Wait(150)
CreateThread(function()
vehicle, distance = GetClosestVehicle()
if vehicle ~= nil and distance <= 4.0 then
SetEntityAsMissionEntity(vehicle, true, true)
CurrentClosestPedVehicle = vehicle
end
SetFrontendActive(true)
local menuType =
`FE_MENU_VERSION_EMPTY_NO_BACKGROUND` --full list: https://docs.fivem.net/natives/?_0xEF01D36B9C9D0C7B
ActivateFrontendMenu(menuType, true, -1)
ReplaceHudColourWithRgba(117, 0, 0, 0, 0)
Citizen.Wait(100)
SetMouseCursorVisibleInMenus(false)
if PlayerPedPreview == nil then
local ped = PlayerPedId()
local coords = GetEntityCoords()
PlayerPedPreview = ClonePed(ped, false, false, true)
FreezeEntityPosition(PlayerPedPreview, true)
SetEntityCoords(PlayerPedPreview, coords.x, coords.y, coords.z - 10.0)
SetPauseMenuPedSleepState(true)
FinalizeHeadBlend(PlayerPedPreview)
FreezeEntityPosition(PlayerPedPreview, true)
SetEntityVisible(PlayerPedPreview, false, 0)
NetworkSetEntityInvisibleToNetwork(PlayerPedPreview, false)
GivePedToPauseMenu(PlayerPedPreview, 2)
SetPauseMenuPedLighting(true)
end
Citizen.CreateThread(function()
SetMouseCursorVisibleInMenus(false)
end)
isPedScreenActive = false
end)
end
function Remove2d()
DeleteEntity(PlayerPedPreview)
SetFrontendActive(false)
ReplaceHudColourWithRgba(117, 45, 44, 44, 200)
PlayerPedPreview = nil
end
function RefreshPedScreen()
if DoesEntityExist(PlayerPedPreview) then
Remove2d()
Wait(500)
if OpenInventory then
CreatePedScreen()
end
else
DeleteEntity(PlayerPedPreview)
SetFrontendActive(false)
ReplaceHudColourWithRgba(117, 45, 44, 44, 200)
PlayerPedPreview = nil
end
end
RegisterNetEvent('RefreshPedScreen', function()
RefreshPedScreen()
end)
GetClosestVehicle = function()
local ped = PlayerPedId()
local vehicles = GetGamePool('CVehicle')
local closestDistance = -1
local closestVehicle = -1
coords = GetEntityCoords(ped)
for i = 1, #vehicles, 1 do
local vehicleCoords = GetEntityCoords(vehicles[i])
local distance = #(vehicleCoords - coords)
if closestDistance == -1 or closestDistance > distance then
closestVehicle = vehicles[i]
closestDistance = distance
end
end
return closestVehicle, closestDistance
end
function IsBackEngine(vehModel)
return Config.BackEngineVehicles[vehModel]
end
GetTrunkOrGlovebox = function(class, invtype)
if not Config.TrunkAndGloveboxWeight[invtype][class] then class = 9 end
return Config.TrunkAndGloveboxWeight[invtype][class].maxweight, Config.TrunkAndGloveboxWeight[invtype][class].slots
end
function LoadAnimDict(dict)
if HasAnimDictLoaded(dict) then return end
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(10)
end
end
GetClosestPlayers = function()
local players = {}
local ped = PlayerPedId()
local pedCoords = GetEntityCoords(ped)
for _, player in ipairs(GetActivePlayers()) do
local target = GetPlayerPed(player)
if target ~= ped then
local targetCoords = GetEntityCoords(target)
local distance = #(pedCoords - targetCoords)
if distance < 3.5 then
table.insert(players, GetPlayerServerId(player))
end
end
end
return players
end
GetClosestPlayer = function()
local players = GetActivePlayers()
local closestDistance = -1
local closestPlayer = -1
local ply = GetPlayerPed(-1)
local plyCoords = GetEntityCoords(ply, 0)
for index, value in ipairs(players) do
local target = GetPlayerPed(value)
if (target ~= ply) then
local targetCoords = GetEntityCoords(GetPlayerPed(value), 0)
local distance = GetDistanceBetweenCoords(targetCoords['x'], targetCoords['y'], targetCoords['z'],
plyCoords['x'], plyCoords['y'], plyCoords['z'], true)
if (closestDistance == -1 or closestDistance > distance) then
closestPlayer = value
closestDistance = distance
end
end
end
return closestPlayer, closestDistance
end
function Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish,
onCancel)
if GetResourceState('progressbar') ~= 'started' then
error(
'progressbar needs to be started in order for QBCore.Functions.Progressbar to work')
end
exports['progressbar']:Progress({
name = name:lower(),
duration = duration,
label = label,
useWhileDead = useWhileDead,
canCancel = canCancel,
controlDisables = disableControls,
animation = animation,
prop = prop,
propTwo = propTwo,
}, function(cancelled)
if not cancelled then
if onFinish then
onFinish()
end
else
if onCancel then
onCancel()
end
end
end)
end
CreateThread(function()
if Config.Framework == 'esx' or Config.Framework == 'oldesx' then
while true do
Wait(0)
BlockWeaponWheelThisFrame()
end
end
end)