triad-world
Interação com o mundo · Lua 5.4
O dono de um registro nunca vem do chamador — quem registrou é decidido pelo motor.
- Lua
- 1.498 linhas
- Superfície pública
- 32 exports
- Ownership
- do motor
nunca do argumento do chamador
Fonte verificada no repositório interno em 08/09/2026
O que faz
Em uso
Este resource é o motor de interação: outros sistemas registram o que pode ser feito em cada alvo do mundo, e ele decide como isso aparece. O consumidor descreve o QUE a ação é — nome, rótulo, ícone, grupo, osso do alvo; COMO ela é desenhada é do motor.
Sem essa fronteira, cada organização do servidor teria um desenho diferente para a mesma coisa: um para a polícia, outro para a mecânica, um terceiro para o script comprado.
Evidência
Como o sistema aparece
Capturas da interface real, renderizada com payload de demonstração derivado dos contratos do resource — organizações, cargos, pessoas e identificadores são sintéticos. Onde não existe interface, entra visualização técnica, rotulada como tal.
Visualização técnica Ownership e reinício: as duas propriedades que fazem a limpeza automática não mentir.
Por dentro da engenharia
Decisões de implementação
Um bloco por decisão de implementação. Abra o que interessa.
Ownership resolvido pela plataforma
Problema
Se um resource pudesse registrar dizendo pertencer a outro, o encerramento do outro removeria registro que não era dele — e o encerramento do dono verdadeiro deixaria registro órfão. A limpeza automática passaria a mentir.
Solução
Quem está chamando é resolvido pela própria plataforma, e as operações de remover, atualizar e mover só aceitam identificador do próprio chamador.
Por que foi feito assim
Ownership aqui é ciclo de vida, não autorização. Mas se não for íntegro, a limpeza que deveria evitar vazamento passa a causá-lo.
O mundo pode reiniciar debaixo do consumidor
Problema
Quando este resource reinicia, o registro inteiro desaparece — e os consumidores continuam vivos achando que os contratos deles seguem registrados. O resultado é um mundo sem interações, sem erro nenhum no log.
Solução
Ao subir, o motor anuncia um identificador de sessão. Quem já estava rodando vê o identificador mudar e re-registra o que é seu. Nada é ressuscitado às cegas: quem registra é o dono do dado.
Por que foi feito assim
Um provider que reinicia e não avisa transforma cada atualização de resource num incidente silencioso. Avisar é mais barato que tentar preservar estado alheio.
API retorna projeções
Problema
Devolver a entrada viva do registro deixa o consumidor mutar o índice por referência e depender de campo interno que pode mudar na próxima versão.
Solução
As consultas devolvem projeção com os campos semânticos, e só eles. Não há cor, fonte, espaçamento, tamanho, tempo nem layout na resposta.
Por que foi feito assim
A fronteira entre o que o consumidor descreve e o que o motor desenha é o que mantém a interação do servidor inteiro coerente.
Stack
O que foi usado
Runtime
- Lua 5.4
- CfxLua
Cliente
- Registro de alvos
- Varredura por proximidade
- Spawn de desenvolvimento