mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 11:41:08 +01:00
parent
7faec34597
commit
2aaab73699
11 changed files with 87 additions and 53 deletions
|
|
@ -146,7 +146,6 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
else if (this.hasSave || this.hasEffect) {
|
||||
const roll = new CONFIG.Dice.daggerheart.DHRoll('');
|
||||
roll._evaluated = true;
|
||||
if(config.hasTarget) config.targetSelection = config.targets.length > 0;
|
||||
await CONFIG.Dice.daggerheart.DHRoll.toMessage(roll, config);
|
||||
}
|
||||
}
|
||||
|
|
@ -227,15 +226,18 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
(!successCost && (!c.consumeOnSuccess || config.roll?.success)) ||
|
||||
(successCost && c.consumeOnSuccess)
|
||||
)
|
||||
.map(c => {
|
||||
.reduce((a, c) => {
|
||||
const resource = usefulResources[c.key];
|
||||
return {
|
||||
key: c.key,
|
||||
value: (c.total ?? c.value) * (resource.isReversed ? 1 : -1),
|
||||
target: resource.target,
|
||||
keyIsID: resource.keyIsID
|
||||
};
|
||||
});
|
||||
if( resource ) {
|
||||
a.push({
|
||||
key: c.key,
|
||||
value: (c.total ?? c.value) * (resource.isReversed ? 1 : -1),
|
||||
target: resource.target,
|
||||
keyIsID: resource.keyIsID
|
||||
});
|
||||
return a;
|
||||
}
|
||||
}, []);
|
||||
|
||||
await (this.actor.system.partner ?? this.actor).modifyResource(resources);
|
||||
if (
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@ export default class DHDamageAction extends DHBaseAction {
|
|||
...systemData,
|
||||
roll: formulas,
|
||||
dialog: {},
|
||||
data: this.getRollData(),
|
||||
targetSelection: systemData.targets.length > 0
|
||||
data: this.getRollData()
|
||||
};
|
||||
if (this.hasSave) config.onSave = this.save.damageMod;
|
||||
if (data.system) {
|
||||
|
|
|
|||
|
|
@ -18,14 +18,12 @@ const targetsField = () =>
|
|||
);
|
||||
|
||||
export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
||||
targetHook = null;
|
||||
|
||||
static defineSchema() {
|
||||
return {
|
||||
title: new fields.StringField(),
|
||||
roll: new fields.ObjectField(),
|
||||
targets: targetsField(),
|
||||
targetSelection: new fields.BooleanField({ initial: false }),
|
||||
hasRoll: new fields.BooleanField({ initial: false }),
|
||||
hasDamage: new fields.BooleanField({ initial: false }),
|
||||
hasHealing: new fields.BooleanField({ initial: false }),
|
||||
|
|
@ -63,42 +61,45 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
}
|
||||
|
||||
get targetMode() {
|
||||
return this.targetSelection;
|
||||
return this.parent.targetSelection;
|
||||
}
|
||||
|
||||
set targetMode(mode) {
|
||||
this.targetSelection = mode;
|
||||
if(!this.parent.isAuthor) return;
|
||||
this.parent.targetSelection = mode;
|
||||
this.registerTargetHook();
|
||||
this.updateTargets();
|
||||
}
|
||||
|
||||
get hitTargets() {
|
||||
return this.currentTargets.filter(t => t.hit || !this.hasRoll || !this.targetSelection);
|
||||
return this.currentTargets.filter(t => t.hit || !this.hasRoll || !this.targetMode);
|
||||
}
|
||||
|
||||
async updateTargets() {
|
||||
if(!ui.chat.collection.get(this.parent.id)) return;
|
||||
let targets;
|
||||
if(this.targetSelection)
|
||||
if(this.targetMode)
|
||||
targets = this.targets;
|
||||
else
|
||||
targets = Array.from(game.user.targets).map(t => game.system.api.fields.ActionFields.TargetField.formatTarget(t));
|
||||
|
||||
this.parent.setFlag(game.system.id, "targets", targets);
|
||||
await this.parent.updateSource({
|
||||
system: {
|
||||
targetSelection: this.targetSelection
|
||||
await this.parent.update({
|
||||
flags: {
|
||||
[game.system.id]: {
|
||||
targets: targets,
|
||||
targetMode: this.targetMode
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
registerTargetHook() {
|
||||
if(!this.parent.isAuthor) return;
|
||||
if(this.targetSelection && this.targetHook !== null) {
|
||||
Hooks.off("targetToken", this.targetHook);
|
||||
this.targetHook = null;
|
||||
} else if (!this.targetSelection && this.targetHook === null) {
|
||||
this.targetHook = Hooks.on('targetToken', foundry.utils.debounce(this.updateTargets.bind(this), 50));
|
||||
if(this.targetMode && this.parent.targetHook !== null) {
|
||||
Hooks.off("targetToken", this.parent.targetHook);
|
||||
return this.parent.targetHook = null;
|
||||
} else if (!this.targetMode && this.parent.targetHook === null) {
|
||||
return this.parent.targetHook = Hooks.on('targetToken', foundry.utils.debounce(this.updateTargets.bind(this), 50));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -106,9 +107,8 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
if (this.hasTarget) {
|
||||
this.hasHitTarget = this.targets.filter(t => t.hit === true).length > 0;
|
||||
this.currentTargets = this.getTargetList();
|
||||
this. registerTargetHook();
|
||||
|
||||
if(this.targetSelection === true && this.hasRoll) {
|
||||
if(this.targetMode === true && this.hasRoll) {
|
||||
this.targetShort = this.targets.reduce((a,c) => {
|
||||
if(c.hit) a.hit += 1;
|
||||
else a.miss += 1;
|
||||
|
|
@ -123,7 +123,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
}
|
||||
|
||||
getTargetList() {
|
||||
const targets = this.targetSelection && this.parent.isAuthor ? this.targets : (this.parent.getFlag(game.system.id, "targets") ?? this.targets),
|
||||
const targets = this.targetMode && this.parent.isAuthor ? this.targets : (this.parent.getFlag(game.system.id, "targets") ?? this.targets),
|
||||
reactionRolls = this.parent.getFlag(game.system.id, "reactionRolls");
|
||||
|
||||
if(reactionRolls) {
|
||||
|
|
@ -137,7 +137,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
}
|
||||
|
||||
setPendingSaves() {
|
||||
this.pendingSaves = this.targetSelection
|
||||
this.pendingSaves = this.targetMode
|
||||
? this.targets.filter(target => target.hit && target.saved.success === null).length > 0
|
||||
: this.currentTargets.filter(target => target.saved.success === null).length > 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,9 +227,9 @@ export function ActionMixin(Base) {
|
|||
} else {
|
||||
result = await this.item.update({ [path]: updates }, options);
|
||||
}
|
||||
|
||||
|
||||
return this.inCollection
|
||||
? foundry.utils.getProperty(result, basePath).get(this.id)
|
||||
? foundry.utils.getProperty(result, basePath)?.get(this.id)
|
||||
: foundry.utils.getProperty(result, basePath);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue