feat(traits): tâche 0 + phases 2-4 — automatisation complète des Traits
Tâche 0 : - item.mjs : champ equipped sur items génériques + toggle fiche - nouveau module/system/traits.mjs (helpers partagés : equippedItems, lourdMalus, mobilityHandicap, feticheItem…) Phase 2 — Combat : - Lourd : malus cumulés auto (Vigueur < n) dans le dialogue + pool - Rapide : handicap (n) pré-rempli dans la défense (character + PNJ) + note carte - Rafale : case tir en rafale (+2 difficulté), +n réussites si réussi (bonusOnSuccess) - Portée : portée effective n × Vigueur affichée - Maniable/Mobilité : note de rappel (dialogue + carte) - Incapacitant : bouton « Jet de Santé (n) » sur la carte d'échange - getLabel() : libellés caractéristiques/compétences localisés Phase 3 — Jets d'action : - Ponctuel : annule jusqu'à n Handicaps, consommé au jet (Traits supprimé à 0) - Pratique : outil sélectionné +2D au lieu de +1D - Intimidant : case « Brandit » → -1D Psychologie ou Relance 1D - Malus : champ « Malus temporaires » manuel déduit du pool - Durée : note « n tours » sur la carte de jet d'arme - roll() : transmission effectiveRange/mobilityHandicap/ponctuelUsed/intimidant (corrige l'affichage Portée/Mobilité) Phase 4 — Acteur : - Fétiche : +1D Effort ET Sang-Froid (max dérivé, config corrigé), alerte 2+ fétiches, action « Perdre le fétiche » (-2D, max -1D persistant feticheLoss) - Zone : note + bouton « Appliquer aux cibles de la zone » (#onApplyZone) CSS : styles LESS pour les nouvelles classes (fetiche-block, exchange-reminder/zone, traits-reminder, tool-bonus/ponctuel, duree-note) i18n : 29 clés fr/en TRAITS_PLAN.md : plan complet cochée
This commit is contained in:
@@ -140,6 +140,21 @@ export default class NpcRollDialog extends HandlebarsApplicationMixin(foundry.ap
|
||||
inp.addEventListener("change", this.#onInputChange.bind(this))
|
||||
}
|
||||
this.element.querySelector("#handicap")?.addEventListener("change", () => this.#updateUI())
|
||||
// Trait Rapide (n) : le défenseur subit (n) Handicaps sur sa défense.
|
||||
if (this.locks?.handicap !== undefined && this.locks?.handicap !== null) {
|
||||
const sel = this.#el.querySelector("#handicap")
|
||||
if (sel) {
|
||||
const locked = parseInt(this.locks.handicap, 10)
|
||||
let opt = [...sel.options].find(o => parseInt(o.value, 10) === locked + 1)
|
||||
if (!opt) {
|
||||
opt = document.createElement("option")
|
||||
opt.value = String(locked + 1)
|
||||
opt.textContent = game.i18n.localize("VERMINE.handicap") + ` (${locked})`
|
||||
sel.appendChild(opt)
|
||||
}
|
||||
opt.selected = true
|
||||
}
|
||||
}
|
||||
this.#updateUI()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user