From 583b4ff0037a5744fdc9e4e980a78f570081bd83 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 24 Aug 2025 00:46:58 +0200 Subject: [PATCH] Fix commerces --- changelog.md | 1 + module/actor/base-actor.js | 1 + module/enchantement/dialog-enchanter.js | 3 +-- module/item/item-actions.js | 28 +++++++++---------------- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/changelog.md b/changelog.md index 52c21916..4dea6baa 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,7 @@ - Les soins sont de nouveau disponibles depuis les tokens - Correction des boutons de la feuille simplifiée +- On peut de nouveau acheter dans les commerces ## 13.0.5 diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index 68da7c17..3bd2ff97 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -213,6 +213,7 @@ export class RdDBaseActor extends Actor { isCreatureEntite() { return this.isCreature() || this.isEntite() } isCreature() { return false } isEntite(typeentite = []) { return false } + isHautRevant() { return false } isVehicule() { return false } isPersonnage() { return false } getItem(id, type = undefined) { diff --git a/module/enchantement/dialog-enchanter.js b/module/enchantement/dialog-enchanter.js index ffa82f56..15e1c431 100644 --- a/module/enchantement/dialog-enchanter.js +++ b/module/enchantement/dialog-enchanter.js @@ -4,8 +4,7 @@ import { Misc } from "../misc.js" export const ACTION_ITEM_ENCHANTER = { code: 'item-enchanter', label: 'Enchanter', icon: it => 'fa-solid fa-sparkles', - filter: it => game.user.isGM || DialogEnchanter.isEnchantable(it), - optionsFilter: options => options.editable, + filter: it => game.user.isGM || DialogEnchanter.isEnchantable(it) && it.parent?.type != ACTOR_TYPES.commerce, action: (item, actor) => DialogEnchanter.enchanter(item) } diff --git a/module/item/item-actions.js b/module/item/item-actions.js index 522ac437..1d2954a9 100644 --- a/module/item/item-actions.js +++ b/module/item/item-actions.js @@ -15,21 +15,21 @@ const _SPACEHOLDER = { placeholder: true } const _VENDRE = { code: 'item-vendre', label: 'Vendre ou donner', icon: it => 'fa-solid fa-comments-dollar', filter: it => Misc.toInt(it.system.quantite) > 0, - optionsFilter: options => options.editable, action: (item, actor) => item.proposerVente() } -const _ACHAT_SERVICE = { - code: 'item-service-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins', +const _ACHETER = { + code: 'item-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins', filter: it => Misc.toInt(it.system.quantite) > 0 && it.parent?.type == ACTOR_TYPES.commerce, action: (item, actor) => actor.vente(item) } const _MONTRER = { code: 'item-montrer', label: 'Montrer', icon: it => 'fa-solid fa-comment', + allowLimited: true, action: (item, actor) => item.postItemToChat() } const _SPLIT = { code: 'item-split', label: 'Séparer le goupe', icon: it => 'fa-solid fa-unlink', - filter: it => Misc.toInt(it.system.quantite) > 1, + filter: it => Misc.toInt(it.system.quantite) > 1 && it.parent?.type != ACTOR_TYPES.commerce, action: (item, actor) => RdDSheetUtility.splitItem(item, actor) } @@ -39,7 +39,7 @@ const _EDIT = { } const _DELETE = { code: 'item-delete', label: 'Supprimer', icon: it => 'fa-solid fa-trash', - optionsFilter: options => options.editable && options.isOwner, + optionsFilter: options => options.isOwner, action: (item, actor) => RdDUtility.confirmActorItemDelete(item, actor) } const _EQUIPER = { @@ -51,30 +51,25 @@ const _EQUIPER = { const _CUISINER = { code: 'item-cuisiner', label: 'Cuisiner', icon: it => 'fa-solid fa-utensils', filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, - optionsFilter: options => options.editable, action: (item, actor) => actor.preparerNourriture(item) } const _MANGER_CRU = { code: 'item-manger-cru', label: 'Manger cru', icon: it => 'fa-solid fa-drumstick-bite', filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, - optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _MANGER = { code: 'item-manger', label: 'Manger', icon: it => 'fa-solid fa-utensils', filter: it => !(it.system.boisson), - optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _BOIRE = { code: 'item-boire', label: 'Boire', icon: it => 'fa-solid fa-glass-water', filter: it => it.system.boisson, - optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _DECOCTION = { code: 'item-decoction', label: 'Décoction', icon: it => 'fa-solid fa-flask-vial', - optionsFilter: options => options.editable, action: (item, actor) => actor.fabriquerDecoctionHerbe(item) } const _OUVRIR = { @@ -84,14 +79,12 @@ const _OUVRIR = { const _LIRE = { code: 'item-lire', label: 'Lire', icon: it => 'fa-solid fa-book-open', - optionsFilter: options => options.editable, action: (item, actor) => actor.actionLire(item) } const _REFOULER = { code: 'item-refouler', label: 'Refouler', icon: it => 'fa-solid fa-burst', filter: it => it.system.refoulement > 0, - optionsFilter: options => options.editable, action: (item, actor) => actor.actionRefoulement(item) } @@ -102,7 +95,7 @@ const _SORT_RESERVE = { } export const COMMON_ACTIONS = [_EQUIPER] -export const DEFAULT_ACTIONS = [_SPACEHOLDER, _SPLIT, _VENDRE, _MONTRER, _EDIT, _DELETE] +export const DEFAULT_ACTIONS = [_ACHETER, _SPACEHOLDER, _SPLIT, _VENDRE, _MONTRER, _EDIT, _DELETE] export const ITEM_ACTIONS = { faune: [_CUISINER, _MANGER_CRU], @@ -114,17 +107,16 @@ export const ITEM_ACTIONS = { ombre: [_REFOULER], plante: [_CUISINER, _MANGER_CRU], queue: [_REFOULER], - sort: [_SORT_RESERVE], - service: [_ACHAT_SERVICE] + sort: [_SORT_RESERVE] } - export class ItemAction { static applies(action, item, options) { return action && item && item.isActionAllowed(action.code) && (!action.filter || action.filter(item)) + && (action.allowLimited || options.editable) && (!action.optionsFilter || action.optionsFilter(options)) } @@ -136,10 +128,10 @@ export class ItemAction { } static async onActionItem(event, actor, options) { - const item = RdDSheetUtility.getItem(event, actor) const code = $(event.currentTarget).data('code') + const item = RdDSheetUtility.getItem(event, actor) const action = item?.itemActions().find(it => it.code == code) - if (action && (!action.optionsFilter || action.optionsFilter(options))) { + if (action && ItemAction.applies(action, item, options)) { await action.action(item, actor) } }