From 1c55491ac751c5cc0a999f772a7444ffbad5d898 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sat, 9 Dec 2023 23:20:09 +0100 Subject: [PATCH 1/5] Ajustements des tooltips TMR --- module/tmr/pixi-tmr.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/tmr/pixi-tmr.js b/module/tmr/pixi-tmr.js index 2984ad05..ce0f32de 100644 --- a/module/tmr/pixi-tmr.js +++ b/module/tmr/pixi-tmr.js @@ -58,7 +58,7 @@ export class PixiTMR { this.sizes = new TMRConstants({ size: displaySize }) const appSize = PixiTMR.computeTMRSize(this.sizes) this.pixiApp.renderer.resize(appSize.width, appSize.height) - this.tooltipStyle.fontSize = Math.max(this.sizes.size / 4, 16) + this.tooltipStyle.fontSize = Math.max(this.sizes.size / 3, 16) } get view() { @@ -199,7 +199,7 @@ export class PixiTMR { setTooltipPosition(event) { const oddq = this.sizes.computeEventOddq(event); - this.tooltip.x = oddq.x + (oddq.col > 7 ? -3 * this.sizes.full : this.sizes.quarter); + this.tooltip.x = oddq.x + (oddq.col > 7 ? -2.5 * this.sizes.full : this.sizes.quarter); this.tooltip.y = oddq.y + (oddq.row > 10 ? -this.sizes.size : 0); } From 6dd647b787835833797cfdbc07925411f1879e0b Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 10 Dec 2023 22:13:05 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Exp=C3=A9rience=20des=20caract=C3=A9ristiqu?= =?UTF-8?q?es=20d=C3=A9riv=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Une fenêtre de répartition est ouverte quand plusieurs caractéristiques peuvent recevoir l'expérience. Sinon, l'expérience est attribuée automatiquement. L'expérience n'est plus ajoutée en Force si supérieure à Taille+4 --- module/actor.js | 120 +++++++++++++++++++--------- module/actor/base-actor.js | 35 +++++--- module/dialog-choix-xp-carac.js | 84 +++++++++++++++++++ templates/chat-actor-gain-xp.html | 53 ++++++------ templates/dialog-choix-xp-carac.hbs | 43 ++++++++++ 5 files changed, 260 insertions(+), 75 deletions(-) create mode 100644 module/dialog-choix-xp-carac.js create mode 100644 templates/dialog-choix-xp-carac.hbs diff --git a/module/actor.js b/module/actor.js index 03dbd000..58e5e170 100644 --- a/module/actor.js +++ b/module/actor.js @@ -35,6 +35,7 @@ import { ExperienceLog, XP_TOPIC } from "./actor/experience-log.js"; import { TYPES } from "./item.js"; import { RdDBaseActorSang } from "./actor/base-actor-sang.js"; import { RdDCoeur } from "./coeur/rdd-coeur.js"; +import { DialogChoixXpCarac } from "./dialog-choix-xp-carac.js"; export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre'] @@ -56,21 +57,20 @@ export class RdDActor extends RdDBaseActorSang { /* -------------------------------------------- */ $computeCaracDerivee() { + this.system.carac.force.value = Math.min(this.system.carac.force.value, parseInt(this.system.carac.taille.value) + 4); - - this.system.carac.derobee.value = Math.floor(parseInt(((21 - this.system.carac.taille.value)) + parseInt(this.system.carac.agilite.value)) / 2); - let bonusDomKey = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2); - let tailleData = RdDCarac.getCaracDerivee(bonusDomKey); - this.system.attributs.plusdom.value = tailleData.plusdom; - - this.system.attributs.sconst.value = RdDCarac.calculSConst(this.system.carac.constitution.value); - this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.system.carac.taille.value).sust; - - this.system.attributs.encombrement.value = (parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2; this.system.carac.melee.value = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.agilite.value)) / 2); this.system.carac.tir.value = Math.floor((parseInt(this.system.carac.vue.value) + parseInt(this.system.carac.dexterite.value)) / 2); this.system.carac.lancer.value = Math.floor((parseInt(this.system.carac.tir.value) + parseInt(this.system.carac.force.value)) / 2); + this.system.carac.derobee.value = Math.floor(parseInt(((21 - this.system.carac.taille.value)) + parseInt(this.system.carac.agilite.value)) / 2); + let bonusDomKey = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2); + let tailleData = RdDCarac.getCaracDerivee(bonusDomKey); + this.system.attributs.plusdom.value = tailleData.plusdom; + this.system.attributs.encombrement.value = (parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2; + + this.system.attributs.sconst.value = RdDCarac.calculSConst(this.system.carac.constitution.value); + this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.system.carac.taille.value).sust; this.system.sante.vie.max = Math.ceil((parseInt(this.system.carac.taille.value) + parseInt(this.system.carac.constitution.value)) / 2); this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max) @@ -659,7 +659,7 @@ export class RdDActor extends RdDBaseActorSang { this.setPointsDeChance(to); } } - let selectedCarac = RdDBaseActor._findCaracByName(this.system.carac, caracName); + let selectedCarac = this.findCaracByName(caracName); const from = selectedCarac.value await this.update({ [`system.carac.${caracName}.value`]: to }); await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName); @@ -670,7 +670,7 @@ export class RdDActor extends RdDBaseActorSang { if (caracName == 'Taille') { return; } - let selectedCarac = RdDBaseActor._findCaracByName(this.system.carac, caracName); + let selectedCarac = this.findCaracByName(caracName); if (!selectedCarac.derivee) { const from = Number(selectedCarac.xp); await this.update({ [`system.carac.${caracName}.xp`]: to }); @@ -684,7 +684,7 @@ export class RdDActor extends RdDBaseActorSang { if (caracName == 'Taille') { return; } - let carac = RdDBaseActor._findCaracByName(this.system.carac, caracName); + let carac = this.findCaracByName(caracName); if (carac) { carac = duplicate(carac); const fromXp = Number(carac.xp); @@ -1472,8 +1472,14 @@ export class RdDActor extends RdDBaseActorSang { } /* -------------------------------------------- */ + isCaracMax(code) { + if (code == 'force' && parseInt(this.system.carac.force.value) >= parseInt(this.system.carac.taille.value) + 4) { + return true; + } + return false + } async checkCaracXP(caracName, display = true) { - let carac = RdDBaseActor._findCaracByName(this.system.carac, caracName); + let carac = this.findCaracByName(caracName); if (carac && carac.xp > 0) { const niveauSuivant = Number(carac.value) + 1; let xpNeeded = RdDCarac.getCaracNextXp(niveauSuivant); @@ -1534,8 +1540,11 @@ export class RdDActor extends RdDBaseActorSang { async appliquerAjoutExperience(rollData, hideChatMessage = 'show') { hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM) let xpData = await this._appliquerExperience(rollData.rolled, rollData.selectedCarac.label, rollData.competence, rollData.jetResistance); - if (xpData) { - const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.html`, xpData); + if (xpData.length) { + const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.html`, { + actor: this, + xpData + }); if (hideChatMessage) { ChatUtility.blindMessageToGM({ content: content }); } @@ -1698,7 +1707,7 @@ export class RdDActor extends RdDBaseActorSang { if (rollData.competence.name.includes('Thanatos')) { // Si Thanatos await this.update({ "system.reve.reve.thanatosused": true }); } - let reveActuel = this.system.reve.reve.value; + let reveActuel = parseInt(this.system.reve.reve.value) if (rolled.isSuccess) { // Réussite du sort ! if (rolled.isPart) { rollData.depenseReve = Math.max(Math.floor(rollData.depenseReve / 2), 1); @@ -2265,9 +2274,7 @@ export class RdDActor extends RdDBaseActorSang { }); return undefined; } - if (caracName == 'Vie') caracName = 'constitution'; - if (caracName == 'derobee') caracName = 'agilite'; - if (caracName == 'reve-actuel') caracName = 'reve'; + let xp = Math.abs(rolled.finalLevel); // impair: arrondi inférieur en carac let xpCarac = competence ? Math.floor(xp / 2) : Math.max(Math.floor(xp / 2), 1); @@ -2280,11 +2287,10 @@ export class RdDActor extends RdDBaseActorSang { // max 1 xp sur jets de résistance xpCarac = Math.min(1, xpCarac); } - let xpData = { alias: this.name, caracName, xpCarac, competence, xpCompetence }; - - await this._xpCompetence(xpData); - await this._xpCarac(xpData); - return xpData; + return [ + ...(await this._xpCompetence({ competence, xpCompetence })), + ...(await this._xpCarac({ caracName, xpCarac })) + ]; } /* -------------------------------------------- */ @@ -2292,31 +2298,67 @@ export class RdDActor extends RdDBaseActorSang { if (xpData.competence) { const from = Number(xpData.competence.system.xp); const to = from + xpData.xpCompetence; - let update = { _id: xpData.competence._id, 'system.xp': to }; - await this.updateEmbeddedDocuments('Item', [update]); + await this.updateEmbeddedDocuments('Item', [{ _id: xpData.competence._id, 'system.xp': to }]); xpData.checkComp = await this.checkCompetenceXP(xpData.competence.name, undefined, false); await ExperienceLog.add(this, XP_TOPIC.XP, from, to, xpData.competence.name); + return [xpData] } + return [] } /* -------------------------------------------- */ async _xpCarac(xpData) { if (xpData.xpCarac > 0) { - let carac = duplicate(this.system.carac); - let selectedCarac = RdDBaseActor._findCaracByName(carac, xpData.caracName); - if (!selectedCarac.derivee) { - const from = Number(selectedCarac.xp); - const to = from + xpData.xpCarac; - selectedCarac.xp = to; - await this.update({ "system.carac": carac }); - xpData.checkCarac = await this.checkCaracXP(selectedCarac.label, false); - await ExperienceLog.add(this, XP_TOPIC.XPCARAC, from, to, xpData.caracName); + const carac = duplicate(this.system.carac) + const code = RdDBaseActor._findCaracNode(carac, xpData.caracName) + const selectedCarac = carac[code] + if (this.isCaracMax(code)) { + ui.notifications.info(`Pas d'expérience: la caractéristique '${selectedCarac.label}' est déjà au maximum pour ${this.name}`) + return [] + } + if (selectedCarac && !selectedCarac.derivee) { + const from = Number(selectedCarac.xp) + const to = from + xpData.xpCarac + selectedCarac.xp = to + await this.update({ "system.carac": carac }) + xpData.checkCarac = await this.checkCaracXP(selectedCarac.label, false) + await ExperienceLog.add(this, XP_TOPIC.XPCARAC, from, to, xpData.caracName) + return [xpData] } else { - xpData.caracRepartitionManuelle = true; + return await this._xpCaracDerivee(xpData) } } + return [] } + async _xpCaracDerivee(xpData) { + const caracs = RdDActor._getComposantsCaracDerivee(xpData.caracName) + .map(c => mergeObject(this.system.carac[c], { isMax: this.isCaracMax(c) })) + switch (caracs.filter(it => !it.isMax).length) { + case 0: + xpData.caracRepartitionManuelle = true; + return [xpData] + case 1: + xpData.caracName = caracs.find(it => !it.isMax).label + return this._xpCarac(xpData) + default: + await DialogChoixXpCarac.choix(this, xpData, caracs) + return [] + } + } + + static _getComposantsCaracDerivee(caracName) { + switch (Grammar.toLowerCaseNoAccent(caracName)) { + case 'vie': return ['constitution'] + case 'tir': return ['vue', 'dexterite'] + case 'lancer': return ['force', 'dexterite', 'vue'] + case 'melee': return ['force', 'agilite'] + case 'derobee': return ['agilite'] + } + return [] + } + + /* -------------------------------------------- */ async resetNombresAstraux() { const deletions = this.itemTypes['nombreastral'].map(it => it._id); @@ -2418,7 +2460,7 @@ export class RdDActor extends RdDBaseActorSang { draconic: this.getDraconicList(), sort: this.itemTypes['sort'], signes: this.itemTypes['signedraconique'], - caracReve: this.system.carac.reve.value, + caracReve: parseInt(this.system.carac.reve.value), pointsReve: this.getReveActuel(), isRapide: isRapide, isGM: game.user.isGM, @@ -2509,7 +2551,7 @@ export class RdDActor extends RdDBaseActorSang { /* -------------------------------------------- */ verifierForceMin(item) { - if (item.type == 'arme' && item.system.force > this.system.carac.force.value) { + if (item.type == 'arme' && item.system.force > parseInt(this.system.carac.force.value)) { ChatMessage.create({ content: `${this.name} s'est équipé(e) de l'arme ${item.name}, mais n'a pas une force suffisante pour l'utiliser normalement (${item.system.force} nécessaire pour une Force de ${this.system.carac.force.value})` diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index 6ae29da5..2cd4f79c 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -11,16 +11,14 @@ import { SystemCompendiums } from "../settings/system-compendiums.js"; import { APP_ASTROLOGIE_REFRESH } from "../sommeil/app-astrologie.js"; export class RdDBaseActor extends Actor { - /* -------------------------------------------- */ - static _findCaracByName(carac, name) { - name = Grammar.toLowerCaseNoAccent(name); - switch (name) { - case 'reve-actuel': case 'reve actuel': - return carac.reve; - case 'chance-actuelle': case 'chance actuelle': - return carac.chance; - } + static _findCaracNode(carac, name) { + return Object.entries(carac) + .filter(it => Grammar.equalsInsensitive(it[1].label, name)) + .map(it => it[0]) + .find(it => it); + } + static $findCaracByName(carac, name) { const caracList = Object.entries(carac); let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' }); if (!entry || entry.length == 0) { @@ -135,6 +133,21 @@ export class RdDBaseActor extends Actor { super(docData, context); } + findCaracByName(name) { + name = Grammar.toLowerCaseNoAccent(name) + switch (name) { + case 'reve-actuel': case 'reve actuel': + return this.system.carac.reve + case 'chance-actuelle': case 'chance actuelle': + return this.system.carac.chance + case 'vie': + return this.system.sante.vie + } + + const carac = this.system.carac; + return RdDBaseActor.$findCaracByName(carac, name); + } + getCaracByName(name) { switch (Grammar.toLowerCaseNoAccent(name)) { case 'reve-actuel': case 'reve actuel': @@ -142,7 +155,7 @@ export class RdDBaseActor extends Actor { case 'chance-actuelle': case 'chance-actuelle': return this.getCaracChanceActuelle(); } - return RdDBaseActor._findCaracByName(this.system.carac, name); + return this.findCaracByName(name); } /* -------------------------------------------- */ @@ -187,7 +200,7 @@ export class RdDBaseActor extends Actor { } listeSuivants(filter = suivant => true) { return [] } - listeSuivants(filter = suivant =>true) { return [] } + listeSuivants(filter = suivant => true) { return [] } listItems(type = undefined) { return (type ? this.itemTypes[type] : this.items); } filterItems(filter, type = undefined) { return (type ? this.itemTypes[type] : this.items)?.filter(filter) ?? []; } findItemLike(idOrName, type) { diff --git a/module/dialog-choix-xp-carac.js b/module/dialog-choix-xp-carac.js new file mode 100644 index 00000000..24038f5d --- /dev/null +++ b/module/dialog-choix-xp-carac.js @@ -0,0 +1,84 @@ + +export class DialogChoixXpCarac extends Dialog { + + static async choix(actor, xpData, caracs) { + caracs = caracs.map(it => mergeObject({ ajout: 0 }, it)) + xpData = mergeObject({ reste: xpData.xpCarac }, xpData) + const dialogData = { + title: `Choisissez la répartition d'expérience`, + content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-choix-xp-carac.hbs", { + actor, + caracDerivee: actor.findCaracByName(xpData.caracName), + xpData, + caracs + }), + } + + const dialogOptions = { + classes: ["rdd-dialog-select"], + width: 400, + height: 'fit-content', + 'z-index': 99999 + } + new DialogChoixXpCarac(dialogData, dialogOptions, actor, xpData, caracs).render(true) + } + + constructor(dialogData, dialogOptions, actor, xpData, caracs) { + dialogData = mergeObject(dialogData, { + default: 'appliquer', + buttons: { + 'appliquer': { icon:'', label: "Ajouter la répartition", callback: it => this.appliquerSelection() } + } + }) + super(dialogData, dialogOptions) + this.actor = actor + this.xpData = xpData + this.caracs = caracs + } + + activateListeners(html) { + //TODO + super.activateListeners(html) + this.html = html + this.html.find("li.xpCarac-option .xpCarac-moins").click(event => + this.ajouterXp(event, -1) + ) + this.html.find("li.xpCarac-option .xpCarac-plus").click(event => + this.ajouterXp(event, 1) + ) + } + + async ajouterXp(event, delta) { + const liCarac = this.html.find(event.currentTarget)?.parents("li.xpCarac-option") + const label = liCarac?.data("carac-label") + const carac = this.caracs.find(c => c.label == label) + if (carac.ajout + delta < 0) { + ui.notifications.warn(`Impossible de diminuer les points à répartir en ${carac.label} en dessous de 0`) + return + } + if (this.xpData.reste - delta < 0) { + ui.notifications.warn(`Il ne reste plus de points à répartir en ${carac.label}`) + return + } + carac.ajout += delta + this.xpData.reste -= delta + liCarac.find("input.xpCarac-view-ajout").val(carac.ajout) + this.html.find("input.xpCarac-reste").val(this.xpData.reste) + } + + async appliquerSelection() { + if (this.xpData.reste > 0) { + ui.notifications.warn(`Il vous reste ${this.xpData.reste} points à répartir`) + return + } + this.caracs.filter(c => c.ajout > 0).forEach(c => { + const xpData = { caracName: c.label, xpCarac: c.ajout } + this.actor._xpCarac(xpData) + }) + await super.close() + } + + async close() { } + + _getHeaderButtons() { return [] } +} \ No newline at end of file diff --git a/templates/chat-actor-gain-xp.html b/templates/chat-actor-gain-xp.html index ec447eba..9642333e 100644 --- a/templates/chat-actor-gain-xp.html +++ b/templates/chat-actor-gain-xp.html @@ -1,26 +1,29 @@ -

{{alias}} a gagné de l'expérience en {{caracName}}{{#if competence}} / {{competence.name}}{{/if}}!

-{{#if (gt xpCarac 0)}} -
- {{xpCarac}} point{{#if (gt xpCarac 1)}}s{{/if}} - {{#if caracRepartitionManuelle}}à répartir manuellement dans la caractéristique dérivée{{else}}en{{/if}} - {{caracName}}. - {{#if checkCarac}} - L'expérience dans cette caractéristique est de {{checkCarac.xp}}, elle peut progresser! -
Vous devez ouvrir votre fiche de personnage et appliquer (ou pas) l'augmentation manuellement. + +

{{actor.name}} a gagné de l'expérience

+{{#each xpData as |it|}} + {{#if (gt it.xpCarac 0)}} +
+ {{it.xpCarac}} point{{#if (gt it.xpCarac 1)}}s{{/if}} + {{#if it.caracRepartitionManuelle}}à répartir manuellement dans la caractéristique dérivée{{else}}en{{/if}} + {{it.caracName}}. + {{#if it.checkCarac}} + L'expérience dans cette caractéristique est de {{it.checkCarac.xp}}, elle peut progresser! +
Vous devez ouvrir votre fiche de personnage et appliquer l'augmentation manuellement. + {{/if}} {{/if}} -{{/if}} - -{{#if (gt xpCompetence 0)}} -
- {{xpCompetence}} point{{#if (gt xpCompetence 1)}}s{{/if}} en {{competence.name}}. - {{#if checkComp}} - L'expérience dans cette compétence est de {{checkComp.xp}}, elle peut progresser jusqu'à {{checkComp.niveau}}! - Vous devez ouvrir votre fiche de personnage et appliquer l'augmentation manuellement. - {{#if (gt checkComp.niveau checkComp.archetype)}}
Le niveau d'archétype est de {{checkComp.archetype}}. - {{#if checkComp.archetypeWarning}} -
ATTENTION !! Si vous appliquez cette augmentation, votre compétence dépassera l'archétype. - Veuillez contrôler que votre archétype est à jour, ou bien ne pas augmenter le niveau de cette compétence. - {{/if}} - {{/if}} - {{/if}} -{{/if}} + {{#if (gt it.xpCompetence 0)}} +
+ {{it.xpCompetence}} point{{#if (gt it.xpCompetence 1)}}s{{/if}} en {{it.competence.name}}. + {{#if it.checkComp}} + L'expérience dans cette compétence est de {{it.checkComp.xp}}, elle peut progresser jusqu'à {{it.checkComp.niveau}}! + Vous devez ouvrir votre fiche de personnage et appliquer l'augmentation manuellement. + {{#if (gt it.checkComp.niveau it.checkComp.archetype)}} +
Le niveau d'archétype est de {{it.checkComp.archetype}}. + {{#if it.checkComp.archetypeWarning}} +
ATTENTION !! Si vous appliquez cette augmentation, votre compétence dépassera l'archétype. + Veuillez contrôler que votre archétype est à jour, ou bien ne pas augmenter le niveau de cette compétence. + {{/if}} + {{/if}} + {{/if}} + {{/if}} +{{/each}} \ No newline at end of file diff --git a/templates/dialog-choix-xp-carac.hbs b/templates/dialog-choix-xp-carac.hbs new file mode 100644 index 00000000..fa431766 --- /dev/null +++ b/templates/dialog-choix-xp-carac.hbs @@ -0,0 +1,43 @@ +
+
+ + +
+
+ + + + + +
    +
  • + + + + ajout +
  • + {{log 'choix-xp' @root}} + {{#each caracs as |carac key|}} + +
  • + + + + {{#if carac.isMax}} + + + + {{else}} + + + + + + + {{/if}} +
  • + {{/each}} +
+
\ No newline at end of file From f8a90fc3c330b8eec3af6d087da4a9bc9c933a38 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 10 Dec 2023 22:17:49 +0100 Subject: [PATCH 3/5] Fontawsome solid traduction de fas => fa-solid --- module/rdd-combat.js | 4 ++-- templates/actor-vehicule-sheet.html | 8 ++++---- templates/actor/commerce-inventaire-item.html | 4 ++-- templates/actor/header-compteurs-creature.html | 8 ++++---- templates/actor/header-compteurs-entitee.html | 4 ++-- templates/actor/header-compteurs.html | 16 ++++++++-------- templates/actor/inventaire-item.html | 2 +- templates/actor/inventaire-monnaie.html | 4 ++-- templates/dialog-chronologie.html | 4 ++-- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 39f23ae2..fbdfa154 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -328,8 +328,8 @@ export class RdDCombatManager extends Combat { } } options = [ - { name: "Incrémenter initiative", condition: true, icon: '', callback: target => { RdDCombatManager.incDecInit(target.data('combatant-id'), +0.01); } }, - { name: "Décrémenter initiative", condition: true, icon: '', callback: target => { RdDCombatManager.incDecInit(target.data('combatant-id'), -0.01); } } + { name: "Incrémenter initiative", condition: true, icon: '', callback: target => { RdDCombatManager.incDecInit(target.data('combatant-id'), +0.01); } }, + { name: "Décrémenter initiative", condition: true, icon: '', callback: target => { RdDCombatManager.incDecInit(target.data('combatant-id'), -0.01); } } ].concat(options); } /* -------------------------------------------- */ diff --git a/templates/actor-vehicule-sheet.html b/templates/actor-vehicule-sheet.html index 66d1a4e2..709ce3ae 100644 --- a/templates/actor-vehicule-sheet.html +++ b/templates/actor-vehicule-sheet.html @@ -12,19 +12,19 @@
  • Résistance - + / - +
  • Structure - + / - +
diff --git a/templates/actor/commerce-inventaire-item.html b/templates/actor/commerce-inventaire-item.html index 7679d591..b6548b1c 100644 --- a/templates/actor/commerce-inventaire-item.html +++ b/templates/actor/commerce-inventaire-item.html @@ -17,13 +17,13 @@ {{#unless (or (eq item.type 'service') (and (eq item.type 'conteneur') (not vide)))}} {{#if options.isOwner}} - + {{/if}} {{#if options.isOwner}} - + {{/if}} {{/unless}} diff --git a/templates/actor/header-compteurs-creature.html b/templates/actor/header-compteurs-creature.html index d896c8c4..8674ea3a 100644 --- a/templates/actor/header-compteurs-creature.html +++ b/templates/actor/header-compteurs-creature.html @@ -3,23 +3,23 @@
  • diff --git a/templates/actor/header-compteurs-entitee.html b/templates/actor/header-compteurs-entitee.html index 9a5801ad..dbf92db4 100644 --- a/templates/actor/header-compteurs-entitee.html +++ b/templates/actor/header-compteurs-entitee.html @@ -4,12 +4,12 @@
  • diff --git a/templates/actor/header-compteurs.html b/templates/actor/header-compteurs.html index 57e6ff88..23d0f0aa 100644 --- a/templates/actor/header-compteurs.html +++ b/templates/actor/header-compteurs.html @@ -3,38 +3,38 @@
  • diff --git a/templates/actor/inventaire-item.html b/templates/actor/inventaire-item.html index 074ec8c4..5dd8887e 100644 --- a/templates/actor/inventaire-item.html +++ b/templates/actor/inventaire-item.html @@ -22,7 +22,7 @@ {{#if (gt item.system.quantite 1)}} - + {{/if}} {{item.system.quantite}} {{#if (gt item.system.quantite 1)}} diff --git a/templates/actor/inventaire-monnaie.html b/templates/actor/inventaire-monnaie.html index dcf6d108..6553cbb2 100644 --- a/templates/actor/inventaire-monnaie.html +++ b/templates/actor/inventaire-monnaie.html @@ -10,7 +10,7 @@ {{#if @root.options.isOwner}} - + {{/if}} @@ -18,7 +18,7 @@ {{#if @root.options.isOwner}} - + {{/if}} diff --git a/templates/dialog-chronologie.html b/templates/dialog-chronologie.html index 44c1f3c2..6f99d4ad 100644 --- a/templates/dialog-chronologie.html +++ b/templates/dialog-chronologie.html @@ -40,8 +40,8 @@
    From 0ac5d317ce5d99c6454591096f5c0f3b59bc7b86 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 10 Dec 2023 22:19:30 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Ic=C3=B4nes=20des=20boutons=20cuisiner/mang?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/actor.js b/module/actor.js index 58e5e170..1c2e0e75 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1166,8 +1166,8 @@ export class RdDActor extends RdDBaseActorSang { title: "Nourriture brute", content: `Que faire de votre ${item.name}`, buttons: { - 'cuisiner': { icon: '', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) }, - 'manger': { icon: '', label: 'Manger cru', callback: async () => await this.mangerNourriture(item, onActionItem) } + 'cuisiner': { icon: '', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) }, + 'manger': { icon: '', label: 'Manger cru', callback: async () => await this.mangerNourriture(item, onActionItem) } } }); return utilisation.render(true); From 6b7c2ad2f9d045f98cbeb5a225373bea6731abda Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 10 Dec 2023 22:26:52 +0100 Subject: [PATCH 5/5] Version 11.2.10 --- changelog.md | 6 ++++++ system.json | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 95912fa0..b0d84536 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,10 @@ # 11.2 +## 11.2.10 - Les expériences d'Akarlikarlikar +- En cas d'expérience des caractéristiques dérivées, + - si plusieurs caractéristiques pourraient recevoir l'expérience, une fenêtre demande au joueur + - si une seule caractéristique peut recevoir de l'expérience, c'est attribué automatiquement +- Si la force est au maximum pour la taille personnage, on ne peut plus gagner d'expérience + ## 11.2.9 - La barbe d'Akarlikarlikar - Amélioration des textes de tooltips - Les tooltips sont plus dans le thème de couleur du système Rêve de Dragon diff --git a/system.json b/system.json index ce736465..4085c85b 100644 --- a/system.json +++ b/system.json @@ -1,8 +1,8 @@ { "id": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", - "version": "11.2.9", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.2.9.zip", + "version": "11.2.10", + "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.2.10.zip", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json", "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", "compatibility": {