mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
Added ferocity trigger
This commit is contained in:
parent
ce2e5871bc
commit
4b86bb229a
11 changed files with 165 additions and 42 deletions
|
|
@ -127,12 +127,16 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
|||
context.baseSaveDifficulty = this.action.actor?.baseSaveDifficulty;
|
||||
context.baseAttackBonus = this.action.actor?.system.attack?.roll.bonus;
|
||||
context.hasRoll = this.action.hasRoll;
|
||||
context.triggerOptions = CONFIG.DH.TRIGGER.triggers;
|
||||
context.triggers = context.source.triggers.map((trigger, index) => ({
|
||||
...trigger,
|
||||
hint: CONFIG.DH.TRIGGER.triggers[trigger.trigger].hint,
|
||||
revealed: this.openTrigger === index
|
||||
}));
|
||||
context.triggers = context.source.triggers.map((trigger, index) => {
|
||||
const { hint, returns, usesActor } = CONFIG.DH.TRIGGER.triggers[trigger.trigger];
|
||||
return {
|
||||
...trigger,
|
||||
hint,
|
||||
returns,
|
||||
usesActor,
|
||||
revealed: this.openTrigger === index
|
||||
};
|
||||
});
|
||||
|
||||
const settingsTiers = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers).tiers;
|
||||
context.tierOptions = [
|
||||
|
|
@ -248,7 +252,10 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
|||
|
||||
static addTrigger() {
|
||||
const data = this.action.toObject();
|
||||
data.triggers.push({ trigger: CONFIG.DH.TRIGGER.triggers.dualityRoll.id });
|
||||
data.triggers.push({
|
||||
trigger: CONFIG.DH.TRIGGER.triggers.dualityRoll.id,
|
||||
triggeringActor: CONFIG.DH.TRIGGER.triggerActorTargetType.any.id
|
||||
});
|
||||
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,42 @@
|
|||
/* hints and returns are intentionally not translated. They are programatical terms and best understood in english */
|
||||
export const triggers = {
|
||||
dualityRoll: {
|
||||
id: 'dualityRoll',
|
||||
usesActor: true,
|
||||
args: ['roll', 'actor'],
|
||||
label: 'DAGGERHEART.CONFIG.Triggers.dualityRoll.label',
|
||||
hint: 'DAGGERHEART.CONFIG.Triggers.dualityRoll.hint'
|
||||
hint: 'this: Action, roll: DhRoll, actor: DhActor',
|
||||
returns: '{ updates: [{ key, value, total }] }'
|
||||
},
|
||||
fearRoll: {
|
||||
id: 'fearRoll',
|
||||
usesActor: true,
|
||||
args: ['roll', 'actor'],
|
||||
label: 'DAGGERHEART.CONFIG.Triggers.fearRoll.label',
|
||||
hint: 'DAGGERHEART.CONFIG.Triggers.fearRoll.hint'
|
||||
hint: 'this: Action, roll: DhRoll, actor: DhActor',
|
||||
returns: '{ updates: [{ key, value, total }] }'
|
||||
},
|
||||
postDamageReduction: {
|
||||
id: 'postDamageReduction',
|
||||
usesActor: true,
|
||||
args: ['damageUpdates', 'actor'],
|
||||
label: 'DAGGERHEART.CONFIG.Triggers.postDamageReduction.label',
|
||||
hint: 'damageUpdates: ResourceUpdates, actor: DhActor',
|
||||
returns: '{ updates: [{ originActor: this.actor, updates: [{ key, value, total }] }] }'
|
||||
}
|
||||
};
|
||||
|
||||
export const triggerActorTargetType = {
|
||||
any: {
|
||||
id: 'any',
|
||||
label: 'DAGGERHEART.CONFIG.TargetTypes.any'
|
||||
},
|
||||
self: {
|
||||
id: 'self',
|
||||
label: 'DAGGERHEART.CONFIG.TargetTypes.self'
|
||||
},
|
||||
other: {
|
||||
id: 'other',
|
||||
label: 'DAGGERHEART.CONFIG.TargetTypes.other'
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,7 +6,15 @@ export default class TriggerField extends foundry.data.fields.SchemaField {
|
|||
nullable: false,
|
||||
blank: false,
|
||||
initial: CONFIG.DH.TRIGGER.triggers.dualityRoll.id,
|
||||
choices: CONFIG.DH.TRIGGER.triggers
|
||||
choices: CONFIG.DH.TRIGGER.triggers,
|
||||
label: 'DAGGERHEART.CONFIG.Triggers.triggerType'
|
||||
}),
|
||||
triggeringActorType: new foundry.data.fields.StringField({
|
||||
nullable: false,
|
||||
blank: false,
|
||||
initial: CONFIG.DH.TRIGGER.triggerActorTargetType.any.id,
|
||||
choices: CONFIG.DH.TRIGGER.triggerActorTargetType,
|
||||
label: 'DAGGERHEART.CONFIG.Triggers.triggeringActorType'
|
||||
}),
|
||||
command: new foundry.data.fields.JavaScriptField({ async: true })
|
||||
},
|
||||
|
|
|
|||
|
|
@ -139,15 +139,19 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
|
|||
super.prepareBaseData();
|
||||
|
||||
for (const action of this.actions ?? []) {
|
||||
if (!action.actor) continue;
|
||||
|
||||
const actionsToRegister = [];
|
||||
for (let i = 0; i < action.triggers.length; i++) {
|
||||
const trigger = action.triggers[i];
|
||||
const fn = new foundry.utils.AsyncFunction('roll', 'actor', `{${trigger.command}\n}`);
|
||||
const { args } = CONFIG.DH.TRIGGER.triggers[trigger.trigger];
|
||||
const fn = new foundry.utils.AsyncFunction(...args, `{${trigger.command}\n}`);
|
||||
actionsToRegister.push(fn.bind(action));
|
||||
if (i === action.triggers.length - 1)
|
||||
game.system.registeredTriggers.registerTriggers(
|
||||
trigger.trigger,
|
||||
action.actor?.uuid,
|
||||
trigger.triggeringActorType,
|
||||
this.parent.uuid,
|
||||
actionsToRegister
|
||||
);
|
||||
|
|
|
|||
|
|
@ -646,6 +646,19 @@ export default class DhpActor extends Actor {
|
|||
}
|
||||
}
|
||||
|
||||
const results = await game.system.registeredTriggers.runTrigger(
|
||||
CONFIG.DH.TRIGGER.triggers.postDamageReduction.id,
|
||||
this,
|
||||
updates,
|
||||
this
|
||||
);
|
||||
|
||||
if (results?.length) {
|
||||
const resourceMap = new ResourceUpdateMap(results[0].originActor);
|
||||
for (var result of results) resourceMap.addResources(result.updates);
|
||||
resourceMap.updateResources();
|
||||
}
|
||||
|
||||
updates.forEach(
|
||||
u =>
|
||||
(u.value =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue