1
0
Fork 0
forked from Simnation/Main
Main/resources/[Developer]/[Anna]/ngd-Bridge/framework/esx/client.lua
2025-06-07 08:51:21 +02:00

204 lines
No EOL
7.3 KiB
Lua

module 'shared/debug'
module 'shared/resource'
module 'shared/utils'
module 'shared/player'
ESX = nil
Version = resource.version(Bridge.FrameworkName)
Citizen.CreateThreadNow(function()
IsExport, ESX = pcall(function()
return exports[Bridge.FrameworkName]:getSharedObject()
end)
if not IsExport then
while not ESX do
TriggerEvent(Bridge.FrameworkEvent, function(obj) ESX = obj end)
Wait(500)
end
end
end)
Bridge.Debug('Framework', 'ESX', Version)
local clientCallbacks = {}
RegisterClientCallback = function(name, callback)
clientCallbacks[name] = callback
end
RegisterNetEvent(Bridge.Resource .. ':TriggerClientCallback', function(name, id, ...)
if clientCallbacks[name] then
clientCallbacks[name](function(...)
TriggerServerEvent(Bridge.Resource .. ':ClientCallback', id, ...)
end, ...)
end
end)
RegisterNetEvent(Bridge.FrameworkPrefix .. ':playerLoaded', function(PlayerData)
Framework.SetPlayerData(PlayerData)
pcall(Framework.OnPlayerLoaded)
end)
RegisterNetEvent(Bridge.FrameworkPrefix .. ':onPlayerLogout', function()
Framework.Player = {}
pcall(Framework.OnPlayerUnload)
end)
RegisterNetEvent(Bridge.FrameworkPrefix .. ':setJob', function(Job)
Framework.Player.Job = {}
Framework.Player.Job.Name = Job.name
Framework.Player.Job.Label = Job.label
Framework.Player.Job.Duty = Job.onDuty
Framework.Player.Job.Boss = Job.grade_name == 'boss' and true or false
Framework.Player.Job.Grade = {}
Framework.Player.Job.Grade.Name = Job.grade_label
Framework.Player.Job.Grade.Level = Job.grade
pcall(Framework.OnJobUpdate)
end)
AddStateBagChangeHandler("duty", ('player:%s'):format(GetPlayerServerId(PlayerId())), function(_, _, val)
local PlayerData = ESX.GetPlayerData()
local Job = PlayerData.job
Job.onDuty = val
Framework.Player.Job.Duty = val
ESX.SetPlayerData('job', Job)
pcall(Framework.OnJobDutyUpdate)
end)
AddStateBagChangeHandler("gang", ('player:%s'):format(GetPlayerServerId(PlayerId())), function(_, _, val)
Framework.Player.Gang = {}
Framework.Player.Gang.Name = val.name
Framework.Player.Gang.Label = val.label
Framework.Player.Gang.Boss = val.grade_name == 'boss' and true or false
Framework.Player.Gang.Grade = {}
Framework.Player.Gang.Grade.Name = val.grade_label
Framework.Player.Gang.Grade.Level = val.grade
ESX.SetPlayerData('gang', val)
pcall(Framework.OnGangUpdate)
end)
AddStateBagChangeHandler("metadata", ('player:%s'):format(GetPlayerServerId(PlayerId())), function(_, _, val)
Framework.Player.Metadata = val
ESX.SetPlayerData('metadata', val)
end)
local isDead = false
AddEventHandler(Bridge.FrameworkPrefix .. ':onPlayerDeath', function()
isDead = true
end)
AddEventHandler(Bridge.FrameworkPrefix .. ':onPlayerSpawn', function()
isDead = false
end)
RegisterNetEvent(Bridge.FrameworkPrefix .. ':setAccountMoney', function(account)
if not Framework.Player.Accounts then Framework.Player.Accounts = {} end
if account.name == 'money' then
Framework.Player.Accounts['cash'] = account.money
else
Framework.Player.Accounts[account.name] = account.money
end
end)
Framework.SetPlayerData = function(PlayerData)
Framework.Player.Identifier = PlayerData.identifier
Framework.Player.Name = GetPlayerName(PlayerId())
Framework.Player.Firstname = PlayerData.firstName
Framework.Player.Lastname = PlayerData.lastName
Framework.Player.DateOfBirth = PlayerData.dateofbirth
Framework.Player.Gender = PlayerData.sex
Framework.Player.Job = Framework.Player.Job or {}
if PlayerData.job then
Framework.Player.Job.Name = PlayerData.job.name
Framework.Player.Job.Label = PlayerData.job.label
Framework.Player.Job.Duty = PlayerData.job.onDuty
Framework.Player.Job.Boss = PlayerData.job.grade_name == 'boss' and true or false
Framework.Player.Job.Grade = Framework.Player.Job.Grade or {}
Framework.Player.Job.Grade.Name = PlayerData.job.grade_label
Framework.Player.Job.Grade.Level = PlayerData.job.grade
end
Framework.Player.Gang = Framework.Player.Gang or {}
if PlayerData.gang then
Framework.Player.Gang.Name = PlayerData.gang.name
Framework.Player.Gang.Label = PlayerData.gang.label
Framework.Player.Gang.Boss = PlayerData.gang.grade_name == 'boss' and true or false
Framework.Player.Gang.Grade = Framework.Player.Gang.Grade or {}
Framework.Player.Gang.Grade.Name = PlayerData.gang.grade_label
Framework.Player.Gang.Grade.Level = PlayerData.gang.grade
end
if PlayerData.accounts then
Framework.Player.Accounts = {}
for i = 1, #PlayerData.accounts do
if PlayerData.accounts[i].name == 'money' then
Framework.Player.Accounts['cash'] = PlayerData.accounts[i].money
else
Framework.Player.Accounts[PlayerData.accounts[i].name] = PlayerData.accounts[i].money
end
end
end
if PlayerData.metadata then
Framework.Player.Metadata = PlayerData.metadata or {}
end
end
Framework.OnReady(ESX, function()
local PlayerData = ESX.GetPlayerData()
Framework.SetPlayerData(PlayerData)
end)
Framework.CreateCallback = function(name, cb)
local success = pcall(ESX.RegisterClientCallback, name, cb)
if not success then RegisterClientCallback(name, cb) end
end
Framework.TriggerCallback = function(name, cb, ...)
ESX.TriggerServerCallback(name, cb, ...)
end
Framework.SpawnVehicle = function(cb, model, coords, warp)
local ped = PlayerPedId()
if not coords then coords = GetEntityCoords(ped) end
local heading = coords.w and coords.w or 0.0
ESX.Game.SpawnVehicle(model, vector3(coords.x, coords.y, coords.z), heading, function(vehicle)
if warp then
while GetVehiclePedIsIn(ped, false) ~= vehicle do
Wait(0)
TaskWarpPedIntoVehicle(ped, vehicle, -1)
end
end
cb(NetworkGetNetworkIdFromEntity(vehicle))
end)
end
Framework.ToggleDuty = function()
local bool = not Framework.Player.Job.Duty
LocalPlayer.state:set('duty', bool, true)
end
Framework.Notify = function(message, type, length)
ESX.ShowNotification(message, type, length)
end
Framework.IsPlayerDead = function()
return isDead
end
Framework.CreateCallback(Bridge.Resource .. ':bridge:IsPlayerDead', function(cb)
cb(Framework.IsPlayerDead())
end)
Framework.GetStatus = function(key)
local p = promise.new()
TriggerEvent('esx_status:getStatus', key, function(status)
p:resolve(Framework.Round(status.val / 10000, 0))
end)
return Citizen.Await(p)
end
Framework.OpenSociety = function(name, type)
if type == 'job' and (Framework.Player.Job.Name ~= name or not Framework.Player.Job.Boss) then return end
if type == 'gang' and (Framework.Player.Gang.Name ~= name or not Framework.Player.Gang.Boss) then return end
if type ~= 'job' and type ~= 'gang' then error('Society Type Must Be Job Or Gang', 0) return end
TriggerEvent('esx_society:openBossMenu', name)
end