This commit is contained in:
rwanoux
2024-11-15 22:05:29 +01:00
parent a163528acb
commit e721c706eb
37 changed files with 334 additions and 185 deletions
+65
View File
@@ -118,3 +118,68 @@ export class ActorPicker extends Application {
}
}
export class TraitSelector extends Application {
constructor(targetItem) {
super();
this.targetItem = targetItem;
this.traits = CONFIG.VERMINE.traits
}
/* -------------------------------------------- */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "TRAITS_SELECTOR",
title: game.i18n.localize("VERMINE.traits_selector"),
template: 'systems/vermine2047/templates/applications/choose-traits.hbs',
popOut: true,
resizable: true,
height: "500",
width: "500"
});
}
getData() {
return {
traits: this.traits,
item: this.targetItem
}
}
async activateListeners(html) {
super.activateListeners(html);
this.validateTraits(html);
html.find('input').click(ev => {
this.onChangeInput(ev)
})
}
async validateTraits(html) {
let checks = html.find("input.trait-selector");
for (let ch of checks) {
if (this.targetItem.system.traits[ch.dataset.trait]) {
ch.checked = true
}
}
}
async onChangeInput(ev) {
let el = ev.currentTarget;
if (el.classList.contains('trait-selector')) {
let traitKey = el.dataset.trait; // Récupère la clé du trait à partir de l'attribut data-trait
let traits = this.targetItem.system.traits || {}; // Récupère les traits actuels, ou un objet vide si aucun trait n'est défini
if (!traits[traitKey]) {
// Si la case est cochée, ajoute le trait
await this.targetItem.update({ [`system.traits.${traitKey}`]: this.traits[traitKey] });
} else {
// Si la case est décochée, retire le trait
await this.targetItem.update({ [`system.traits.${traitKey}`]: null });
}
}
else if (el.classList.contains('trait-value')) {
// Logique pour les valeurs des traits si nécessaire
}
}
}
+71 -1
View File
@@ -172,7 +172,77 @@ VERMINE.traits = {
"coque": {
name: "coque",
description: "Ignore les (n) premiers Dommages. Quand (n) est atteint, lobjet perd ce Trait.",
value: 1 // = la valeur "n" dans le tableau page 51 livre règles, indiquer 1 si valeur "n" présente
value: 1
},
"duree": {
name: "Durée",
description: "Les effets de larme ou de lobjet durent (n) Tours de combat.Les durées en minutes, en heures ou en jours sont toujours indiquées de façon claire, notamment dans le cas des maladies ou des empoisonnements.",
value: 1
},
"etanche": {
name: "Étanche.",
description: "Tant que sa Fiabilité est à son maximum, lobjet ignore les Dommages dus à limmersion prolongée.De plus, les vêtements et protections Étanches permettent d’éviter les effets de Zone liés aux gaz, et font baisser dun cran le niveau dexposition à une maladie(jusqu’à éventuellement éviter de lancer les Dés de Santé) voir « Maladies et infections », page 105.",
value: 0
},
"fetiche": {
name: "Fétiche",
description: "Le personnage possède un objet fétiche auquel il tient.Tant quil le possède, sa Réserve dEffort ou de Sang- Froid est augmentée de 1D, et il ne subit pas les Malus d’Épuisement liés à la valeur de ses Réserves, même si elles sont réduites à 0. Si le personnage perd ou est privé de cet objet, les règles d’Épuisement sappliquent de nouveau et il perd immédiatement 2D dans chacune de ses Réserves, dont les valeurs maximales sont réduites de 1D.Un même personnage ne peut posséder quun seul objet avec le Trait Fétiche.",
value: 0
},
"incapacitant": {
name: "Incapacitant",
description: "Ignore les (n) premiers Dommages. Quand (n) est atteint, lobjet perd ce Trait.",
value: 1
},
"intimidant": {
name: "Intimidant",
description: "Tant que le personnage utilise cet objet, il bénéficie dune Relance de 1D sur ses jets visant à effrayer, impressionner ou menacer. Il subit cependant un Malus de 1D à toutes ses Actions avec Psychologie.Le meneur peut décider quune créature est trop bête ou trop confiante pour se laisser intimider.De plus si votre personnage brandit un objet Intimidant mais démontre rapidement quil ne sait pas sen servir, le meneur peut le priver de sa Relance.",
value: 0
},
"lourd": {
name: "Lourd",
description: "Lobjet est particulièrement lourd et demande une Vigueur minimum de(n) D pour être porté, manié ou utilisé correctement.Si la Vigueur du personnage est inférieure à(n), il subit un Malus de 1D. Sil porte plusieurs objets Lourds, comme une arme Lourde et une Protection blindée, les Malus éventuels se cumulent.",
value: 1
},
"malus": {
name: "Malus",
description: "Larme ou lobjet inflige un Malus de(n) D à toutes les actions des personnages affectés pendant toute la Durée de leffet.Cest le cas notamment de certains gaz, venins, poisons ou maladies.",
value: 1
},
"maniable": {
name: "Maniable.",
description: "Lobjet ninflige pas de Handicap de Mobilité à son porteur voir « Handicap de Mobilité », page 70. Un objet peut être Maniable et Lourd(n).",
value: 0
},
"ponctuel": {
name: "Ponctuel",
description: "Cet objet contient un certain nombre dingrédients, charges, batteries ou petites composantes qui peuvent être utilisés pour réduire les Handicaps infligés sur une action où ils peuvent être utiles.Pour chaque degré de Handicap que le joueur souhaite annuler, la valeur du Trait est réduite de 1. Quand cette valeur tombe à 0, lobjet perd définitivement ce Trait.",
value: 1
},
"portee": {
name: "Portée",
description: "Lobjet a une portée utile ou maximale de(n) mètres.Les armes de distance disposent de plusieurs Portées, qui peuvent être fixes ou modifiées par la Vigueur de lattaquant, notamment pour les armes de tir ou de lancer.",
value: 1
},
"pratique.": {
name: "Pratique.",
description: "Le matériel offre une prise en main exceptionnelle, une maniabilité étonnante, une simplicité dusage remarquable.Utiliser un tel matériel pour une action adéquate accorde un Bonus de 2D au lieu de 1D.Rechercher ce Trait sur un matériel compte comme deux critères de Rareté à lui seul.De plus les réparations, améliorations et fabrications de matériel avec ce Trait souffrent de(I) Handicap en plus de ceux applicables normalement.",
value: 0
},
"rapide": {
name: "Rapide",
description: "Lobjet est particulièrement léger et permet de porter plusieurs attaques consécutives, au contact ou à distance.Ces(n) coups ou projectiles sont gérés par un seul jet dattaque et imposent (n) Handicaps au défenseur.",
value: 1
},
"rafale": {
name: "Rafale",
description: "Certaines armes à feu automatiques permettent de tirer en rafales.Le tireur neffectue quun seul jet contre une Difficulté augmentée de 2, mais gagne(n) Réussites supplémentaires si son jet est réussi.",
value: 1
},
"zone": {
name: "Zone",
description: "Larme ou lobjet déclenche ses effets dans une zone de(n) mètres de diamètre.Si lobjet inflige des Dommages, tout ce qui se trouve dans la zone les subit.",
value: 1
},
// etc...etc...
}
+2 -1
View File
@@ -38,8 +38,9 @@ export const preloadHandlebarsTemplates = async function () {
// dialog templates
"systems/vermine2047/templates/dialogs/roll-dialog.hbs",
//items damages
//items partials
"systems/vermine2047/templates/item/partials/damages.html",
"systems/vermine2047/templates/item/partials/traits.html",
]);
};