Underscore.js
Você tem acesso à biblioteca Underscore.js (através do objeto global_) para facilitar o seu trabalho. O Underscore fornece funções auxiliares para tarefas como_.each(para iterar através de uma matriz de objetos). Consulte a documentação do Underscore para obter mais informações.
Registo
log(mensagem)
É possível utilizar esta função para registar a saída na consola Mod (API) na página Editor de Scripts. Útil para depurar os seus scripts e compreender melhor o que está a ocorrer dentro da área restrita do Mod (API).
on("alteração:gráfico", função(obj) {
log("Detectada alteração para o ID do objeto: " + obj.id);
});
Encomenda de objetos
toFront(obj)etoBack(obj)
Estas duas funções irão mover um objeto na mesa para a frente (ou para trás) da camada em que se encontra atualmente. Observe que é necessário passar um objeto real, como aquele recebido em uma chamada de retorno de evento ou chamandogetObjoufindObjs.
Números aleatórios
número aleatório inteiro (máximo)
Utilize esta função para os dados! Esta função representa Modulo Bias , que garante que os números aleatórios resultantes também sejam distribuídos uniformemente entre 1 e MAX.
Retorna um número inteiro aleatório, sendo o valor mais baixo 1 e o valor mais altomax. Esta é a mesma funcionalidade que o Roll20 utiliza para realizar os seus lançamentos de dados, e estes números foram estatística e rigorosamente comprovados como aleatórios.
Math.random()
Pode utilizar Math.random() normalmente nos seus scripts Mod (API), tendo a certeza de que os resultados serão aleatórios, pois o Math.random() "padrão" em Javascript foi substituído pelo PRNG criptograficamente seguro que alimenta o Roll20. Portanto, os scripts existentes que utilizam Math.random() podem ser utilizados com a certeza de que os resultados são realmente tão próximos do aleatório quanto possível num computador.
Evite utilizar Math.random() se desejar uma distribuição uniforme de números num intervalo. Embora Math.random() forneça um número aleatório tão bom quanto o Roll20 pode gerar, a matemática necessária para transformar esse número aleatório num intervalo com distribuição uniforme (como um lançamento de dados) não é tão simples quanto a multiplicação com um módulo ou uma chamada floor. UtilizerandomInteger(max)para esses casos.
O jogador é o GM
éGM(identificador do jogador)
A função Player Is GM retorna uma resposta booleana indicando se um jogador no jogo é um GM ou não. A função retornará sempre a resposta correta dependendo do momento atual, portanto, mesmo que um GM opte por voltar a participar como jogador ou um jogador seja promovido a GM no meio do jogo, a função playerIsGM() responderá adequadamente, sem necessidade de limpar o cache ou reiniciar a sandbox do Mod (API).
Personagem
definirTokenPadrãoParaCaractere( caractere, token )
Define o token padrão para o objeto Character fornecido com os detalhes do objeto Token fornecido. Ambos os objetos devem já existir. Isso substituirá qualquer token padrão atualmente associado ao personagem.
Efeitos Especiais (FX)
spawnFx(x, y, tipo, pageid)
Gera um efeito breve na localização x,y do tipo. Se omitir o pageid ou passar 'undefined', a página em que os jogadores se encontram atualmente ('playerpageid' no objeto Campaign) será utilizada por predefinição.
Para efeitos integrados, o tipo deve ser uma string e ser um dos seguintes:cor do feixe,cor da bomba,cor do sopro,cor da bolha,corda queimadura,cor da explosão,cor do brilho,cor do míssil,cor da nova,cor do respingo.
Onde "cor" acima é uma das seguintes:ácido,sangue,encanto,morte,fogo,gelo,sagrado,magia,lodo,fumo,água
Para efeitos personalizados, o tipo deve ser o ID do objeto custfx para o efeito personalizado.
spawnFxBetweenPoints(ponto1, ponto2, tipo, pageid)
Funciona da mesma forma que spawnFx, mas em vez de um único ponto, são fornecidos dois pontos, no formato {x: 100, y: 100}. Por exemplo: spawnFxBetweenPoints({x: 100, y: 100}, {x: 400, y: 400}, "beam-acid"); O efeito irá "viajar" entre os dois pontos para efeitos que suportam isso (os mesmos que permitem agência no lado do cliente).
Os seguintes tipos de efeito devem sempre utilizar spawnFxBetweenPoints em vez de spawnFx:cor do feixe,cor do sopro,cor do respingo.
spawnFxWithDefinition(x, y, definiçãoJSON, pageid)
Gera um efeito personalizado ad hoc utilizando o JSON para alguma definição de efeito na localização x,y. Se omitir o pageid ou passar 'undefined', a página em que os jogadores se encontram atualmente ('playerpageid' no objeto Campaign) será utilizada por padrão.
definição JSON é um objeto javascript que segue a especificação JSON para Custom FX.
Listas de reprodução da Jukebox
reproduzirJukeboxPlaylist(playlistid)
A função de reprodução recebe o ID da pasta (obtido na propriedade "_jukeboxfolder" no objeto Campanha) da lista de reprodução e inicia a reprodução dessa lista para todos os participantes do jogo.
interromper a reprodução da lista de reprodução da jukebox
A função «stop» não requer argumentos e interromperá qualquer lista de reprodução que esteja a ser reproduzida no momento.
Diversos
enviarPing(esquerda, topo, id da página, (opcional) id do jogador, (opcional) mover tudo, (opcional) visível para)
Envia um "ping" para a mesa (o mesmo que se um jogador mantivesse o botão do mouse pressionado). É necessário especificar as coordenadas superior/esquerda e o ID da página a ser pingada. Opcionalmente, pode especificar o ID de um jogador que realizou o ping — se não o fizer, será assumido "api" e o ping será amarelo.
Pode passar "true" para a opção moveAll se desejar mover as vistas dos jogadores para esse local também.
É possível definir os IDs dos jogadores em visibleTo para os jogadores que podem ver ou ser movidos pelo ping. Isto é apresentado como um único ID de jogador, uma matriz ou uma sequência de caracteres delimitada por vírgulas.
on("chat:message", function(msg) {
// Digite "!pingtest" no chat para executar o teste
if(msg.type == "api" && msg.content.indexOf("!pingtest") !== -1) {
// Para obter um jogador específico, utilize findObjs({_type: "player"})[i].id em vez de null para o terceiro parâmetro
players = findObjs({_type: "player"});
player1 = players[1].id;
player2 = players[2].id;
// Crie uma matriz com todos os IDs dos jogadores
var allPlayerIDs = players.map(function(player) {
return player['id'];
});
// Envie um ping para todos nesta página para o mesmo local.
sendPing(300, 300, Campaign().get('playerpageid'), null, true);
setTimeout(function() {
// Enviar ping para todos nesta página para o mesmo local
sendPing(1500, 500, Campaign().get('playerpageid'), msg.playerid, true, "");
}, 1000);
setTimeout(function() {
// Envie um ping apenas para o jogador especificado para este local
sendPing(1200, 500, Campaign().get('playerpageid'), null, true, player1);
}, 2000);
setTimeout(function() {
// Envie um ping para uma matriz de IDs de jogadores (jogador 1 e 2) para este local
sendPing(900, 100, Campaign().get('playerpageid'), player2, true, [player1, player2]);
}, 3000);
setTimeout(function() {
// Envie um ping para uma lista separada por vírgulas fornecida como uma string para este local
sendPing(300, 300, Campaign().get('playerpageid'), player1, true, allPlayerIDs.join());
}, 4000);
}
})
Uma observação sobre distâncias e grades no Roll20
No Roll20, uma "unidade" corresponde sempre a 70 pixels no ecrã. A "unidade" é o bloco de construção sobre o qual a distância e a grelha são construídas. Por padrão:
- 1 unidade = 5 pés
- 1 unidade = 1 quadrado da grelha
- Portanto, 5 pés = 1 unidade = 1 quadrado
No entanto, o GM pode alterar tanto o tamanho da grelha como a escala da distância. 1 unidade equivale sempre a 70 pixels, mas o GM pode alterar as configurações para que 1 unidade passe a ser 10 pés (ou seja, 70 pixels = 10 pés), ou para que cada espaço da grelha seja 2 unidades (ou seja, cada espaço da grelha passa a ser 140 pixels).