Compare commits

...

7 Commits

Author SHA1 Message Date
1aa34f2e1a L'armure du Bandersnatch 2025-04-22 20:16:49 +02:00
dd56c4d15e Correction: particulières sur carac dérivées 2025-04-22 20:14:24 +02:00
545b386198 Echec à la mise en réserve
Un échec au lancement de sort brise la concentration, la mise en
réserve présuppose le lancement du sort.
2025-04-22 20:12:50 +02:00
21e9c58aac Consistance chèvre
La consistance chèvre est supportée (caractères accentués)
2025-04-22 20:12:45 +02:00
9199a816c0 Amélioration message lancement sort en réserve 2025-04-22 20:12:11 +02:00
9dd905134b Correction sur les mise à jour en cascade + correction sur le force rendering après un changement de competence 2025-04-06 23:15:10 +02:00
f32b6af7b6 Correction sur les mise à jour en cascade + correction sur le force rendering après un changement de competence 2025-04-06 23:13:59 +02:00
6 changed files with 33 additions and 17 deletions

View File

@ -1,5 +1,15 @@
# 12.0 # 12.0
## 12.0.47 - La chèvre d'Astrobazzarh
- le Bandersnatch a une protection de 10
- la consistance chèvre est maintenant possible dans les recettes
alchimiques (et toutes les consistances avec accents)
- un échec au lancement d'un sort pour le mettre en réserve brise
la concentration du haut-rêvant
- Correction: les réussites particulières fonctionnent avec les caractéristiques dérivées
- Correction sur les mise à jour en cascade -
- Correction sur le force rendering après un changement de competence
## 12.0.46 - Le double demi d'Astrobazzarh ## 12.0.46 - Le double demi d'Astrobazzarh
- correction des raffraîchissement lors du sommeil qui empêchait de dormir - correction des raffraîchissement lors du sommeil qui empêchait de dormir
plusieurs heures plusieurs heures

View File

@ -668,19 +668,23 @@ export class RdDActor extends RdDBaseActorSang {
if (!RdDItemRace.checkRacialMax(this, caracName, to)) { if (!RdDItemRace.checkRacialMax(this, caracName, to)) {
return return
} }
let updates = {};
if (caracName == LIST_CARAC_PERSONNAGE.reve.code) { if (caracName == LIST_CARAC_PERSONNAGE.reve.code) {
if (to > Misc.toInt(this.system.reve.seuil.value)) { if (to > Misc.toInt(this.system.reve.seuil.value)) {
this.setPointsDeSeuil(to); updates[`system.reve.seuil.value`] = to; // SFA : Direct and packed changes
} //this.setPointsDeSeuil(to);
}
} }
if (caracName == LIST_CARAC_PERSONNAGE.chance.code) { if (caracName == LIST_CARAC_PERSONNAGE.chance.code) {
if (to > Misc.toInt(this.system.compteurs.chance.value)) { if (to > Misc.toInt(this.system.compteurs.chance.value)) {
this.setPointsDeChance(to); updates[`system.compteurs.chance.value`] = to; // SFA : Direct and packed changes
//this.setPointsDeChance(to);
} }
} }
let selectedCarac = this.findCaracByName(caracName); let selectedCarac = this.findCaracByName(caracName);
const from = selectedCarac.value const from = selectedCarac.value
await this.update({ [`system.carac.${caracName}.value`]: to }); updates[`system.carac.${caracName}.value`] = to;
await this.update(updates);
await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName); await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName);
} }
@ -784,7 +788,7 @@ export class RdDActor extends RdDBaseActorSang {
const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories()); const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories());
this.notifyCompetencesTronc(competence, toNiveau); this.notifyCompetencesTronc(competence, toNiveau);
const fromNiveau = competence.system.niveau; const fromNiveau = competence.system.niveau;
await competence.update({ 'system.niveau': toNiveau }, { render: false }) await competence.update({ 'system.niveau': toNiveau }, { render: true })
await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true); await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true);
} }
} }
@ -1761,7 +1765,7 @@ export class RdDActor extends RdDBaseActorSang {
if (reveActuel == 0) { // 0 points de reve if (reveActuel == 0) { // 0 points de reve
ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" }); ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" });
} }
if (!rollData.isSortReserve) { if (!rollData.isSortReserve || !rolled.isSuccess) {
this.tmrApp?.close(); this.tmrApp?.close();
} }
} }

View File

@ -5,7 +5,7 @@ import { RdDUtility } from "../../rdd-utility.js";
import { RdDAlchimie } from "../../rdd-alchimie.js"; import { RdDAlchimie } from "../../rdd-alchimie.js";
import { TextRollManager } from "./text-roll-formatter.js"; import { TextRollManager } from "./text-roll-formatter.js";
const REGEX_ALCHIMIE_TERMES = "(?<termes>(\\w|-)+)" const REGEX_ALCHIMIE_TERMES = "(?<termes>([-A-Za-zÀ-ÖØ-öø-ÿ ])+)"
const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))" const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))"
const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu') const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu')
const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu') const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu')

View File

@ -55,6 +55,10 @@ export class RdDItemRace extends RdDItem {
isMax(actor, code, value = undefined) { isMax(actor, code, value = undefined) {
const path = RdDCarac.carac(code)?.path const path = RdDCarac.carac(code)?.path
if (path == undefined) {
// cas des caractéristiques dérivées, pas de max
return false
}
if (value == undefined) { if (value == undefined) {
value = path ? foundry.utils.getProperty(actor, path) : 0 value = path ? foundry.utils.getProperty(actor, path) : 0
} }

View File

@ -196,7 +196,7 @@ system:
derivee: false derivee: false
protection: protection:
type: number type: number
value: 2 value: 10
label: Protection label: Protection
derivee: false derivee: false
compteurs: compteurs:

View File

@ -1,13 +1,11 @@
<img class="chat-icon" src="{{sortReserve.img}}" data-tooltip="{{sortReserve.name}}"/> <img class="chat-icon" src="{{sortReserve.img}}" data-tooltip="{{sortReserve.name}}"/>
<p> Vous avez déclenché <h4>Déclenchement de sort: {{sortReserve.name}}</h4>
{{#if sortReserve.system.echectotal}}<strong>l'échec total</strong>{{else}}le sort{{/if}} <br> Vous avez déclenché {{#if sortReserve.system.echectotal}}<strong>l'échec total</strong>{{else}}le sort{{/if}}
en réserve en réserve en {{sortReserve.system.coord}} ({{caseTmr-label sortReserve.system.coord}}).
<strong>{{sortReserve.name}}</strong> <br>Ce sort a {{sortReserve.system.ptreve}} points de Rêve
avec {{sortReserve.system.ptreve}} points de Rêve <br>L'heure ciblée est {{#if sortReserve.system.heurecible}}
en {{sortReserve.system.coord}} ({{caseTmr-label sortReserve.system.coord}}). {{timestamp-imgSigneHeure sortReserve.system.heurecible}} {{sortReserve.system.heurecible}}
L'heure ciblée est {{sortReserve.system.heurecible}} {{else}}indéterminée{{/if}}
{{timestamp-imgSigneHeure sortReserve.system.heurecible}}
</p>
{{#if sort}} {{#if sort}}
<div class="poesie-extrait poesie-overflow"> <div class="poesie-extrait poesie-overflow">
{{{sort.system.description}}} {{{sort.system.description}}}