From dfeafea6ae14f81f3f8df65d3acaee9ef41c3f07 Mon Sep 17 00:00:00 2001 From: kvan7 Date: Fri, 4 Apr 2025 14:57:27 -0500 Subject: [PATCH] fix runes kinda --- renderer/src/assets/data/index.ts | 13 +++++++--- renderer/src/assets/data/interfaces.ts | 4 +-- renderer/src/parser/Parser.ts | 26 ++++++++++--------- renderer/src/parser/stat-translations.ts | 23 +++++++++++----- renderer/src/web/background/Leagues.ts | 4 +-- .../price-check/filters/FilterModifier.vue | 18 ++++++++++--- .../web/price-check/filters/FiltersBlock.vue | 3 ++- .../price-check/filters/ItemEditorButton.vue | 5 +++- .../src/web/price-check/filters/fill-runes.ts | 2 ++ 9 files changed, 66 insertions(+), 32 deletions(-) diff --git a/renderer/src/assets/data/index.ts b/renderer/src/assets/data/index.ts index 138f3ba5..dead4ed4 100644 --- a/renderer/src/assets/data/index.ts +++ b/renderer/src/assets/data/index.ts @@ -182,7 +182,7 @@ async function loadItems(language: string, isTest = false) { RUNE_LIST = Array.from( ITEMS_ITERATOR('"craftable": {"category": "SoulCore"}'), - ); + ).filter((r) => r.rune && r.rune.armour?.tradeId && r.rune.weapon?.tradeId); } async function loadStats(language: string, isTest = false) { @@ -309,7 +309,9 @@ export function loadUltraLateItems( ) { RUNE_LIST = Array.from( ITEMS_ITERATOR('"craftable": {"category": "SoulCore"}'), - ).filter(runeFilter); + ) + .filter((r) => r.rune && r.rune.armour?.tradeId && r.rune.weapon?.tradeId) + .filter(runeFilter); RUNE_DATA_BY_RUNE = runesToLookup(RUNE_LIST); @@ -347,14 +349,17 @@ function runesToLookupTradeId(runeList: BaseType[]): RuneDataByTradeId { if (!rune.rune) continue; for (const runeStat in rune.rune) { const { string: text, values, tradeId } = rune.rune[runeStat]; - runeDataByRune[tradeId[0]] = { + if (!runeDataByRune[tradeId[0]]) { + runeDataByRune[tradeId[0]] = []; + } + runeDataByRune[tradeId[0]].push({ rune: rune.name, baseStat: text, values, id: tradeId[0], type: runeStat, icon: rune.icon, - }; + }); } } diff --git a/renderer/src/assets/data/interfaces.ts b/renderer/src/assets/data/interfaces.ts index aa16a7ad..b00c06fa 100644 --- a/renderer/src/assets/data/interfaces.ts +++ b/renderer/src/assets/data/interfaces.ts @@ -289,12 +289,12 @@ export interface RuneDataByRune { [rune: string]: RuneData[]; } export interface RuneDataByTradeId { - [tradeId: string]: { + [tradeId: string]: Array<{ rune: string; baseStat: string; values: number[]; id: string; type: string; icon: string; - }; + }>; } diff --git a/renderer/src/parser/Parser.ts b/renderer/src/parser/Parser.ts index e39c821c..18dd3d32 100644 --- a/renderer/src/parser/Parser.ts +++ b/renderer/src/parser/Parser.ts @@ -5,7 +5,6 @@ import { ITEM_BY_REF, STAT_BY_MATCH_STR, BaseType, - RUNE_SINGLE_VALUE, ITEM_BY_TRANSLATED, } from "@/assets/data"; import { ModifierType, StatCalculated, sumStatsByModType } from "./modifiers"; @@ -1010,6 +1009,7 @@ function applyRuneSockets(item: ParsedItem) { // If we have any rune sockets if (item.runeSockets) { // Count current mods that are of type Rune + const runeMods = item.newMods.filter( (mod) => mod.info.type === ModifierType.Rune, ); @@ -1026,10 +1026,11 @@ function applyRuneSockets(item: ParsedItem) { }) .flat(); - const potentialEmptySockets = - Math.max(item.runeSockets.normal, item.runeSockets.current) - - runes.reduce((x, y) => x + y, 0); - + // HACK: fix since I can't detect how many exist due to rune tiers + const tempFix = runes.reduce((x, y) => x + y, 0) > 0; + const potentialEmptySockets = tempFix + ? 0 + : Math.max(item.runeSockets.normal, item.runeSockets.current); item.runeSockets.empty = potentialEmptySockets; } } @@ -1613,15 +1614,16 @@ export function isArmourOrWeapon( function runeCount(mod: ParsedModifier, statCalc: StatCalculated): number { if (mod.info.type !== ModifierType.Rune) return 0; - const runeTradeId = statCalc.stat.trade.ids[ModifierType.Rune][0]; - const runeSingle = RUNE_SINGLE_VALUE[runeTradeId]; + // HACK: fix since I can't detect how many exist due to rune tiers + // const runeTradeId = statCalc.stat.trade.ids[ModifierType.Rune][0]; + // const runeSingle = RUNE_SINGLE_VALUE[runeTradeId]; - // Calculate how many of this rune are in the item - const runeAppliedValue = statCalc.sources[0].contributes!.value; - const runeSingleValue = runeSingle.values[0]; - const totalRunes = Math.floor(runeAppliedValue / runeSingleValue); + // // Calculate how many of this rune are in the item + // const runeAppliedValue = statCalc.sources[0].contributes!.value; + // const runeSingleValue = runeSingle.values[0]; + // const totalRunes = Math.floor(runeAppliedValue / runeSingleValue); - return totalRunes; + return 1; } export function replaceHashWithValues(template: string, values: number[]) { diff --git a/renderer/src/parser/stat-translations.ts b/renderer/src/parser/stat-translations.ts index 501fa440..2e371acf 100644 --- a/renderer/src/parser/stat-translations.ts +++ b/renderer/src/parser/stat-translations.ts @@ -251,16 +251,27 @@ export function tryParseTranslation( } : undefined, fromAddedRune: - modType === ModifierType.AddedRune - ? ITEM_BY_REF( - "ITEM", - RUNE_DATA_BY_TRADE_ID[found.stat.trade.ids.rune[0]].rune, - )![0] - : undefined, + modType === ModifierType.AddedRune ? getRune(found.stat) : undefined, }; } } +function getRune(stat: Stat): BaseType | undefined { + if ( + !stat.trade.ids || + !stat.trade.ids.rune || + stat.trade.ids.rune.length === 0 + ) + return; + + const tradeId = stat.trade.ids.rune[0]; + // HACK: temp fix for icons + const runes = RUNE_DATA_BY_TRADE_ID[tradeId]; + const rune = runes.find((r) => r.icon !== "%NOT_FOUND%") ?? runes[0]; + const runesWithSameTradeId = ITEM_BY_REF("ITEM", rune.rune)!; + return runesWithSameTradeId[0]; +} + export function getRollOrMinmaxAvg(values: number[]): number { if (values.length === 2) { return (values[0] + values[1]) / 2; diff --git a/renderer/src/web/background/Leagues.ts b/renderer/src/web/background/Leagues.ts index 9dd496c5..c61b9051 100644 --- a/renderer/src/web/background/Leagues.ts +++ b/renderer/src/web/background/Leagues.ts @@ -33,9 +33,9 @@ export const useLeagues = createGlobalState(() => { }, ], }, - { id: "Hunt", rules: [] }, + { id: "Dawn of the Hunt", rules: [] }, { - id: "Hunt Hardcore", + id: "HC Dawn of the Hunt", rules: [ { id: "Hardcore", diff --git a/renderer/src/web/price-check/filters/FilterModifier.vue b/renderer/src/web/price-check/filters/FilterModifier.vue index 33a7c08d..06ab1d82 100644 --- a/renderer/src/web/price-check/filters/FilterModifier.vue +++ b/renderer/src/web/price-check/filters/FilterModifier.vue @@ -39,7 +39,14 @@ :class="$style['qualityLabel']" class="self-center" > - +
{{ t("item.prop_quality", [calcQuality]) }} @@ -187,9 +194,12 @@ export default defineComponent({ ); const showRuneNotice = computed(() => { - if (props.filter.sources.some((source) => source.stat.fromAddedRune)) - return props.filter.sources.find((source) => source.stat.fromAddedRune) - ?.stat.fromAddedRune?.icon; + if (props.filter.sources.some((source) => source.stat.fromAddedRune)) { + const i = props.filter.sources.find( + (source) => source.stat.fromAddedRune, + )?.stat.fromAddedRune?.icon; + return i; + } return false; }); diff --git a/renderer/src/web/price-check/filters/FiltersBlock.vue b/renderer/src/web/price-check/filters/FiltersBlock.vue index e3299851..a460dcfe 100644 --- a/renderer/src/web/price-check/filters/FiltersBlock.vue +++ b/renderer/src/web/price-check/filters/FiltersBlock.vue @@ -368,7 +368,8 @@ export default defineComponent({ return props.item.runeSockets && props.item.runeSockets.empty > 0; }), getRuneImage(rune: string) { - return RUNE_DATA_BY_RUNE[rune][0].icon; + const icon = RUNE_DATA_BY_RUNE[rune][0].icon; + return icon === "%NOT_FOUND%" ? "/images/404.png" : icon; }, }; }, diff --git a/renderer/src/web/price-check/filters/ItemEditorButton.vue b/renderer/src/web/price-check/filters/ItemEditorButton.vue index 1f69de1e..4adbaad2 100644 --- a/renderer/src/web/price-check/filters/ItemEditorButton.vue +++ b/renderer/src/web/price-check/filters/ItemEditorButton.vue @@ -6,7 +6,10 @@ >
- +
diff --git a/renderer/src/web/price-check/filters/fill-runes.ts b/renderer/src/web/price-check/filters/fill-runes.ts index 7315cd6c..e06d40a5 100644 --- a/renderer/src/web/price-check/filters/fill-runes.ts +++ b/renderer/src/web/price-check/filters/fill-runes.ts @@ -27,6 +27,7 @@ export function handleApplyItemEdits( editType?: ItemEditorType, ) { if (filterStorage.length !== 0) return; + console.log("FILLLLLLLLLLLLLLLLLLLL"); // Testing with just one stat const newFilters = createNewStatFilter(item, currencyItem ?? "Iron Rune"); if (!newFilters) return; @@ -57,6 +58,7 @@ export function handleRemoveItemEdits( filterStorage: StatFilter[], ) { // reset back to normal + console.log("REMOVE"); for (const filterToApply of filterStorage) { // get on/off state of old filter const oldFilter = filters.find(