Tabelas da sala
Uma tabela da sala é uma página como a ficha, com duas diferenças:
- há uma por mesa, e ela fica aberta para todos, como uma aba;
- só os mestres escrevem; os jogadores veem.
Servem para o que é da mesa, não de um personagem: os NPCs da campanha, um calendário, o mapa de viagem, a reputação das facções.
Declarar
Seção intitulada “Declarar”No manifesto, troque "sheets" por "tables":
"tables": [{ "type": "com.seunome.sistema.npcs", "title": "NPCs" }]Um arquivo .html único traz uma ficha ou uma tabela. Um pacote pode
trazer as duas coisas, com um HTML para cada.
Na mesa
Seção intitulada “Na mesa”- Instale o plugin em Configurações da mesa → Plugins.
- No grupo Tabelas de…, embaixo do plugin, clique em Ativar.
- A tabela abre para todos como uma aba que não fica à vista, junto das outras tabelas (ou no último espaço usado): clique no nome dela para vê-la.
Desativar fecha a tabela para todos e guarda os dados: ativar de novo traz tudo como estava.
No código
Seção intitulada “No código”kindé'table', eitem.ownerIdénull(a tabela não tem dono).- O
privatedo manifesto não vale nas tabelas: esconda as partes comdoc.restrict(veja Partes privadas). - Os controles do mestre ficam com
data-role="gm": para os jogadores, os campos já ficam travados sozinhos, mas os botões de criar e apagar somem. - Para mexer no cartão de um jogador, diga de quem:
RPGDesk.card.setBar(0, 7, 12, { userId }), com oiddeawait RPGDesk.room.players().
Exemplo: a lista de NPCs
Seção intitulada “Exemplo: a lista de NPCs”Modo de teste: os dados ficam só neste navegador. A faixa no canto troca o papel (mestre, dono da ficha, outro jogador) e mostra o registro das rolagens.
O exemplo é uma lista em que cada NPC tem nome, PV, iniciativa, notas e um botão de rolar a iniciativa, tudo com atributos no HTML. O JavaScript faz duas coisas:
RPGDesk.connect().then(({ doc, me }) => { const npcs = doc.list('npcs'); const vazio = document.getElementById('vazio'); // "Nenhum NPC ainda." some quando a lista tem itens npcs.watch((itens) => { vazio.hidden = itens.length > 0; }, { now: true }); if (me.role !== 'gm') return; // "Oculto dos jogadores": o NPC passa a ser só dos mestres const visto = new Map(); npcs.watch((itens, { local }) => { for (const npc of itens) { const oculto = npc.oculto === true; if (visto.get(npc.id) === oculto) continue; visto.set(npc.id, oculto); if (local) doc.restrict(['npcs', '#' + npc.id], oculto ? 'gm' : null); } }, { now: true });});- Só o navegador do mestre que marcou a caixa (
local) chama orestrict: os outros mestres com a tabela aberta não repetem o pedido. - O NPC oculto some de verdade para os jogadores: o servidor nem manda.