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"
>
-
+