fallback to exact

This commit is contained in:
Alexander Drozdov
2020-04-22 18:55:46 +03:00
parent a89368bd1a
commit 5401fe49e2
3 changed files with 21 additions and 10 deletions
@@ -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)
}
@@ -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
})
}
}
+12 -5
View File
@@ -22,15 +22,15 @@ export function uniqueModFilterPartial (
item: ParsedItem,
mod: ItemModifier,
filter: Writeable<StatFilter>
): 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<StatFilter>) {
if (!mod.values) return
filter.roll = getRollAsSingleNumber(mod.values)
filter.defaultMin = filter.roll
filter.defaultMax = filter.roll
filter.min = filter.roll
}