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:
+22
-4
@@ -16,6 +16,10 @@ export class VermineUtils {
|
||||
* @param {string} [options.keepTotem=null] - Totem to keep ('human' or 'adapted')
|
||||
* @param {number} [options.skillLevel=null] - Skill level for auto-successes
|
||||
* @param {boolean} [options.hasSpecialty=false] - Whether a specialty is used
|
||||
* @param {number} [options.effectiveRange=null] - Portée effective (Trait Portée)
|
||||
* @param {number} [options.mobilityHandicap=0] - Handicap de Mobilité (note)
|
||||
* @param {number} [options.ponctuelUsed=0] - Handicaps annulés (Trait Ponctuel)
|
||||
* @param {Object|null} [options.intimidant=null] - Trait Intimidant utilisé
|
||||
* @returns {Promise<Roll>} The roll result
|
||||
*/
|
||||
static async roll({
|
||||
@@ -33,12 +37,17 @@ export class VermineUtils {
|
||||
hasSpecialty = false,
|
||||
handicap = 0,
|
||||
bonusSuccesses = 0,
|
||||
bonusOnSuccess = false,
|
||||
poolBreakdown = null,
|
||||
specialtyName = null,
|
||||
weapon = null,
|
||||
targets = [],
|
||||
attack = null,
|
||||
messageFlags = null
|
||||
messageFlags = null,
|
||||
effectiveRange = null,
|
||||
mobilityHandicap = 0,
|
||||
ponctuelUsed = 0,
|
||||
intimidant = null
|
||||
}) {
|
||||
// Validate inputs
|
||||
if (!actor) {
|
||||
@@ -160,12 +169,17 @@ export class VermineUtils {
|
||||
hasSpecialty,
|
||||
handicap,
|
||||
bonusSuccesses,
|
||||
bonusOnSuccess,
|
||||
poolBreakdown,
|
||||
specialtyName,
|
||||
weapon,
|
||||
targets,
|
||||
attack,
|
||||
messageFlags
|
||||
messageFlags,
|
||||
effectiveRange,
|
||||
mobilityHandicap,
|
||||
ponctuelUsed,
|
||||
intimidant
|
||||
});
|
||||
|
||||
return roll;
|
||||
@@ -445,8 +459,12 @@ export class VermineUtils {
|
||||
}
|
||||
// Verdict
|
||||
const required = 1 + (param.handicap ?? 0);
|
||||
const bonusSuccesses = param.bonusSuccesses ?? 0;
|
||||
const total = (roll._total ?? 0) + bonusSuccesses;
|
||||
const rawTotal = roll._total ?? 0;
|
||||
// Réussites automatiques : appliquées inconditionnellement, ou uniquement
|
||||
// si le jet est réussi (Trait Rafale — bonusOnSuccess).
|
||||
const requested = param.bonusSuccesses ?? 0;
|
||||
const bonusSuccesses = requested > 0 && (!param.bonusOnSuccess || rawTotal >= required) ? requested : 0;
|
||||
const total = rawTotal + bonusSuccesses;
|
||||
const verdict = {
|
||||
success: total >= required,
|
||||
total,
|
||||
|
||||
Reference in New Issue
Block a user