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ção | Retorno | Uso |
|---|---|---|
getPlayerJob(source) | string | nil | Job atual de um jogador (para gráfico job history) |
countLegalPlayers() | number | Quantos players online estão em qualquer permissão legal |
countIllegalPlayers() | number | Quantos 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) | array | Todos os membros de uma permissão (passport, name, level) |
getPlayersMoney() | array | Lista de jogadores ativos com cash + bank |
getOnlineStaff() | array | Staff 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
| Sintoma | Provável causa | Adapter |
|---|---|---|
| Players online aparecem, mas Legal/Ilegal = 0 | Adapter usa identifier errado | Trocar entre creative-enchanted ↔ creative-enchanted-license |
| Tudo zerado e sem erros no console | Adapter 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 base | Adapter |
|---|---|
| Lotus / BaseBrasil | vrpex |
| Nexus | nexus-base |
| Horizonte / Creative original | creative-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 AdapterDepois aponte Config.Adapter = 'meu-framework' em config.lua.