Andrade Systems
Em desenvolvimentoFiveM

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