Exportando funções entre resources
Em vez de colocar tudo em um único resource gigante, servidores bem organizados dividem o gamemode em vários resources — banco, contas, inventário, empregos — que conversam por meio de exports.
Declarando um export
No meta.xml do resource que oferece a função:
<export function="darDinheiro" type="server" />
<export function="obterSaldo" type="server" />
No script:
function darDinheiro(jogador, valor, motivo)
-- validações, atualização do saldo, log
return true
end
function obterSaldo(jogador)
return saldos[jogador] or 0
end
Funções exportadas precisam ser globais (sem
local) no script.
Chamando de outro resource
local ok = exports.rp_banco:darDinheiro(jogador, 500, "Salário de taxista")
local saldo = exports.rp_banco:obterSaldo(jogador)
Ou com a sintaxe alternativa:
exports["rp_banco"]:darDinheiro(jogador, 500, "Salário")
Tipos de export
type="server"— chamado por scripts de servidor;type="client"— chamado por scripts de cliente;type="shared"— disponível nos dois lados (cada lado executa a sua própria cópia).
Export não atravessa a rede: um script de cliente não chama um export de servidor. Para isso, use eventos.
Dependências
- Use
<include resource="rp_banco" />nometa.xmlde quem depende, para garantir que o banco inicie antes; - Trate falhas: se o resource não estiver rodando, a chamada gera erro. Verifique com
getResourceFromNameegetResourceStatequando fizer sentido.
Centralize regras críticas
Uma arquitetura modular boa tem um único lugar para cada regra:
- Todo dinheiro passa por
rp_banco(com logs); - Todos os itens passam por
rp_inventario; - Toda permissão passa por
rp_permissoes.
Isso facilita auditoria, correção de bugs e combate a exploits.
Desempenho
Chamadas de export têm um pequeno custo extra. Em loops muito frequentes, guarde o resultado em vez de chamar o export várias vezes.
Hospede seu servidor com a VittHost
No MTASA-BR da VittHost, seu gamemode modular roda com MySQL incluso, servidores no Brasil, proteção DDoS, painel Pterodactyl, downloads acelerados por nginx dedicado e teste grátis de 3 dias.