feat: validation de phase d'Expérience (réinitialisation des limites)
- Nouveau bouton « Valider la phase » sur les fiches Personnage et Groupe : incrémente experience.phase et réinitialise les limites d'apprentissage (learned.*) pour recommencer une nouvelle phase, sans repasser par le dialogue d'attribution du MJ. - Helper VermineExperience.completePhase(actor) mutualisé (personnage ou Groupe) ; i18n FR/EN.
This commit is contained in:
@@ -9,7 +9,8 @@ export default class VermineCharacterSheetV2 extends VermineBaseActorSheet {
|
||||
actions: {
|
||||
addSpecialty: VermineCharacterSheetV2.#onAddSpecialty,
|
||||
openExperiencePhase: VermineCharacterSheetV2.#onOpenExperiencePhase,
|
||||
openLearning: VermineCharacterSheetV2.#onOpenLearning
|
||||
openLearning: VermineCharacterSheetV2.#onOpenLearning,
|
||||
validatePhase: VermineCharacterSheetV2.#onValidatePhase
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,4 +126,11 @@ export default class VermineCharacterSheetV2 extends VermineBaseActorSheet {
|
||||
const dialog = await LearningDialog.create({ actorId: this.document.id })
|
||||
if (dialog) dialog.render(true)
|
||||
}
|
||||
|
||||
/** Valide la phase d'Expérience courante et réinitialise les limites. */
|
||||
static async #onValidatePhase() {
|
||||
const { VermineExperience } = await import("../../system/experience.mjs")
|
||||
await VermineExperience.completePhase(this.document)
|
||||
ui.notifications.info(game.i18n.localize("VERMINE.validate_phase_done"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,8 @@ export default class VermineGroupSheetV2 extends VermineBaseActorSheet {
|
||||
addObjective: VermineGroupSheetV2.#onAddObjective,
|
||||
createTotemAbility: VermineGroupSheetV2.#onCreateTotemAbility,
|
||||
openLearning: VermineGroupSheetV2.#onOpenLearning,
|
||||
openExperiencePhase: VermineGroupSheetV2.#onOpenExperiencePhase
|
||||
openExperiencePhase: VermineGroupSheetV2.#onOpenExperiencePhase,
|
||||
validatePhase: VermineGroupSheetV2.#onValidatePhase
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,4 +188,11 @@ export default class VermineGroupSheetV2 extends VermineBaseActorSheet {
|
||||
const dialog = await GroupLearningDialog.create({ actorId: this.document.id })
|
||||
if (dialog) dialog.render(true)
|
||||
}
|
||||
|
||||
/** Valide la phase d'Expérience courante du Groupe et réinitialise les limites. */
|
||||
static async #onValidatePhase() {
|
||||
const { VermineExperience } = await import("../../system/experience.mjs")
|
||||
await VermineExperience.completePhase(this.document)
|
||||
ui.notifications.info(game.i18n.localize("VERMINE.validate_phase_done"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,4 +213,26 @@ export class VermineExperience {
|
||||
const preferred = actor.system?.skill_categories?.preferred
|
||||
return Boolean(category && preferred && category === preferred)
|
||||
}
|
||||
|
||||
/**
|
||||
* Valide la phase d'Expérience courante : passe à la phase suivante et
|
||||
* réinitialise toutes les limites d'apprentissage (learned.*), pour un
|
||||
* personnage ou un Groupe.
|
||||
* @param {foundry.abstract.Document} actor personnage ou Groupe
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
static async completePhase(actor) {
|
||||
const ex = actor.system?.experience
|
||||
if (!ex) return
|
||||
const phase = (ex.phase || 0) + 1
|
||||
const update = { "system.experience.phase": phase }
|
||||
if (ex.learned && typeof ex.learned === "object") {
|
||||
update["system.experience.learned.phase"] = phase
|
||||
for (const key of Object.keys(ex.learned)) {
|
||||
if (key === "phase") continue
|
||||
update[`system.experience.learned.${key}`] = false
|
||||
}
|
||||
}
|
||||
await actor.update(update)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user