diff --git a/module/applications/sheets/companion.mjs b/module/applications/sheets/companion.mjs index 694a12f6..46080814 100644 --- a/module/applications/sheets/companion.mjs +++ b/module/applications/sheets/companion.mjs @@ -51,31 +51,27 @@ export default class DhCompanionSheet extends DaggerheartSheet(ActorSheetV2) { } async onPartnerChange(event) { - const partner = game.actors.find(a => a.uuid === event.target.value); - if (event.target.value) { - await partner.update({ 'system.companion': this.document.uuid }); + const partnerDocument = event.target.value + ? await foundry.utils.fromUuid(event.target.value) + : this.document.system.partner; + const partnerUpdate = { 'system.companion': event.target.value ? this.document.uuid : null }; + + if (!partnerDocument.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) { + await game.socket.emit(`system.${SYSTEM.id}`, { + action: socketEvent.GMUpdate, + data: { + action: GMUpdateEvent.UpdateDocument, + uuid: partnerDocument.uuid, + update: update + } + }); } else { - const update = { 'system.companion': null }; - if ( - this.document.system.partner.ownership.default !== 3 && - this.document.system.partner.ownership[game.user.id] !== 3 - ) { - await game.socket.emit(`system.${SYSTEM.id}`, { - action: socketEvent.GMUpdate, - data: { - action: GMUpdateEvent.UpdateDocument, - uuid: this.document.system.partner.uuid, - update: update - } - }); - } else { - await this.document.system.partner.update(update); - } + await partnerDocument.update(partnerUpdate); } await this.document.update({ 'system.partner': event.target.value }); - if (!partner) { + if (!event.target.value) { await this.document.updateLevel(1); } } diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index 70981f75..7b1ec939 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -215,6 +215,12 @@ export default class DhCharacter extends BaseDataActor { : null; } + get deathMoveViable() { + return ( + this.resources.hitPoints.maxTotal > 0 && this.resources.hitPoints.value >= this.resources.hitPoints.maxTotal + ); + } + static async unequipBeforeEquip(itemToEquip) { const primary = this.primaryWeapon, secondary = this.secondaryWeapon; diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index fc4b8283..abc38e93 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -131,13 +131,6 @@ export default class DhCompanion extends BaseDataActor { this.evasion.total = this.evasion.value + this.evasion.bonus; } - getRollData() { - const data = super.getRollData(); - return { - ...data - }; - } - async _preDelete() { if (this.partner) { await this.partner.update({ 'system.companion': null }); diff --git a/module/data/levelData.mjs b/module/data/levelData.mjs index 265092c9..2432a313 100644 --- a/module/data/levelData.mjs +++ b/module/data/levelData.mjs @@ -42,7 +42,7 @@ export default class DhLevelData extends foundry.abstract.DataModel { amount: new fields.NumberField({ integer: true }), data: new fields.ArrayField(new fields.StringField({ required: true })), secondaryData: new fields.TypedObjectField(new fields.StringField({ required: true })), - itemUuid: new fields.StringField({ required: true }), + itemUuid: new fields.DocumentUUIDField({ required: true }), featureIds: new fields.ArrayField(new fields.StringField()) }) ) diff --git a/templates/sheets/actors/character/sidebar.hbs b/templates/sheets/actors/character/sidebar.hbs index 4d814429..5a09dc3f 100644 --- a/templates/sheets/actors/character/sidebar.hbs +++ b/templates/sheets/actors/character/sidebar.hbs @@ -1,5 +1,5 @@