Integrações
Fora do vRP, o manifesto também muda#
Trocar só a bridge não basta. O fxmanifest.lua carrega arquivos da vRP
antes de qualquer código nosso rodar, e o resource recusa subir sem ela. No
sf_crafting são estas linhas:
dependencies { "vrp", "oxmysql", "PolyZone" }"@vrp/config/Item.lua","@vrp/config/Vehicle.lua","@vrp/config/Global.lua"e"@vrp/config/Drops.lua"emshared_scripts"@vrp/config/Native.lua"e"@vrp/lib/Utils.lua"emclient_scripts"@vrp/lib/Utils.lua"emserver_scripts
Troque "vrp" em dependencies pela sua framework (ou remova a linha) e
substitua os includes @vrp/... pelos equivalentes dela. Só depois disso a
adaptação da bridge tem efeito.
bridge/server.lua#
| Função | O que precisa devolver |
|---|---|
Passport(source) | id único do personagem |
Source(passport) | source online, ou nil |
HasPermission(passport, perm) | bool |
HasGroup(passport, grupo) | bool — bônus de farm, /craftconfig, /sfdiagnostico e aviso à polícia |
Grupos(passport) | { [grupo] = nível } — é o que decide de qual facção é o cofre do jogador |
PlayerName(passport) | nome de exibição, para o ranking e as encomendas |
MembrosOnline(grupo) | sources online do grupo — quem recebe a denúncia da rota |
ItemAmount(passport, item) | quantidade, chave real |
RemoveItem / GiveItem / CanCarry | movimentação de item e limite de mochila |
ItemName(item) | nome de exibição |
ItemExiste(item) | bool — só o /sfdiagnostico usa |
PermissaoExiste(perm) | bool ou nil ("não sei") — só o /sfdiagnostico usa |
Pay(passport, valor) | cobra atomicamente (melhorias, encomendas) |
Reward(passport, valor) | paga o jogador (rota, encomendas) |
InIsolatedWorld(source) | está fora da cidade? |
PlayerCoords(source) | vector3 |
BindInterface(tabela) | publica as funções para o client |
Notify / NotifySource | notificação na tela |
Grupos devolvendo tabela vazia não é erro: significa "sem facção", e a
bancada recusa o cofre da organização em vez de escolher um por conta.
Reward é o par de Pay e existe em separado porque pagar e cobrar caem em
contas diferentes na maioria das bases.
bridge/client.lua#
| Função | O que faz |
|---|---|
Bridge.Server.* | canal client → server (Tunnel no vRP) |
Notify / Progress | notificação e barra de progresso |
AddZone / RemoveZone | zona de interação (target) |
DrawInteractPrompt / IsInteractPressed | prompt de "aperte E" na rota |
CreateBlip / RemoveBlip | blip da rota |
CreateAlertBlip(coord, titulo) | marca aproximada da denúncia, para a polícia |
RemoveZone precisa funcionar: é ela que apaga a zona antiga quando a
bancada muda de lugar no /craftconfig. Sem ela, o ponto antigo continua
abrindo a bancada.
Cada função tem, no próprio arquivo, o equivalente em ESX / QBCore / ox_lib comentado logo acima.
Dispatch próprio#
Se a sua base tem um sistema de ocorrências, preencha
Config.Rotas.Policia.Evento com o evento dele. Ele recebe
(titulo, mensagem, x, y, z) e substitui o notify + blip padrão. A coordenada já
chega com ruído — não aumente a precisão: a imprecisão é o que mantém a rota
jogável.
Exports e eventos#
O SF Crafting não expõe exports públicos. Os eventos sf_crafting:* são internos
da fila, armazém, rotas, encomendas e NUI, e não devem ser disparados
externamente.