diff --git a/modules/hawkmoon-actor-sheet.js b/modules/hawkmoon-actor-sheet.js index 952ebe0..3266670 100644 --- a/modules/hawkmoon-actor-sheet.js +++ b/modules/hawkmoon-actor-sheet.js @@ -124,7 +124,7 @@ export class HawkmoonActorSheet extends ActorSheet { }) html.find('.roll-initiative').click((event) => { - this.actor.rollAttribut("pre", true) + this.actor.rollAttribut("adr", true) }) html.find('.roll-attribut').click((event) => { diff --git a/modules/hawkmoon-actor.js b/modules/hawkmoon-actor.js index ddde785..703a3aa 100644 --- a/modules/hawkmoon-actor.js +++ b/modules/hawkmoon-actor.js @@ -77,12 +77,16 @@ export class HawkmoonActor extends Actor { arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense arme.system.isdefense = true + arme.system.isMelee = true + arme.system.isDistance = false } if (arme.system.typearme == "jet" || arme.system.typearme == "tir") { arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance")) arme.system.attrKey = "adr" arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalDegats = arme.system.degats + arme.system.isMelee = false + arme.system.isDistance = true if (arme.system.isdefense) { arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense } @@ -588,13 +592,19 @@ export class HawkmoonActor extends Actor { } /* -------------------------------------------- */ - async rollArmeDegats(armeId, targetVigueur = undefined) { + async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) { let arme = this.items.get(armeId) if (arme.type == "arme") { arme = this.prepareArme(arme) } console.log("DEGATS", arme) - let roll = new Roll("1d10+" + arme.system.totalDegats).roll({ async: false }) + let roll + if (rollDataInput?.isHeroique) { + roll = new Roll("2d10rr10+" + arme.system.totalDegats).roll({ async: false }) + + } else { + roll = new Roll("1d10+" + arme.system.totalDegats).roll({ async: false }) + } await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode")); let nbEtatPerdus = 0 if (targetVigueur) { diff --git a/modules/hawkmoon-roll-dialog.js b/modules/hawkmoon-roll-dialog.js index 80487cd..d319038 100644 --- a/modules/hawkmoon-roll-dialog.js +++ b/modules/hawkmoon-roll-dialog.js @@ -72,9 +72,39 @@ export class HawkmoonRollDialog extends Dialog { html.find('#competence-talents').change((event) => { this.rollData.selectedTalents = $('#competence-talents').val() }) + html.find('#taille-cible').change((event) => { + this.rollData.tailleCible = String(event.currentTarget.value) + }) + html.find('#tireur-deplacement').change((event) => { + this.rollData.tireurDeplacement = String(event.currentTarget.value) + }) + html.find('#cible-couvert').change((event) => { + this.rollData.cibleCouvert = String(event.currentTarget.value) + }) + html.find('#distance-tir').change((event) => { + this.rollData.distanceTir = String(event.currentTarget.value) + }) html.find('#bonus-malus-context').change((event) => { this.rollData.bonusMalusContext = Number(event.currentTarget.value) }) + html.find('#defenseur-au-sol').change((event) => { + this.rollData.defenseurAuSol = event.currentTarget.checked + }) + html.find('#defenseur-aveugle').change((event) => { + this.rollData.defenseurAveugle = event.currentTarget.checked + }) + html.find('#defenseur-de-dos').change((event) => { + this.rollData.defenseurDeDos = event.currentTarget.checked + }) + html.find('#defenseur-restreint').change((event) => { + this.rollData.defenseurRestreint = event.currentTarget.checked + }) + html.find('#defenseur-immobilise').change((event) => { + this.rollData.defenseurImmobilise = event.currentTarget.checked + }) + + + } } \ No newline at end of file diff --git a/modules/hawkmoon-utility.js b/modules/hawkmoon-utility.js index b196e39..9c2060e 100644 --- a/modules/hawkmoon-utility.js +++ b/modules/hawkmoon-utility.js @@ -2,6 +2,12 @@ import { HawkmoonCombat } from "./hawkmoon-combat.js"; import { HawkmoonCommands } from "./hawkmoon-commands.js"; +/* -------------------------------------------- */ +const __distanceDifficulte = { "porteecourte": 5, "porteemoyenne": 9, "porteelongue": 14} +const __tireurDeplacement = { immobile: 0, lent: 3, rapide: 5} +const __cibleCouvert = { aucun: 0, leger: 5, complet: 10} +const __tailleCible = { normal: 0, main: 10, enfant: 3, maison: -10} + /* -------------------------------------------- */ export class HawkmoonUtility { @@ -145,7 +151,7 @@ export class HawkmoonUtility { let message = game.messages.get(messageId) let rollData = message.getFlag("world", "hawkmoon-roll") let actor = this.getActorFromRollData(rollData) - actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur) + actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur, rollData) }) } @@ -393,7 +399,34 @@ export class HawkmoonUtility { } else { rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}` } - + // Bonus arme naturelle en défense + if (rollData.bonusArmeNaturelle) { + rollData.diceFormula += `+${rollData.bonusArmeNaturelle}` + } + if (rollData.defenseurAuSol) { + rollData.diceFormula += `+3` + } + if (rollData.defenseurAveugle) { + rollData.diceFormula += `+10` + } + if (rollData.defenseurDeDos) { + rollData.diceFormula += `+5` + } + if (rollData.defenseurRestreint) { + rollData.diceFormula += `+3` + } + if (rollData.defenseurImmobilise) { + rollData.diceFormula += `+5` + } + + if (rollData.arme && rollData.arme.system.isDistance) { + rollData.difficulte = __distanceDifficulte[rollData.distanceTir] + rollData.difficulte += __tireurDeplacement[rollData.tireurDeplacement] + rollData.difficulte += __cibleCouvert[rollData.cibleCouvert] + rollData.difficulte += __tailleCible[rollData.tailleCible] + rollData.difficulte += rollData.cibleDeplace ? 3 : 0 + rollData.difficulte += rollData.cibleCaC ? 3 : 0 + } // Ajout adversités rollData.diceFormula += `-${rollData.nbAdversites}` @@ -528,7 +561,17 @@ export class HawkmoonUtility { pointAmeOptions: this.getPointAmeOptions(), difficulte: 0, modificateur: 0, - bonusMalusContext: 0 + bonusMalusContext: 0, + bonusArmeNaturelle: 0, + defenseurAveugle: false, + defenseurDeDos: false, + defenseurAuSol: false, + defenseurRestreint: false, + defenseurImmobilise: false, + tailleCible: "normal", + tireurDeplacement: "immobile", + cibleCouvert: "aucun", + distanceTir: "porteemoyenne" } return rollData } @@ -541,8 +584,14 @@ export class HawkmoonUtility { let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor rollData.armeDefense = defender.getBestDefenseValue() rollData.targetVigueur = defender.getVigueur() + rollData.protectionDefenseur = defender.getProtection() if (rollData.armeDefense) { rollData.difficulte = rollData.armeDefense.system.totalDefensif + if ( !rollData.arme.system.armenaturelle && !rollData.arme.system.armefortune ){ + if (rollData.armeDefense.system.armenaturelle || rollData.armeDefense.system.armefortune) { + rollData.bonusArmeNaturelle = 3 + } + } } else { ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.") } diff --git a/system.json b/system.json index 061f2a6..90a0dfc 100644 --- a/system.json +++ b/system.json @@ -1,7 +1,7 @@ { "id": "fvtt-hawkmoon-cyd", "description": "Hawkmoon RPG for FoundryVTT (CYD system - French)", - "version": "10.1.12", + "version": "10.1.14", "authors": [ { "name": "Uberwald/LeRatierBretonnien", @@ -35,7 +35,7 @@ "gridUnits": "m", "license": "LICENSE.txt", "manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json", - "download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-10.1.12.zip", + "download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-10.1.14.zip", "languages": [ { "lang": "fr", diff --git a/template.json b/template.json index ed85da1..127c8d5 100644 --- a/template.json +++ b/template.json @@ -209,6 +209,8 @@ }, "arme": { "typearme": "", + "armenaturelle": false, + "armefortune": false, "bonusmaniementoff": 0, "seuildefense": 0, "onlevelonly": false, diff --git a/templates/chat-generic-result.html b/templates/chat-generic-result.html index b4e3510..d3e50a1 100644 --- a/templates/chat-generic-result.html +++ b/templates/chat-generic-result.html @@ -43,6 +43,8 @@
  • Total : {{finalResult}}
  • {{#if difficulte}} +
  • SD : {{difficulte}}
  • + {{#if isSuccess}}
  • Succés...
  • diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html index 2765ad5..2c1a235 100644 --- a/templates/item-arme-sheet.html +++ b/templates/item-arme-sheet.html @@ -23,6 +23,14 @@ {{/select}} +
  • + + +
  • +
  • + + +
  • {{/if}} + {{#if arme}} + {{#if arme.system.isMelee}} + {{#if bonusArmeNaturelle}} +
    + Arme naturelle/fortune en défense + {{bonusArmeNaturelle}} +
    + {{/if}} +
    + En surplomb ou défenseur au sol (+3)? + +
    +
    + Défenseur aveuglé (+10)? + +
    +
    + Défenseur de dos (+5)? + +
    +
    + Défenseur dans espace restreint (+3)? + +
    +
    + Défenseur immobilisé (+5)? + +
    + {{else}} +
    + Tireur en déplacement ? + +
    +
    + Couvert de la cible ? + +
    +
    + Cible se déplace vite (SD+3)? + +
    +
    + Cible corps à corps (SD+3)? + +
    +
    + Taille de la cible ? + +
    + {{/if}} + {{/if}} +
    Bonus/Malus + {{#select distanceTir}} + + + + {{/select}} + +
    + {{else}} +
    + Défense adversaire : + {{difficulte}} +
    + {{/if}} + {{else}} + {{#if isInit}} {{else}} -
    - Difficulté : - +
    + Difficulté : + +
    {{/if}} -
    {{/if}}