simplification pre-update checkCompetence
This commit is contained in:
+2
-35
@@ -1571,34 +1571,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async checkCompetenceXP(compName, newXP, display = true) {
|
async checkCompetenceXP(compName, newXP, display = true) {
|
||||||
let compData = this.getCompetence(compName);
|
return this.getCompetence(compName)?.checkCompetenceXP( newXP, display)
|
||||||
if (compData && newXP && newXP == compData.system.xp) { // Si édition, mais sans changement XP
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
newXP = (newXP) ? newXP : compData.system.xp;
|
|
||||||
if (compData && newXP > 0) {
|
|
||||||
let xpNeeded = RdDItemCompetence.getCompetenceNextXp(compData.system.niveau + 1);
|
|
||||||
if (newXP >= xpNeeded) {
|
|
||||||
let newCompData = foundry.utils.duplicate(compData);
|
|
||||||
newCompData.system.niveau += 1;
|
|
||||||
newCompData.system.xp = newXP;
|
|
||||||
let checkXp = {
|
|
||||||
alias: this.getAlias(),
|
|
||||||
competence: newCompData.name,
|
|
||||||
niveau: newCompData.system.niveau,
|
|
||||||
xp: newCompData.system.xp,
|
|
||||||
archetype: newCompData.system.niveau_archetype,
|
|
||||||
archetypeWarning: newCompData.system.niveau > compData.system.niveau_archetype
|
|
||||||
}
|
|
||||||
if (display) {
|
|
||||||
ChatMessage.create({
|
|
||||||
whisper: ChatUtility.getOwners(this),
|
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.hbs`, checkXp)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return checkXp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -2250,7 +2223,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
const from = Number(xpData.competence.system.xp);
|
const from = Number(xpData.competence.system.xp);
|
||||||
const to = from + xpData.xpCompetence;
|
const to = from + xpData.xpCompetence;
|
||||||
await this.updateEmbeddedDocuments('Item', [{ _id: xpData.competence._id, 'system.xp': to }]);
|
await this.updateEmbeddedDocuments('Item', [{ _id: xpData.competence._id, 'system.xp': to }]);
|
||||||
xpData.checkComp = await this.checkCompetenceXP(xpData.competence.name, undefined, false);
|
xpData.checkComp = await this.checkCompetenceXP(xpData.competence.name, undefined, false)
|
||||||
await ExperienceLog.add(this, XP_TOPIC.XP, from, to, xpData.competence.name);
|
await ExperienceLog.add(this, XP_TOPIC.XP, from, to, xpData.competence.name);
|
||||||
return [xpData]
|
return [xpData]
|
||||||
}
|
}
|
||||||
@@ -2891,12 +2864,6 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potion.supprimer });
|
await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potion.supprimer });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async onPreUpdateItem(item, change, options, id) {
|
|
||||||
if (item.isCompetencePersonnage() && item.system.defaut_carac && item.system.xp) {
|
|
||||||
await this.checkCompetenceXP(item.name, item.system.xp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onCreateItem(item, options, id) {
|
async onCreateItem(item, options, id) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
|
|||||||
@@ -17,6 +17,14 @@ import { CARACS } from "../rdd-carac.js";
|
|||||||
*/
|
*/
|
||||||
export class RdDBaseActorSang extends RdDBaseActorReve {
|
export class RdDBaseActorSang extends RdDBaseActorReve {
|
||||||
|
|
||||||
|
|
||||||
|
async _preUpdate(changed, options, user) {
|
||||||
|
const updatedEndurance = changed?.system?.sante?.endurance
|
||||||
|
if (updatedEndurance && options.diff) {
|
||||||
|
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
prepareActorData() {
|
prepareActorData() {
|
||||||
this.system.sante.vie.max = Math.ceil((this.getTaille() + this.getConstitution()) / 2)
|
this.system.sante.vie.max = Math.ceil((this.getTaille() + this.getConstitution()) / 2)
|
||||||
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
|
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
|
||||||
@@ -281,14 +289,6 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
return Math.max(0, Math.min(maxEndVie, maxEndGraves, maxEndCritiques));
|
return Math.max(0, Math.min(maxEndVie, maxEndGraves, maxEndCritiques));
|
||||||
}
|
}
|
||||||
|
|
||||||
async onUpdateActor(update, options, actorId) {
|
|
||||||
const updatedEndurance = update?.system?.sante?.endurance
|
|
||||||
if (updatedEndurance && options.diff) {
|
|
||||||
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
|
|
||||||
}
|
|
||||||
await super.onUpdateActor(update, options, actorId)
|
|
||||||
}
|
|
||||||
|
|
||||||
async onCreateItem(item, options, id) {
|
async onCreateItem(item, options, id) {
|
||||||
await this.changeItemEffects(item)
|
await this.changeItemEffects(item)
|
||||||
await super.onCreateItem(item, options, id)
|
await super.onCreateItem(item, options, id)
|
||||||
|
|||||||
@@ -49,11 +49,9 @@ export class RdDBaseActor extends Actor {
|
|||||||
|
|
||||||
static init() {
|
static init() {
|
||||||
Handlebars.registerHelper('actor-isFeminin', actor => actor.isFeminin())
|
Handlebars.registerHelper('actor-isFeminin', actor => actor.isFeminin())
|
||||||
Hooks.on("preUpdateItem", (item, change, options, id) => Misc.documentIfResponsible(item.parent)?.onPreUpdateItem(item, change, options, id))
|
|
||||||
Hooks.on("createItem", (item, options, id) => Misc.documentIfResponsible(item.parent)?.onCreateItem(item, options, id))
|
Hooks.on("createItem", (item, options, id) => Misc.documentIfResponsible(item.parent)?.onCreateItem(item, options, id))
|
||||||
Hooks.on("updateItem", (item, updates, options, id) => Misc.documentIfResponsible(item.parent)?.onUpdateItem(item, updates, options, id))
|
Hooks.on("updateItem", (item, updates, options, id) => Misc.documentIfResponsible(item.parent)?.onUpdateItem(item, updates, options, id))
|
||||||
Hooks.on("deleteItem", (item, options, id) => Misc.documentIfResponsible(item.parent)?.onDeleteItem(item, options, id))
|
Hooks.on("deleteItem", (item, options, id) => Misc.documentIfResponsible(item.parent)?.onDeleteItem(item, options, id))
|
||||||
Hooks.on("updateActor", (actor, change, options, actorId) => Misc.documentIfResponsible(actor)?.onUpdateActor(change, options, actorId))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static onSocketMessage(sockmsg) {
|
static onSocketMessage(sockmsg) {
|
||||||
@@ -357,11 +355,8 @@ export class RdDBaseActor extends Actor {
|
|||||||
async updateCarac(caracName, to) {
|
async updateCarac(caracName, to) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async onUpdateActor(change, options, actorId) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onPreUpdateItem(item, change, options, id) { }
|
|
||||||
|
|
||||||
async onCreateItem(item, options, id) {
|
async onCreateItem(item, options, id) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { RdDInitiative } from "./initiative.mjs";
|
import { RdDInitiative } from "./initiative.mjs";
|
||||||
import { RdDItem } from "./item.js";
|
import { RdDItem } from "./item.js";
|
||||||
@@ -71,6 +71,36 @@ export class RdDItemCompetence extends RdDItem {
|
|||||||
}
|
}
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _preUpdate(changed, options, user) {
|
||||||
|
await this.checkCompetenceXP(changed.system?.xp)
|
||||||
|
return super._preUpdate(changed, options, user)
|
||||||
|
}
|
||||||
|
|
||||||
|
async checkCompetenceXP(newXP, display = true) {
|
||||||
|
if (this.actor?.isPersonnage() && newXP && newXP != this.system.xp && newXP > 0) {
|
||||||
|
const newNiv = this.system.niveau + 1
|
||||||
|
let needed = RdDItemCompetence.getCompetenceNextXp(newNiv)
|
||||||
|
if (newXP >= needed) {
|
||||||
|
const xpData = {
|
||||||
|
alias: this.actor.getAlias(),
|
||||||
|
competence: this.name,
|
||||||
|
niveau: newNiv,
|
||||||
|
xp: newXP,
|
||||||
|
archetype: this.system.niveau_archetype,
|
||||||
|
archetypeWarning: newNiv > this.system.niveau_archetype
|
||||||
|
}
|
||||||
|
if (display) {
|
||||||
|
ChatMessage.create({
|
||||||
|
whisper: ChatUtility.getOwners(this.actor),
|
||||||
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.hbs`, xpData)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return xpData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getLabelCategorie(category) {
|
static getLabelCategorie(category) {
|
||||||
return CATEGORIES_COMPETENCES[category].label;
|
return CATEGORIES_COMPETENCES[category].label;
|
||||||
|
|||||||
Reference in New Issue
Block a user