22091ef431
Affichage de la valeur si option activée Utilisation de boutons au lieu des liens
96 lines
4.8 KiB
JavaScript
96 lines
4.8 KiB
JavaScript
import { SYSTEM_RDD } from "./constants.js";
|
|
import { Misc } from "./misc.js";
|
|
|
|
const listeReglesOptionelles = [
|
|
{ name: 'recul', group: 'Règles de combat', descr: "Appliquer le recul en cas de particulière en force ou de charge" },
|
|
{ name: 'resistanceArmeParade', group: 'Règles de combat', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" },
|
|
{ name: 'deteriorationArmure', group: 'Règles de combat', descr: "Tenir compte de la détérioration des armures" },
|
|
{ name: 'defenseurDesarme', group: 'Règles de combat', descr: "Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier" },
|
|
{ name: 'categorieParade', group: 'Règles de combat', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" },
|
|
{ name: 'tripleSignificative', group: 'Règles de combat', descr: "En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès" },
|
|
{ name: 'degat-minimum-malus-libre-simple', group: 'Règles de combat', descr: "Le malus libre d'attaque remplace une des valeurs de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, si 1 résultat est inférieur à 4, alors il devient 4.", default: false },
|
|
{ name: 'degat-minimum-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false },
|
|
{ name: 'degat-ajout-malus-libre', group: 'Règles de combat', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false },
|
|
{ name: 'astrologie', group: 'Règles générales', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels", default: true },
|
|
{ name: 'afficher-prix-joueurs', group: 'Règles générales', descr: "Afficher le prix de l'équipement des joueurs", default: true, uniquementJoueur: true},
|
|
{ name: 'appliquer-fatigue', group: 'Règles générales', descr: "Appliquer les règles de fatigue", default: true },
|
|
{ name: 'afficher-colonnes-reussite', group: 'Règles générales', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false },
|
|
];
|
|
const uniquementJoueur = listeReglesOptionelles.filter(it => it.uniquementJoueur).map(it=>it.name);
|
|
|
|
export class ReglesOptionelles extends FormApplication {
|
|
static init() {
|
|
for (const regle of listeReglesOptionelles) {
|
|
const name = regle.name;
|
|
const id = ReglesOptionelles._getIdRegle(name);
|
|
game.settings.register(SYSTEM_RDD, id, { name: id, scope: "world", config: false, default: regle.default == undefined ? true : regle.default, type: Boolean });
|
|
}
|
|
|
|
game.settings.registerMenu(SYSTEM_RDD, "rdd-options-regles", {
|
|
name: "Choisir les règles optionelles",
|
|
label: "Choix des règles optionelles",
|
|
hint: "Ouvre la fenêtre de sélection des règles optionelles",
|
|
icon: "fas fa-bars",
|
|
type: ReglesOptionelles,
|
|
restricted: true
|
|
});
|
|
}
|
|
|
|
constructor(...args) {
|
|
super(...args);
|
|
}
|
|
|
|
static _getIdRegle(name) {
|
|
return `rdd-option-${name}`;
|
|
}
|
|
|
|
static get defaultOptions() {
|
|
const options = super.defaultOptions;
|
|
mergeObject(options, {
|
|
id: "optional-settings",
|
|
template: "systems/foundryvtt-reve-de-dragon/templates/regles-optionelles.html",
|
|
height: 600,
|
|
width: 350,
|
|
minimizable: false,
|
|
closeOnSubmit: true,
|
|
title: "Règles optionnelles"
|
|
});
|
|
return options;
|
|
}
|
|
|
|
getData() {
|
|
let formData = super.getData();
|
|
const regles = listeReglesOptionelles.map(it => {
|
|
it = duplicate(it);
|
|
it.id = ReglesOptionelles._getIdRegle(it.name);
|
|
it.active = ReglesOptionelles.isUsing(it.name);
|
|
return it;
|
|
});
|
|
formData.regles = regles;
|
|
formData.groups = Misc.classify(regles, it => it.group);
|
|
return formData;
|
|
}
|
|
|
|
static isUsing(name) {
|
|
if (game.user.isGM && uniquementJoueur.includes(name)) {
|
|
return true;
|
|
}
|
|
return game.settings.get(SYSTEM_RDD, ReglesOptionelles._getIdRegle(name));
|
|
}
|
|
|
|
activateListeners(html) {
|
|
html.find(".select-option").click((event) => {
|
|
if (event.currentTarget.attributes.name) {
|
|
let id = event.currentTarget.attributes.name.value;
|
|
let isChecked = event.currentTarget.checked;
|
|
game.settings.set(SYSTEM_RDD, id, isChecked);
|
|
}
|
|
});
|
|
}
|
|
|
|
async _updateObject(event, formData) {
|
|
this.close();
|
|
}
|
|
}
|
|
|