2022-11-06 21:39:03 +01:00
import { SYSTEM _RDD } from "../constants.js" ;
import { Misc } from "../misc.js" ;
2021-01-26 19:43:37 +01:00
2023-06-20 23:43:24 +02:00
const listeReglesOptionnelles = [
2023-06-20 03:00:00 +02:00
{ group : 'Règles générales' , name : 'appliquer-fatigue' , descr : "Appliquer les règles de fatigue" } ,
{ group : 'Règles générales' , name : 'astrologie' , descr : "Appliquer les ajustements astrologiques aux jets de chance et aux rituels" } ,
2023-11-03 20:04:02 +01:00
{ group : 'Récupération' , name : 'transformation-stress' , descr : "Transformer le stress durant Château Dormant" } ,
2023-11-03 20:22:41 +01:00
{ group : 'Récupération' , name : 'recuperation-chance' , descr : "Récupérer la chance durant Château Dormant" } ,
2023-11-03 20:23:09 +01:00
{ group : 'Récupération' , name : 'recuperation-ethylisme' , descr : "Récupérer l'éthylisme" } ,
2023-11-03 20:23:35 +01:00
{ group : 'Récupération' , name : 'recuperation-reve' , descr : "Récupérer le rêve pendant la nuit (les jets sont toujours faits pour les Rêves de Dragons)" } ,
2023-11-04 18:07:41 +01:00
{ group : 'Récupération' , name : 'recuperation-moral' , descr : "Le moral revient vers 0 durant Château Dormant" } ,
2022-10-09 02:19:33 +02:00
2023-06-20 03:00:00 +02:00
{ group : 'Règles de combat' , name : 'recul' , descr : "Appliquer le recul en cas de particulière en force ou de charge" } ,
{ group : 'Règles de combat' , name : 'resistanceArmeParade' , descr : "Faire le jet de résistance des armes lors de parades pouvant les endommager" } ,
{ group : 'Règles de combat' , name : 'deteriorationArmure' , descr : "Tenir compte de la détérioration des armures" } ,
{ group : 'Règles de combat' , name : 'defenseurDesarme' , 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" } ,
{ group : 'Règles de combat' , name : 'categorieParade' , descr : "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" } ,
{ group : 'Règles de combat' , name : 'tripleSignificative' , 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" } ,
{ group : 'Règles de combat' , name : 'validation-encaissement-gr' , descr : "Le Gardien des Rêves doit valider les jets d'encaissement et peut les changer." , default : false } ,
{ group : 'Automatisation' , name : 'chateau-dormant-gardien' , descr : "Saisie des heures de sommeil/jets de moral par le gardien des rêves" , default : true } ,
2022-10-09 02:19:33 +02:00
2023-06-20 03:00:00 +02:00
{ group : 'Affichage' , name : 'afficher-colonnes-reussite' , descr : "Afficher le nombre de colonnes de réussite ou d'échec" , default : false } ,
{ group : 'Affichage' , name : 'afficher-prix-joueurs' , descr : "Afficher le prix de l'équipement des joueurs" , uniquementJoueur : true } ,
2022-11-22 02:12:26 +01:00
{ group : 'Confirmations' , name : 'confirmer-combat-sans-cible' , descr : "Confirmer avant une attaque sans cible" , scope : "client" } ,
2022-10-21 02:27:16 +02:00
{ group : 'Confirmations' , name : 'confirmation-tmr' , descr : "Confirmer pour monter dans les TMR" , scope : "client" } ,
2024-05-26 22:13:47 +02:00
{ group : 'Confirmations' , name : 'confirmation-tmr-rencontre' , descr : "Confirmer pour monter dans les TMR avec rencontre en attente" , scope : "client" } ,
2022-10-21 02:27:16 +02:00
{ group : 'Confirmations' , name : 'confirmation-refouler' , descr : "Confirmer avant de refouler" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-vider' , descr : "Confirmer pour vider l'équipement" , scope : "client" } ,
2022-10-09 02:19:33 +02:00
{ group : 'Confirmations' , name : 'confirmation-supprimer-lien-acteur' , descr : "Confirmer pour détacher un animal/suivant/véhicule" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-equipement' , descr : "Confirmer la suppression des équipements" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-oeuvre' , descr : "Confirmer la suppression des oeuvres" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-connaissance' , descr : "Confirmer la suppression des connaissances" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-draconique' , descr : "Confirmer la suppression des queues, souffles, têtes" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-effet' , descr : "Confirmer la suppression des effets" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-competence' , descr : "Confirmer la suppression des compétences" , scope : "client" } ,
{ group : 'Confirmations' , name : 'confirmation-supprimer-autres' , descr : "Confirmer la suppression des autres types d'Objets" , scope : "client" } ,
2023-06-20 03:00:00 +02:00
{ group : 'Options alternatives' , name : 'degat-minimum-malus-libre-simple' , 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 le plus petit dé est inférieur à 4, alors il devient 4." , default : false } ,
{ group : 'Options alternatives' , name : 'degat-minimum-malus-libre' , 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 } ,
{ group : 'Options alternatives' , name : 'degat-ajout-malus-libre' , 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 } ,
2021-01-26 19:43:37 +01:00
] ;
2022-10-04 23:23:43 +02:00
2023-06-20 23:43:24 +02:00
const uniquementJoueur = listeReglesOptionnelles . filter ( it => it . uniquementJoueur ) . map ( it => it . name ) ;
2021-01-26 19:43:37 +01:00
2023-06-20 23:43:24 +02:00
export class ReglesOptionnelles extends FormApplication {
2021-01-26 19:43:37 +01:00
static init ( ) {
2023-06-20 23:43:24 +02:00
for ( const regle of listeReglesOptionnelles ) {
2021-01-26 19:43:37 +01:00
const name = regle . name ;
2023-06-20 23:43:24 +02:00
const id = ReglesOptionnelles . _getIdRegle ( name ) ;
2022-10-04 23:23:43 +02:00
game . settings . register ( SYSTEM _RDD , id , { name : id , scope : regle . scope ? ? "world" , config : false , default : regle . default == undefined ? true : regle . default , type : Boolean } ) ;
2021-01-26 19:43:37 +01:00
}
2021-11-11 02:43:38 +01:00
game . settings . registerMenu ( SYSTEM _RDD , "rdd-options-regles" , {
2023-06-20 23:43:24 +02:00
name : "Choisir les règles optionnelles" ,
label : "Règles optionnelles" ,
hint : "Ouvre la fenêtre de sélection des règles optionnelles" ,
2021-01-26 19:43:37 +01:00
icon : "fas fa-bars" ,
2023-06-20 23:43:24 +02:00
type : ReglesOptionnelles
2021-01-26 19:43:37 +01:00
} ) ;
}
constructor ( ... args ) {
super ( ... args ) ;
}
static _getIdRegle ( name ) {
return ` rdd-option- ${ name } ` ;
}
static get defaultOptions ( ) {
2024-06-01 01:53:14 +02:00
return foundry . utils . mergeObject ( super . defaultOptions , {
2023-06-20 23:43:24 +02:00
id : "regles-optionnelles" ,
2024-09-25 23:00:47 +02:00
template : "systems/foundryvtt-reve-de-dragon/templates/settings/regles-optionnelles.hbs" ,
2023-11-23 20:52:23 +01:00
height : 650 ,
width : 550 ,
2021-01-26 19:43:37 +01:00
minimizable : false ,
closeOnSubmit : true ,
2021-05-08 20:08:56 +02:00
title : "Règles optionnelles"
2024-06-01 01:53:14 +02:00
} , { inplace : false } )
2021-01-26 19:43:37 +01:00
}
getData ( ) {
2021-03-16 22:56:57 +01:00
let formData = super . getData ( ) ;
2023-06-20 23:43:24 +02:00
const regles = listeReglesOptionnelles . filter ( it => game . user . isGM || it . scope == "client" ) . map ( it => {
2024-05-02 14:08:02 +02:00
it = foundry . utils . duplicate ( it ) ;
2023-06-20 23:43:24 +02:00
it . id = ReglesOptionnelles . _getIdRegle ( it . name ) ;
it . active = ReglesOptionnelles . isSet ( it . name ) ;
2021-05-08 20:08:56 +02:00
return it ;
} ) ;
formData . regles = regles ;
formData . groups = Misc . classify ( regles , it => it . group ) ;
2021-03-16 22:56:57 +01:00
return formData ;
2021-01-26 19:43:37 +01:00
}
static isUsing ( name ) {
2022-10-04 01:58:49 +02:00
if ( game . user . isGM && uniquementJoueur . includes ( name ) ) {
return true ;
}
2023-06-20 23:43:24 +02:00
return ReglesOptionnelles . isSet ( name ) ;
2021-01-26 19:43:37 +01:00
}
2022-10-04 23:23:43 +02:00
static isSet ( name ) {
2023-06-20 23:43:24 +02:00
return game . settings . get ( SYSTEM _RDD , ReglesOptionnelles . _getIdRegle ( name ) ) ;
2022-10-04 23:23:43 +02:00
}
static set ( name , value ) {
2023-06-20 23:43:24 +02:00
return game . settings . set ( SYSTEM _RDD , ReglesOptionnelles . _getIdRegle ( name ) , value ? true : false ) ;
2022-10-04 23:23:43 +02:00
}
2021-01-26 19:43:37 +01:00
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 ;
2021-11-11 02:43:38 +01:00
game . settings . set ( SYSTEM _RDD , id , isChecked ) ;
2021-01-26 19:43:37 +01:00
}
} ) ;
}
async _updateObject ( event , formData ) {
this . close ( ) ;
}
}