1
0
Fork 0
forked from Simnation/Main
Main/resources/[standalone]/fmLib/wrappers/client/player.lua
2025-06-07 08:51:21 +02:00

100 lines
3.2 KiB
Lua

FM.player = {}
---@return boolean
function FM.player.isLoggedIn()
if ESX then
local playerData = ESX.GetPlayerData()
return playerData ~= nil and playerData.identifier ~= nil
elseif QB then
local playerData = QB.Functions.GetPlayerData()
return playerData ~= nil and playerData ~= nil and playerData.citizenid ~= nil
end
end
---@return string | nil
function FM.player.getFullName()
if ESX then
local playerData = ESX.GetPlayerData()
return playerData ~= nil and tostring(playerData.firstName) .. " " .. tostring(playerData.lastName) or nil
elseif QB then
local playerData = QB.Functions.GetPlayerData()
return playerData ~= nil and playerData.charinfo.firstname .. " " .. playerData.charinfo.lastname or nil
end
end
---@return string | nil
function FM.player.getIdentifier()
if ESX then
local playerData = ESX.GetPlayerData()
return playerData ~= nil and playerData.identifier or nil
elseif QB then
local playerData = QB.Functions.GetPlayerData()
return playerData ~= nil and playerData.citizenid or nil
end
end
---@return { name: string, label: string, grade: number, gradeLabel: string } | nil
function FM.player.getJob()
if ESX then
local playerData = ESX.GetPlayerData()
local job = playerData ~= nil and playerData.job or nil
return job and {
name = job.name,
label = job.label,
grade = job.grade,
gradeLabel = job.grade_label
} or nil
elseif QB then
local playerData = QB.Functions.GetPlayerData()
local job = playerData ~= nil and playerData.job or nil
return job and {
name = job.name,
label = job.label,
grade = job.grade.level,
gradeLabel = job.grade.name
} or nil
end
end
---@return { name: string, label: string, grade: number, gradeLabel: string } | nil gang
function FM.player.getGang()
return FM.callback.sync('fm:internal:getGang')
end
--[[
EVENT HANDLERS
--]]
local function onJobUpdate(newJob)
local job
if ESX then
job = newJob and {
name = newJob.name,
label = newJob.label,
grade = newJob.grade,
gradeLabel = newJob.grade_label
} or nil
elseif QB then
job = newJob and {
name = newJob.name,
label = newJob.label,
grade = newJob.grade.level,
gradeLabel = newJob.grade.name
} or nil
end
TriggerEvent('fm:player:onJobUpdate', job)
end
-- We do not send player data, because for ESX its also sent when there is no character selected yet.
-- After this event gets triggered, use FM.player.isLoggedIn to check if the player is logged in & to make sure the character is selected.
local function onPlayerLoaded()
TriggerEvent('fm:player:onPlayerLoaded')
end
RegisterNetEvent('esx:setJob', onJobUpdate)
RegisterNetEvent('QBCore:Client:OnJobUpdate', onJobUpdate)
RegisterNetEvent('esx:playerLoaded', onPlayerLoaded)
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', onPlayerLoaded)