From 5bf3294676f1d33cfa99bd191841388d3f1849c9 Mon Sep 17 00:00:00 2001 From: CPTN_Cosmo Date: Sun, 10 Aug 2025 19:36:23 +0200 Subject: [PATCH 1/9] updated credits for 1.0.1 release (#797) * updated credits for 1.0.1 release * further updated artwork credits --- .../journal_Welcome___Information_g7NhKvwltwafmMyR.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packs/journals/journal_Welcome___Information_g7NhKvwltwafmMyR.json b/src/packs/journals/journal_Welcome___Information_g7NhKvwltwafmMyR.json index 6620d62c..af31907f 100644 --- a/src/packs/journals/journal_Welcome___Information_g7NhKvwltwafmMyR.json +++ b/src/packs/journals/journal_Welcome___Information_g7NhKvwltwafmMyR.json @@ -132,7 +132,7 @@ "image": {}, "text": { "format": 1, - "content": "

This product includes materials from the Daggerheart System Reference Document 1.0, © Critical Role, LLC. under the terms of the Darrington Press Community Gaming (DPCGL) License. More information can be found at https://www.daggerheart.com. There are no previous modifications by others.

The Foundryborne Team

The Foundryborne Team consists of:

With Art from:

And special thanks to our hard working community testers:

We would also like to thank the FoundryVTT team for their support in publishing this system.

And, of course, special thanks to the teams at Critical Role and Darrington Press for making such a wonderful game and updating the license to allow a FoundryVTT version of the system.

The Foundryborne Community

Without our amazing community this project would not have been possible.

You kept us going with both direct contributions and just endless support!

We thank you with all our hearts.

Come join us!

" + "content": "

This product includes materials from the Daggerheart System Reference Document 1.0, © Critical Role, LLC. under the terms of the Darrington Press Community Gaming (DPCGL) License. More information can be found at https://www.daggerheart.com. There are no previous modifications by others.

The Foundryborne Team

The Foundryborne Team consists of:

With Art from:

And special thanks to our hard working community testers:

We would also like to thank the FoundryVTT team for their support in publishing this system, as well as providing countless Icons to be used in many places.

And, of course, special thanks to the teams at Critical Role and Darrington Press for making such a wonderful game and updating the license to allow a FoundryVTT version of the system.

The Foundryborne Community

Without our amazing community this project would not have been possible.

You kept us going with both direct contributions and just endless support!

We thank you with all our hearts.

Come join us!

" }, "video": { "controls": true, @@ -153,8 +153,8 @@ "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1754225939902, - "modifiedTime": 1754668980876, - "lastModifiedBy": "Cf0YKwnZ1OHBZWl8" + "modifiedTime": 1754847043391, + "lastModifiedBy": "9GFCfEY8m5Co2mHo" }, "_key": "!journal.pages!g7NhKvwltwafmMyR.dP6xSKEld4TSqHhK" } From 69346870b7b3f8e86ca487f9c6aa0c6d68533739 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 19:37:28 +0200 Subject: [PATCH 2/9] Chagned handlebarhelper rollparsed to be more defensive (#794) --- module/helpers/handlebarsHelper.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/helpers/handlebarsHelper.mjs b/module/helpers/handlebarsHelper.mjs index deb62659..171255e2 100644 --- a/module/helpers/handlebarsHelper.mjs +++ b/module/helpers/handlebarsHelper.mjs @@ -60,7 +60,7 @@ export default class RegisterHandlebarsHelpers { static rollParsed(value, actor, item, numerical) { const isNumerical = typeof numerical === 'boolean' ? numerical : false; - const result = itemAbleRollParse(value, actor.getRollData(), item); + const result = itemAbleRollParse(value, actor?.getRollData() ?? {}, item); return isNumerical ? (!result ? 0 : Number(result)) : result; } @@ -69,7 +69,7 @@ export default class RegisterHandlebarsHelpers { } static empty(object) { - if(!(typeof object === 'object')) return true; + if (!(typeof object === 'object')) return true; return Object.keys(object).length === 0; } } From 8aa46f4cd1f81a57df4bb367aa3ac99deaf63e7b Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 19:37:44 +0200 Subject: [PATCH 3/9] Added missing scene refreshType (#790) --- lang/en.json | 1 + module/config/generalConfig.mjs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lang/en.json b/lang/en.json index 349200f7..11064dab 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1763,6 +1763,7 @@ "weapon": "Range Increase: Weapon" }, "RefreshType": { + "scene": "Scene", "session": "Session", "shortrest": "Short Rest", "longrest": "Long Rest" diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 80ca1983..ee0b6671 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -533,6 +533,10 @@ export const getDiceSoNicePresets = async (hopeFaces, fearFaces, advantageFaces }; export const refreshTypes = { + scene: { + id: 'session', + label: 'DAGGERHEART.GENERAL.RefreshType.scene' + }, session: { id: 'session', label: 'DAGGERHEART.GENERAL.RefreshType.session' From 6acb6c16c7efa0e478eae35d8973b82bd8c98ae7 Mon Sep 17 00:00:00 2001 From: Dapoulp <74197441+Dapoulp@users.noreply.github.com> Date: Sun, 10 Aug 2025 19:38:42 +0200 Subject: [PATCH 4/9] Remove ability use buttons for not owned abilities (#795) --- module/documents/chatMessage.mjs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/documents/chatMessage.mjs b/module/documents/chatMessage.mjs index 3ade8c4a..2b10e251 100644 --- a/module/documents/chatMessage.mjs +++ b/module/documents/chatMessage.mjs @@ -69,6 +69,11 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage { break; } } + + if(!game.user.isGM && !this.isAuthor && !this.speakerActor?.isOwner) { + const buttons = html.querySelectorAll(".ability-card-footer > .ability-use-button"); + buttons.forEach(b => b.remove()); + } } addChatListeners(html) { From 5359455050d490db887e72113321a881c48d1928 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 20:12:00 +0200 Subject: [PATCH 5/9] [Fix] PrayerDice Fixed (#799) * Fixed prayer dice, and wheelchair images * Fixed -settings data sources --- .../documents/items/ArcaneWheelchair.webp | Bin 0 -> 10784 bytes .../documents/items/HeavyWheelchair.webp | Bin 0 -> 13400 bytes .../documents/items/LightWheelchair.webp | Bin 0 -> 11282 bytes .../feature_Prayer_Dice_Xd7RYhfTxIj9aWI2.json | 10 +++---- ...ane_Frame_Wheelchair_la3sAWgnvadc4NvP.json | 6 ++-- ...avy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json | 8 +++--- ...ght_Frame_Wheelchair_BuMfupnCzHbziQ8o.json | 8 +++--- ...ane_Frame_Wheelchair_XRChepscgr75Uug7.json | 6 ++-- ...avy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json | 8 +++--- ...ane_Frame_Wheelchair_N9P695V5KKlJbAY5.json | 6 ++-- ...avy_Frame_Wheelchair_L5KeCtrs768PmYWW.json | 8 +++--- ...ght_Frame_Wheelchair_ZJsetdHKV77ygtCE.json | 8 +++--- ...ane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json | 6 ++-- ...avy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json | 8 +++--- ...ght_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json | 8 +++--- ...ght_Frame_Wheelchair_iaGnlUkShBgdeMo0.json | 8 +++--- .../adversary-settings/attack.hbs | 16 +++++------ .../adversary-settings/details.hbs | 26 +++++++++--------- .../adversary-settings/experiences.hbs | 2 +- .../companion-settings/attack.hbs | 12 ++++---- .../companion-settings/details.hbs | 10 +++---- .../environment-settings/details.hbs | 10 +++---- 22 files changed, 87 insertions(+), 87 deletions(-) create mode 100644 assets/icons/documents/items/ArcaneWheelchair.webp create mode 100644 assets/icons/documents/items/HeavyWheelchair.webp create mode 100644 assets/icons/documents/items/LightWheelchair.webp diff --git a/assets/icons/documents/items/ArcaneWheelchair.webp b/assets/icons/documents/items/ArcaneWheelchair.webp new file mode 100644 index 0000000000000000000000000000000000000000..ae8e0e376dbcb95b3dc251b61198678d7c62ceb7 GIT binary patch literal 10784 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 literal 0 HcmV?d00001 diff --git a/assets/icons/documents/items/HeavyWheelchair.webp b/assets/icons/documents/items/HeavyWheelchair.webp new file mode 100644 index 0000000000000000000000000000000000000000..e82071eee3026d29d7898a7d4a72ff3d08db1c55 GIT binary patch literal 13400 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 literal 0 HcmV?d00001 diff --git a/assets/icons/documents/items/LightWheelchair.webp b/assets/icons/documents/items/LightWheelchair.webp new file mode 100644 index 0000000000000000000000000000000000000000..f7efca162b42f71cafae60587c6eb3510db63a5b GIT binary patch literal 11282 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 L%Drx$d;tCjYqlc< literal 0 HcmV?d00001 diff --git a/src/packs/classes/feature_Prayer_Dice_Xd7RYhfTxIj9aWI2.json b/src/packs/classes/feature_Prayer_Dice_Xd7RYhfTxIj9aWI2.json index 7705d9d6..8203a246 100644 --- a/src/packs/classes/feature_Prayer_Dice_Xd7RYhfTxIj9aWI2.json +++ b/src/packs/classes/feature_Prayer_Dice_Xd7RYhfTxIj9aWI2.json @@ -9,7 +9,7 @@ "resource": { "type": "diceValue", "value": 0, - "max": "2", + "max": "@system.traits.strength.value", "icon": "", "recovery": "session" }, @@ -28,12 +28,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", - "systemVersion": "0.0.1", + "systemVersion": "1.0.0", "createdTime": 1754352649696, - "modifiedTime": 1754352712334, - "lastModifiedBy": "Q9NoTaEarn3VMS6Z" + "modifiedTime": 1754845640002, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_key": "!items!Xd7RYhfTxIj9aWI2" } diff --git a/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json b/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json index c5edd49f..0abfe057 100644 --- a/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json +++ b/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json @@ -2,7 +2,7 @@ "folder": "TyqMEXhSkjOUq5SA", "name": "Advanced Arcane-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/ArcaneWheelchair.webp", "system": { "description": "", "actions": {}, @@ -161,8 +161,8 @@ "systemId": "daggerheart", "systemVersion": "1.0.0", "createdTime": 1753836715885, - "modifiedTime": 1754815300375, - "lastModifiedBy": "MQSznptE5yLT7kj8" + "modifiedTime": 1754845968271, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "la3sAWgnvadc4NvP", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json b/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json index 34383448..f8257028 100644 --- a/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json +++ b/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json @@ -2,7 +2,7 @@ "folder": "TyqMEXhSkjOUq5SA", "name": "Advanced Heavy-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/HeavyWheelchair.webp", "system": { "description": "", "actions": {}, @@ -148,12 +148,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836675558, - "modifiedTime": 1753836795905, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754845996869, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "eT2Qwb0RdrLX2hH1", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json b/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json index add61418..324af2b1 100644 --- a/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json +++ b/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json @@ -2,7 +2,7 @@ "folder": "TyqMEXhSkjOUq5SA", "name": "Advanced Light-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/LightWheelchair.webp", "system": { "description": "", "actions": { @@ -141,12 +141,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836614032, - "modifiedTime": 1753836802197, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754846020904, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "BuMfupnCzHbziQ8o", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json b/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json index 49e052b7..3dd7d463 100644 --- a/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json +++ b/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json @@ -3,7 +3,7 @@ "name": "Arcane-Frame Wheelchair", "type": "weapon", "_id": "XRChepscgr75Uug7", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/ArcaneWheelchair.webp", "system": { "description": "", "actions": {}, @@ -163,8 +163,8 @@ "systemId": "daggerheart", "systemVersion": "1.0.0", "createdTime": 1753836689082, - "modifiedTime": 1754815278220, - "lastModifiedBy": "MQSznptE5yLT7kj8" + "modifiedTime": 1754845945327, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_key": "!items!XRChepscgr75Uug7" } diff --git a/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json b/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json index 92131406..b4c48925 100644 --- a/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json +++ b/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json @@ -3,7 +3,7 @@ "name": "Heavy-Frame Wheelchair", "type": "weapon", "_id": "XjPQjhRCH08VUIbr", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/HeavyWheelchair.webp", "system": { "description": "", "actions": {}, @@ -152,12 +152,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836652314, - "modifiedTime": 1753836667128, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754845988869, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_key": "!items!XjPQjhRCH08VUIbr" } diff --git a/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json b/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json index e28a9c44..69744aab 100644 --- a/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json +++ b/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json @@ -2,7 +2,7 @@ "folder": "fFuMdvpD1F3UshmM", "name": "Improved Arcane-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/ArcaneWheelchair.webp", "system": { "description": "", "actions": {}, @@ -161,8 +161,8 @@ "systemId": "daggerheart", "systemVersion": "1.0.0", "createdTime": 1753836714712, - "modifiedTime": 1754815290653, - "lastModifiedBy": "MQSznptE5yLT7kj8" + "modifiedTime": 1754845960700, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "N9P695V5KKlJbAY5", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json b/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json index 41abaff0..70531b7c 100644 --- a/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json +++ b/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json @@ -2,7 +2,7 @@ "folder": "fFuMdvpD1F3UshmM", "name": "Improved Heavy-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/HeavyWheelchair.webp", "system": { "description": "", "actions": {}, @@ -148,12 +148,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836674233, - "modifiedTime": 1753836769685, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754845992757, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "L5KeCtrs768PmYWW", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json b/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json index c750bac9..737e2c55 100644 --- a/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json +++ b/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json @@ -2,7 +2,7 @@ "folder": "fFuMdvpD1F3UshmM", "name": "Improved Light-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/LightWheelchair.webp", "system": { "description": "", "actions": { @@ -141,12 +141,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836612291, - "modifiedTime": 1753836778961, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754846018260, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "ZJsetdHKV77ygtCE", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json b/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json index a431d0c6..b402692f 100644 --- a/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json +++ b/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json @@ -2,7 +2,7 @@ "folder": "beilKE5ZPAihKg3O", "name": "Legendary Arcane-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/ArcaneWheelchair.webp", "system": { "description": "", "actions": {}, @@ -161,8 +161,8 @@ "systemId": "daggerheart", "systemVersion": "1.0.0", "createdTime": 1753836717240, - "modifiedTime": 1754815308726, - "lastModifiedBy": "MQSznptE5yLT7kj8" + "modifiedTime": 1754845972571, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "gA2tiET9VHGhwMoO", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json b/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json index ade62012..d337d32f 100644 --- a/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json +++ b/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json @@ -2,7 +2,7 @@ "folder": "beilKE5ZPAihKg3O", "name": "Legendary Heavy-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/HeavyWheelchair.webp", "system": { "description": "", "actions": {}, @@ -148,12 +148,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836676831, - "modifiedTime": 1753836820180, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754846000470, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "S6nB0CNlzdU05o5U", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json b/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json index 5b704d6c..622fcf12 100644 --- a/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json +++ b/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json @@ -2,7 +2,7 @@ "folder": "beilKE5ZPAihKg3O", "name": "Legendary Light-Frame Wheelchair", "type": "weapon", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/LightWheelchair.webp", "system": { "description": "", "actions": { @@ -141,12 +141,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836615437, - "modifiedTime": 1753836826572, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754846023338, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_id": "Xt8tVSn5Fu6ly6LF", "sort": 0, diff --git a/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json b/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json index 543a0f23..9bb97d2b 100644 --- a/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json +++ b/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json @@ -3,7 +3,7 @@ "name": "Light-Frame Wheelchair", "type": "weapon", "_id": "iaGnlUkShBgdeMo0", - "img": "icons/svg/item-bag.svg", + "img": "systems/daggerheart/assets/icons/documents/items/LightWheelchair.webp", "system": { "description": "", "actions": { @@ -143,12 +143,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.346", + "coreVersion": "13.347", "systemId": "daggerheart", "systemVersion": "0.0.1", "createdTime": 1753836579296, - "modifiedTime": 1753836587147, - "lastModifiedBy": "FecEtPuoQh6MpjQ0" + "modifiedTime": 1754846015528, + "lastModifiedBy": "H02dtt2xvVJvYESk" }, "_key": "!items!iaGnlUkShBgdeMo0" } diff --git a/templates/sheets-settings/adversary-settings/attack.hbs b/templates/sheets-settings/adversary-settings/attack.hbs index a51128a1..f7d38f1e 100644 --- a/templates/sheets-settings/adversary-settings/attack.hbs +++ b/templates/sheets-settings/adversary-settings/attack.hbs @@ -5,19 +5,19 @@ >
{{localize "DAGGERHEART.GENERAL.basics"}} - {{formGroup systemFields.attack.fields.img value=document.system.attack.img label="DAGGERHEART.GENERAL.imagePath" name="system.attack.img" localize=true}} - {{formGroup systemFields.attack.fields.name value=document.system.attack.name label="DAGGERHEART.ACTIONS.Settings.attackName" name="system.attack.name" localize=true}} + {{formGroup systemFields.attack.fields.img value=document._source.system.attack.img label="DAGGERHEART.GENERAL.imagePath" name="system.attack.img" localize=true}} + {{formGroup systemFields.attack.fields.name value=document._source.system.attack.name label="DAGGERHEART.ACTIONS.Settings.attackName" name="system.attack.name" localize=true}}
{{localize "DAGGERHEART.GENERAL.attack"}} - {{formField systemFields.attack.fields.roll.fields.bonus value=document.system.attack.roll.bonus label="DAGGERHEART.ACTIONS.Settings.attackBonus" name="system.attack.roll.bonus" localize=true}} - {{formField systemFields.attack.fields.range value=document.system.attack.range label="DAGGERHEART.GENERAL.range" name="system.attack.range" localize=true}} + {{formField systemFields.attack.fields.roll.fields.bonus value=document._source.system.attack.roll.bonus label="DAGGERHEART.ACTIONS.Settings.attackBonus" name="system.attack.roll.bonus" localize=true}} + {{formField systemFields.attack.fields.range value=document._source.system.attack.range label="DAGGERHEART.GENERAL.range" name="system.attack.range" localize=true}} {{#if systemFields.attack.fields.target.fields}} - {{ formField systemFields.attack.fields.target.fields.type value=document.system.attack.target.type label="DAGGERHEART.GENERAL.Target.single" name="system.attack.target.type" localize=true }} - {{#if (and document.system.attack.target.type (not (eq document.system.attack.target.type 'self')))}} - {{ formField systemFields.attack.fields.target.fields.amount value=document.system.attack.target.amount label="DAGGERHEART.GENERAL.amount" name="system.attack.target.amount" localize=true}} + {{ formField systemFields.attack.fields.target.fields.type value=document._source.system.attack.target.type label="DAGGERHEART.GENERAL.Target.single" name="system.attack.target.type" localize=true }} + {{#if (and document._source.system.attack.target.type (not (eq document._source.system.attack.target.type 'self')))}} + {{ formField systemFields.attack.fields.target.fields.amount value=document._source.system.attack.target.amount label="DAGGERHEART.GENERAL.amount" name="system.attack.target.amount" localize=true}} {{/if}} {{/if}}
- {{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." horde=(eq document.system.type 'horde')}} + {{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." horde=(eq document._source.system.type 'horde')}} \ No newline at end of file diff --git a/templates/sheets-settings/adversary-settings/details.hbs b/templates/sheets-settings/adversary-settings/details.hbs index e3ecf859..194c7f0c 100644 --- a/templates/sheets-settings/adversary-settings/details.hbs +++ b/templates/sheets-settings/adversary-settings/details.hbs @@ -6,33 +6,33 @@
{{localize 'DAGGERHEART.GENERAL.basics'}}
- {{formGroup systemFields.tier value=document.system.tier localize=true}} - {{formGroup systemFields.type value=document.system.type localize=true}} - {{#if (eq document.system.type 'horde')}} - {{formGroup systemFields.hordeHp value=document.system.hordeHp label=(localize "DAGGERHEART.ACTORS.Adversary.horderHp")}} + {{formGroup systemFields.tier value=document._source.system.tier localize=true}} + {{formGroup systemFields.type value=document._source.system.type localize=true}} + {{#if (eq document._source.system.type 'horde')}} + {{formGroup systemFields.hordeHp value=document._source.system.hordeHp label=(localize "DAGGERHEART.ACTORS.Adversary.horderHp")}} {{/if}} - {{formGroup systemFields.difficulty value=document.system.difficulty localize=true}} + {{formGroup systemFields.difficulty value=document._source.system.difficulty localize=true}}
- {{formField systemFields.description value=document.system.description label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.description.label")}} - {{formField systemFields.motivesAndTactics value=document.system.motivesAndTactics label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.motivesAndTactics.label")}} + {{formField systemFields.description value=document._source.system.description label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.description.label")}} + {{formField systemFields.motivesAndTactics value=document._source.system.motivesAndTactics label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.motivesAndTactics.label")}}
{{localize "DAGGERHEART.GENERAL.HitPoints.plural"}} - {{formGroup systemFields.resources.fields.hitPoints.fields.value value=document.system.resources.hitPoints.value label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.resources.hitPoints.value.label")}} - {{formGroup systemFields.resources.fields.hitPoints.fields.max value=document.system.resources.hitPoints.max}} + {{formGroup systemFields.resources.fields.hitPoints.fields.value value=document._source.system.resources.hitPoints.value label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.resources.hitPoints.value.label")}} + {{formGroup systemFields.resources.fields.hitPoints.fields.max value=document._source.system.resources.hitPoints.max}}
{{localize "DAGGERHEART.GENERAL.stress"}} - {{formGroup systemFields.resources.fields.stress.fields.value value=document.system.resources.stress.value label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.resources.stress.value.label")}} - {{formGroup systemFields.resources.fields.stress.fields.max value=document.system.resources.stress.max}} + {{formGroup systemFields.resources.fields.stress.fields.value value=document._source.system.resources.stress.value label=(localize "DAGGERHEART.ACTORS.Adversary.FIELDS.resources.stress.value.label")}} + {{formGroup systemFields.resources.fields.stress.fields.max value=document._source.system.resources.stress.max}}
{{localize "DAGGERHEART.GENERAL.DamageThresholds.title"}} - {{formGroup systemFields.damageThresholds.fields.major value=document.system.damageThresholds.major label=(localize "DAGGERHEART.GENERAL.DamageThresholds.majorThreshold")}} - {{formGroup systemFields.damageThresholds.fields.severe value=document.system.damageThresholds.severe label=(localize "DAGGERHEART.GENERAL.DamageThresholds.severeThreshold")}} + {{formGroup systemFields.damageThresholds.fields.major value=document._source.system.damageThresholds.major label=(localize "DAGGERHEART.GENERAL.DamageThresholds.majorThreshold")}} + {{formGroup systemFields.damageThresholds.fields.severe value=document._source.system.damageThresholds.severe label=(localize "DAGGERHEART.GENERAL.DamageThresholds.severeThreshold")}}
\ No newline at end of file diff --git a/templates/sheets-settings/adversary-settings/experiences.hbs b/templates/sheets-settings/adversary-settings/experiences.hbs index 942fb238..a2c2b6de 100644 --- a/templates/sheets-settings/adversary-settings/experiences.hbs +++ b/templates/sheets-settings/adversary-settings/experiences.hbs @@ -10,7 +10,7 @@
{{localize tabs.experiences.label}}
    - {{#each document.system.experiences as |experience key|}} + {{#each document._source.system.experiences as |experience key|}}
  • diff --git a/templates/sheets-settings/companion-settings/attack.hbs b/templates/sheets-settings/companion-settings/attack.hbs index bebe40b3..0ec43d35 100644 --- a/templates/sheets-settings/companion-settings/attack.hbs +++ b/templates/sheets-settings/companion-settings/attack.hbs @@ -5,16 +5,16 @@ >
    {{localize "DAGGERHEART.GENERAL.basics"}} - {{formGroup systemFields.attack.fields.img value=document.system.attack.img label="DAGGERHEART.GENERAL.imagePath" name="system.attack.img" localize=true}} - {{formGroup systemFields.attack.fields.name value=document.system.attack.name label="DAGGERHEART.ACTIONS.Settings.attackName" name="system.attack.name" localize=true}} + {{formGroup systemFields.attack.fields.img value=document._source.system.attack.img label="DAGGERHEART.GENERAL.imagePath" name="system.attack.img" localize=true}} + {{formGroup systemFields.attack.fields.name value=document._source.system.attack.name label="DAGGERHEART.ACTIONS.Settings.attackName" name="system.attack.name" localize=true}}
    {{localize "DAGGERHEART.GENERAL.attack"}} - {{formField systemFields.attack.fields.range value=document.system.attack.range label="DAGGERHEART.GENERAL.range" name="system.attack.range" localize=true}} + {{formField systemFields.attack.fields.range value=document._source.system.attack.range label="DAGGERHEART.GENERAL.range" name="system.attack.range" localize=true}} {{#if systemFields.attack.fields.target.fields}} - {{ formField systemFields.attack.fields.target.fields.type value=document.system.attack.target.type label="DAGGERHEART.GENERAL.Target.single" name="system.attack.target.type" localize=true}} - {{#if (and document.system.attack.target.type (not (eq document.system.attack.target.type 'self')))}} - {{ formField systemFields.attack.fields.target.fields.amount value=document.system.attack.target.amount label="DAGGERHEART.GENERAL.amount" name="system.attack.target.amount" localize=true}} + {{ formField systemFields.attack.fields.target.fields.type value=document._source.system.attack.target.type label="DAGGERHEART.GENERAL.Target.single" name="system.attack.target.type" localize=true}} + {{#if (and document._source.system.attack.target.type (not (eq document._source.system.attack.target.type 'self')))}} + {{ formField systemFields.attack.fields.target.fields.amount value=document._source.system.attack.target.amount label="DAGGERHEART.GENERAL.amount" name="system.attack.target.amount" localize=true}} {{/if}} {{/if}}
    diff --git a/templates/sheets-settings/companion-settings/details.hbs b/templates/sheets-settings/companion-settings/details.hbs index 4f1825d8..e4293443 100644 --- a/templates/sheets-settings/companion-settings/details.hbs +++ b/templates/sheets-settings/companion-settings/details.hbs @@ -6,18 +6,18 @@
    {{localize 'DAGGERHEART.GENERAL.basics'}}
    - {{formGroup systemFields.evasion value=document.system.evasion localize=true}} - {{formGroup systemFields.resources.fields.stress.fields.value value=document.system.resources.stress.value label='DAGGERHEART.ACTORS.Companion.FIELDS.resources.stress.currentStress.label' localize=true}} - {{formGroup systemFields.resources.fields.stress.fields.max value=document.system.resources.stress.max label='DAGGERHEART.ACTORS.Companion.FIELDS.resources.stress.maxStress.label' localize=true}} + {{formGroup systemFields.evasion value=document._source.system.evasion localize=true}} + {{formGroup systemFields.resources.fields.stress.fields.value value=document._source.system.resources.stress.value label='DAGGERHEART.ACTORS.Companion.FIELDS.resources.stress.currentStress.label' localize=true}} + {{formGroup systemFields.resources.fields.stress.fields.max value=document._source.system.resources.stress.max label='DAGGERHEART.ACTORS.Companion.FIELDS.resources.stress.maxStress.label' localize=true}}
    - + \ No newline at end of file diff --git a/templates/sheets-settings/environment-settings/details.hbs b/templates/sheets-settings/environment-settings/details.hbs index 1f8c45f2..ecb47ca8 100644 --- a/templates/sheets-settings/environment-settings/details.hbs +++ b/templates/sheets-settings/environment-settings/details.hbs @@ -6,11 +6,11 @@
    {{localize 'DAGGERHEART.GENERAL.basics'}}
    - {{formGroup systemFields.tier value=document.system.tier localize=true}} - {{formGroup systemFields.type value=document.system.type localize=true}} - {{formGroup systemFields.difficulty value=document.system.difficulty localize=true}} + {{formGroup systemFields.tier value=document._source.system.tier localize=true}} + {{formGroup systemFields.type value=document._source.system.type localize=true}} + {{formGroup systemFields.difficulty value=document._source.system.difficulty localize=true}}
    - {{formField systemFields.description value=document.system.description label=(localize "DAGGERHEART.ACTORS.Environment.FIELDS.description.label")}} - {{formField systemFields.impulses value=document.system.impulses label=(localize "DAGGERHEART.ACTORS.Environment.FIELDS.impulses.label")}} + {{formField systemFields.description value=document._source.system.description label=(localize "DAGGERHEART.ACTORS.Environment.FIELDS.description.label")}} + {{formField systemFields.impulses value=document._source.system.impulses label=(localize "DAGGERHEART.ACTORS.Environment.FIELDS.impulses.label")}}
    \ No newline at end of file From f81d0d250fa939eb29da68dfe989598ea116b585 Mon Sep 17 00:00:00 2001 From: "Josh Q." Date: Sun, 10 Aug 2025 14:18:01 -0400 Subject: [PATCH 6/9] Dragging features from one adversary to another (#788) --- lang/en.json | 1 + .../sheets-configs/adversary-settings.mjs | 14 ++++++++++---- .../adversary-settings/features.less | 19 ++++++++++++++++++- .../adversary-settings/features.hbs | 5 ++++- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/lang/en.json b/lang/en.json index 11064dab..f35e7a66 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1899,6 +1899,7 @@ "difficulty": "Difficulty", "downtime": "Downtime", "dropActorsHere": "Drop Actors here", + "dropFeaturesHere": "Drop Features here", "duality": "Duality", "dualityRoll": "Duality Roll", "enabled": "Enabled", diff --git a/module/applications/sheets-configs/adversary-settings.mjs b/module/applications/sheets-configs/adversary-settings.mjs index 57deea25..bcc8b1c9 100644 --- a/module/applications/sheets-configs/adversary-settings.mjs +++ b/module/applications/sheets-configs/adversary-settings.mjs @@ -98,11 +98,17 @@ export default class DHAdversarySettings extends DHBaseActorSettings { async _onDrop(event) { const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event); - if (data.fromInternal) return; - + const item = await fromUuid(data.uuid); - if (item.type === 'feature') { - await this.actor.createEmbeddedDocuments('Item', [item]); + if (item?.type === 'feature') { + if (data.fromInternal && item.parent?.uuid === this.actor.uuid) { + return; + } + + const itemData = item.toObject(); + delete itemData._id; + + await this.actor.createEmbeddedDocuments('Item', [itemData]); } } } diff --git a/styles/less/sheets-settings/adversary-settings/features.less b/styles/less/sheets-settings/adversary-settings/features.less index 037a08ea..29c9874e 100644 --- a/styles/less/sheets-settings/adversary-settings/features.less +++ b/styles/less/sheets-settings/adversary-settings/features.less @@ -14,8 +14,14 @@ margin-bottom: 12px; } - .feature-list { + .feature-list, + .features-dragger { display: flex; + width: 100%; + font-family: @font-body; + } + + .feature-list { flex-direction: column; gap: 10px; @@ -45,5 +51,16 @@ } } } + + .features-dragger { + align-items: center; + justify-content: center; + box-sizing: border-box; + height: 40px; + margin-top: 10px; + border: 1px dashed light-dark(@dark-blue-50, @beige-50); + border-radius: 3px; + color: light-dark(@dark-blue-50, @beige-50); + } } } diff --git a/templates/sheets-settings/adversary-settings/features.hbs b/templates/sheets-settings/adversary-settings/features.hbs index a287c2a8..b26fa10c 100644 --- a/templates/sheets-settings/adversary-settings/features.hbs +++ b/templates/sheets-settings/adversary-settings/features.hbs @@ -10,7 +10,7 @@ {{localize tabs.features.label}}
      {{#each document.system.features as |feature|}} -
    • +
    • {{feature.name}} @@ -22,5 +22,8 @@
    • {{/each}}
    +
    + {{localize "DAGGERHEART.GENERAL.dropFeaturesHere"}} +
\ No newline at end of file From b470a1dc513ee71c6aa0c2b0c56f7c46331e77f5 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 20:19:37 +0200 Subject: [PATCH 7/9] [Fix] Levelup Fixes (#787) * Fixed crash on experience selection. Fixed subclass error on multiclassing * Fixed so multiclasses do not gain the hope feature for the class * Fixed so Class/Subclass features are properly deleted on delevel * Removed automatic deletion of features on delevel when not using levelup auto * Fixed so custom domains can be selected in levelup when multiclassing --- .../applications/levelup/characterLevelup.mjs | 2 +- .../applications/levelup/companionLevelup.mjs | 2 +- module/data/actor/character.mjs | 11 ++ module/data/item/class.mjs | 11 -- module/data/item/subclass.mjs | 5 +- module/documents/actor.mjs | 144 ++++++++++-------- module/helpers/utils.mjs | 13 +- templates/sheets/actors/character/header.hbs | 2 +- 8 files changed, 102 insertions(+), 88 deletions(-) diff --git a/module/applications/levelup/characterLevelup.mjs b/module/applications/levelup/characterLevelup.mjs index de28f241..0ae136c4 100644 --- a/module/applications/levelup/characterLevelup.mjs +++ b/module/applications/levelup/characterLevelup.mjs @@ -51,7 +51,7 @@ export default class DhCharacterLevelUp extends LevelUpBase { .filter(exp => exp.data.length > 0) .flatMap(exp => exp.data.map(data => { - const experience = Object.keys(this.actor.system.experiences).find(x => x === data); + const experience = Object.keys(this.actor.system.experiences)[data]; return this.actor.system.experiences[experience].name; }) ); diff --git a/module/applications/levelup/companionLevelup.mjs b/module/applications/levelup/companionLevelup.mjs index 2fcc42a0..c94d7d2b 100644 --- a/module/applications/levelup/companionLevelup.mjs +++ b/module/applications/levelup/companionLevelup.mjs @@ -39,7 +39,7 @@ export default class DhCompanionLevelUp extends BaseLevelUp { .filter(exp => exp.data.length > 0) .flatMap(exp => exp.data.map(data => { - const experience = Object.keys(this.actor.system.experiences).find(x => x === data); + const experience = Object.keys(this.actor.system.experiences)[data]; return this.actor.system.experiences[experience].name; }) ); diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index c40e7e5d..c5e250a4 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -351,6 +351,17 @@ export default class DhCharacter extends BaseDataActor { return [...classDomains, ...multiclassDomains]; } + get domainData() { + const allDomainData = CONFIG.DH.DOMAIN.allDomains(); + return this.domains.map(key => { + const domain = allDomainData[key]; + return { + ...domain, + label: game.i18n.localize(domain.label) + }; + }); + } + get domainCards() { const domainCards = this.parent.items.filter(x => x.type === 'domainCard'); const loadout = domainCards.filter(x => !x.system.inVault); diff --git a/module/data/item/class.mjs b/module/data/item/class.mjs index cee17613..45e8b4ab 100644 --- a/module/data/item/class.mjs +++ b/module/data/item/class.mjs @@ -60,17 +60,6 @@ export default class DHClass extends BaseDataItem { /* -------------------------------------------- */ - get domainData() { - const allDomainData = CONFIG.DH.DOMAIN.allDomains(); - return this.domains.map(key => { - const domain = allDomainData[key]; - return { - ...domain, - label: game.i18n.localize(domain.label) - }; - }); - } - get hopeFeatures() { return this.features.filter(x => x.type === CONFIG.DH.ITEM.featureSubTypes.hope).map(x => x.item); } diff --git a/module/data/item/subclass.mjs b/module/data/item/subclass.mjs index ce52fdc6..221785b3 100644 --- a/module/data/item/subclass.mjs +++ b/module/data/item/subclass.mjs @@ -21,7 +21,7 @@ export default class DHSubclass extends BaseDataItem { integer: false, nullable: true, initial: null, - label: "DAGGERHEART.ITEMS.Subclass.spellcastingTrait" + label: 'DAGGERHEART.ITEMS.Subclass.spellcastingTrait' }), features: new ItemLinkFields(), featureState: new fields.NumberField({ required: true, initial: 1, min: 1 }), @@ -50,7 +50,8 @@ export default class DHSubclass extends BaseDataItem { async _preCreate(data, options, user) { if (this.actor?.type === 'character') { - const dataUuid = data.uuid ?? data._stats?.compendiumSource ?? `Item.${data._id}`; + const dataUuid = + (data.uuid ?? data.folder) ? `Compendium.daggerheart.subclasses.Item.${data._id}` : `Item.${data._id}`; if (this.actor.system.class.subclass) { if (this.actor.system.multiclass.subclass) { ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.subclassesAlreadyPresent')); diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 8fc9b74a..c75db559 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -84,6 +84,8 @@ export default class DhpActor extends Actor { await this.update({ 'system.levelData.level.changed': Math.min(newLevel, maxLevel) }); } else { + const levelupAuto = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation).levelupAuto; + const usedLevel = Math.max(newLevel, 1); if (newLevel < 1) { ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.tooLowLevel')); @@ -95,79 +97,90 @@ export default class DhpActor extends Actor { return acc; }, {}); - const features = []; - const domainCards = []; - const experiences = []; - const subclassFeatureState = { class: null, multiclass: null }; - let multiclass = null; - Object.keys(this.system.levelData.levelups) - .filter(x => x > usedLevel) - .forEach(levelKey => { - const level = this.system.levelData.levelups[levelKey]; - const achievementCards = level.achievements.domainCards.map(x => x.itemUuid); - const advancementCards = level.selections.filter(x => x.type === 'domainCard').map(x => x.itemUuid); - domainCards.push(...achievementCards, ...advancementCards); - experiences.push(...Object.keys(level.achievements.experiences)); - features.push(...level.selections.flatMap(x => x.features)); + if (levelupAuto) { + const features = []; + const domainCards = []; + const experiences = []; + const subclassFeatureState = { class: null, multiclass: null }; + let multiclass = null; + Object.keys(this.system.levelData.levelups) + .filter(x => x > usedLevel) + .forEach(levelKey => { + const level = this.system.levelData.levelups[levelKey]; + const achievementCards = level.achievements.domainCards.map(x => x.itemUuid); + const advancementCards = level.selections + .filter(x => x.type === 'domainCard') + .map(x => x.itemUuid); + domainCards.push(...achievementCards, ...advancementCards); + experiences.push(...Object.keys(level.achievements.experiences)); + features.push(...level.selections.flatMap(x => x.features)); - const subclass = level.selections.find(x => x.type === 'subclass'); - if (subclass) { - const path = subclass.secondaryData.isMulticlass === 'true' ? 'multiclass' : 'class'; - const subclassState = Number(subclass.secondaryData.featureState) - 1; - subclassFeatureState[path] = subclassFeatureState[path] - ? Math.min(subclassState, subclassFeatureState[path]) - : subclassState; - } + const subclass = level.selections.find(x => x.type === 'subclass'); + if (subclass) { + const path = subclass.secondaryData.isMulticlass === 'true' ? 'multiclass' : 'class'; + const subclassState = Number(subclass.secondaryData.featureState) - 1; + subclassFeatureState[path] = subclassFeatureState[path] + ? Math.min(subclassState, subclassFeatureState[path]) + : subclassState; + } - multiclass = level.selections.find(x => x.type === 'multiclass'); - }); + multiclass = level.selections.find(x => x.type === 'multiclass'); + }); - for (let feature of features) { - if (feature.onPartner && !this.system.partner) continue; + for (let feature of features) { + if (feature.onPartner && !this.system.partner) continue; - const document = feature.onPartner ? this.system.partner : this; - document.items.get(feature.id)?.delete(); - } - - if (experiences.length > 0) { - const getUpdate = () => ({ - 'system.experiences': experiences.reduce((acc, key) => { - acc[`-=${key}`] = null; - return acc; - }, {}) - }); - this.update(getUpdate()); - if (this.system.companion) { - this.system.companion.update(getUpdate()); + const document = feature.onPartner ? this.system.partner : this; + document.items.get(feature.id)?.delete(); } - } - if (subclassFeatureState.class) { - this.system.class.subclass.update({ 'system.featureState': subclassFeatureState.class }); - } - - if (subclassFeatureState.multiclass) { - this.system.multiclass.subclass.update({ 'system.featureState': subclassFeatureState.multiclass }); - } - - if (multiclass) { - const multiclassSubclass = this.items.find(x => x.type === 'subclass' && x.system.isMulticlass); - const multiclassItem = this.items.find(x => x.uuid === multiclass.itemUuid); - - multiclassSubclass.delete(); - multiclassItem.delete(); - - this.update({ - 'system.multiclass': { - value: null, - subclass: null + if (experiences.length > 0) { + const getUpdate = () => ({ + 'system.experiences': experiences.reduce((acc, key) => { + acc[`-=${key}`] = null; + return acc; + }, {}) + }); + this.update(getUpdate()); + if (this.system.companion) { + this.system.companion.update(getUpdate()); } - }); - } + } - for (let domainCard of domainCards) { - const itemCard = this.items.find(x => x.uuid === domainCard); - itemCard.delete(); + if (subclassFeatureState.class) { + this.system.class.subclass.update({ 'system.featureState': subclassFeatureState.class }); + } + + if (subclassFeatureState.multiclass) { + this.system.multiclass.subclass.update({ 'system.featureState': subclassFeatureState.multiclass }); + } + + if (multiclass) { + const multiclassItem = this.items.find(x => x.uuid === multiclass.itemUuid); + const multiclassFeatures = this.items.filter( + x => x.system.originItemType === 'class' && x.system.identifier === 'multiclass' + ); + const subclassFeatures = this.items.filter( + x => x.system.originItemType === 'subclass' && x.system.identifier === 'multiclass' + ); + + this.deleteEmbeddedDocuments( + 'Item', + [multiclassItem, ...multiclassFeatures, ...subclassFeatures].map(x => x.id) + ); + + this.update({ + 'system.multiclass': { + value: null, + subclass: null + } + }); + } + + for (let domainCard of domainCards) { + const itemCard = this.items.find(x => x.uuid === domainCard); + itemCard.delete(); + } } await this.update({ @@ -315,6 +328,7 @@ export default class DhpActor extends Actor { ...multiclassData, system: { ...multiclassData.system, + features: multiclassData.system.features.filter(x => x.type !== 'hope'), domains: [multiclass.secondaryData.domain], isMulticlass: true } diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 3dc1f7ed..63507782 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -85,13 +85,12 @@ export const chunkify = (array, chunkSize, mappingFunc) => { export const tagifyElement = (element, baseOptions, onChange, tagifyOptions = {}) => { const { maxTags } = tagifyOptions; - const options = - typeof baseOptions === 'object' - ? Object.keys(baseOptions).map(optionKey => ({ - ...baseOptions[optionKey], - id: optionKey - })) - : baseOptions; + const options = Array.isArray(baseOptions) + ? baseOptions + : Object.keys(baseOptions).map(optionKey => ({ + ...baseOptions[optionKey], + id: optionKey + })); const tagifyElement = new Tagify(element, { tagTextProp: 'name', diff --git a/templates/sheets/actors/character/header.hbs b/templates/sheets/actors/character/header.hbs index 7f598f55..9f2d56a1 100644 --- a/templates/sheets/actors/character/header.hbs +++ b/templates/sheets/actors/character/header.hbs @@ -87,7 +87,7 @@ {{#if document.system.class.value}}
- {{#each document.system.class.value.system.domainData as |data|}} + {{#each document.system.domainData as |data|}}
From 10b871d4c348362a8e7b2041d9a15be281917bc9 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 21:07:09 +0200 Subject: [PATCH 8/9] Changed so encounter countdowns is a button (#804) --- lang/en.json | 5 ++- .../ui/combat-sidebar/encounter-controls.less | 41 +++---------------- .../ui/combatTracker/combatTrackerHeader.hbs | 31 +++++--------- 3 files changed, 19 insertions(+), 58 deletions(-) diff --git a/lang/en.json b/lang/en.json index f35e7a66..d182a77c 100755 --- a/lang/en.json +++ b/lang/en.json @@ -272,7 +272,8 @@ "combatStarted": "Active", "giveSpotlight": "Give The Spotlight", "requestingSpotlight": "Requesting The Spotlight", - "requestSpotlight": "Request The Spotlight" + "requestSpotlight": "Request The Spotlight", + "openCountdowns": "Countdowns" }, "ContextMenu": { "disableEffect": "Disable Effect", @@ -1899,7 +1900,7 @@ "difficulty": "Difficulty", "downtime": "Downtime", "dropActorsHere": "Drop Actors here", - "dropFeaturesHere": "Drop Features here", + "dropFeaturesHere": "Drop Features here", "duality": "Duality", "dualityRoll": "Duality Roll", "enabled": "Enabled", diff --git a/styles/less/ui/combat-sidebar/encounter-controls.less b/styles/less/ui/combat-sidebar/encounter-controls.less index 58deaae8..fd0c1aee 100644 --- a/styles/less/ui/combat-sidebar/encounter-controls.less +++ b/styles/less/ui/combat-sidebar/encounter-controls.less @@ -2,43 +2,14 @@ .encounter-controls.combat { justify-content: space-between; - .encounter-fear-controls { + .encounter-title { + text-align: left; + } + + .inner-controls { display: flex; align-items: center; - gap: 8px; - - .encounter-fear-dice-container { - display: flex; - gap: 2px; - - .encounter-control-fear-container { - display: flex; - position: relative; - align-items: center; - justify-content: center; - color: black; - - .dice { - height: 22px; - width: 22px; - } - - .encounter-control-fear { - position: absolute; - font-size: 16px; - } - - .encounter-control-counter { - position: absolute; - right: -10px; - color: var(--color-text-secondary); - } - } - } - - .encounter-countdowns { - color: var(--content-link-icon-color); - } + gap: 4px; } .control-buttons { diff --git a/templates/ui/combatTracker/combatTrackerHeader.hbs b/templates/ui/combatTracker/combatTrackerHeader.hbs index de666168..9ecff9e6 100644 --- a/templates/ui/combatTracker/combatTrackerHeader.hbs +++ b/templates/ui/combatTracker/combatTrackerHeader.hbs @@ -51,19 +51,6 @@ {{/if}}
- {{#if hasCombat}} -
-
-
- - -
-
{{fear}}
-
- -
- {{/if}} - {{!-- Combat Status --}} {{#if combats.length}} @@ -78,14 +65,16 @@ {{!-- Combat Controls --}} - {{#if hasCombat}} -
-
- -
- {{/if}} - +
+ {{#if hasCombat}} + +
+
+ +
+ {{/if}} +
From 4603e7e40ce3d4aa955e883e0581af43471196f6 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 10 Aug 2025 21:08:08 +0200 Subject: [PATCH 9/9] Fixed so that dropping on class/subclass...creates the item on the character (#803) --- .../sheets/api/application-mixin.mjs | 1 + module/applications/sheets/api/base-item.mjs | 66 ++++++++++++++----- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/module/applications/sheets/api/application-mixin.mjs b/module/applications/sheets/api/application-mixin.mjs index 315ae3cb..18a5ac91 100644 --- a/module/applications/sheets/api/application-mixin.mjs +++ b/module/applications/sheets/api/application-mixin.mjs @@ -129,6 +129,7 @@ export default function DHApplicationMixin(Base) { const docs = []; for (const docData of this.relatedDocs) { + if (!docData) continue; const doc = await foundry.utils.fromUuid(docData.uuid); docs.push(doc); } diff --git a/module/applications/sheets/api/base-item.mjs b/module/applications/sheets/api/base-item.mjs index 6bd91ae8..a9d3237d 100644 --- a/module/applications/sheets/api/base-item.mjs +++ b/module/applications/sheets/api/base-item.mjs @@ -181,12 +181,18 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) { static async #deleteFeature(_, element) { const target = element.closest('[data-item-uuid]'); const feature = await getDocFromElement(target); - if (!feature) return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.featureIsMissing')); - await this.document.update({ - 'system.features': this.document.system.features - .filter(x => target.dataset.type !== x.type || x.item.uuid !== feature.uuid) - .map(x => ({ ...x, item: x.item.uuid })) - }); + if (!feature) { + await this.document.update({ + 'system.features': this.document.system.features + .filter(x => x.item) + .map(x => ({ ...x, item: x.item.uuid })) + }); + } else + await this.document.update({ + 'system.features': this.document.system.features + .filter(x => target.dataset.type !== x.type || x.item.uuid !== feature.uuid) + .map(x => ({ ...x, item: x.item.uuid })) + }); } /** @@ -259,21 +265,45 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) { if (data.fromInternal) return; const target = event.target.closest('fieldset.drop-section'); - const item = await fromUuid(data.uuid); + let item = await fromUuid(data.uuid); if (item?.type === 'feature') { + const cls = foundry.documents.Item.implementation; + + if (this.document.parent?.type === 'character') { + const itemData = item.toObject(); + item = await cls.create( + { + ...itemData, + system: { + ...itemData.system, + originItemType: this.document.type, + originId: this.document.id, + identifier: this.document.system.isMulticlass ? 'multiclass' : null + } + }, + { parent: this.document.parent } + ); + } + if (target.dataset.type) { - await this.document.update({ - 'system.features': [...this.document.system.features, { type: target.dataset.type, item }].map( - x => ({ - ...x, - item: x.item?.uuid - }) - ) - }); + await this.document.update( + { + 'system.features': [...this.document.system.features, { type: target.dataset.type, item }].map( + x => ({ + ...x, + item: x.item?.uuid + }) + ) + }, + { parent: this.document.parent?.type === 'character' ? this.document.parent : undefined } + ); } else { - await this.document.update({ - 'system.features': [...this.document.system.features, item].map(x => x.uuid) - }); + await this.document.update( + { + 'system.features': [...this.document.system.features, item].map(x => x.uuid) + }, + { parent: this.document.parent?.type === 'character' ? this.document.parent : undefined } + ); } } }