diff --git a/module/actor.js b/module/actor.js index edbe258f..ce985271 100644 --- a/module/actor.js +++ b/module/actor.js @@ -167,7 +167,7 @@ export class RdDActor extends Actor { // Initialize empty items RdDCarac.computeCarac(actorData.data); this.computeIsHautRevant(); - this.computeEncombrementTotalEtMalusArmure(); + await this.computeEncombrementTotalEtMalusArmure(); this.computePrixTotalEquipement(); this.computeEtatGeneral(); // Sanity check @@ -786,7 +786,7 @@ export class RdDActor extends Actor { let comp = this.getCompetence(compName); if (comp) { let troncList = RdDItemCompetence.isTronc(compName); - let nouveauNiveau = compValue ?? RdDItemCompetence.getNiveauBase(comp.data.categorie); + let nouveauNiveau = compValue ?? RdDItemCompetence.getNiveauBase(Misc.data(comp).data.categorie); if (troncList) { let message = "Vous avez modifié une compétence 'tronc'. Vérifiez que les compétences suivantes évoluent ensemble jusqu'au niveau 0 : "; for (let troncName of troncList) { @@ -1068,7 +1068,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async computeIsHautRevant() { + computeIsHautRevant() { const tplData = Misc.templateData(this); tplData.attributs.hautrevant.value = this.listItemsData('tete').find(it => Grammar.toLowerCaseNoAccent(it.name) == 'don de haut-reve') ? "Haut rêvant" @@ -1083,11 +1083,10 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeEncombrement() { - const tplData = Misc.templateData(this); - tplData.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) + this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) .map(it => it.data.encTotal) .reduce(Misc.sum(), 0); - return tplData.encTotal; + return this.encTotal; } /* -------------------------------------------- */ @@ -1104,12 +1103,11 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computePrixTotalEquipement() { - const tplData = Misc.templateData(this); - tplData.prixTotalEquipement = this.filterItemsData(it => it.data.prixTotal) + this.prixTotalEquipement = this.filterItemsData(it => it.data.prixTotal) .map(it => it.data.prixTotal ?? 0) .reduce(Misc.sum(), 0); // Mise à jour valeur totale de l'équipement - return tplData.prixTotalEquipement; + return this.prixTotalEquipement; } /* -------------------------------------------- */ @@ -1849,12 +1847,6 @@ export class RdDActor extends Actor { return 0; } - /* -------------------------------------------- */ - appliquerExperience(rollData) { - const callback = this.createCallbackExperience(); - if (callback.condition(rollData)) { callback.action(rollData); } - } - /* -------------------------------------------- */ createCallbackExperience() { return { @@ -1895,25 +1887,25 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async checkCompetenceXP(compName, newXP = undefined) { - let competence = this.getCompetence(compName); - if (competence && newXP && newXP == competence.data.xp) { // Si édition, mais sans changement XP + let compData = Misc.data(this.getCompetence(compName)); + if (compData && newXP && newXP == compData.data.xp) { // Si édition, mais sans changement XP return; } - newXP = (newXP) ? newXP : competence.data.xp; - if (competence && newXP > 0) { - let xpNeeded = RdDItemCompetence.getCompetenceNextXp(competence.data.niveau + 1); + newXP = (newXP) ? newXP : compData.data.xp; + if (compData && newXP > 0) { + let xpNeeded = RdDItemCompetence.getCompetenceNextXp(compData.data.niveau + 1); if (newXP >= xpNeeded) { - let newCompetence = duplicate(competence); - newCompetence.data.niveau += 1; - newCompetence.data.xp = newXP; + let newCompData = duplicate(compData); + newCompData.data.niveau += 1; + newCompData.data.xp = newXP; let xpData = { alias: this.name, - competence: newCompetence.name, - niveau: newCompetence.data.niveau, - xp: newCompetence.data.xp, - archetype: newCompetence.data.niveau_archetype, - archetypeWarning: newCompetence.data.niveau > competence.data.niveau_archetype + competence: newCompData.name, + niveau: newCompData.data.niveau, + xp: newCompData.data.xp, + archetype: newCompData.data.niveau_archetype, + archetypeWarning: newCompData.data.niveau > compData.data.niveau_archetype } ChatUtility.createChatMessage(this.name, "default", { content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html`, xpData) @@ -2198,7 +2190,7 @@ export class RdDActor extends Actor { ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`) return; } - const competence = this.getCompetence(compName); + const competence = Misc.data(this.getCompetence(compName)); if (compName && !competence) { ui.notifications.warn(`${this.name} n'a pas de compétence correspondant à ${compName}`) return; @@ -2214,14 +2206,19 @@ export class RdDActor extends Actor { show: { title: options?.title ?? '' } }; await RdDResolutionTable.rollData(rollData); - this.appliquerExperience(rollData); + this._appliquerExperienceRollData(rollData); RdDResolutionTable.displayRollData(rollData, this) return rollData.rolled; } + /* -------------------------------------------- */ + _appliquerExperienceRollData(rollData) { + const callback = this.createCallbackExperience(); + if (callback.condition(rollData)) { callback.action(rollData); } + } /* -------------------------------------------- */ async rollCompetence(name) { - let rollData = { competence: this.getCompetence(name) } + let rollData = { competence: Misc.data(this.getCompetence(name)) } if (rollData.competence.type == 'competencecreature') { if (rollData.competence.data.iscombat) { @@ -2272,7 +2269,7 @@ export class RdDActor extends Actor { async rollTache(id) { const actorData = Misc.data(this); const tacheData = Misc.data(this.getTache(id)); - const compData = duplicate(Misc.data(this.getCompetence(tacheData.data.competence))); + const compData = Misc.data(this.getCompetence(tacheData.data.competence)); compData.data.defaut_carac = tacheData.data.carac; // Patch ! let rollData = { @@ -2321,7 +2318,7 @@ export class RdDActor extends Actor { mergeObject(artData, { oeuvre: oeuvre, art: oeuvre.type, - competence: duplicate(this.getCompetence(oeuvre.data.competence ?? artData.art)), + competence: Misc.data(this.getCompetence(oeuvre.data.competence ?? artData.art)), diffLibre: - (oeuvre.data.niveau ?? 0), diffConditions: 0, use: { libre: false, conditions: true }, @@ -2383,14 +2380,14 @@ export class RdDActor extends Actor { _getCaracDanse(oeuvre) { if (oeuvre.data.agilite) { return "agilite"; } else if (oeuvre.data.apparence) { return "apparence"; } - const competence = this.getCompetence(oeuvre.data.competence); - return competence.data.defaut_carac; + const compData = Misc.data(this.getCompetence(oeuvre.data.competence)); + return compData.data.defaut_carac; } /* -------------------------------------------- */ async rollMusique(id) { const artData = { art: 'musique', verbe: 'Jouer' }; - const oeuvre = duplicate(this.getItemOfType(id, artData.art)); + const oeuvre = Misc.data(this.getItemOfType(id, artData.art)); await this._rollArt(artData, "ouie", oeuvre); } @@ -2402,7 +2399,7 @@ export class RdDActor extends Actor { proportions: 1, ajouterEquipement: false }; - const oeuvre = duplicate(this.getRecetteCuisine(id)); + const oeuvre = Misc.data(this.getRecetteCuisine(id)); await this._rollArt(artData, 'odoratgout', oeuvre, r => this._resultRecetteCuisine(r)); } @@ -2453,8 +2450,8 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async rollMeditation(id) { - let meditation = duplicate(this.getMeditation(id)); - let competence = duplicate(this.getCompetence(meditation.data.competence)); + let meditation = Misc.data(this.getMeditation(id)); + let competence = Misc.data(this.getCompetence(meditation.data.competence)); competence.data.defaut_carac = "intellect"; // Meditation = tjs avec intellect let meditationData = { competence: competence, @@ -2469,7 +2466,7 @@ export class RdDActor extends Actor { use: { libre: false, conditions: true, }, carac: {} }; - meditationData.carac["intellect"] = duplicate(Misc.templateData(this).carac["intellect"]); + meditationData.carac["intellect"] = Misc.templateData(this).carac["intellect"]; console.log("rollMeditation !!!", meditationData); @@ -2627,7 +2624,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async ajouteNombreAstral(data) { // Gestion expérience (si existante) - data.competence = this.getCompetence("astrologie"); + data.competence = Misc.data(this.getCompetence("astrologie")); data.selectedCarac = Misc.templateData(this).carac["vue"]; this._appliquerAjoutExperience(data); @@ -2762,7 +2759,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ rollArme(compName, armeName = undefined) { let arme = armeName ? this.data.items.find(it => Misc.data(it).name == armeName && RdDItemArme.isArme(it)) : undefined; - let competence = this.getCompetence(compName); + let competence = Misc.data(this.getCompetence(compName)); if (arme || armeName || (competence.type == 'competencecreature' && competence.data.iscombat)) { RdDCombat.createUsingTarget(this)?.attaque(competence, arme); @@ -3209,7 +3206,7 @@ export class RdDActor extends Actor { let recette = this.getItemOfType(recetteId, 'recettealchimique'); const actorData = Misc.data(this); if (recette) { - let competence = this.getCompetence("alchimie"); + let competence = Misc.data(this.getCompetence("alchimie")); let diffAlchimie = RdDAlchimie.getDifficulte(alchimieData); let rollData = { recette: recette, diff --git a/module/rdd-carac.js b/module/rdd-carac.js index e97c83ea..725a6e93 100644 --- a/module/rdd-carac.js +++ b/module/rdd-carac.js @@ -95,7 +95,7 @@ export class RdDCarac { * ainsi que de Perception active et volontaire. */ static isActionPhysique(selectedCarac) { - return Grammar.toLowerCaseNoAccent(selectedCarac?.label).match(/(apparence|force|agilite|dexterite|vue|ouie|odorat|empathie|melee|tir|lancer|derobee)/); + return Grammar.toLowerCaseNoAccent(selectedCarac?.label)?.match(/(apparence|force|agilite|dexterite|vue|ouie|odorat|empathie|melee|tir|lancer|derobee)/); } /* -------------------------------------------- */ diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 094fc023..f8b8fa54 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -796,11 +796,9 @@ export class RdDCombat { } // # utilisation esquive - let esquiveUsage = 0; - let esquive = this.defender.getCompetence("esquive"); - if (esquive) { - esquiveUsage = this.defender.getItemUse(esquive._id); - } + const esquive = Misc.data(this.defender.getCompetence("esquive")); + const corpsACorps = Misc.data(this.defender.getCompetence("Corps à corps")); + const esquiveUsage = esquive ? this.defender.getItemUse(esquive._id) : 0; const paramChatDefense = { passeArme: attackerRoll.passeArme, @@ -810,7 +808,7 @@ export class RdDCombat { attackerId: this.attackerId, esquiveUsage: esquiveUsage, defenderTokenId: this.defenderTokenId, - mainsNues: attackerRoll.dmg.mortalite != 'mortel' && this.defender.getCompetence("Corps à corps"), + mainsNues: attackerRoll.dmg.mortalite != 'mortel' && corpsACorps, armes: this._filterArmesParade(this.defender, attackerRoll.competence, attackerRoll.arme), diffLibre: attackerRoll.ajustements?.diffLibre?.value ?? 0, attaqueParticuliere: attackerRoll.particuliere, @@ -955,12 +953,13 @@ export class RdDCombat { _prepareParade(attackerRoll, armeParade) { const compName = armeParade.data.competence; const armeAttaque = attackerRoll.arme; + const parade = Misc.data(this.defender.getCompetence(compName)); let defenderRoll = { passeArme: attackerRoll.passeArme, diffLibre: attackerRoll.diffLibre, attackerRoll: attackerRoll, - competence: this.defender.getCompetence(compName), + competence: parade, arme: armeParade, surprise: this.defender.getSurprise(true), needParadeSignificative: ReglesOptionelles.isUsing('categorieParade') && RdDItemArme.needParadeSignificative(armeAttaque, armeParade), @@ -1011,7 +1010,7 @@ export class RdDCombat { /* -------------------------------------------- */ async esquive(attackerRoll) { - let esquive = this.defender.getCompetence("esquive"); + const esquive = Misc.data(this.defender.getCompetence("esquive")); if (esquive == undefined) { ui.notifications.error(this.defender.name + " n'a pas de compétence 'esquive'"); return; diff --git a/module/rdd-roll.js b/module/rdd-roll.js index b6d36add..2ee9d7d9 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -268,7 +268,7 @@ export class RdDRoll extends Dialog { let dmgText = Misc.toSignedString(rollData.dmg.total); if (rollData.coupsNonMortels) { - dmgText = '(' + dmgText + ')'; + dmgText = `(${dmgText}) non-mortel` } if (rollData.selectedSort) { rollData.bonus = RdDItemSort.getCaseBonus(rollData.selectedSort, rollData.tmr.coord); @@ -287,7 +287,7 @@ export class RdDRoll extends Dialog { // Mise à jour valeurs $("#compdialogTitle").text(this._getTitle(rollData)); $('#coupsNonMortels').prop('checked', rollData.coupsNonMortels); - $("#dmg-arme-actor").text(dmgText); + $(".dmg-arme-actor").text(dmgText); $('.table-ajustement').remove(); $(".table-resolution").remove(); $(".table-proba-reussite").remove(); @@ -353,9 +353,9 @@ export class RdDRoll extends Dialog { const niveau = Misc.toSignedString(rollData.competence.data.niveau); if (compName == carac) { // cas des créatures - return carac + " " + niveau + return carac + " Niveau " + niveau } const armeTitle = (rollData.arme) ? " (" + rollData.arme.name + ") " : ""; - return carac + "/" + compName + armeTitle + " " + niveau + return carac + "/" + compName + armeTitle + " Niveau " + niveau } } diff --git a/module/rolldata-ajustements.js b/module/rolldata-ajustements.js index 1164a345..5a638e38 100644 --- a/module/rolldata-ajustements.js +++ b/module/rolldata-ajustements.js @@ -55,7 +55,7 @@ export const referenceAjustements = { getValue: (rollData, actor) => actor.getEtatGeneral() }, malusArmure: { - isVisible: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.competence), + isVisible: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac), isUsed: (rollData, actor) => RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac), getLabel: (rollData, actor) => 'Malus armure', getValue: (rollData, actor) => actor.getMalusArmure() @@ -131,6 +131,7 @@ export class RollDataAjustements { for (var key in referenceAjustements) { const reference = referenceAjustements[key]; rollData.ajustements[key] = { + visible: reference.isVisible && reference.isVisible(rollData, actor), used: reference.isUsed(rollData, actor), label: reference.getLabel && reference.getLabel(rollData, actor), value: reference.getValue && reference.getValue(rollData, actor), diff --git a/styles/simple.css b/styles/simple.css index 845bc07e..e5e83279 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -855,8 +855,7 @@ ul, li { /* Position the tooltip text */ position: absolute; z-index: 1; - top: -10px; - left: 18%; + left: 25px; /* Fade in tooltip */ visibility: hidden; diff --git a/templates/dialog-competence.html b/templates/dialog-competence.html index c4ba4d0e..5d7cebbf 100644 --- a/templates/dialog-competence.html +++ b/templates/dialog-competence.html @@ -1,82 +1,112 @@

-
- - - -
- - Sans appel au moral -
-
-
- {{#if attackerRoll}} - - - {{else}} - - - {{/if}} - - -
-{{#if arme}} -
+
+
+
+ + +
+ {{#if arme}} {{#if attackerRoll}} - {{#if attackerRoll.tactique}} - + {{#if attackerRoll.tactique}} +
+ +
{{/if}} - - - {{else}} - - - -
-
- Charge : Les longueurs d'armes n'interviennent pas dans la charge, il faut gérer une initiative aléatoire dans ce cas. -
Feinte : Vous devez avoir l'initative sur votre adversaire et y renoncer. + {{else}} +
+ + + +
+
+ Charge : Les longueurs d'armes n'interviennent pas dans la charge, il faut gérer une initiative aléatoire dans ce cas. +
Feinte : Vous devez avoir l'initative sur votre adversaire et y renoncer. +
-
- - - - + +
{{/if}} {{#if ajustements.attaqueDefenseurSurpris.used}} - +
+ +
{{/if}} + {{/if}} + + {{#if arme}} + {{#unless attackerRoll}} +
+ {{#if (eq arme.data.mortalite 'non-mortel')}} + + {{else}} + + + + + + {{/if}} +
+ {{/unless}} + {{/if}} + + {{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-surenc.html"}} + {{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-enctotal.html"}}
-{{/if}} -{{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-surenc.html"}} -{{>"systems/foundryvtt-reve-de-dragon/templates/dialog-roll-enctotal.html"}} - -
+
+
+ {{#if attackerRoll}} + + + {{else}} + + + {{/if}} +
+
+
+
+ + +
+
+ +
+ + Sans appel au moral +
+
+
+
+
+
diff --git a/templates/dialog-roll-enctotal.html b/templates/dialog-roll-enctotal.html index 2a27210c..dfe959d0 100644 --- a/templates/dialog-roll-enctotal.html +++ b/templates/dialog-roll-enctotal.html @@ -1,6 +1,8 @@ {{#if ajustements.encTotal.visible}} -
- - +
+
{{/if}} diff --git a/templates/dialog-roll-surenc.html b/templates/dialog-roll-surenc.html index 5919724d..0f59e227 100644 --- a/templates/dialog-roll-surenc.html +++ b/templates/dialog-roll-surenc.html @@ -1,6 +1,8 @@ {{#if surencMalusFlag}} -
- - +
+
{{/if}}