From 463dd153eaa9e69cbfaf8278374a274258a8d4ea Mon Sep 17 00:00:00 2001 From: Cerapter Date: Fri, 31 Jan 2025 15:52:49 +0100 Subject: [PATCH 1/8] Change `bulk` ItemAlteration to accept more modes --- .../rules/rule-element/item-alteration/alteration.ts | 7 ++++++- src/module/rules/rule-element/item-alteration/schemas.ts | 9 ++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index 5fb1db76d34..f51de335f48 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -152,7 +152,12 @@ class ItemAlteration extends foundry.abstract.DataModel({ + mode: new fields.StringField({ + required: true, + choices: () => ["add", "downgrade", "multiply", "override", "remove", "subtract", "upgrade"], + }), + value: new StrictNumberField({ required: true, nullable: false, - choices: [0, 0.1, ...Array.fromRange(100, 1)], + integer: false, initial: undefined, } as const), }), From 9fdcdb5e93a1e4c0d751099e0e98fd1ecf532bfc Mon Sep 17 00:00:00 2001 From: Cerapter Date: Fri, 31 Jan 2025 16:10:33 +0100 Subject: [PATCH 2/8] Add `level` as a potential ItemAlteration --- .../item-alteration/alteration.ts | 15 +++++++++++ .../rule-element/item-alteration/schemas.ts | 27 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index f51de335f48..c640f22ff3a 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -36,6 +36,7 @@ class ItemAlteration extends foundry.abstract.DataModel(data.alteration.value) ? data.alteration.value diff --git a/src/module/rules/rule-element/item-alteration/schemas.ts b/src/module/rules/rule-element/item-alteration/schemas.ts index d44fa36e9ff..9fff62c485e 100644 --- a/src/module/rules/rule-element/item-alteration/schemas.ts +++ b/src/module/rules/rule-element/item-alteration/schemas.ts @@ -336,6 +336,33 @@ const ITEM_ALTERATION_VALIDATORS = { initial: undefined, } as const), }), + level: new ItemAlterationValidator( + { + itemType: new fields.StringField({ + required: true, + choices: () => R.keys(CONFIG.PF2E.Item.documentClasses), + }), + mode: new fields.StringField({ + required: true, + choices: ["add", "downgrade", "multiply", "override", "remove", "subtract", "upgrade"], + }), + value: new fields.NumberField({ + required: true, + nullable: false, + positive: false, + initial: undefined, + } as const), + }, + { + validateForItem(item): DataModelValidationFailure | void { + if (item.system.level === undefined || item.system.level.value === undefined) { + return new validation.DataModelValidationFailure({ + message: "item must have a level", + }); + } + }, + }, + ), "material-type": new ItemAlterationValidator({ itemType: new fields.StringField({ required: true, choices: Array.from(PHYSICAL_ITEM_TYPES) }), mode: new fields.StringField({ required: true, choices: ["override"] }), From ed82fece219272ba4a73fe195505dec17ef5f23c Mon Sep 17 00:00:00 2001 From: Cerapter Date: Fri, 31 Jan 2025 16:11:16 +0100 Subject: [PATCH 3/8] Add `flags` as an ItemAlteration to change an objects flags --- .../item-alteration/alteration.ts | 19 ++++++++++++++++ .../rule-element/item-alteration/schemas.ts | 22 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index c640f22ff3a..a1ddefc6740 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -31,6 +31,7 @@ class ItemAlteration extends foundry.abstract.DataModel R.keys(CONFIG.PF2E.Item.documentClasses), + }), + mode: new fields.StringField({ + required: true, + choices: ["add", "downgrade", "multiply", "override", "remove", "subtract", "upgrade"], + }), + value: new fields.ObjectField({ required: true, nullable: false, initial: undefined } as const), + }, + { + validateForItem(item): DataModelValidationFailure | void { + if (!("getFlag" in item) || typeof item.getFlag !== "function") { + return new validation.DataModelValidationFailure({ + message: "item must be able to accept flags", + }); + } + }, + }, + ), "focus-point-cost": new ItemAlterationValidator({ itemType: new fields.StringField({ required: true, choices: ["spell"] } as const), mode: new fields.StringField({ From 54d756935bd38c63e3240e35c50d244e52da15e4 Mon Sep 17 00:00:00 2001 From: Cerapter Date: Fri, 31 Jan 2025 19:01:52 +0100 Subject: [PATCH 4/8] Separated error checking and actually modifying flags Previously, if a later value failed, all earlier values would still be committed to the flags. --- src/module/rules/rule-element/item-alteration/alteration.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index a1ddefc6740..9d475ff4b34 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -261,16 +261,16 @@ class ItemAlteration extends foundry.abstract.DataModel Date: Sun, 2 Feb 2025 12:53:19 +0100 Subject: [PATCH 5/8] Revert "Separated error checking and actually modifying flags" This reverts commit 54d756935bd38c63e3240e35c50d244e52da15e4. --- src/module/rules/rule-element/item-alteration/alteration.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index 9d475ff4b34..a1ddefc6740 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -261,16 +261,16 @@ class ItemAlteration extends foundry.abstract.DataModel Date: Sun, 2 Feb 2025 12:53:26 +0100 Subject: [PATCH 6/8] Revert "Add `flags` as an ItemAlteration to change an objects flags" This reverts commit ed82fece219272ba4a73fe195505dec17ef5f23c. --- .../item-alteration/alteration.ts | 19 ---------------- .../rule-element/item-alteration/schemas.ts | 22 ------------------- 2 files changed, 41 deletions(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index a1ddefc6740..c640f22ff3a 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -31,7 +31,6 @@ class ItemAlteration extends foundry.abstract.DataModel R.keys(CONFIG.PF2E.Item.documentClasses), - }), - mode: new fields.StringField({ - required: true, - choices: ["add", "downgrade", "multiply", "override", "remove", "subtract", "upgrade"], - }), - value: new fields.ObjectField({ required: true, nullable: false, initial: undefined } as const), - }, - { - validateForItem(item): DataModelValidationFailure | void { - if (!("getFlag" in item) || typeof item.getFlag !== "function") { - return new validation.DataModelValidationFailure({ - message: "item must be able to accept flags", - }); - } - }, - }, - ), "focus-point-cost": new ItemAlterationValidator({ itemType: new fields.StringField({ required: true, choices: ["spell"] } as const), mode: new fields.StringField({ From 5cf11e4ba40691cbfd60b7f967514959f8829684 Mon Sep 17 00:00:00 2001 From: Cerapter Date: Sun, 2 Feb 2025 12:53:28 +0100 Subject: [PATCH 7/8] Revert "Add `level` as a potential ItemAlteration" This reverts commit 9fdcdb5e93a1e4c0d751099e0e98fd1ecf532bfc. --- .../item-alteration/alteration.ts | 15 ----------- .../rule-element/item-alteration/schemas.ts | 27 ------------------- 2 files changed, 42 deletions(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index c640f22ff3a..f51de335f48 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -36,7 +36,6 @@ class ItemAlteration extends foundry.abstract.DataModel(data.alteration.value) ? data.alteration.value diff --git a/src/module/rules/rule-element/item-alteration/schemas.ts b/src/module/rules/rule-element/item-alteration/schemas.ts index 9fff62c485e..d44fa36e9ff 100644 --- a/src/module/rules/rule-element/item-alteration/schemas.ts +++ b/src/module/rules/rule-element/item-alteration/schemas.ts @@ -336,33 +336,6 @@ const ITEM_ALTERATION_VALIDATORS = { initial: undefined, } as const), }), - level: new ItemAlterationValidator( - { - itemType: new fields.StringField({ - required: true, - choices: () => R.keys(CONFIG.PF2E.Item.documentClasses), - }), - mode: new fields.StringField({ - required: true, - choices: ["add", "downgrade", "multiply", "override", "remove", "subtract", "upgrade"], - }), - value: new fields.NumberField({ - required: true, - nullable: false, - positive: false, - initial: undefined, - } as const), - }, - { - validateForItem(item): DataModelValidationFailure | void { - if (item.system.level === undefined || item.system.level.value === undefined) { - return new validation.DataModelValidationFailure({ - message: "item must have a level", - }); - } - }, - }, - ), "material-type": new ItemAlterationValidator({ itemType: new fields.StringField({ required: true, choices: Array.from(PHYSICAL_ITEM_TYPES) }), mode: new fields.StringField({ required: true, choices: ["override"] }), From 9e43cde28869741fac8f7dc867b6b6dc46c42d24 Mon Sep 17 00:00:00 2001 From: Cerapter Date: Sun, 2 Feb 2025 13:04:20 +0100 Subject: [PATCH 8/8] Check that resulting bulk alteration isn't negative --- src/module/rules/rule-element/item-alteration/alteration.ts | 2 +- src/module/rules/rule-element/item-alteration/schemas.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index f51de335f48..5d717f5b4c9 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -157,7 +157,7 @@ class ItemAlteration extends foundry.abstract.DataModel