forked from GitHub-Mirrors/foundry-sw5e
Merge pull request #248 from jjtParadox/ammo-charge-consumption
Consume ammo charges on attack
This commit is contained in:
commit
f16383841b
1 changed files with 23 additions and 1 deletions
|
@ -494,6 +494,7 @@ export default class Item5e extends Item {
|
||||||
// Reference aspects of the item data necessary for usage
|
// Reference aspects of the item data necessary for usage
|
||||||
const hasArea = this.hasAreaTarget; // Is the ability usage an AoE?
|
const hasArea = this.hasAreaTarget; // Is the ability usage an AoE?
|
||||||
const resource = id.consume || {}; // Resource consumption
|
const resource = id.consume || {}; // Resource consumption
|
||||||
|
const resourceTarget = actor.items.get(resource.target);
|
||||||
const recharge = id.recharge || {}; // Recharge mechanic
|
const recharge = id.recharge || {}; // Recharge mechanic
|
||||||
const uses = id?.uses ?? {}; // Limited uses
|
const uses = id?.uses ?? {}; // Limited uses
|
||||||
const isPower = this.type === "power"; // Does the item require a power slot?
|
const isPower = this.type === "power"; // Does the item require a power slot?
|
||||||
|
@ -504,7 +505,10 @@ export default class Item5e extends Item {
|
||||||
// Define follow-up actions resulting from the item usage
|
// Define follow-up actions resulting from the item usage
|
||||||
let createMeasuredTemplate = hasArea; // Trigger a template creation
|
let createMeasuredTemplate = hasArea; // Trigger a template creation
|
||||||
let consumeRecharge = !!recharge.value; // Consume recharge
|
let consumeRecharge = !!recharge.value; // Consume recharge
|
||||||
let consumeResource = !!resource.target && resource.type !== "ammo"; // Consume a linked (non-ammo) resource
|
let consumeResource =
|
||||||
|
!!resource.target &&
|
||||||
|
resource.type !== "ammo" &&
|
||||||
|
!(resource.type === "charges" && resourceTarget?.data.data.consumableType === "ammo"); // Consume a linked (non-ammo) resource
|
||||||
let consumePowerSlot = requirePowerSlot; // Consume a power slot
|
let consumePowerSlot = requirePowerSlot; // Consume a power slot
|
||||||
let consumeUsage = !!uses.per; // Consume limited uses
|
let consumeUsage = !!uses.per; // Consume limited uses
|
||||||
let consumeQuantity = uses.autoDestroy; // Consume quantity of the item in lieu of uses
|
let consumeQuantity = uses.autoDestroy; // Consume quantity of the item in lieu of uses
|
||||||
|
@ -1000,6 +1004,24 @@ export default class Item5e extends Item {
|
||||||
const usage = this._getUsageUpdates({consumeResource: true});
|
const usage = this._getUsageUpdates({consumeResource: true});
|
||||||
if (usage === false) return null;
|
if (usage === false) return null;
|
||||||
ammoUpdate = usage.resourceUpdates || {};
|
ammoUpdate = usage.resourceUpdates || {};
|
||||||
|
} else if (consume?.type === "charges") {
|
||||||
|
ammo = this.actor.items.get(consume.target);
|
||||||
|
if (ammo?.data?.data?.consumableType === "ammo") {
|
||||||
|
const uses = ammo.data.data.uses;
|
||||||
|
if (uses.per && uses.max) {
|
||||||
|
const q = ammo.data.data.uses.value;
|
||||||
|
const consumeAmount = consume.amount ?? 0;
|
||||||
|
if (q && q - consumeAmount >= 0) {
|
||||||
|
this._ammo = ammo;
|
||||||
|
title += ` [${ammo.name}]`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get pending ammunition update
|
||||||
|
const usage = this._getUsageUpdates({consumeResource: true});
|
||||||
|
if (usage === false) return null;
|
||||||
|
ammoUpdate = usage.resourceUpdates || {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compose roll options
|
// Compose roll options
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue