diff --git a/lang/en.json b/lang/en.json index 6d862489..5c0c7470 100755 --- a/lang/en.json +++ b/lang/en.json @@ -3212,7 +3212,7 @@ "companion": "Level {level} - {partner}", "companionNoPartner": "No Partner", "duplicateToNewTier": "Duplicate to New Tier", - "activateParty": "Make Activate Party", + "activateParty": "Make Active Party", "partyIsActive": "Active", "createAdversary": "Create Adversary", "pickTierTitle": "Pick a new tier for this adversary" diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index ba39b7e5..3078e81d 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -51,20 +51,13 @@ export default class DhParty extends BaseDataActor { _onCreate(data, options, userId) { super._onCreate(data, options, userId); - if (game.user.isActiveGM && !game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty)) { + if (game.user.isActiveGM && !game.actors.party) { game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, this.parent.id).then(_ => { ui.actors.render(); }); } } - async _preDelete() { - super._preDelete(); - - if (this.active) - game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, null); - } - _onDelete(options, userId) { super._onDelete(options, userId); @@ -72,5 +65,11 @@ export default class DhParty extends BaseDataActor { for (const member of this.partyMembers) { member?.parties?.delete(this.parent); } + + // If this *was* the active party, delete it. We can't use game.actors.party as this actor was already deleted + const isWorldActor = !this.parent?.parent && !this.parent.compendium; + const activePartyId = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty); + if (isWorldActor && this.id === activePartyId) + game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, null); } } diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index d578a481..8ae2e062 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -117,7 +117,9 @@ export default class DhpActor extends Actor { } } - async _preDelete() { + async _preDelete(options, user) { + if ((await super._preDelete(options, user)) === false) return false; + if (this.prototypeToken.actorLink) { game.system.registeredTriggers.unregisterItemTriggers(this.items); } else { @@ -125,8 +127,6 @@ export default class DhpActor extends Actor { game.system.registeredTriggers.unregisterItemTriggers(token.actor.items); } } - - if(this.system._preDelete() === false) return false; } _onDelete(options, userId) { diff --git a/module/documents/collections/actorCollection.mjs b/module/documents/collections/actorCollection.mjs index a3714b30..8df407e6 100644 --- a/module/documents/collections/actorCollection.mjs +++ b/module/documents/collections/actorCollection.mjs @@ -1,4 +1,11 @@ export default class DhActorCollection extends foundry.documents.collections.Actors { + /** @returns the active party */ + get party() { + const id = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty); + const actor = game.actors.get(id); + return actor?.type === "party" ? actor : null; + } + /** Ensure companions are initialized after all other subtypes. */ _initialize() { super._initialize(); diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 96b2b130..4527da1a 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -191,13 +191,11 @@ export const getDeleteKeys = (property, innerProperty, innerPropertyDefaultValue const nativeReplaceFormulaData = Roll.replaceFormulaData; Roll.replaceFormulaData = function (formula, baseData = {}, { missing, warn = false } = {}) { /* Inserting global data */ - const data = { - ...baseData, - partySize: - !game.actors ? 0 : - game.actors.find(x => x.type === 'party' && x.system.active)?.system.partyMembers.length ?? 0, + const data = { + ...baseData, + partySize: game.actors?.party?.system.partyMembers.length ?? 0 }; - + const terms = Object.keys(CONFIG.DH.GENERAL.multiplierTypes).map(type => { return { term: type, default: 1 }; });