Scripts de modificação: exemplos avançados

O Manual de Referência apresenta alguns exemplos de scripts simples que o podem ajudar a dar os primeiros passos. Sinta-se à vontade para os utilizar e adaptá-los para as suas próprias campanhas. Existe também um Fórum de Scripts de Mods, onde pode debater a criação de scripts de mods e partilhar os seus scripts com a comunidade.

Gestor do Estado dos Tokens

(Contribuição de Eric Dalquist)

Este script adiciona automaticamente indicadores de estado com base nos valores das barras. O script pode ser configurado para monitorizar qualquer uma das três barras e definir qualquer um dos indicadores de estado para qualquer valor entre 0 e 1. O script permite gerir várias barras/fichas numa única instância. O exemplo abaixo monitoriza a barra 1 e define o marcador vermelho quando o valor é <= 50% e, em seguida, define o marcador morto quando o valor é <= 0.

/**
 * Define vários marcadores de token com base nos rácios cur/max das barras
 *
 * A matriz CONFIG pode conter qualquer número de objetos de configuração. Estes objetos
 * são processados por ordem.
 *
 * barId - O ID da barra cujos valores se pretende analisar [1, 2, 3]
 * barRatio - A relação entre o valor da barra e o valor máximo que aciona a ativação do marcador de estado [0 - 1]
 * status - O nome do marcador de estado a ativar ou desativar [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
 * whenLow - O estado do marcador quando o valor da barra é <a = a proporção [true, false]
 */
var CONFIG = [
  {barId: 1, barRatio: .5, status: "redmarker", whenLow: true},
  {barId: 1, barRatio: 0, status: "dead", whenLow: true}
];
on("change:token", function(obj) {
  CONFIG.forEach(function(opts) {
    var maxValue = parseInt(obj.get("bar" + opts.barId + "_max"));
    var curValue = parseInt(obj.get("bar" + opts.barId + "_value"));
    log(opts.barId + ": " + curValue + "/" + maxValue);
    se (!isNaN(maxValue) && !isNaN(curValue)) {
      var markerName = "status_" + opts.status;
      if (curValue <= (maxValue * opts.barRatio)) {
        obj.set(markerName, opts.whenLow);
      }
      else {
        obj.set(markerName, !opts.whenLow);
      }
    }
  });
});

Gestor temporário de HP

(Contribuição de Eric Dalquist)

Gere automaticamente os pontos de vida temporários. Se uma das barras simbólicas for utilizada para monitorizar os HP temporários, este script pode deduzir automaticamente os HP do valor temporário antes de estes serem removidos da barra principal de HP.

/**
 * Remove automaticamente os HP temporários, caso existam.
 *
 * Quando os HP de um token são reduzidos, o script verifica se existem
 * HP temporários disponíveis. Caso tal aconteça, esses são removidos em primeiro lugar e os HP reais são
 * atualizado para refletir o facto de os HP temporários absorverem o dano.
 *
 * TEMP_BAR_ID - A barra utilizada para monitorizar os HP temporários [1, 2, 3]
 * HP_BAR_ID - A barra utilizada para monitorizar os HP reais [1, 2, 3]
 */
var TEMP_BAR_ID = 2;
var HP_BAR_ID = 1;
on("change:token", function(obj, prev) {
  var prevHpValStr = prev["bar" + HP_BAR_ID + "_value"];
  var prevHpVal = parseInt(prevHpValStr);
  if (isNaN(prevHpVal)) {
    log("AVISO: A barra anterior " + HP_BAR_ID + " não contém um número: '" + prevHpValStr + "'");
    return;
  }
  var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
  var hpVal = parseInt(hpValStr);
  if (isNaN(hpVal)) {
    log("AVISO: A barra " + HP_BAR_ID + " não contém um número: '" + hpValStr + "'");
    return;
  }
  if (prevHpVal > hpVal) {
    var tmpHpVal = parseInt(obj.get("bar" + TEMP_BAR_ID + "_value"));
    log(prevHpVal + " - " + hpVal + " - " + tmpHpVal);
    if (!isNaN(tmpHpVal)) {
      var hpChange = prevHpVal - hpVal;
      var remainingTmp = tmpHpVal - hpChange;
      if (remainingTmp > 0) {
        obj.set("bar" + TEMP_BAR_ID + "_value", remainingTmp);
        obj.set("bar" + HP_BAR_ID + "_value", prevHpVal);
      }
      else {
        var remainingHp = prevHpVal + remainingTmp;
        obj.set("bar" + TEMP_BAR_ID + "_value", 0);
        obj.set("bar" + HP_BAR_ID + "_value", remainingHp);
      }
    }
  }
});

Ficha de Patrulha

on("ready", function() {
  // Aguardar até que o evento «ready» seja disparado, para sabermos que a campanha está totalmente carregada.
  //Obter uma referência ao nosso token de patrulha.
  var patroltoken = findObjs({_type: "graphic", name: "Guarda A"})[0]; //Sabemos que existe um token na Campanha denominado «Guarda A».
  var direction = -70; //Avançar 70 píxeis para a esquerda.
  var stepstaken = 0; //Quantos passos já demos na direção atual?
  setInterval(function() {
    if (stepstaken > 3) {
      //Mudar de direção!
      direção = direção * -1; //irá «inverter» a direção em que estamos a caminhar
      passosDados = 0; //reinicia os passos para 0.
    }
    patroltoken.set("left", patroltoken.get("left") + direction); //andar!
    stepstaken++;
  }, 5000); // executar uma ação a cada 5 segundos
});
Este artigo foi útil?
33 de 45 acharam isto útil