Add game.actors.party and refine logic

This commit is contained in:
Carlos Fernandez 2026-04-15 18:29:17 -04:00
parent b08b8b93b6
commit 031f497c33
5 changed files with 22 additions and 18 deletions

View file

@ -3212,7 +3212,7 @@
"companion": "Level {level} - {partner}", "companion": "Level {level} - {partner}",
"companionNoPartner": "No Partner", "companionNoPartner": "No Partner",
"duplicateToNewTier": "Duplicate to New Tier", "duplicateToNewTier": "Duplicate to New Tier",
"activateParty": "Make Activate Party", "activateParty": "Make Active Party",
"partyIsActive": "Active", "partyIsActive": "Active",
"createAdversary": "Create Adversary", "createAdversary": "Create Adversary",
"pickTierTitle": "Pick a new tier for this adversary" "pickTierTitle": "Pick a new tier for this adversary"

View file

@ -51,20 +51,13 @@ export default class DhParty extends BaseDataActor {
_onCreate(data, options, userId) { _onCreate(data, options, userId) {
super._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(_ => { game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, this.parent.id).then(_ => {
ui.actors.render(); 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) { _onDelete(options, userId) {
super._onDelete(options, userId); super._onDelete(options, userId);
@ -72,5 +65,11 @@ export default class DhParty extends BaseDataActor {
for (const member of this.partyMembers) { for (const member of this.partyMembers) {
member?.parties?.delete(this.parent); 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);
} }
} }

View file

@ -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) { if (this.prototypeToken.actorLink) {
game.system.registeredTriggers.unregisterItemTriggers(this.items); game.system.registeredTriggers.unregisterItemTriggers(this.items);
} else { } else {
@ -125,8 +127,6 @@ export default class DhpActor extends Actor {
game.system.registeredTriggers.unregisterItemTriggers(token.actor.items); game.system.registeredTriggers.unregisterItemTriggers(token.actor.items);
} }
} }
if(this.system._preDelete() === false) return false;
} }
_onDelete(options, userId) { _onDelete(options, userId) {

View file

@ -1,4 +1,11 @@
export default class DhActorCollection extends foundry.documents.collections.Actors { 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. */ /** Ensure companions are initialized after all other subtypes. */
_initialize() { _initialize() {
super._initialize(); super._initialize();

View file

@ -193,9 +193,7 @@ Roll.replaceFormulaData = function (formula, baseData = {}, { missing, warn = fa
/* Inserting global data */ /* Inserting global data */
const data = { const data = {
...baseData, ...baseData,
partySize: partySize: game.actors?.party?.system.partyMembers.length ?? 0
!game.actors ? 0 :
game.actors.find(x => x.type === 'party' && x.system.active)?.system.partyMembers.length ?? 0,
}; };
const terms = Object.keys(CONFIG.DH.GENERAL.multiplierTypes).map(type => { const terms = Object.keys(CONFIG.DH.GENERAL.multiplierTypes).map(type => {