diff --git a/src/web/price-check/filters/create-stat-filters.ts b/src/web/price-check/filters/create-stat-filters.ts index b220a996..e29c0349 100644 --- a/src/web/price-check/filters/create-stat-filters.ts +++ b/src/web/price-check/filters/create-stat-filters.ts @@ -1,5 +1,5 @@ import { ParsedItem, ItemRarity } from '@/parser' -import { ItemModifier } from '@/parser/modifiers' +import { ItemModifier, ModifierType } from '@/parser/modifiers' import { uniqueModFilterPartial } from './unique-roll' import { rollToFilter } from './util' import { StatFilter } from './interfaces' @@ -52,9 +52,9 @@ export function itemModToFilter (mod: ItemModifier, item: ParsedItem) { if ( item.rarity === ItemRarity.Unique && - uniqueModFilterPartial(item, mod, filter) + mod.type !== ModifierType.Enchant ) { - // ok. parsed as stat on unique item + uniqueModFilterPartial(item, mod, filter) } else { itemModFilterPartial(mod, filter) } diff --git a/src/web/price-check/filters/pseudo/item-property-unique.ts b/src/web/price-check/filters/pseudo/item-property-unique.ts index 25b4403f..d6d8d596 100644 --- a/src/web/price-check/filters/pseudo/item-property-unique.ts +++ b/src/web/price-check/filters/pseudo/item-property-unique.ts @@ -1,4 +1,4 @@ -import { rollToFilter, percentRollDelta } from '../util' +import { percentRollDelta } from '../util' import { INTERNAL_TRADE_ID, StatFilter } from '../interfaces' import { FiltersCreationContext, itemModToFilter } from '../create-stat-filters' import { propAt20Quality, variablePropAt20Quality, QUALITY_STATS } from './calc-q20' @@ -157,7 +157,11 @@ function propToFilter ( text, type, disabled: true, - ...rollToFilter(totalQ20, { neverNegated: true }) + defaultMin: totalQ20, + defaultMax: totalQ20, + min: totalQ20, + max: undefined, + roll: totalQ20 }) } } diff --git a/src/web/price-check/filters/unique-roll.ts b/src/web/price-check/filters/unique-roll.ts index cd28a2c4..cc90f213 100644 --- a/src/web/price-check/filters/unique-roll.ts +++ b/src/web/price-check/filters/unique-roll.ts @@ -22,15 +22,15 @@ export function uniqueModFilterPartial ( item: ParsedItem, mod: ItemModifier, filter: Writeable -): boolean { +): void { const uniqueInfo = Uniques.get(`${item.name} ${item.baseType}`) - if (!uniqueInfo) return false + if (!uniqueInfo) return fallbackToExact(mod, filter) const modInfo = uniqueInfo.stats.find(stat => stat.text === mod.stat.ref && stat.implicit === (mod.type === 'implicit' ? true : undefined) ) - if (!modInfo) return false + if (!modInfo) return fallbackToExact(mod, filter) filter.variant = modInfo.variant @@ -40,7 +40,7 @@ export function uniqueModFilterPartial ( } // it may be catalysts or stale data after patch - if (!isWithinBounds(mod, modInfo)) return false + if (!isWithinBounds(mod, modInfo)) return fallbackToExact(mod, filter) if (isConstantMod(modInfo)) { filter.defaultMin = getRollAsSingleNumber(mod.values) @@ -61,6 +61,13 @@ export function uniqueModFilterPartial ( filter.defaultMin = Math.max(percentRollDelta(roll, (filter.boundMax - filter.boundMin), -percent, Math.floor), filter.boundMin) filter.defaultMax = Math.min(percentRollDelta(roll, (filter.boundMax - filter.boundMin), +percent, Math.ceil), filter.boundMax) } +} - return true +function fallbackToExact (mod: ItemModifier, filter: Writeable) { + if (!mod.values) return + + filter.roll = getRollAsSingleNumber(mod.values) + filter.defaultMin = filter.roll + filter.defaultMax = filter.roll + filter.min = filter.roll }