diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 131f6996..fe9a2470 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -169,8 +169,12 @@ export class RdDActorSheet extends ActorSheet { if ( dropID ) { // Dropped over an item !!! let objetId = dragData.id || dragData.data._id; if ( this.objetVersConteneur[objetId] != dropID ) { - this.actor.enleverDeConteneur(objetId, this.objetVersConteneur[objetId]); - this.actor.ajouterAConteneur(objetId, dropID); + if ( this.actor.testConteneurCapacite(objetId, dropID) ) { + this.actor.enleverDeConteneur(objetId, this.objetVersConteneur[objetId]); + this.actor.ajouterAConteneur(objetId, dropID); + } else { + ui.notifications.info("Capacité d'encombrement insuffisante dans le conteneur !"); + } } } console.log("DATA !!!!", dragData, dropID ); diff --git a/module/actor.js b/module/actor.js index 12f5fcc7..f196e47d 100644 --- a/module/actor.js +++ b/module/actor.js @@ -130,7 +130,7 @@ export class RdDActor extends Actor { let message = "Réussite particulière en attaque"; message = message + "
Attaquer en Force"; // Finesse et Rapidité seulement en mêlée et si la difficulté libre est de -1 minimum - if (rollData.selectedCarac.label == "Mêlée" && rollData.bmValue < 0 ) { + if (rollData.selectedCarac.label == "Mêlée" && rollData.diffLibre < 0 ) { message = message + "
Attaquer en Rapidité"; message = message + "
Attaquer en Finesse"; } @@ -390,6 +390,28 @@ export class RdDActor extends Actor { await this.update( {"data.compteurs": compteurs } ); } + /* -------------------------------------------- */ + /** Teste si le conteneur de destination a suffisament de capacité + * pour recevoir le nouvel objet + */ + testConteneurCapacite( itemId, conteneurId ) { + if ( !conteneurId ) return true; // pas de conteneur (porté sur soi), donc toujours OK. + let conteneur = this.items.find( conteneur => conteneurId == conteneur._id); // recup conteneur + //console.log("Conteneur trouvé : ", conteneur); + if ( conteneur && conteneur.type == "conteneur" ) { + let currentEnc = 0; // Calculer le total actuel des contenus + for (let id of conteneur.data.data.contenu) { + let objet = this.items.find( objet => (id == objet._id) ); + currentEnc += (objet) ? objet.data.data.encombrement : 0; + } + // Et gérer le nouvel objet + let nouvelObjet = this.items.find( objet => (itemId == objet._id) ); + if ( currentEnc + nouvelObjet.data.data.encombrement > Number(conteneur.data.data.capacite) ) + return false; + } + return true; + } + /* -------------------------------------------- */ /** Supprime un item d'un conteneur, sur la base * de leurs ID */ diff --git a/system.json b/system.json index e364e060..bf3ac155 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", "description": "Rêve de Dragon RPG for FoundryVTT", - "version": "0.9.43", + "version": "0.9.44", "minimumCoreVersion": "0.7.5", "compatibleCoreVersion": "0.7.6", "templateVersion": 45,