diff --git a/module/actor.js b/module/actor.js index 165c61da..ee28c6f1 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3199,11 +3199,12 @@ export class RdDActor extends Actor { signes: this.listItemsData("signedraconique"), caracReve: this.system.carac.reve.value, pointsReve: this.getReveActuel(), - isRapide: isRapide + isRapide: isRapide, + isGM: game.user.isGM, + hasPlayerOwner: this.hasPlayerOwner } - let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', tmrFormData); - this.currentTMR = await RdDTMRDialog.create(html, this, tmrFormData); + this.currentTMR = await RdDTMRDialog.create(this, tmrFormData); this.currentTMR.render(true); } diff --git a/module/item-arme.js b/module/item-arme.js index f8eef4f7..fdd86ac2 100644 --- a/module/item-arme.js +++ b/module/item-arme.js @@ -177,7 +177,7 @@ export class RdDItemArme extends Item { equipe: true, rapide: true, force: 0, - dommages: 0, + dommages: "0", dommagesReels: 0, mortalite: 'non-mortel', competence: 'Corps à corps', diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 518b5d4f..85fd6d5d 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -151,50 +151,61 @@ export class RdDCombatManager extends Combat { } /* -------------------------------------------- */ - /** Retourne une liste triée d'actions d'armes avec le split arme1 main / arme 2 main */ + /** Retourne une liste triée d'actions d'armes avec le split arme1 main / arme 2 main / lancer */ static listActionsArmes(armes, competences, carac) { - // Gestion des armes 1/2 mains - let actionsArme = []; + let actions = []; for (const arme of armes) { - let action = duplicate(arme) - if (action.system.equipe) { - let compData = competences.find(c => c.name == action.system.competence) - - actionsArme.push(action); - action.action = 'attaque'; - action.system.dommagesReels = Number(action.system.dommages); - action.system.niveau = compData.system.niveau; - action.system.initiative = RdDCombatManager.calculInitiative(compData.system.niveau, carac[compData.system.defaut_carac].value); - // Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence - if (action.system.unemain && !action.system.deuxmains) { - action.system.mainInfo = "(1m)"; - } else if (!action.system.unemain && action.system.deuxmains) { - action.system.mainInfo = "(2m)"; - } else if (action.system.unemain && action.system.deuxmains) { - action.system.mainInfo = "(1m)"; - - const comp2m = action.system.competence.replace(" 1 main", " 2 mains"); // Replace ! - const comp = competences.find(c => c.name == comp2m) - - const arme2main = duplicate(action); - arme2main.system.mainInfo = "(2m)"; - arme2main.system.niveau = comp.system.niveau; - arme2main.system.competence = comp2m; - arme2main.system.initiative = RdDCombatManager.calculInitiative(arme2main.system.niveau, carac[comp.system.defaut_carac].value); - actionsArme.push(arme2main); - const containsSlash = action.system.dommages.includes("/"); - if (containsSlash) { - const tableauDegats = action.system.dommages.split("/"); - action.system.dommagesReels = Number(tableauDegats[0]); - arme2main.system.dommagesReels = Number(tableauDegats[1]); - } - else{ - ui.notifications.info("Les dommages de l'arme à 1/2 mains " + action.name + " ne sont pas corrects (ie sous la forme X/Y)"); - } + if (arme.system.equipe) { + const dommages = arme.system.dommages; + const tableauDommages = dommages.includes("/") ? dommages.split("/") : [dommages, dommages] ; + if (arme.system.unemain && arme.system.deuxmains && !dommages.includes("/")) { + ui.notifications.info("Les dommages de l'arme à 1/2 mains " + arme.name + " ne sont pas corrects (ie sous la forme X/Y)"); + } + if (arme.system.unemain) { + actions.push(RdDCombatManager.$prepareAttaqueArme({ + arme: arme, + infoMain: "(1 main)", + dommagesReel: Number(tableauDommages[0]), + competence: arme.system.competence, + carac: carac, + competences: competences + })); + } + if (arme.system.deuxmains) { + actions.push(RdDCombatManager.$prepareAttaqueArme({ + arme: arme, + infoMain: "(2 mains)", + dommagesReel: Number(tableauDommages[1]), + competence: arme.system.competence.replace(" 1 main", " 2 mains"), + carac: carac, + competences: competences + })); + } + if (arme.system.lancer) { + actions.push(RdDCombatManager.$prepareAttaqueArme({ + arme: arme, + infoMain: "(lancer)", + dommagesReel: Number(tableauDommages[0]), + competence: arme.system.lancer, + carac: carac, + competences: competences + })); } } } - return actionsArme.sort(Misc.ascending(armeData => armeData.name + (armeData.system.mainInfo ?? ''))); + return actions.sort(Misc.ascending(action => action.name + (action.system.infoMain ?? ''))); + } + + static $prepareAttaqueArme(infoAttaque) { + const comp = infoAttaque.competences.find(c => c.name == infoAttaque.competence); + const attaque = duplicate(infoAttaque.arme); + attaque.action = 'attaque'; + attaque.system.competence = infoAttaque.competence; + attaque.system.dommagesReels = infoAttaque.dommagesReel; + attaque.system.infoMain = infoAttaque.infoMain; + attaque.system.niveau = comp.system.niveau; + attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value); + return attaque; } static listActionsCreature(competences) { diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 84a18c8f..598128fa 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -23,7 +23,8 @@ import { RdDCalendrier } from "./rdd-calendrier.js"; export class RdDTMRDialog extends Dialog { - static async create(html, actor, tmrData) { + static async create(actor, tmrData) { + let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', tmrData); if (tmrData.mode != 'visu') { // Notification au MJ diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 7f99fc45..2b26ec10 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -203,6 +203,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html', + 'systems/foundryvtt-reve-de-dragon/templates/enum-competence-lancer.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-herbesoin-ingredient.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-heures.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html', diff --git a/template.json b/template.json index 4095f5fe..bae82505 100644 --- a/template.json +++ b/template.json @@ -644,6 +644,7 @@ "force": "0", "resistance": 0, "competence": "", + "lancer": "", "cout": 0, "portee_courte": 0, "magique": false, diff --git a/templates/dialog-tmr.html b/templates/dialog-tmr.html index 34fa509a..85dc9212 100644 --- a/templates/dialog-tmr.html +++ b/templates/dialog-tmr.html @@ -5,7 +5,15 @@