diff --git a/module/applications/sidebar/tabs/actorDirectory.mjs b/module/applications/sidebar/tabs/actorDirectory.mjs index a3c37acc..1306de61 100644 --- a/module/applications/sidebar/tabs/actorDirectory.mjs +++ b/module/applications/sidebar/tabs/actorDirectory.mjs @@ -102,11 +102,7 @@ export default class DhActorDirectory extends foundry.applications.sidebar.tabs. const actor = game.actors.get(li.dataset.entryId); if (!actor) throw new Error('Unexpected missing actor'); - const currentActiveParty = game.actors.find(x => x.type === 'party' && x.system.active); - if (currentActiveParty) - await currentActiveParty.update({ 'system.active': false }); - - await actor.update({ 'system.active': true }); + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, actor.id); ui.actors.render(); } } diff --git a/module/config/settingsConfig.mjs b/module/config/settingsConfig.mjs index 74315a8b..12e8536e 100644 --- a/module/config/settingsConfig.mjs +++ b/module/config/settingsConfig.mjs @@ -40,7 +40,8 @@ export const gameSettings = { LastMigrationVersion: 'LastMigrationVersion', SpotlightRequestQueue: 'SpotlightRequestQueue', CompendiumBrowserSettings: 'CompendiumBrowserSettings', - SpotlightTracker: 'SpotlightTracker' + SpotlightTracker: 'SpotlightTracker', + ActiveParty: 'ActiveParty', }; export const actionAutomationChoices = { diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index d35261fc..ba39b7e5 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -9,7 +9,6 @@ export default class DhParty extends BaseDataActor { const fields = foundry.data.fields; return { ...super.defineSchema(), - active: new fields.BooleanField(), partyMembers: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { prune: true }), notes: new fields.HTMLField(), gold: new fields.SchemaField({ @@ -23,6 +22,10 @@ export default class DhParty extends BaseDataActor { }; } + get active() { + return game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty) === this.parent.id; + } + /* -------------------------------------------- */ /**@inheritdoc */ @@ -45,13 +48,21 @@ export default class DhParty extends BaseDataActor { } } - /**@inheritdoc */ - async _preCreate(data, options, user) { - const allowed = await super._preCreate(data, options, user); - if (allowed === false) return; + _onCreate(data, options, userId) { + super._onCreate(data, options, userId); - if (!game.actors.some(x => x.type === 'party' && x.active)) - await this.updateSource({ active: true }); + if (game.user.isActiveGM && !game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty)) { + 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) { diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 48f2f171..d578a481 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -125,6 +125,8 @@ 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/systemRegistration/settings.mjs b/module/systemRegistration/settings.mjs index 63611cda..ae78e23b 100644 --- a/module/systemRegistration/settings.mjs +++ b/module/systemRegistration/settings.mjs @@ -189,4 +189,11 @@ const registerNonConfigSettings = () => { config: false, type: SpotlightTracker }); + + game.settings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, { + scope: 'world', + config: false, + type: String, + default: null, + }); };