wowsims / wotlk

World of Warcraft Wrath of the Lich King Classic simulations.
https://wowsims.github.io/wotlk/
MIT License
149 stars 140 forks source link

Instant Poison procs Elemental Focus Stone in sim #2585

Open Raer667 opened 1 year ago

Raer667 commented 1 year ago

Describe the bug Elemental Focus Stone procs on Instant Poison in sim but that doesn't work in game

To Reproduce Steps to reproduce the behavior:

  1. equip Elemental Focus Stone on a rogue based sim
  2. click Simulate
  3. go to Log or Results to view that Elemental Focus Stone buff is present following an instance of Instant Poison damage
  4. this behavior does not happen in game

Expected behavior Elemental Focus Stone should not proc on Instant Poison damage

Sim Links and Screenshots Sim Link

This happens in the web app, so it's an engine issue.

Additional context Below is a link of a hodir kill with Rogue wearing Elemental Focus Stone, with 0 procs. Warcraft Logs

vigo2 commented 1 year ago

As per WoW.tools, Elemental Focus Stone and e.g. Black Magic use the same Procmask (0x10000 = PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG). Weirdly, the latter does proc from poison applications, while the supplied log strongly implies the first doesn't. ProcMask on Instant Poison is fine, so this is rather an item bug (quite possible that other proc sources are exempted, too).

vigo2 commented 1 year ago

Black Magic's SpellAura has "Can Proc From Procs" (0x04000000 = SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED) set, while Elemental Focus Stone and e.g. Embrace of the Spider don't have this.

Pendulum of Telluric Currents and Sundial of the Exiled both have "Can Proc From Procs" set, so both of these should work with poisons, too, if this is the deciding factor.

vigo2 commented 1 year ago

Forgot to update here: "Can Proc From Procs" is not the deciding factor. Pendulum of Telluric Currents triggers from poisons, while Sundial of the Exiled doesn't. The first is also procced by Paladin Seals, while the latter isn't. No idea how to proceed here: currently, the sim only differentiates between ProcMaskSpellDamage with or without dealing damage, or uses OnCastComplete() instead of the usual OnSpellHitDealt().