forked from Simnation/Main
100 lines
3.2 KiB
Lua
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)
|