Blueprint kind torch: girar o mecanismo e controlar a chama
Tocha composta com ações independentes de estado e chama nos dois ramos de alternância.
Objetivo
Gire uma tocha normal em 90 graus e acenda sua chama; na próxima interação, retorne e apague. Mecanismo e chama são propriedades separadas. A receita altera ambas explicitamente, com duas ações por ramo.
Estes JSONs descrevem o subdocumento Blueprint v2 armazenado pelo host. São fixtures para desenvolvimento: não são módulo instalável, projeto completo do Builder ou arquivo de campanha. Recrie os nós no editor ou use os arquivos em testes isolados de contribuição ao host. Este guia não presume um botão de importar JSON no editor de Objetos Inteligentes.
Baixe o pacote completo de exemplos ou o validador. Todos os exemplos usam dados sintéticos originais. O avaliador Python interno serve ao desenvolvimento do código-fonte; módulos de navegador devem usar o SDK público.
Monte no editor
Posicione uma imagem Object e selecione Panels → Selection → Behavior → Torch. O Builder cria a luz nativa vinculada. Use Torch components para configurar partículas ou shader opcionais.
Defina Mechanism como Normal e Flame lit como false. Mantenha as aparências dos estados em Native appearance.
Abra Edit behavior. Conecte On interaction → Check state: Normal.
Conecte True → Change state: Turned → Set flame: enabled. Conecte False → Change state: Normal → Set flame: disabled.
Confira a configuração enabled da própria luz vinculada. Set flame restaura somente componentes configurados como habilitados; não substitui brilho, raio ou outros ajustes nativos.
JSON completo
{
"version": 2,
"kind": "torch",
"states": {
"off": {
"appearance": "inherit"
},
"on": {
"appearance": "inherit"
}
},
"graphs": {
"interact": {
"nodes": [
{
"id": "start",
"type": "event",
"x": 40,
"y": 80,
"event": "interact"
},
{
"id": "isNormal",
"type": "condition",
"x": 300,
"y": 80,
"state": "off"
},
{
"id": "turn",
"type": "state",
"x": 560,
"y": 40,
"targetState": "on"
},
{
"id": "lightFlame",
"type": "flame",
"x": 820,
"y": 40,
"enabled": true
},
{
"id": "return",
"type": "state",
"x": 560,
"y": 220,
"targetState": "off"
},
{
"id": "extinguish",
"type": "flame",
"x": 820,
"y": 220,
"enabled": false
}
],
"edges": [
{
"from": "start",
"to": "isNormal",
"output": "next",
"kind": "execution"
},
{
"from": "isNormal",
"to": "turn",
"output": "true",
"kind": "execution"
},
{
"from": "turn",
"to": "lightFlame",
"output": "next",
"kind": "execution"
},
{
"from": "isNormal",
"to": "return",
"output": "false",
"kind": "execution"
},
{
"from": "return",
"to": "extinguish",
"output": "next",
"kind": "execution"
}
]
}
}
}Resultado esperado
| Mecanismo inicial | Ordem das ações | Resultado esperado |
|---|---|---|
| off (Normal) | state on, flame true | Turned; componentes habilitados emitem |
| on (Turned) | state off, flame false | Normal; componentes deixam de emitir |
Turned soma 90 graus à orientação definida no projeto. Off/on representam o mecanismo, não a chama.
Execute a fixture em uma instalação de desenvolvimento
Extraia o pacote de exemplos em data/blueprint-examples, dentro de um checkout descartável da versão documentada. Na raiz do checkout, execute:
uv run --locked python data/blueprint-examples/check-examples.py --host .O verificador configura banco em memória, bloqueia consultas ao banco e chama as funções reais clean_blueprint e evaluate_graph. Ele valida os quatro tipos de objeto, os dois tipos de conexão e os 44 tipos de nó, incluindo requestRoll e setQuestStatus. Confere as duas visibilidades de rolagem, os seis status de missão e a continuação da execução sem rolar dados nem alterar diários. Isso verifica o formato e as ações previstas. Use também Test behavior para conferir alvos reais, autorização e a cadeia completa no servidor.
Para inspecionar esta receita no shell Django de desenvolvimento, após extrair os arquivos:
uv run --locked python manage.py shell --no-importsimport json
from pathlib import Path
from gravewright.maps.blueprints import clean_blueprint, evaluate_graph
raw = json.loads(Path("data/blueprint-examples/torch-turn-flame.json").read_text(encoding="utf-8"))
blueprint = clean_blueprint(raw, asset_ids=set(), light_ids=set(), track_ids=set())
result = evaluate_graph(blueprint, "interact", "off")
print(result["trace"])
print(result["actions"])
assert [(a["type"], a.get("targetState", a.get("enabled"))) for a in result["actions"]] == [("state", "on"), ("flame", True)]Teste como GM e jogador
Use Simulate para inspecionar um evento local. Depois use Test behavior para ensaiar pelo servidor; as alterações desse ensaio são revertidas. Gere ou atualize a cena como GM e teste uma cena sintética com GM e jogador autorizado. Confira que streamer não consegue gravar. Ao editar novamente o projeto, use Update scene antes de esperar mudanças no comportamento da mesa.
Como GM, confira que imagem, luz vinculada e efeitos opcionais se movem juntos quando o mecanismo gira. Confira que a luz apaga na segunda interação. Como jogador autorizado, dê duplo clique na tocha pública em Game e verifique o mesmo resultado visual, sem expor grafo ou vínculos privados. Desabilite um componente individualmente: acender a chama não deve reativar a configuração própria desse componente.
Erros comuns
“Mudar o estado não acendeu a chama”: estado e chama são independentes; conecte Set flame.
“Set flame não fez nada em uma porta”: Self precisa ser tocha, ou Target precisa referenciar uma tocha composta. Luz é recurso, não blueprint kind light.
“A luz não aparece, mesmo com chama true”: confira habilitação do componente, aparência oculta e iluminação dinâmica. Simulate só relata ações; confira a luz real com Test behavior e teste na mesa.
Como usar a IA para adaptar este exemplo
Estenda torch-turn-flame.json para o Gravewright 0.3.1: o primeiro ramo também deve abrir uma porta escolhida, após girar e acender. Preserve a separação entre off/on da tocha e chama. Confira reference com saída door → entrada target de state e preserve as regras de trava para jogador. Entregue JSON v2 completo com UUID sintético identificado, passos para vincular o alvo no editor e testes GM/jogador, incluindo alvo ausente e luz desabilitada. Não invente blueprint kind light.Todos os kinds de Blueprint · Conexões execution/data · Exemplos dos 44 tipos de nó