Pular para o conteúdo

Partes privadas

Notas do mestre, o segredo do personagem, a ficha verdadeira do NPC disfarçado: algumas partes do documento não podem chegar aos jogadores. Uma parte privada é guardada na mesa, mas o servidor do RPG Desk só a entrega a quem pode ver. Para os outros, ela não existe: nem na tela, nem nos dados.

Declare as partes no manifesto, na ficha:

"sheets": [
{
"type": "com.seunome.sistema.ficha",
"title": "Personagem",
"private": { "mestre": "gm", "segredos": "owner" }
}
]
Valor Quem recebe a parte
"gm" só os mestres
"owner" o dono da ficha e os mestres

O nome é o caminho da parte: "mestre" vale para mestre.notas, mestre.tesouro e tudo o mais dentro do grupo mestre. Quem não recebe a parte também não escreve nela.

Na página, mostre a parte só para quem a recebe, com data-role:

<nav data-tabs>
<button data-tab="principal">Principal</button>
<button data-tab="mestre" data-role="gm">Mestre</button>
</nav>
<section data-tab-panel="mestre">
<textarea data-field="mestre.notas" placeholder="Só os mestres veem isto"></textarea>
</section>

O data-role sozinho só esconde o botão; quem garante o segredo é o private do manifesto. Teste no modo de teste, trocando o Papel para Outro jogador: a aba some, e RPGDesk.doc.get('mestre') dá undefined.

As tabelas da sala não têm dono, e o private do manifesto não vale nelas (o verificador avisa). Numa tabela, o mestre esconde partes pelo código, na hora:

await doc.restrict(['npcs', '#' + id], 'gm'); // este NPC passa a ser só dos mestres
await doc.restrict(['npcs', '#' + id], null); // volta a ser de todos

doc.restrict(caminho, 'gm' | 'owner' | null) só funciona para os mestres. É o que a tabela de NPCs dos exemplos faz com a caixa Oculto dos jogadores: veja Tabelas da sala.