Denver Studio - Docs

Adapters

Como o FiveTrack lê dados do seu framework vRP

Adapters

Cada base de vRP tem peculiaridades (estrutura de tabelas, como armazena permissões, evento de conexão). O FiveTrack abstrai isso com Adapters — arquivos em server/adapters/<nome>.lua que implementam uma interface padrão.

Você seleciona qual adapter usar em Config.Adapter.

Interface do Adapter

Todo adapter define a tabela global Adapter com:

FunçãoRetornoUso
getPlayerJob(source)string | nilJob atual de um jogador (para gráfico job history)
countLegalPlayers()numberQuantos players online estão em qualquer permissão legal
countIllegalPlayers()numberQuantos players online estão em qualquer permissão ilegal
getGroupsLegalSnapshot(){ [displayName]: number }Contagem por organização legal
getGroupsIllegalSnapshot(){ [displayName]: number }Contagem por organização ilegal
getOrgMembers(permission)arrayTodos os membros de uma permissão (passport, name, level)
getPlayersMoney()arrayLista de jogadores ativos com cash + bank
getOnlineStaff()arrayStaff online (passport, name, role)

Também escutam os eventos do framework e disparam exports.fivetrack:registerEntry() / registerExit().


Adapters built-in


Como escolher o adapter certo

SintomaProvável causaAdapter
Players online aparecem, mas Legal/Ilegal = 0Adapter usa identifier erradoTrocar entre creative-enchantedcreative-enchanted-license
Tudo zerado e sem erros no consoleAdapter padrão (standalone)Trocar para o adapter do seu framework
Erros tipo attempt to call a nil value (method 'getUserId')Adapter vRP-EX em base Nexus (ou vice-versa)Verificar vrp/modules/vrp.lua exports
Sua baseAdapter
Lotus / BaseBrasilvrpex
Nexusnexus-base
Horizonte / Creative originalcreative-enchanted
Neon (creative-enchanted com BaseMode=license)creative-enchanted-license
Outras (ESX, QBCore, custom)standalone + adapter próprio

Criando um adapter customizado

Para um framework não suportado, crie server/adapters/meu-framework.lua baseado no standalone.lua e implemente a interface. Estrutura mínima:

Adapter = {}

-- escutar eventos de conexão do seu framework
AddEventHandler('esx:playerLoaded', function(playerId, xPlayer)
    exports.fivetrack:registerEntry()
end)

AddEventHandler('playerDropped', function()
    exports.fivetrack:registerExit()
end)

function Adapter.getPlayerJob(source)
    local xPlayer = ESX.GetPlayerFromId(source)
    return xPlayer and xPlayer.job and xPlayer.job.name or nil
end

function Adapter.countLegalPlayers()
    local count = 0
    for _, src in ipairs(GetPlayers()) do
        local xPlayer = ESX.GetPlayerFromId(tonumber(src))
        if xPlayer and Config.LegalOrganizations[xPlayer.job.name] then
            count = count + 1
        end
    end
    return count
end

-- ... etc

return Adapter

Depois aponte Config.Adapter = 'meu-framework' em config.lua.