Short Description:
The Seeker Synthesis crafted set from the Telvanni Peninsula bugs your character's potions completely on use.
I made multiple reports of this issue, through:
- Forums;
- Tickets;
- Addressing the team directly through one of my friends from the stream team.
Everytime, there were mentions of investigations, of "looking into it" etc.
@ZOS_Kevin This was half a year ago. For context, here is the video I initially recorded with the issue in-game for a more detailed explanation, which, at this point, should have reached the dev team at least twice:
https://www.youtube.com/watch?v=0B1ftlFGZgM
Now,
why is this such a big deal? Well, for a handful of reasons i'd say.
- There are multiple complains on forum / reddit etc. of people who encountered this issue and had their characters bugged. Unlike me, some of them didn't really dig deeper into the issue and simply hoped that the devs will eventually "look into it", leading to characters that maybe even today have their potion stuck ever since the Necrom chapter released, as no one deemed this issue important enough to warrant a fix.
- The set belongs to Necrom. It happens that Necrom is premium content. Not only through ESO+, but also as an expansion for which I happened to pay full price on release, as I was none the wiser back then.
- The issue takes a handful of minutes to fix ( if you're skeptical about this, just read the whole post ).
Since this is such a big enigma ( at this point i'm not sure which one is more disappointing - whether this is such a "difficult" issue to pinpoint and fix, or whether no one considered that such a gamebreaking bug that makes premium content worse than unusable is not an issue worth bothering with for the past 6 months ), here's a very ( VERY ) detailed report of the issue, including some Pseudocode where more detailed explanations are needed so that it's adaptable to the game's internal structure and logic:
⚙️
CONTEXT & BEHAVIOR
Potion Cooldown (Base): 45 seconds.
Potion Cooldown Modifiers: Reduced by enchantments and the set effect.
Set Effect (Seeker Synthesis): When casting an ability in combat, reduce potion cooldown by 1s. Has an internal cooldown of 2s.
Global Cooldown (Abilities): 0.9s.
Visual: Grayed-out cooldown icon with a progress ring that fills back over time.
Bug Behavior:
Potion becomes permanently grayed out.
Cooldown never progresses or resets.
Re-zoning (changing zone) resets some internal state.
Cooldown starts working again only after re-engaging in combat and proccing the set.
Bug repeats eventually, requiring another zone change.
❌ POSSIBLE CAUSES
1. Potion Cooldown Value Becomes NaN // undefined or similar value.
If a cast triggers reduction but potionCooldown is corrupt, cooldown freezes.
Explains stuck state without any visible error.
✅ Fix: Validate potionCooldown before applying reduction. Default to base (e.g. 45s).
2. Division by Zero in Cooldown Progress Calculation
If totalPotionCooldown is accidentally set to 0 due to faulty calculations, UI logic fails.
Might render potion permanently locked visually AND logically.
✅ Fix: Prevent totalCooldown from being set to 0. Default to 45 or recalculate from base + modifiers ( enchants ).
3. Cooldown Reduction Applies After Potion is Already at 0s
function reducePotionCooldown() {
if (potionCooldown <= 0) {
// Cooldown is already over, no need to reduce
return
}
potionCooldown -= 1
}
If potionCooldown is already zero and continues to be reduced, might cause negative or corrupt states.
If your implemented validation contains something like isPotionUsable = Boolean ( potionCooldown === 0 ) then a negative value will break the logic.
If the Seeker Synthesis set and the default potion cooldown reduction interval run on two separate timers, things like lag spikes might make the cooldown drop below 0 if server state is not in-sync and one interval fails to return early as it didn't validate the cooldown being 0 already.
✅Potential Fix: Clamp minimum value to 0 and validate.
4. More detailed explanation on Cooldown race condition:
// Called on potion use
onPotionUse():
player.potionCooldownActive = true
player.potionCooldownEndTime = now + calculatePotionCooldown()
// Called when Seeker Synthesis procs
onSeekerSynthesisProc():
if player.potionCooldownActive:
player.potionCooldownEndTime -= 1s
// UI and logic depend on potionCooldownEndTime - now
Bug Trigger:
Seeker Synthesis and potion cooldown run on separate timers.
One shortens the cooldown, but the other doesn't update or re-check.
If desynchronized, they may overwrite each other’s state or freeze entirely as explained above.
Do I have any hopes from this post? Nah. But I happened to say "why not" to wasting my time a bit.