Quantities update, add and subtract on drop same object, or delete and qty > 1

This commit is contained in:
Vlyan
2020-12-26 16:14:03 +01:00
parent 6842673ee1
commit f5a8936dbf
3 changed files with 39 additions and 14 deletions

View File

@@ -61,7 +61,7 @@ export class BaseSheetL5r5e extends ActorSheet {
item.entity !== "Item" ||
!["item", "armor", "weapon", "technique", "peculiarity", "advancement"].includes(item.data.type)
) {
return Promise.resolve();
return;
}
// Check if technique is allowed for this character
@@ -80,10 +80,16 @@ export class BaseSheetL5r5e extends ActorSheet {
},
},
}).render(true);
return Promise.resolve();
return;
}
// TODO dropped a item with same id as one owned, add qte instead
// Dropped a item with same "id" as one owned, add qte instead
if (item.data.data.quantity && this.actor.data.items) {
const tmpItem = this.actor.data.items.find((e) => e.name === item.name && e.type === item.type);
if (tmpItem && this._modifyQuantity(tmpItem._id, 1)) {
return;
}
}
// Babele and properties specific
if (item.data.data.properties && typeof Babele !== "undefined") {
@@ -191,8 +197,15 @@ export class BaseSheetL5r5e extends ActorSheet {
* Delete a generic item with sub type
* @private
*/
_deleteSubItem(event, type) {
_deleteSubItem(event) {
const itemId = $(event.currentTarget).data("item-id");
// Remove 1 qty if possible
const tmpItem = this.actor.getOwnedItem(itemId);
if (tmpItem && tmpItem.data.data.quantity > 1 && this._modifyQuantity(tmpItem._id, -1)) {
return;
}
return this.actor.deleteOwnedItem(itemId);
}
@@ -211,4 +224,22 @@ export class BaseSheetL5r5e extends ActorSheet {
});
}
}
/**
* Add or subtract a quantity to a owned item
* @private
*/
_modifyQuantity(itemId, add) {
const tmpItem = this.actor.getOwnedItem(itemId);
if (tmpItem) {
tmpItem.data.data.quantity = Math.max(1, tmpItem.data.data.quantity + add);
tmpItem.update({
data: {
quantity: tmpItem.data.data.quantity,
},
});
return true;
}
return false;
}
}

View File

@@ -132,7 +132,7 @@ export class TwentyQuestionsDialog extends FormApplication {
/**
* Handle dropped items
*/
_onDropItem(type, event) {
async _onDropItem(type, event) {
if (!["item", "technique", "peculiarity"].includes(type)) {
return;
}
@@ -142,17 +142,11 @@ export class TwentyQuestionsDialog extends FormApplication {
return;
}
// Try to extract the data
// {type: "Item", id: "pC37smMSCqu3aSRM"}
let data;
try {
data = JSON.parse(event.dataTransfer.getData("text/plain"));
if (data.type !== "Item") {
return;
}
// Get item
const item = game.items.get(data.id);
const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
if (
item.entity !== "Item" ||
!item ||
(type !== "item" && item.data.type !== type) ||
(type === "item" && !["item", "weapon", "armor"].includes(item.data.type))

View File

@@ -117,7 +117,7 @@ export class HelpersL5r5e {
}
const item = await Item.create(data, { temporary: true });
// reinject compendium id
// reinject compendium id (required for properties)
item.data._id = data._id;
return item;