help for spawns, shape change pt 3

This commit is contained in:
Mike Bloy 2024-05-28 23:29:09 -05:00
parent e438fd36e8
commit 8aac513792
3 changed files with 27 additions and 7 deletions

View File

@ -171,7 +171,7 @@ export class PowerEffect {
await moduleHelpers.socket.executeAsUser(
addActiveEffectsToToken,
owner.id,
token.scene.id,
token?.scene?.id ?? token.parent.id,
token.id,
effectDocuments,
);
@ -834,7 +834,7 @@ export class ActorFolderEffect extends PowerEffect {
async parseValues() {
await super.parseValues();
this.data.maintid = randomID();
this.data.maintId = randomID();
this.targetActor = await game.actors.get(this.data.actorId);
this.targetTokenDoc = await this.targetActor.getTokenDocument();
const sourceUpdates = {
@ -874,15 +874,17 @@ export class ActorFolderEffect extends PowerEffect {
}
const activeEffects = await this.secondaryDocsForTarget(secondaryDocs, token);
activeEffects.push(await this.primaryDocForTarget(primaryDoc, token));
promises.push(token.actor.createEmbeddedDocuments('ActiveEffect', activeEffects));
}
const maintainDoc = await this.createMaintainEffect(this.data.maintId);
if (this.duration > 0) {
promises.push(this.applyActiveEffects(this.source, [maintainDoc]));
promises.push(this.applyActiveEffects(token, activeEffects));
}
await Promise.all(promises);
}
async createPrimaryEffect(maintId) {
const doc = await super.createPrimaryEffect(maintId);
doc.flags[moduleName].spawnedTempToken = true;
return doc;
}
async sideEffects() {
if (this.data.fatigue) {
for (const target of this.data.spawned) {

View File

@ -187,6 +187,11 @@ export async function powerEffectManagementHook(effect, data, userId) {
if (!maintId) {
return;
}
const isSpawned = effect.getFlag(moduleName, 'spawnedTempToken') ?? false;
if (isSpawned) {
const token = effect.parent.token;
await token.delete();
}
const targetIds = effect.getFlag(moduleName, 'targetIds') || [];
for (const targetId of targetIds) {
const target = canvas.tokens.get(targetId);

View File

@ -135,6 +135,19 @@ export class ShapeChangeEffect extends ActorFolderEffect {
return this.source.scene.createEmbeddedDocuments('Token', [this.targetTokenDoc]);
}
async apply() {
await super.apply();
const maintainDoc = await this.createMaintainEffect(this.data.maintId);
maintainDoc.flags[moduleName].targetIds = this.data.spawned.map((t) => t.id);
maintainDoc.flags[moduleName].shapeChangeSourceId = this.target.id;
maintainDoc.flags[moduleName].shapeChangeTempTokenId = this.data.spawned[0].id;
let maintainer = this.source;
if (this.source.id === this.target.id) {
maintainer = this.data.spawned[0];
}
await this.applyActiveEffects(maintainer, [maintainDoc]);
}
get effectName() {
return `Shape Change into ${this.targetActor.prototypeToken.name}`;
}