forked from Simnation/Main
204 lines
No EOL
7.3 KiB
Lua
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 |