diff --git a/ui/core/components/suggest_reforges_action.tsx b/ui/core/components/suggest_reforges_action.tsx index 1541b039b4..969083bd85 100644 --- a/ui/core/components/suggest_reforges_action.tsx +++ b/ui/core/components/suggest_reforges_action.tsx @@ -1349,12 +1349,41 @@ export class ReforgeOptimizer { } const scaledItem = item.withDynamicStats(); + const availableReforges = this.player.getAvailableReforgings(scaledItem); - for (const reforgeData of this.player.getAvailableReforgings(scaledItem)) { + // Filter reforges based on preferences + let reforgesToUse = availableReforges.filter(reforgeData => { if (!epStats.includes(reforgeData.toStat) && reforgeData.toStat != Stat.StatExpertiseRating) { - continue; + return false; + } + + // For casters: prefer Hit over Expertise + // If the item doesn't have Hit or Expertise natively, remove Expertise as a reforge option + const isCaster = this.playerClass === Class.ClassMage || + this.playerClass === Class.ClassWarlock || + this.playerClass === Class.ClassPriest || + this.player.getSpec() === Spec.SpecBalanceDruid || + this.player.getSpec() === Spec.SpecRestorationDruid || + this.player.getSpec() === Spec.SpecElementalShaman || + this.player.getSpec() === Spec.SpecRestorationShaman || + this.player.getSpec() === Spec.SpecHolyPaladin || + this.player.getSpec() === Spec.SpecMistweaverMonk; + + if (isCaster && reforgeData.toStat === Stat.StatExpertiseRating) { + const itemStats = scaledItem.calcStats(); + const hasNativeHit = itemStats.getStat(Stat.StatHitRating) > 0; + const hasNativeExpertise = itemStats.getStat(Stat.StatExpertiseRating) > 0; + + // If item has neither Hit nor Expertise natively, don't allow reforging to Expertise + if (!hasNativeHit && !hasNativeExpertise) { + return false; + } } + return true; + }); + + for (const reforgeData of reforgesToUse) { const variableKey = `${slot}_${reforgeData.id}`; const coefficients = new Map(); coefficients.set(ItemSlot[slot], 1);