diff --git a/module/actor-sheet.js b/module/actor-sheet.js index a273878b..75dc8495 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -132,7 +132,7 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ async _onDropActor(event, dragData) { console.log("_onDropActor", this.actor.id, dragData); - this.actor.addSubacteur(dragData.id || dragData.data._id); + this.actor.addSubActeur(dragData.id || dragData.data._id); super._onDropActor(event, dragData); } @@ -337,7 +337,7 @@ export class RdDActorSheet extends ActorSheet { ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); } }); - // Display TMR, visuualisation + // Display TMR, visualisation html.find('.visu-tmr').click(async event => { this.actor.displayTMR("visu"); }); diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index b4a33c37..1d39f106 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -112,6 +112,19 @@ export class RdDActorVehiculeSheet extends ActorSheet { const li = RdDSheetUtility.getEventElement(event); RdDUtility.confirmerSuppression(this, li); }); + html.find('.item-vendre').click(async event => { + const item = RdDSheetUtility.getItem(event, this.actor); + item?.proposerVente(); + }); + html.find('.item-montrer').click(async event => { + const item = RdDSheetUtility.getItem(event, this.actor); + item?.postItem(); + }); + + html.find('.item-action').click(async event => { + const item = RdDSheetUtility.getItem(event, this.actor); + this.actor.actionItem(item); + }); html.find('.creer-un-objet').click(async event => { RdDUtility.selectObjetType(this); diff --git a/module/actor.js b/module/actor.js index aa5a01ac..a4ded765 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1251,17 +1251,12 @@ export class RdDActor extends Actor { itemsList.push({ id: itemId, conteneurId: undefined }); // Init list sourceActor.buildSubConteneurObjetList(itemId, itemsList); // Get itemId list - let itemMap = {}; const itemsDataToCreate = itemsList.map(it => sourceActor.getObjet(it.id)) .map(it => duplicate(Misc.data(it))) .map(it => { it.data.contenu = []; return it; }); let newItems = await this.createEmbeddedDocuments('Item', itemsDataToCreate); - for (let i = 0; i < itemsList.length; i++) { - const srcItem = itemsList[i]; - const newItem = newItems[i]; - console.log('New object', newItem, srcItem); - itemMap[srcItem.id] = newItem._id; // Pour garder le lien ancien / nouveau - } + + let itemMap = this._buildMapOldNewId(itemsList, newItems); for (let item of itemsList) { // Second boucle pour traiter la remise en conteneurs // gestion conteneur/contenu @@ -1282,6 +1277,14 @@ export class RdDActor extends Actor { } } + _buildMapOldNewId(itemsList, newItems) { + let itemMap = {}; + for (let i = 0; i < itemsList.length; i++) { + itemMap[itemsList[i].id] = newItems[i].id; // Pour garder le lien ancien / nouveau + } + return itemMap; + } + async regrouperEquipementsSimilaires(item, dest) { await dest.quantiteIncDec(Misc.templateData(item).quantite); await item.delete(); @@ -2370,14 +2373,13 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective' let addMsg = ""; - let rencSpecial = this.data.items.find(item => EffetsDraconiques.isMauvaiseRencontre(item)); + let rencSpecial = EffetsDraconiques.mauvaiseRencontre(this); if (rencSpecial) { - rencSpecial = Misc.data(rencSpecial); // To keep it if (rencSpecial.type != 'souffle') { - this.deleteEmbeddedDocuments('Item', [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."; + addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres."; } ChatMessage.create({ content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg, @@ -3135,7 +3137,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente - let countMonteeLaborieuse = this.filterItemsData(it => EffetsDraconiques.isMonteeLaborieuse(it)).length; + let countMonteeLaborieuse = EffetsDraconiques.countMonteeLaborieuse(this); if (countMonteeLaborieuse > 0) { ChatMessage.create({ content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`, @@ -3895,10 +3897,10 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - addSubacteur(subActorId) { + addSubActeur(subActorId) { let subActor = game.actors.get(subActorId); //console.log("Ajout acteur : ", actor, this); - if (subActor && subActor.owner) { + if (subActor && !subActor.owner) { const actorData = Misc.data(this); if (subActor.data.type == 'vehicule') { this.pushSubacteur(subActor, actorData.data.subacteurs.vehicules, 'data.subacteurs.vehicules', 'Ce Véhicule'); diff --git a/module/rdd-combat.js b/module/rdd-combat.js index e341ed42..ea574f09 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -429,9 +429,7 @@ export class RdDCombat { else { const defender = target?.actor; const defenderTokenId = target?.data._id; - if ( defender.data._id == attacker.data._id) { - ui.notifications.warn("Vous vous attaquez vous-même !!!!"); - } else if ( defender.type == 'entite' && defender.data.data.definition.typeentite == 'nonincarne') { + if ( defender.type == 'entite' && defender.data.data.definition.typeentite == 'nonincarne') { ui.notifications.warn("Vous ne pouvez pas cibler une entité non incarnée !!!!"); } else { return this.create(attacker, defender, defenderTokenId, target) diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index e8a043c4..5185b0e2 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -589,7 +589,7 @@ export class RdDTMRDialog extends Dialog { maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' } } rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined, - rollData.competence.data.defaut_carac = 'reve-actuel'; + rollData.competence.data.defaut_carac = 'reve-actuel'; await this._rollMaitriseCaseHumide(rollData); } } diff --git a/module/tmr/effets-draconiques.js b/module/tmr/effets-draconiques.js index a8cabd23..7236b40c 100644 --- a/module/tmr/effets-draconiques.js +++ b/module/tmr/effets-draconiques.js @@ -92,43 +92,10 @@ export class EffetsDraconiques { static isPresentCite(caseTMR, coord) { return EffetsDraconiques.presentCites.isCase(caseTMR, coord); } - /* -------------------------------------------- */ - static isMauvaiseRencontre(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre')); - } - - static isMonteeLaborieuse(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')); - } /* -------------------------------------------- */ - static isFermetureCite(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.fermetureCites.match(it)); - } - - static isPontImpraticable(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pontImpraticable.match(it)); - } - - static isDoubleResistanceFleuve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve')); - } - - static isPeage(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage')); - } - - static isPeriple(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.periple.match(it)); - } - - static isDesorientation(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.desorientation.match(it)); // TODO - } - - /* -------------------------------------------- */ - static isSortImpossible(item) { - return EffetsDraconiques.isMatching(item, it => + static isSortImpossible(actor) { + return actor.data.items.find(it => EffetsDraconiques.conquete.match(it) || EffetsDraconiques.periple.match(it) || EffetsDraconiques.urgenceDraconique.match(it) || @@ -136,57 +103,57 @@ export class EffetsDraconiques { ); } - static isSortReserveImpossible(item) { - return EffetsDraconiques.isMatching(item, it => + static isSortReserveImpossible(actor) { + return actor.data.items.find(it => EffetsDraconiques.conquete.match(it) || EffetsDraconiques.periple.match(it) || EffetsDraconiques.pelerinage.match(it) ); } - static isConquete(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.conquete.match(it)); + static isDonDoubleReve(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve'); } - static isPelerinage(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pelerinage.match(it)); - } - - static countInertieDraconique(item) { - return EffetsDraconiques.count(item, it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')); - } - - static isUrgenceDraconique(item) { - return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.urgenceDraconique.match(it)); - } - - /* -------------------------------------------- */ - static isDonDoubleReve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve'); - } - - static isConnaissanceFleuve(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); - } - - static isReserveEnSecurite(item) { - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); - } - - static isDeplacementAccelere(item) { - item = Misc.data(item); - return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré')); - } - - static isMatching(item, matcher) { - return EffetsDraconiques.toItems(item).find(matcher); - } - static count(item, matcher) { - return EffetsDraconiques.toItems(item).filter(matcher).length; + static isConnaissanceFleuve(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); } - static toItems(item) { - return (item?.documentName === 'Actor') ? item.data.items : (item?.documentName === 'Item') ? [Misc.data(item)] : []; + static isReserveEnSecurite(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); } + static isDeplacementAccelere(actor) { + return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré')); + } + + static isDoubleResistanceFleuve(actor) { + return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve')); + } + + static countInertieDraconique(actor) { + return actor.data.items.filter(it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')).length; + } + + static countMonteeLaborieuse(actor) { + return actor.data.items.filter(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')).length; + } + + static mauvaiseRencontre(actor) { + return actor.data.items.find(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre')); + } + + static isPontImpraticable(actor) { + return actor.data.items.find(it => EffetsDraconiques.pontImpraticable.match(it)); + } + + static isUrgenceDraconique(actor) { + return actor.data.items.find(it => EffetsDraconiques.urgenceDraconique.match(it)); + } + + static isPeage(actor) { + return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage')); + } + + } \ No newline at end of file