Gestion d'items temporels

- Séparation des timestamp / calendrier

Les poisons/maladies/souffles/queues/rencontres/signes peuvent
être temporaires.

- Ajout de champs pour stocker les timestamps de début et fin
- définition de la durée (selon les items)
- extraction des classes spécialisées des items
- initialisation des dates de début/fin des effets temporaires à
  l'ajout d'un item temporel
- préparation de la suppression automatique
- Fix de mauvaise présentations sur les dialog d'astrologie
  et d'édition du calendrier
This commit is contained in:
2023-01-05 00:55:04 +01:00
parent 11e4ad09d3
commit 912b1d3df3
41 changed files with 1020 additions and 576 deletions

View File

@ -18,7 +18,7 @@ import { RdDItemArme } from "./item-arme.js";
import { RdDAlchimie } from "./rdd-alchimie.js";
import { STATUSES, StatusEffects } from "./settings/status-effects.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
import { RdDItemSigneDraconique } from "./item/item-signedraconique.js";
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
import { Draconique } from "./tmr/draconique.js";
@ -30,10 +30,11 @@ import { RdDPossession } from "./rdd-possession.js";
import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
import { RdDConfirm } from "./rdd-confirm.js";
import { DialogValidationEncaissement } from "./dialog-validation-encaissement.js";
import { RdDRencontre } from "./item-rencontre.js";
import { RdDRencontre } from "./item/item-rencontre.js";
import { Targets } from "./targets.js";
import { DialogRepos } from "./dialog-repos.js";
import { RdDBaseActor } from "./actor/base-actor.js";
import { RdDTimestamp } from "./rdd-timestamp.js";
const POSSESSION_SANS_DRACONIC = {
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
@ -933,7 +934,7 @@ export class RdDActor extends RdDBaseActor {
let expLog = duplicate(this.system.experiencelog);
expLog.push({
mode: Misc.upperFirst(modeXP), valeur: valeurXP, raison: Misc.upperFirst(raisonXP),
daterdd: game.system.rdd.calendrier.getDateFromIndex(),
daterdd: game.system.rdd.calendrier.dateCourante(),
datereel: `${d.getDate()}/${d.getMonth() + 1}/${d.getFullYear()}`
});
await this.update({ [`system.experiencelog`]: expLog });
@ -2727,10 +2728,10 @@ export class RdDActor extends RdDBaseActor {
/* -------------------------------------------- */
getHeureNaissance() {
if (this.isCreatureEntite()) {
return 0;
if (this.isPersonnage()) {
return this.system.heure;
}
return this.system.heure;
return 0;
}
/* -------------------------------------------- */
@ -2818,10 +2819,16 @@ export class RdDActor extends RdDBaseActor {
/* -------------------------------------------- */
async ajouteNombreAstral(callData) {
const indexDate = Number.parseInt(callData.date);
// Ajout du nombre astral
const item = {
name: "Nombre Astral", type: "nombreastral", system:
{ value: callData.nbAstral, istrue: callData.isvalid, jourindex: Number(callData.date), jourlabel: game.system.rdd.calendrier.getDateFromIndex(Number(callData.date)) }
{
value: callData.nbAstral,
istrue: callData.isvalid,
jourindex: indexDate,
jourlabel: RdDTimestamp.formatIndexDate(indexDate)
}
};
await this.createEmbeddedDocuments("Item", [item]);
// Affichage Dialog
@ -2830,7 +2837,7 @@ export class RdDActor extends RdDBaseActor {
async supprimerAnciensNombresAstraux() {
const toDelete = this.listItems('nombreastral')
.filter(it => it.system.jourindex < game.system.rdd.calendrier.getCurrentDayIndex())
.filter(it => game.system.rdd.calendrier.isAfterIndexDate(it.system.jourindex))
.map(it => it._id);
await this.deleteEmbeddedDocuments("Item", toDelete);
}
@ -3694,6 +3701,7 @@ export class RdDActor extends RdDBaseActor {
await this.onCreateOwnedDraconique(item, options, id);
break;
}
await item.onCreateItemTemporel(this);
await item.onCreateDecoupeComestible(this);
}