Scripts de mod : exemples avancés

Le guide pratique propose quelques exemples de scripts simples qui peuvent vous aider à vous lancer. N'hésitez pas à les utiliser et à les adapter pour vos propres campagnes. Il existe également un forum consacré aux scripts de mods, où vous pouvez échanger sur la création de scripts de mods et partager vos scripts avec la communauté.

Gestionnaire d'état des jetons

(Contribution d'Eric Dalquist)

Ce script ajoute automatiquement des indicateurs d'état en fonction des valeurs des barres. Le script peut être configuré pour suivre n'importe laquelle des trois barres et définir n'importe lequel des indicateurs d'état pour tout rapport compris entre 0 et 1. Le script permet de gérer plusieurs barres/jetons dans une même instance. L'exemple ci-dessous surveille la barre 1 et place le marqueur rouge lorsque la valeur est égale à <= 50 %, puis place le marqueur mort lorsque la valeur est égale à <= 0.

/**
 * Définit divers icônes de jeton en fonction des rapports courant/maximum de la barre
 *
 * Le tableau CONFIG peut contenir un nombre illimité d'objets de configuration. Ces objets
 * sont traités dans l'ordre.
 *
 * barId - L'identifiant de la barre dont vous souhaitez consulter les valeurs [1, 2, 3]
 * barRatio - Le rapport entre la valeur de la barre et la valeur maximale qui déclenche l'activation du marqueur d'état [0 - 1]
 * status - Le nom du marqueur d'état à activer ou désactiver [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
 * whenLow - L'état du marqueur lorsque la valeur de la barre est <= le rapport [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);
    if (!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);
      }
    }
  });
});

Responsable PV intérimaire

(Contribution d'Eric Dalquist)

Gère automatiquement les points de vie temporaires. Si l'une des barres de jeton sert à suivre les PV temporaires, ce script peut automatiquement déduire les PV de la valeur temporaire avant qu'ils ne soient supprimés de la barre de PV principale.

/**
 * Supprime automatiquement les PV temporaires s'ils existent.
 *
 * Lorsqu'un jeton subit une perte de PV, le script vérifie s'il existe des
 * PV temporaires disponibles. Si c'est le cas, ceux-ci sont d'abord retirés et les PV réels sont de
 * mise à jour pour tenir compte du fait que les PV temporaires absorbent le coup.
 *
 * TEMP_BAR_ID - La barre utilisée pour suivre les PV temporaires [1, 2, 3]
 * HP_BAR_ID - La barre utilisée pour suivre les PV réels [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("AVERTISSEMENT : la barre précédente " + HP_BAR_ID + " ne contient pas de nombre : '" + prevHpValStr + "'");
    return;
  }
  var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
  var hpVal = parseInt(hpValStr);
  if (isNaN(hpVal)) {
    log("AVERTISSEMENT : la barre " + HP_BAR_ID + " ne contient pas de nombre : '" + 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);
      }
    }
  }
});

Jeton de patrouille

on("ready", function() {
  //Attendez que l'événement « ready » se déclenche pour vous assurer que la campagne est entièrement chargée.
  //Obtenir une référence à notre jeton de patrouille.
  var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; // Nous savons qu'il existe dans la campagne un Jeton appelé « Guard A ».
  var direction = -70 ; // Se déplacer de 70 pixels vers la gauche.
  var stepstaken = 0 ; // Combien de pas avons-nous fait dans la direction actuelle ?
  setInterval(function() {
    if(nombreDePas > 3) {
      //Changez de direction !
      direction = direction * -1 ; // cela « inversera » la direction dans laquelle vous marchez
      stepstaken = 0 ; // remet le nombre de pas à 0.
    }
    patroltoken.set("left", patroltoken.get("left") + direction); // En avant !
    stepstaken++ ;
  }, 5000) ; // effectuer une action toutes les 5 secondes
});
Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 33 sur 45