Vincent Vandemeulebrouck
53a7230f1d
Les actions dans un conteneur (ouvrir un des sous conteneurs par exemple) n'étaient pas disponibles. Ceci était lié à la structure des données contenant les droits différente pour les items et les acteurs. La gestion des droits était mélangées et faite de façons différentes. Maintenant, les "options" dans les données du formulaire contiennent les informations de droits d'accès et sont utilisées.
78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
import { DialogSplitItem } from "./dialog-split-item.js";
|
|
import { RdDItem } from "./item.js";
|
|
|
|
export class RdDSheetUtility {
|
|
|
|
static mergeDocumentRights(options, document, editable) {
|
|
const userRightLevel = game.user.isGM
|
|
? CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
|
|
: document.getUserLevel(game.user);
|
|
mergeObject(options, {
|
|
isGM: game.user.isGM,
|
|
isOwned: document.parent,
|
|
editable: editable,
|
|
cssClass: editable ? "editable" : "locked",
|
|
isLimited: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.LIMITED,
|
|
isObserver: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER,
|
|
isOwner: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
|
|
});
|
|
return options;
|
|
}
|
|
|
|
static getItem(event, actor) {
|
|
return actor.items.get(RdDSheetUtility.getItemId(event))
|
|
}
|
|
|
|
static getItemId(event) {
|
|
return RdDSheetUtility.getEventItemData(event, "item-id");
|
|
}
|
|
|
|
static getEventItemData(event, property) {
|
|
const node = RdDSheetUtility.getEventElement(event);
|
|
return node?.data(property);
|
|
}
|
|
|
|
static getEventElement(event) {
|
|
return $(event.currentTarget)?.parents(".item");
|
|
}
|
|
|
|
static async prepareItemDropParameters(destItemId, actor, dragData, objetVersConteneur) {
|
|
let item = fromUuidSync(dragData.uuid);
|
|
if (item.pack && !item.system) {
|
|
item = await RdDItem.getCorrespondingItem(item);
|
|
}
|
|
if (actor.canReceive(item)) {
|
|
return {
|
|
destId: destItemId,
|
|
targetActorId: actor.id,
|
|
itemId: item.id,
|
|
sourceActorId: item.actor?.id,
|
|
srcId: objetVersConteneur[item.id],
|
|
onEnleverConteneur: () => { delete objetVersConteneur[item.id]; },
|
|
onAjouterDansConteneur: (itemId, conteneurId) => { objetVersConteneur[itemId] = conteneurId; }
|
|
}
|
|
}
|
|
else {
|
|
ui.notifications.warn(`Impossible de donner ${item.name} à ${actor.name}: ${item.type} / ${actor.type}`);
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
static async splitItem(item, actor, onSplit = () => { }) {
|
|
const dialog = await DialogSplitItem.create(item, async (item, split) => {
|
|
await RdDSheetUtility._onSplitItem(item, split, actor);
|
|
onSplit();
|
|
});
|
|
dialog.render(true);
|
|
}
|
|
|
|
static async _onSplitItem(item, split, actor) {
|
|
if (split >= 1 && split < item.system.quantite) {
|
|
await item.diminuerQuantite(split);
|
|
const splitItem = duplicate(item);
|
|
// todo: ajouter dans le même conteneur?
|
|
splitItem.system.quantite = split;
|
|
await actor.createEmbeddedDocuments('Item', [splitItem])
|
|
}
|
|
}
|
|
} |