From 577eccbbd3f6b6fd2ca7f8db6a3c5722a6d5507f Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Tue, 11 Apr 2023 13:26:51 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20des=20attaques=20cibl=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/heritiers-actor.js | 13 ++++++++ modules/heritiers-config.js | 7 ++++ modules/heritiers-roll-dialog.js | 8 ++++- modules/heritiers-utility.js | 51 ++++++++++++++++++++++++++---- system.json | 4 +-- templates/chat-cc-result.html | 8 +++++ templates/roll-dialog-generic.html | 38 ++++++++++++++++++++++ 7 files changed, 120 insertions(+), 9 deletions(-) diff --git a/modules/heritiers-actor.js b/modules/heritiers-actor.js index 55ba9b8..25d1fa2 100644 --- a/modules/heritiers-actor.js +++ b/modules/heritiers-actor.js @@ -70,6 +70,16 @@ export class HeritiersActor extends Actor { return armes } /* -------------------------------------------- */ + getOtherMeleeWeapons(excludeArme) { + let armes = [] + for (let arme of this.items) { + if ( HeritiersUtility.isArmeMelee(arme) && arme.id != excludeArme._id) { + armes.push(this.prepareArme(arme)) + } + } + return armes + } + /* -------------------------------------------- */ getMonnaies() { return this.items.filter(it => it.type == "monnaie") } @@ -613,6 +623,7 @@ export class HeritiersActor extends Actor { rollData.caracKey = key rollData.arme = arme rollData.mode = "arme" + rollData.armes = this.getOtherMeleeWeapons(arme) if (rollData.defenderTokenId && arme.system.isMelee ) { rollData.cacheDifficulte = true } @@ -634,6 +645,7 @@ export class HeritiersActor extends Actor { rollData.caracKey = key rollData.arme = duplicate(arme) rollData.mode = "attaquebrutale" + rollData.armes = this.getOtherMeleeWeapons(arme) rollData.rulesMalus.push({ name: "Attaque brutale", value: -2 } ) let rollDialog = await HeritiersRollDialog.create(this, rollData) rollDialog.render(true) @@ -650,6 +662,7 @@ export class HeritiersActor extends Actor { rollData.carac = this.system.caracteristiques[key] rollData.caracKey = key rollData.arme = duplicate(arme) + rollData.armes = this.getOtherMeleeWeapons(arme) rollData.mode = "attaquecharge" let rollDialog = await HeritiersRollDialog.create(this, rollData) rollDialog.render(true) diff --git a/modules/heritiers-config.js b/modules/heritiers-config.js index 5c97969..47a5ed5 100644 --- a/modules/heritiers-config.js +++ b/modules/heritiers-config.js @@ -93,6 +93,13 @@ export const HERITIERS_CONFIG = { "30": "Divine" }, + attaqueCible: { + "none": "Aucune", + "membre": "Membre", + "main": "Main", + "tete": "Tête/Coeur" + }, + categorieArme : { "trait": "Arme de trait", "poing": "Arme de poing", diff --git a/modules/heritiers-roll-dialog.js b/modules/heritiers-roll-dialog.js index 98366e3..04602c1 100644 --- a/modules/heritiers-roll-dialog.js +++ b/modules/heritiers-roll-dialog.js @@ -5,7 +5,7 @@ export class HeritiersRollDialog extends Dialog { /* -------------------------------------------- */ static async create(actor, rollData) { - let options = { classes: ["HeritiersDialog"], width: 320, height: 'fit-content', 'z-index': 99999 }; + let options = { classes: ["HeritiersDialog"], width: 420, height: 'fit-content', 'z-index': 99999 }; let html = await renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData); return new HeritiersRollDialog(actor, rollData, html, options); @@ -119,6 +119,12 @@ export class HeritiersRollDialog extends Dialog { html.find('#attaqueDos').change((event) => { this.rollData.attaqueDos = event.currentTarget.checked }) + html.find('#bonus-attaque-seconde-arme').change((event) => { + this.rollData.secondeArme = String(event.currentTarget.value) + }) + html.find('#attaque-cible').change((event) => { + this.rollData.attaqueCible = String(event.currentTarget.value) + }) } } \ No newline at end of file diff --git a/modules/heritiers-utility.js b/modules/heritiers-utility.js index 511d510..c696abf 100644 --- a/modules/heritiers-utility.js +++ b/modules/heritiers-utility.js @@ -338,14 +338,31 @@ export class HeritiersUtility { /* -------------------------------------------- */ static computeArmeDegats(rollData, actor) { rollData.degatsArme = rollData.arme.system.degats + rollData.marge - if (rollData.arme.system.categorie == "lourde") { - rollData.degatsArme += actor.system.caracteristiques.for.value + if (rollData.attaqueDeuxArmes != 0 && rollData.secondeArme ) { + let secondeArme = actor.items.get(secondeArme) + if (secondeArme) { + rollData.degatsArme += secondeArme.system.degats + rollData.degatsArme += actor.system.caracteristiques.for.value + } + } else { + if (rollData.arme.system.categorie == "lourde") { + rollData.degatsArme += actor.system.caracteristiques.for.value + } + if (rollData.arme.system.categorie == "blanche" || rollData.arme.system.categorie == "improvise") { + rollData.degatsArme += Math.max(0, actor.system.caracteristiques.for.value - 2) + } + if (rollData.mode == "attaquecharge") { + rollData.degatsArme += 3 + } } - if (rollData.arme.system.categorie == "blanche" || rollData.arme.system.categorie == "improvise") { - rollData.degatsArme += Math.max(0, actor.system.caracteristiques.for.value - 2) + if (rollData.attaqueCible == "membre") { + rollData.degatsArme -= 2 } - if (rollData.mode == "attaquecharge") { - rollData.degatsArme += 3 + if (rollData.attaqueCible == "main") { + rollData.degatsArme -= 3 + } + if (rollData.attaqueCible == "tete") { + rollData.degatsArme *= 3 } } @@ -417,6 +434,7 @@ export class HeritiersUtility { } rollData.diceFormula += `+${ruleMalus}` + // Gestion bonus attaque à plusieurs let bonusAttaque = rollData.bonusAttaquePlusieurs if (rollData.attaqueDos) { bonusAttaque = 2 @@ -426,6 +444,24 @@ export class HeritiersUtility { } rollData.diceFormula += `+${bonusAttaque}` + // Gestion attaque avec 2 armes + if (rollData.attaqueDeuxArmes != 0) { + rollData.diceFormula += `+${rollData.attaqueDeuxArmes}` + } + // Gestion des attaques ciblées + if (rollData.attaqueCible != "none") { + if ( rollData.attaqueCible == "membre") { + rollData.diceFormula += `-2` + } + if ( rollData.attaqueCible == "main") { + rollData.diceFormula += `-3` + } + if ( rollData.attaqueCible == "tete") { + rollData.diceFormula += `-6` + } + } + + let myRoll = new Roll(rollData.diceFormula).roll({ async: false }) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) rollData.roll = myRoll @@ -576,8 +612,11 @@ export class HeritiersUtility { sdList: game.system.lesheritiers.config.seuilsDifficulte, sdValue: -1, bonusAttaquePlusieurs: 0, + attaqueDeuxArmes: 0, attaqueDos: false, bonusMalusContext: 0, + attaqueCible: "none", + config: game.system.lesheritiers.config, rulesMalus : [] } return rollData diff --git a/system.json b/system.json index 9fcbcf4..23d3a63 100644 --- a/system.json +++ b/system.json @@ -1,7 +1,7 @@ { "id": "fvtt-les-heritiers", "description": "Les Héritiers pour FoundryVTT", - "version": "10.0.37", + "version": "10.1.0", "authors": [ { "name": "Uberwald/LeRatierBretonnien", @@ -19,7 +19,7 @@ "gridUnits": "m", "license": "LICENSE.txt", "manifest": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/raw/branch/master/system.json", - "download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-10.0.37.zip", + "download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-10.1.0.zip", "languages": [ { "lang": "fr", diff --git a/templates/chat-cc-result.html b/templates/chat-cc-result.html index 54e8202..5fb5660 100644 --- a/templates/chat-cc-result.html +++ b/templates/chat-cc-result.html @@ -23,6 +23,14 @@ {{#if isSuccess}}
  • Marge : {{marge}}
  • Degats de l'arme : {{degatsArme}}
  • + + {{#if (eq attaqueCible "membre")}} +
  • Cible un membre : La cible a -2 de malus sur ces actions avec ce membre (mouvement 2 si jambes)
  • + {{/if}} + {{#if (eq attaqueCible "main")}} +
  • Cible une main : La cible ne peut plus utiliser sa main
  • + {{/if}} + {{#if isCriticalSuccess}}
  • Critique : Aubaine ou +2 aux dégats ci-dessus
  • {{/if}} diff --git a/templates/roll-dialog-generic.html b/templates/roll-dialog-generic.html index 0b6c18c..cff7639 100644 --- a/templates/roll-dialog-generic.html +++ b/templates/roll-dialog-generic.html @@ -89,6 +89,44 @@ Attaque dans le dos ? +
    + Attaque à deux armes + +
    +
    + Seconde arme + +
    + {{/if}} + + {{#if arme}} +
  • + + +
  • + + {{/if}}