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 |