O Roll20 Mod Script Sandbox executa uma máquina virtual do lado do servidor para cada campanha. Os scripts não são executados nos computadores dos jogadores. O ambiente isolado impede que os scripts de uma campanha afetem outra campanha e interrompe um script que, de outra forma, continuaria a ser executado indefinidamente.
O Mod Script Sandbox v1.0 e v1.5 utilizam este mesmo modelo. A versão 1.5 adiciona o acesso à folha do Beacon (getComputed, setComputed, performAction e métodos de caracteres relacionados), bem como outras funções. O facto de um jogo utilizar uma determinada «sandbox» não está relacionado com o facto de o jogo de mesa ser o «Jumpgate».
Como funciona
Se estiver curioso quanto aos detalhes técnicos do funcionamento da sandbox, eis um breve diagrama:
Scripts escritos pelos utilizadores ===> Servidor de scripts de modificação ===> Campaign Sandbox <===> Servidor de sincronização em tempo real
O Mod Script Server monitoriza a atividade na sua campanha. Quando alguém está no jogo, é iniciada uma sandbox e são carregados os scripts de modificação desse jogo. Quando o jogo estiver vazio, a área de testes pára. Ao guardar e reiniciar a sandbox, os scripts são executados novamente, o evento «ready» é disparado novamente e os temporizadores «setTimeout» pendentes são cancelados. A sandbox envia e recebe dados através do servidor de sincronização em tempo real, sendo essa a forma como responde aos eventos e altera o jogo.
Todos os scripts de um jogo partilham um único âmbito global. Uma variável ou função definida no início de um script é visível para os restantes, e dois scripts que utilizem o mesmo nome irão substituir-se mutuamente. Envolva um script numa IIFE quando os seus nomes devam permanecer privados. O estado é também partilhado entre os scripts e é mantido entre sessões. Campaign().nodeVersion corresponde à versão do Node.js. Não há require, nem DOM, nem console.log — utilize log(). Um erro não detetado pode interromper a sandbox para todos os scripts do jogo; consulte «Scripts de modificação: Depuração».
Restrições do Javascript normal
Embora os scripts do Roll20 sejam escritos em JavaScript, existem algumas restrições que deve ter em conta se estiver habituado a programar em JavaScript para sítios Web. Os scripts do Roll20 são executados numa área restrita separada do site Roll20. Isso proporciona uma camada adicional de separação e segurança para o nosso sistema e para os seus jogadores. Esta área restrita significa que:
- Não é possível realizar solicitações HTTP (AJAX).
- Não é possível carregar scripts ou bibliotecas externas (por exemplo, o jQuery). O Underscore.js já está disponível como a variável global
_. Consulte o site underscorejs.org. - O ambiente é o JavaScript, mas não se trata de um ambiente num navegador, pelo que não existe DOM, elementos da página, CSS,
documento,janela, etc.