diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js
index 5d434b82..1d1b3b6b 100644
--- a/module/actor/base-actor.js
+++ b/module/actor/base-actor.js
@@ -144,7 +144,7 @@ export class RdDBaseActor extends Actor {
.forEach(async it => await it.onFinPeriodeTemporel(oldTimestamp, newTimestamp))
}
- async creerObjetParMJ(object){
+ async creerObjetParMJ(object) {
if (!Misc.isUniqueConnectedGM()) {
RdDBaseActor.remoteActorCall({
actorId: this.id,
@@ -262,7 +262,7 @@ export class RdDBaseActor extends Actor {
const quantite = (achat.choix.nombreLots ?? 1) * (achat.vente.tailleLot);
const itemVendu = vendeur?.getItem(achat.vente.item._id) ?? game.items.get(achat.vente.item._id);
if (!itemVendu) {
- ChatUtility.notifyUser(achat.userId, 'warn', vendeur ? `Le vendeur n'a pas plus de ${achat.vente.item.name} !`: `Impossible de retrouver: ${achat.vente.item.name} !`);
+ ChatUtility.notifyUser(achat.userId, 'warn', vendeur ? `Le vendeur n'a pas plus de ${achat.vente.item.name} !` : `Impossible de retrouver: ${achat.vente.item.name} !`);
return;
}
if (vendeur && !vendeur.verifierQuantite(itemVendu, quantite)) {
@@ -447,62 +447,33 @@ export class RdDBaseActor extends Actor {
/* -------------------------------------------- */
- conteneurPeutContenir(dest, item) {
+ conteneurPeutContenir(dest, moved) {
if (!dest) {
return true;
}
if (!dest.isConteneur()) {
return false;
}
- const destData = dest
- if (this._isConteneurContenu(item, dest)) {
- ui.notifications.warn(`Impossible de déplacer un conteneur parent (${item.name}) dans un de ses contenus ${destData.name} !`);
- return false; // Loop detected !
+ if (moved.isConteneurContenu(dest)) {
+ ui.notifications.warn(`Impossible de déplacer un conteneur parent (${moved.name}) dans un de ses contenus ${dest.name} !`);
+ return false;
}
// Calculer le total actuel des contenus
- let encContenu = this.getRecursiveEnc(dest) - Number(destData.system.encombrement);
- let newEnc = this.getRecursiveEnc(item); // Calculer le total actuel du nouvel objet
+ const encContenu = dest.getEncContenu();
+ const newEnc = moved.getEncTotal(); // Calculer le total actuel du nouvel objet
+ const placeDisponible = Math.roundDecimals(dest.system.capacite - encContenu - newEnc, 4)
// Teste si le conteneur de destination a suffisament de capacité pour recevoir le nouvel objet
- if (Number(destData.system.capacite) < encContenu + newEnc) {
+ if (placeDisponible < 0) {
ui.notifications.warn(
- `Le conteneur ${dest.name} a une capacité de ${destData.system.capacite}, et contient déjà ${encContenu}.
- Impossible d'y ranger: ${item.name} d'encombrement ${newEnc}!`);
+ `Le conteneur ${dest.name} a une capacité de ${dest.system.capacite}, et contient déjà ${encContenu}.
+ Impossible d'y ranger: ${moved.name} d'encombrement ${newEnc}!`);
return false;
}
return true;
}
- /* -------------------------------------------- */
- _isConteneurContenu(item, conteneur) {
- if (item?.isConteneur()) { // Si c'est un conteneur, il faut vérifier qu'on ne le déplace pas vers un sous-conteneur lui appartenant
- for (let id of item.system.contenu) {
- let subObjet = this.getItem(id);
- if (subObjet?.id == conteneur.id) {
- return true; // Loop detected !
- }
- if (subObjet?.isConteneur()) {
- return this._isConteneurContenu(subObjet, conteneur);
- }
- }
- }
- return false;
- }
- /* -------------------------------------------- */
- getRecursiveEnc(objet) {
- if (!objet) {
- return 0;
- }
- const tplData = objet.system;
- if (objet.type != 'conteneur') {
- return Number(tplData.encombrement) * Number(tplData.quantite);
- }
- const encContenus = tplData.contenu.map(idContenu => this.getRecursiveEnc(this.getItem(idContenu)));
- return encContenus.reduce(Misc.sum(), 0)
- + Number(tplData.encombrement) /* TODO? Number(tplData.quantite) -- on pourrait avoir plusieurs conteneurs...*/
- }
-
/* -------------------------------------------- */
/** Ajoute un item dans un conteneur, sur la base
* de leurs ID */
diff --git a/module/item.js b/module/item.js
index 3bda723e..946e0a3d 100644
--- a/module/item.js
+++ b/module/item.js
@@ -395,6 +395,16 @@ export class RdDItem extends Item {
return Math.max(this.system.encombrement ?? 0, 0);
}
+ getEncContenu() {
+ return this.getContenu()
+ .map(it => it.getRecursiveEnc())
+ .reduce(Misc.sum(), 0);
+ }
+
+ getRecursiveEnc() {
+ return this.getEncTotal() + this.getEncContenu()
+ }
+
getEncHerbe() {
switch (this.system.categorie) {
case 'Repos': case 'Soin': case 'Alchimie':
@@ -404,6 +414,18 @@ export class RdDItem extends Item {
}
+ getContenu() {
+ if (this.isConteneur()) {
+ return this.system.contenu.map(idContenu => this.actor.getItem(idContenu));
+ }
+ return []
+ }
+
+ isConteneurContenu(conteneur) {
+ return this.getContenu()
+ .find(it => it.id == conteneur.id || it.isConteneurContenu(conteneur))
+ }
+
valeurTotale() {
return (this.isService() ? 1 : this.getQuantite()) * this.valeur()
}
@@ -675,7 +697,7 @@ export class RdDItem extends Item {
_armeChatData() {
return [
`Compétence: ${this.system.competence}`,
- `Dommages: ${this.system.dommages} ${this.system.mortalite=='non-mortel'? '(Non mortel)':''}`,
+ `Dommages: ${this.system.dommages} ${this.system.mortalite == 'non-mortel' ? '(Non mortel)' : ''}`,
`Force minimum: ${this.system.force}`,
`Resistance: ${this.system.resistance}`,
...this._inventaireTemplateChatData()