From cdde7c5f2f394233ffc3ad95c6675045dba9f7fa Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 18 Nov 2022 03:38:17 +0100 Subject: [PATCH] Le lancer des armes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On peut maintenant configurer une arme de mélée pour être lancée --- module/actor.js | 4 +- module/item-arme.js | 2 +- module/rdd-combat.js | 89 +++++++++++++++------------ module/rdd-utility.js | 1 + template.json | 1 + templates/dialog-tmr.html | 12 +++- templates/enum-competence-lancer.html | 5 ++ templates/hud-actor-attaque.html | 2 +- templates/hud-actor-init.html | 2 +- templates/item-arme-sheet.html | 9 +++ 10 files changed, 82 insertions(+), 45 deletions(-) create mode 100644 templates/enum-competence-lancer.html diff --git a/module/actor.js b/module/actor.js index d1d060c5..ee28c6f1 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3199,7 +3199,9 @@ 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 } this.currentTMR = await RdDTMRDialog.create(this, tmrFormData); 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-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 @@ {{#if (eq mode "visu")}} +
+

Visualisation!

+
{{else}} + {{#if (and isGM hasPlayerOwner)}} +
+

Le gardien gére les TMR du joueur, le joueur ne peut pas monter dans les TMR!

+
+ {{/if}}
@@ -16,7 +24,6 @@
- {{/if}}
Lire un signe draconique
@@ -43,7 +50,8 @@ Fatigue {{{fatigue.html}}} - + {{/if}} + diff --git a/templates/enum-competence-lancer.html b/templates/enum-competence-lancer.html new file mode 100644 index 00000000..f19f1bbe --- /dev/null +++ b/templates/enum-competence-lancer.html @@ -0,0 +1,5 @@ +{{#each (trier @root.competences) as |competence key|}} +{{#if (eq competence.system.categorie 'lancer')}} + +{{/if}} +{{/each}} diff --git a/templates/hud-actor-attaque.html b/templates/hud-actor-attaque.html index 346bb572..54689bba 100644 --- a/templates/hud-actor-attaque.html +++ b/templates/hud-actor-attaque.html @@ -7,7 +7,7 @@ data-combatant-id="{{../combatant.id}}" data-action-index="{{action.index}}" title="{{action.name}}"> - + {{/unless}} {{/each}} diff --git a/templates/hud-actor-init.html b/templates/hud-actor-init.html index 9f862f3a..575beae3 100644 --- a/templates/hud-actor-init.html +++ b/templates/hud-actor-init.html @@ -6,7 +6,7 @@ data-combatant-id="{{../combatant.id}}" data-action-index="{{action.index}}" title="{{action.name}}"> - + {{/each}} {{#each commandes as |commande key|}} diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html index 94e79fe5..c86c9a72 100644 --- a/templates/item-arme-sheet.html +++ b/templates/item-arme-sheet.html @@ -11,6 +11,15 @@ {{/select}} +
+ + +