forked from public/foundryvtt-reve-de-dragon
Avancement OwnedItems et Items
- remplacer xxxOwnedItems par xxxEmbeddedDocuments - corrections des accès aux items vs itemData - corrections cases spéciales TMR et effets draconiques - correction monnaies/payer
This commit is contained in:
@ -39,12 +39,14 @@ export class RdDActor extends Actor {
|
||||
static init() {
|
||||
Hooks.on("deleteActiveEffect", (effect, options, userId) => RdDActor.getParentActor(effect)?.onDeleteActiveEffect(effect, options));
|
||||
Hooks.on("createActiveEffect", (effect, options, userId) => RdDActor.getParentActor(effect)?.onCreateActiveEffect(effect, options));
|
||||
Hooks.on("createOwnedItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateOwnedItem(item, options, id));
|
||||
Hooks.on("deleteOwnedItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteOwnedItem(item, options, id));
|
||||
|
||||
Hooks.on("preUpdateItem", (item, change, options, id) => RdDActor.getParentActor(item)?.onPreUpdateItem(item, change, options, id));
|
||||
Hooks.on("createItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateItem(item, options, id));
|
||||
Hooks.on("deleteItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteItem(item, options, id));
|
||||
Hooks.on("updateActor", (actor, change, options, actorId) => actor.onUpdateActor(change, options, actorId));
|
||||
}
|
||||
|
||||
static getParentActor(document){
|
||||
static getParentActor(document) {
|
||||
return document?.parent instanceof Actor ? document.parent : undefined
|
||||
}
|
||||
|
||||
@ -241,10 +243,10 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getObjet(id) {
|
||||
return id ? this.items.find(it => it._id == id) : undefined;
|
||||
return id ? this.data.items.find(it => it.id == id) : undefined;
|
||||
}
|
||||
getItemOfType(type, id) {
|
||||
return id ? this.items.find(it => it._id == id && it.type == type) : undefined;
|
||||
getItemOfType(id, type) {
|
||||
return id ? this.data.items.find(it => it.id == id && it.type == type) : undefined;
|
||||
}
|
||||
getMonnaie(id) {
|
||||
return this.getItemOfType(id, 'monnaie');
|
||||
@ -266,7 +268,7 @@ export class RdDActor extends Actor {
|
||||
return this.getItemOfType(id, 'musique');
|
||||
}
|
||||
getOeuvre(id, type = 'oeuvre') {
|
||||
return this.getItemOfType(type, id);
|
||||
return this.getItemOfType(id, type);
|
||||
}
|
||||
getJeu(id) {
|
||||
return this.getItemOfType(id, 'jeu');
|
||||
@ -685,7 +687,7 @@ export class RdDActor extends Actor {
|
||||
else
|
||||
update['data.carac_value'] = compValue;
|
||||
//console.log(update);
|
||||
const updated = await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
@ -706,7 +708,7 @@ export class RdDActor extends Actor {
|
||||
});
|
||||
}
|
||||
const update = { _id: comp.id, 'data.niveau': nouveauNiveau };
|
||||
await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
} else {
|
||||
console.log("Competence not found", compName);
|
||||
}
|
||||
@ -719,7 +721,7 @@ export class RdDActor extends Actor {
|
||||
compValue = compValue ?? 0;
|
||||
this.checkCompetenceXP(compName, compValue);
|
||||
const update = { _id: comp.id, 'data.xp': compValue };
|
||||
await this.updateEmbeddedDocuments("OwnedItem", update); // Updates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
} else {
|
||||
console.log("Competence not found", compName);
|
||||
}
|
||||
@ -732,7 +734,7 @@ export class RdDActor extends Actor {
|
||||
if (comp) {
|
||||
compValue = compValue ?? 0;
|
||||
const update = { _id: comp.id, 'data.xp_sort': compValue };
|
||||
await this.updateEmbeddedDocuments("OwnedItem", update); // Updates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
} else {
|
||||
console.log("Competence not found", compName);
|
||||
}
|
||||
@ -744,7 +746,7 @@ export class RdDActor extends Actor {
|
||||
if (comp) {
|
||||
compValue = compValue ?? 0;
|
||||
const update = { _id: comp.id, 'data.niveau_archetype': compValue };
|
||||
await this.updateEmbeddedDocuments("OwnedItem", update); // Updates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
} else {
|
||||
console.log("Competence not found", compName);
|
||||
}
|
||||
@ -860,10 +862,7 @@ export class RdDActor extends Actor {
|
||||
let list = [];
|
||||
list.push({ id: itemId, conteneurId: undefined }); // Init list
|
||||
this.buildSubConteneurObjetList(itemId, list);
|
||||
//console.log("List to delete", list);
|
||||
for (let item of list) {
|
||||
await this.deleteOwnedItem(item.id);
|
||||
}
|
||||
await this.deleteEmbeddedDocuments('Item', list.map(it => it.id));
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -880,7 +879,7 @@ export class RdDActor extends Actor {
|
||||
contenu.splice(index, 1);
|
||||
index = contenu.indexOf(itemId);
|
||||
}
|
||||
await this.updateEmbeddedDocuments("OwnedItem", data2use);
|
||||
await this.updateEmbeddedDocuments('Item', [data2use]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -892,7 +891,7 @@ export class RdDActor extends Actor {
|
||||
if (conteneur?.type == 'conteneur') {
|
||||
let data2use = duplicate(Misc.data(conteneur));
|
||||
data2use.data.contenu.push(itemId);
|
||||
await this.updateEmbeddedDocuments("OwnedItem", data2use);
|
||||
await this.updateEmbeddedDocuments('Item', [data2use]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -907,7 +906,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
if (conteneurFixedList.length > 0)
|
||||
await this.updateOwnedItem(conteneurFixedList);
|
||||
await this.updateEmbeddedDocuments('Item', conteneurFixedList);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -935,11 +934,11 @@ export class RdDActor extends Actor {
|
||||
console.log('New conteneur filling!', newConteneur, newItemId, item);
|
||||
let contenu = duplicate(newConteneur.data.contenu);
|
||||
contenu.push(newItemId);
|
||||
await this.updateOwnedItem({ _id: newConteneurId, 'data.contenu': contenu });
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: newConteneurId, 'data.contenu': contenu }]);
|
||||
}
|
||||
}
|
||||
for (let item of itemsList) {
|
||||
await sourceActor.deleteOwnedItem(item.id);
|
||||
await sourceActor.deleteEmbeddedDocuments('Item', [item.id]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1837,7 +1836,7 @@ export class RdDActor extends Actor {
|
||||
if (rencSpecial) {
|
||||
rencSpecial = duplicate(rencSpecial); // To keep it
|
||||
if (rencSpecial.type != 'souffle') {
|
||||
this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues
|
||||
this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues
|
||||
addMsg = " La queue a été supprimée de votre fiche automatiquement";
|
||||
} else {
|
||||
addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres manuellement.";
|
||||
@ -2075,7 +2074,7 @@ export class RdDActor extends Actor {
|
||||
async _tacheResult(rollData) {
|
||||
// Mise à jour de la tache
|
||||
rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache;
|
||||
this.updateEmbeddedDocuments("OwnedItem", rollData.tache);
|
||||
this.updateEmbeddedDocuments('Item', [rollData.tache]);
|
||||
this.santeIncDec("fatigue", rollData.tache.data.fatigue);
|
||||
|
||||
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-tache.html');
|
||||
@ -2084,7 +2083,7 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
_tacheETotal(rollData) {
|
||||
rollData.tache.data.difficulte--;
|
||||
this.updateEmbeddedDocuments("OwnedItem", rollData.tache);
|
||||
this.updateEmbeddedDocuments('Item', [rollData.tache]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -2249,7 +2248,7 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
_meditationETotal(meditationData) {
|
||||
meditationData.meditation.data.malus--;
|
||||
this.updateEmbeddedDocuments("OwnedItem", meditationData.meditation);
|
||||
this.updateEmbeddedDocuments('Item', [meditationData.meditation]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -2352,7 +2351,7 @@ export class RdDActor extends Actor {
|
||||
xpComp = xp - xpCarac;
|
||||
competence = duplicate(competence);
|
||||
competence.data.xp = Misc.toInt(competence.data.xp) + xpComp;
|
||||
await this.updateEmbeddedDocuments("OwnedItem", competence);
|
||||
await this.updateEmbeddedDocuments('Item', [competence]);
|
||||
} else {
|
||||
xpCarac = Math.max(xpCarac, 1);
|
||||
}
|
||||
@ -2386,12 +2385,12 @@ export class RdDActor extends Actor {
|
||||
name: "Nombre Astral", type: "nombreastral", data:
|
||||
{ value: data.nbAstral, istrue: data.isvalid, jourindex: Number(data.date), jourlabel: game.system.rdd.calendrier.getDateFromIndex(Number(data.date)) }
|
||||
};
|
||||
await this.createEmbeddedDocuments("OwnedItem", [item]);
|
||||
await this.createEmbeddedDocuments("Item", [item]);
|
||||
|
||||
// Suppression des anciens nombres astraux
|
||||
let toDelete = this.data.items.filter(it => it.data.jourindex < game.system.rdd.calendrier.getCurrentDayIndex());
|
||||
const deletions = toDelete.map(it => it._id);
|
||||
await this.deleteEmbeddedDocuments("OwnedItem", deletions);
|
||||
await this.deleteEmbeddedDocuments("Item", deletions);
|
||||
|
||||
// Affichage Dialog
|
||||
this.astrologieNombresAstraux();
|
||||
@ -2533,7 +2532,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getArmeParade(armeParadeId) {
|
||||
const item = armeParadeId ? this.getOwnedItem(armeParadeId) : undefined;
|
||||
const item = armeParadeId ? this.getEmbeddedDocuments('Item', armeParadeId) : undefined;
|
||||
return RdDItemArme.getArmeData(item);
|
||||
}
|
||||
|
||||
@ -2550,12 +2549,12 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equiperObjet(itemID) {
|
||||
let item = this.getOwnedItem(itemID);
|
||||
let item = this.getEmbeddedDocuments('Item', itemID);
|
||||
if (item?.data?.data) {
|
||||
let itemData = Misc.itemData(item);
|
||||
const isEquipe = !itemData.data.equipe;
|
||||
let update = { _id: item._id, "data.equipe": isEquipe };
|
||||
await this.updateEmbeddedDocuments("OwnedItem", update);
|
||||
await this.updateEmbeddedDocuments('Item', [update]);
|
||||
this.computeEncombrementTotalEtMalusArmure(); // Mise à jour encombrement
|
||||
this.computePrixTotalEquipement(); // Mis à jour du prix total de l'équipement
|
||||
if (isEquipe)
|
||||
@ -2595,7 +2594,7 @@ export class RdDActor extends Actor {
|
||||
if (!ReglesOptionelles.isUsing('deteriorationArmure')) {
|
||||
return;
|
||||
}
|
||||
let itemData = duplicate(Misc.itemData(item));
|
||||
let itemData = duplicate(Misc.data(item));
|
||||
itemData.data.deterioration = (itemData.data.deterioration ?? 0) + dmg;
|
||||
if (itemData.data.deterioration >= 10) {
|
||||
itemData.data.deterioration = 0;
|
||||
@ -2612,7 +2611,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
ChatMessage.create({ content: "Votre armure s'est détériorée, elle protège maintenant de " + itemData.data.protection });
|
||||
}
|
||||
this.updateEmbeddedDocuments("OwnedItem", itemData);
|
||||
this.updateEmbeddedDocuments('Item', [itemData]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -2857,17 +2856,18 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async optimizeArgent(sumDenier, monnaies) {
|
||||
|
||||
let parValeur = Misc.classifyFirst(monnaies, it => it.data.valeur_deniers);
|
||||
let parValeur = Misc.classifyFirst(monnaies, it => Misc.templateData(it).valeur_deniers);
|
||||
let fortune = {
|
||||
1000: Math.floor(sumDenier / 1000), // or
|
||||
100: Math.floor(sumDenier / 100) % 10, // argent
|
||||
10: Math.floor(sumDenier / 10) % 10, // bronze
|
||||
1: sumDenier % 10 // étain
|
||||
}
|
||||
let updates = []
|
||||
for (const [valeur, nombre] of Object.entries(fortune)) {
|
||||
let piece = parValeur[valeur];
|
||||
await this.updateEmbeddedDocuments("OwnedItem", { _id: piece._id, 'data.quantite': nombre });
|
||||
updates.push( { _id: parValeur[valeur]._id, 'data.quantite': nombre });
|
||||
}
|
||||
await this.updateEmbeddedDocuments('Item', updates);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -2881,8 +2881,8 @@ export class RdDActor extends Actor {
|
||||
sumDenier = Number(sumDenier);
|
||||
let denierDisponible = 0;
|
||||
|
||||
for (let piece of monnaies) {
|
||||
denierDisponible += piece.data.valeur_deniers * Number(piece.data.quantite);
|
||||
for (let pieceData of monnaies.map(m => Misc.data(m))) {
|
||||
denierDisponible += pieceData.data.valeur_deniers * Number(pieceData.data.quantite);
|
||||
}
|
||||
console.log("DENIER", game.user.character, sumDenier, denierDisponible);
|
||||
|
||||
@ -2916,7 +2916,7 @@ export class RdDActor extends Actor {
|
||||
let monnaie = this.getMonnaie(id);
|
||||
if (monnaie) {
|
||||
const quantite = Math.max(0, Misc.templateData(monnaie).quantite + value);
|
||||
await this.updateEmbeddedDocuments("OwnedItem", { _id: monnaie.id, 'data.quantite': quantite });
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: monnaie.id, 'data.quantite': quantite }]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3138,15 +3138,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async updateEmbeddedDocuments(embeddedName, data, options) {
|
||||
if (data?.type == 'competence' && data['data.defaut_carac'] && data['data.xp']) { // C'est une compétence
|
||||
this.checkCompetenceXP(data['name'], data['data.xp']);
|
||||
}
|
||||
return super.updateEmbeddedDocuments(embeddedName, [data], options);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async onCreateOwnedItem(item, options, id) {
|
||||
async onCreateItem(item, options, id) {
|
||||
switch (item.type) {
|
||||
case 'tete':
|
||||
case 'queue':
|
||||
@ -3157,7 +3149,14 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
async onDeleteOwnedItem(item, options, id) {
|
||||
async onPreUpdateItem(item, change, options, id) {
|
||||
const itemData = Misc.data(item);
|
||||
if (itemData.type == 'competence' && itemData.data.defaut_carac && itemData.data.xp) {
|
||||
await this.checkCompetenceXP(itemData.name, itemData.data.xp);
|
||||
}
|
||||
}
|
||||
|
||||
async onDeleteItem(item, options, id) {
|
||||
switch (item.type) {
|
||||
case 'tete':
|
||||
case 'queue':
|
||||
|
Reference in New Issue
Block a user