From ec78f316a05e818e8bcd59cbda463b1349ec4813 Mon Sep 17 00:00:00 2001 From: kvan7 Date: Tue, 1 Sep 2026 20:41:08 -0500 Subject: [PATCH] config saving and auto apply --- main/package.json | 7 +++ renderer/package.json | 5 +- renderer/public/data/en/app_i18n.json | 3 +- renderer/src/parser/Parser.ts | 39 ++++++++++++++- renderer/src/parser/augment-builder.ts | 47 +++++++++++++++++-- renderer/src/parser/magic-name.ts | 6 --- .../price-check/item-editor/AugmentEditor.vue | 13 ++--- 7 files changed, 100 insertions(+), 20 deletions(-) diff --git a/main/package.json b/main/package.json index 6d25f6e2..3484a743 100644 --- a/main/package.json +++ b/main/package.json @@ -51,5 +51,12 @@ }, "overrides": { "yauzl": "^3.3.1" + }, + "allowScripts": { + "electron@40.10.2": true, + "electron-overlay-window@4.0.2": true, + "electron-winstaller@5.4.0": true, + "esbuild@0.28.0": true, + "uiohook-napi@1.5.4": true } } diff --git a/renderer/package.json b/renderer/package.json index c1187f26..c94b469c 100644 --- a/renderer/package.json +++ b/renderer/package.json @@ -66,5 +66,8 @@ }, "browserslist": [ "chrome >= 101" - ] + ], + "allowScripts": { + "esbuild@0.21.5": true + } } diff --git a/renderer/public/data/en/app_i18n.json b/renderer/public/data/en/app_i18n.json index 543c20a6..5d594862 100644 --- a/renderer/public/data/en/app_i18n.json +++ b/renderer/public/data/en/app_i18n.json @@ -511,6 +511,7 @@ "armour": "Armours", "all": "All Items", "save": "Save", - "confirm": "Confirm" + "confirm": "Confirm", + "clear": "Clear" } } diff --git a/renderer/src/parser/Parser.ts b/renderer/src/parser/Parser.ts index 7d04a879..573eab0b 100644 --- a/renderer/src/parser/Parser.ts +++ b/renderer/src/parser/Parser.ts @@ -42,7 +42,8 @@ import { } from "./advanced-mod-desc"; import { calcPropPercentile, QUALITY_STATS } from "./calc-q20"; import { AppConfig } from "@/web/Config"; -import { buildEditorItems } from "./augment-builder"; +import { buildEditorItems, getSavedAugments } from "./augment-builder"; +import { useAugment } from "@/web/price-check/item-editor/augment"; type SectionParseResult = | "SECTION_PARSED" @@ -1360,6 +1361,42 @@ function applyAugmentSockets(item: ParsedItem) { ).length; item.augmentSockets.augments = augments; } + + if ( + item.augmentSockets && + (item.augmentSockets.empty === item.augmentSockets.normal || + (item.augmentSockets.empty === item.augmentSockets.current && + item.augmentSockets.current > item.augmentSockets.normal)) + ) { + // fill sockets, if all are empty && if chosen (also maybe check setting to enable it) + const augmentBases = getSavedAugments(item); + const editorItems = augmentBases.map((base) => { + if (!base) return null; + return buildEditorItems([base], item.category ?? ItemCategory.Unknown)[0]; + }); + if (!editorItems.length || editorItems.every((item) => item === null)) { + return; + } + // fill the correct number of sockets + const allSameAugment = new Set(augmentBases).size === 1; + const augmentCountToApply = + itemIsModifiable(item) && + item.augmentSockets.normal > item.augmentSockets.current + ? item.augmentSockets.normal + : item.augmentSockets.current; + + if (allSameAugment) { + const augmentToApply = editorItems[0]; + for (let i = 0; i < augmentCountToApply; i++) { + useAugment(item, augmentToApply!, i); + } + } else { + for (let i = 0; i < augmentCountToApply; i++) { + if (!editorItems[i]) continue; + useAugment(item, editorItems[i]!, i); + } + } + } } function parseMirrored(section: string[], item: ParsedItem) { diff --git a/renderer/src/parser/augment-builder.ts b/renderer/src/parser/augment-builder.ts index ad088bb1..2280c843 100644 --- a/renderer/src/parser/augment-builder.ts +++ b/renderer/src/parser/augment-builder.ts @@ -1,7 +1,9 @@ -import { AugmentLineData, BaseType } from "@/assets/data"; -import { ItemCategory } from "./meta"; +import { AugmentLineData, BaseType, ITEM_BY_REF } from "@/assets/data"; +import { ARMOUR, ItemCategory, MARTIAL_WEAPON } from "./meta"; import { replaceHashWithValues } from "./Parser"; -import { EditorItem } from "./ParsedItem"; +import { EditorItem, ParsedItem } from "./ParsedItem"; +import { PriceCheckWidget } from "@/web/overlay/widgets"; +import { AppConfig } from "@/web/Config"; export function selectAugmentEffectByItemCategory( category: ItemCategory, @@ -75,3 +77,42 @@ function buildEditorItem( baseItem: augment, }; } + +export function getSavedAugments(item: ParsedItem): Array { + if (!item.augmentSockets) return []; + const lookup = AppConfig("price-check")!.savedAugments; + + let refNames: Array = []; + if (item.category && lookup[item.category]?.length) { + refNames = lookup[item.category]!; + } else if ( + item.category && + MARTIAL_WEAPON.has(item.category) && + lookup.martialWeapon?.length + ) { + refNames = lookup.martialWeapon; + } else if ( + (item.category === ItemCategory.Wand || + item.category === ItemCategory.Staff) && + lookup.casterWeapon?.length + ) { + refNames = lookup.casterWeapon; + } else if (item.category === ItemCategory.Sceptre && lookup.spectre?.length) { + refNames = lookup.spectre; + } else if ( + item.category && + ARMOUR.has(item.category) && + lookup.armour?.length + ) { + refNames = lookup.armour; + } else if (lookup.all?.length) { + refNames = lookup.all; + } + + const bases = refNames.map((refName) => { + if (!refName) return null; + return ITEM_BY_REF("ITEM", refName)?.at(0) ?? null; + }); + + return bases; +} diff --git a/renderer/src/parser/magic-name.ts b/renderer/src/parser/magic-name.ts index a63541bf..36a3d4b6 100644 --- a/renderer/src/parser/magic-name.ts +++ b/renderer/src/parser/magic-name.ts @@ -25,15 +25,9 @@ export function magicBasetype(name: string) { ITEM_BY_REF("ITEM", name) ?? ITEM_BY_TRANSLATED("ITEM", name); // TRADE_ITEM_BY_REF({ name }, true); if (result) { - console.warn("REF/TRANSLATED", name); return { name, found: result && result[0].craftable, tradeItem: false }; } const tradeResult = TRADE_ITEM_BY_REF({ name }, true); - if (tradeResult) { - console.warn("TRADE", name); - } else { - console.warn("NOT FOUND", name); - } return { name, found: tradeResult && tradeResult[0].craftable, diff --git a/renderer/src/web/price-check/item-editor/AugmentEditor.vue b/renderer/src/web/price-check/item-editor/AugmentEditor.vue index 5ad2fd55..e3d27398 100644 --- a/renderer/src/web/price-check/item-editor/AugmentEditor.vue +++ b/renderer/src/web/price-check/item-editor/AugmentEditor.vue @@ -120,7 +120,7 @@
{{ t(":save_type") }}
- @@ -132,10 +132,7 @@
- @@ -246,13 +243,13 @@ export default defineComponent({ { immediate: true }, ); const savedConfig = computed( - () => AppConfig("PriceCheckWidget")!.savedAugments, + () => AppConfig("price-check")!.savedAugments, ); function getSaveType() { switch (saveType.value) { case AugmentSaveType.Class: - return props.item?.info.craftable?.category ?? "Unknown"; + return props.item?.category ?? "Unknown"; case AugmentSaveType.CasterWeapon: return "casterWeapon"; case AugmentSaveType.MaritalWeapon: @@ -264,7 +261,7 @@ export default defineComponent({ case AugmentSaveType.All: return "all"; default: - return props.item?.info.craftable?.category ?? "Unknown"; + return props.item?.category ?? "Unknown"; } }