mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-21 18:09:54 +02:00
[Fix] SummonAction Actor Choice (#2045)
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
* Fixed logic for picking which actor to summon * Moved getWorldActor function to utils and updated logic * . * Improved logic
This commit is contained in:
parent
2cc52fae1f
commit
70388dbd73
2 changed files with 25 additions and 15 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
import { itemAbleRollParse, triggerChatRollFx } from '../../../helpers/utils.mjs';
|
import { getWorldActor, itemAbleRollParse, triggerChatRollFx } from '../../../helpers/utils.mjs';
|
||||||
import FormulaField from '../formulaField.mjs';
|
import FormulaField from '../formulaField.mjs';
|
||||||
|
|
||||||
const fields = foundry.data.fields;
|
const fields = foundry.data.fields;
|
||||||
|
|
@ -42,7 +42,7 @@ export default class DHSummonField extends fields.ArrayField {
|
||||||
const count = roll.total;
|
const count = roll.total;
|
||||||
if (!roll.isDeterministic) rolls.push(roll);
|
if (!roll.isDeterministic) rolls.push(roll);
|
||||||
|
|
||||||
const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(summon.actorUUID));
|
const actor = await getWorldActor(await foundry.utils.fromUuid(summon.actorUUID));
|
||||||
/* Extending summon data in memory so it's available in actionField.toChat. Think it's harmless, but ugly. Could maybe find a better way. */
|
/* Extending summon data in memory so it's available in actionField.toChat. Think it's harmless, but ugly. Could maybe find a better way. */
|
||||||
summon.actor = actor.toObject();
|
summon.actor = actor.toObject();
|
||||||
|
|
||||||
|
|
@ -62,19 +62,6 @@ export default class DHSummonField extends fields.ArrayField {
|
||||||
DHSummonField.handleSummon(summonData, this.actor);
|
DHSummonField.handleSummon(summonData, this.actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for any available instances of the actor present in the world if we're missing artwork in the compendium. If none exists, create one. */
|
|
||||||
static async getWorldActor(baseActor) {
|
|
||||||
const dataType = game.system.api.data.actors[`Dh${baseActor.type.capitalize()}`];
|
|
||||||
if (baseActor.inCompendium && dataType && baseActor.img === dataType.DEFAULT_ICON) {
|
|
||||||
const worldActorCopy = game.actors.find(x => x.name === baseActor.name);
|
|
||||||
if (worldActorCopy) return worldActorCopy;
|
|
||||||
|
|
||||||
return await game.system.api.documents.DhpActor.create(baseActor.toObject());
|
|
||||||
}
|
|
||||||
|
|
||||||
return baseActor;
|
|
||||||
}
|
|
||||||
|
|
||||||
static async handleSummon(summonData, actionActor) {
|
static async handleSummon(summonData, actionActor) {
|
||||||
await CONFIG.ux.TokenManager.createTokensWithPreview(summonData, { elevation: actionActor.token?.elevation });
|
await CONFIG.ux.TokenManager.createTokensWithPreview(summonData, { elevation: actionActor.token?.elevation });
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -889,4 +889,27 @@ export async function triggerChatRollFx(rolls, options = { whisper: false, blind
|
||||||
export function shouldUseHopeFearAutomation(options = { gmAsPlayer: true }) {
|
export function shouldUseHopeFearAutomation(options = { gmAsPlayer: true }) {
|
||||||
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||||
return (!game.user.isGM || options.gmAsPlayer) ? hopeFear.players : hopeFear.gm;
|
return (!game.user.isGM || options.gmAsPlayer) ? hopeFear.players : hopeFear.gm;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getWorldActor(baseActor) {
|
||||||
|
if (baseActor.inCompendium) {
|
||||||
|
const worldActorCopy = game.actors.find(x =>
|
||||||
|
x._stats.compendiumSource === baseActor.uuid &&
|
||||||
|
(!x.prototypeToken.actorLink || x.name === baseActor.name)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (worldActorCopy)
|
||||||
|
return worldActorCopy;
|
||||||
|
|
||||||
|
const baseActorData = baseActor;
|
||||||
|
return await game.system.api.documents.DhpActor.create({
|
||||||
|
...baseActorData,
|
||||||
|
_stats: {
|
||||||
|
...baseActorData._stats,
|
||||||
|
compendiumSource: baseActor.uuid
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseActor;
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue