Creating a New Framework

Guide for adding support for unsupported frameworks.

Step 1: Create Folder Structure

src/framework/
└── my-framework/
    ├── client.lua
    └── server.lua

Step 2: Implement server.lua

if Config.Framework ~= "my-framework" then return end
if GetResourceState("my-framework-core") ~= "started" then return end

local MyFramework = exports['my-framework-core']:GetObject()

function GetIdentifier(playerId)
    local player = MyFramework:GetPlayer(playerId)
    return player and player.uniqueId or false
end

function IsCharacterLoaded(playerId)
    return MyFramework:GetPlayer(playerId) ~= nil
end

function GetPlayerJob(playerId)
    local player = MyFramework:GetPlayer(playerId)
    if player and player.job then
        return player.job.name, player.job.level or 0
    end
    return nil, 0
end

function GetPlayerData(source)
    local player = MyFramework:GetPlayer(source)
    if not player then return nil end
    return {
        name = player.name or '',
        firstname = player.firstName or '',
        lastname = player.lastName or '',
        citizenid = player.uniqueId or '',
        job = player.job and player.job.name or '',
        job_label = player.job and player.job.label or '',
        gang = '',
    }
end

function GetMoney(source)
    local player = MyFramework:GetPlayer(source)
    return player and player:GetCash() or 0
end

function GetBankMoney(source)
    local player = MyFramework:GetPlayer(source)
    return player and player:GetBank() or 0
end

function CanAfford(source, amount)
    return (GetMoney(source) + GetBankMoney(source)) >= amount
end

function RemoveMoney(source, amount)
    if amount <= 0 then return false end
    local player = MyFramework:GetPlayer(source)
    if not player then return false end
    return player:RemoveMoney(amount)
end

function AddMoney(source, amount, accountType)
    if amount <= 0 then return false end
    local player = MyFramework:GetPlayer(source)
    if not player then return false end
    if accountType == 'bank' then
        return player:AddBank(amount)
    end
    return player:AddCash(amount)
end

function Notify(source, message, type, title)
    TriggerClientEvent('my-framework:notify', source, message, type)
end

RegisterNetEvent('my-framework:playerLoaded', function()
    local src = source
    TriggerEvent('skeexs-inventory:playerReady', src)
end)

RegisterNetEvent('my-framework:playerUnloaded', function()
    local src = source
    TriggerEvent('skeexs-inventory:playerUnload', src)
end)

Step 3: Implement client.lua


Step 4: Activate in config.lua


Required Events

[!IMPORTANT] The inventory system relies on two internal events to function properly. Your framework bridge must trigger these events.

playerReady

Triggered when a character is fully loaded and ready.

playerUnload

Triggered when a character logs out or switches character.

Last updated