- remplace core.rollMode → core.messageMode (setting V14) - migre toutes les cles (gmroll→gm, selfroll→self, blindroll→blind) - corrige le hook renderTokenHUD pour recuperer le tokenId via app.document - ajoute un bouton combat personnalise si absent du HUD V14 - corrige le toggle combat : isCombat manquant et guard si hors combat - chat-utility : data-document-id→data-message-id pour les messages V14 - rdd-utility : idem pour findChatMessage/getChatMessageId - roll-part-possession : getBestDraconic peut retourner undefined - distance.mjs : Token→foundry.canvas.placeables.Token
51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
import { ChatUtility } from "../chat-utility.js";
|
|
import { RdDItem } from "../item.js";
|
|
import { Misc } from "../misc.js";
|
|
import { RdDTimestamp } from "../time/rdd-timestamp.js";
|
|
|
|
export class RdDItemMaladie extends RdDItem {
|
|
|
|
static get defaultIcon() {
|
|
return "systems/foundryvtt-reve-de-dragon/icons/maladies_venins/maladie.webp";
|
|
}
|
|
|
|
async calculerFinPeriodeTemporel(debut) {
|
|
return debut.addPeriode(this.system.periode.nombre, this.system.periode.unite);
|
|
}
|
|
|
|
async onFinPeriode(oldTimestamp, newTimestamp) {
|
|
await RdDItemMaladie.notifierMaladiePoison(this, oldTimestamp, newTimestamp)
|
|
}
|
|
|
|
static async notifierMaladiePoison(mal, oldTimestamp, newTimestamp) {
|
|
if (mal.actor) {
|
|
const souffrance = mal.system.identifie
|
|
? `de ${mal.name}`
|
|
: `d'un mal inconnu`
|
|
await ChatMessage.create({
|
|
whisper: ChatUtility.getOwners(mal.actor),
|
|
content: `${mal.actor.name} souffre ${souffrance} (${Misc.typeName('Item', mal.type)}): vérifiez que les effets ne se sont pas aggravés !`
|
|
})
|
|
mal.postItemToChat('gm')
|
|
await RdDItemMaladie.prolongerPeriode(mal, oldTimestamp, newTimestamp)
|
|
}
|
|
}
|
|
|
|
static async prolongerPeriode(mal, oldTimestamp, newTimestamp) {
|
|
if (mal.actor) {
|
|
// TODO: déterminer le nombre de périodes écoulées
|
|
console.log(`${mal.actor.name}: le mal ${mal.name} a atteint la fin de sa période et été prolongé`);
|
|
const current = newTimestamp;
|
|
const finPeriode = new RdDTimestamp(mal.system.temporel.fin)
|
|
const periodeSuivante = (finPeriode.compare(current) > 0 ? finPeriode : current);
|
|
const timestampFin = await mal.calculerFinPeriodeTemporel(periodeSuivante);
|
|
|
|
await mal.actor.updateEmbeddedDocuments('Item', [{
|
|
_id: mal.id,
|
|
'system.temporel.fin': foundry.utils.deepClone(timestampFin),
|
|
}])
|
|
}
|
|
}
|
|
|
|
|
|
} |