In patch 7.3.5 ??? they are changing way spell names are returned by API. Instead of returning them in same frame they are requested in, they return spell info without spell name in first frame, and queue spell name request to be returned in a later frame via SPELL_NAME_UPDATE. This causes significant breakage to mods without tons of code changes to work around it.
The reasoning for this change as explained to me is to improve client performance and reduce hitching caused by loading spell info in certain places such as achievement frame. Overall it should be a net gain in performance for base UI and even addons that call GetSpellInfo repeatedly. It allows blizzard to return the spell info right away and spell name in next frame to reduce hitching in client caused by the old spell API.
Here is where things get iffy. This change did not consider several cases for addon authors where such a system simply doesn't work well. One major example is LoadAddon. In many cases an addon author only ever requests a spellName for something once, OnLoad. Often times in these cases there is no onevent or onupdate handler to fix spell name after the fact. The mod loads, pulls spell info and calls it a day. This is no longer possible in 7.3.5 ??? what so ever. This requires addon authors to literally write functions to fix things after loading. Fortunately blizzard acknowledged this would be an issue and is one of reasons they canceled deployment of feature in 7.3.5 until they can give us a solution to deal with this.
Addon authors gave blizzard a lot pushback because the coding we would have had to do to fix this is not always simple and can border on stupid and may cost users the performance blizzard saved them and then some. Basically, one step forward two steps back with this change. Addon authors see why an async system is beneficial, but we simply wanted a solution to be used that isn't async for niche cases where it works in all addon type cases that makes sense and isn't ugly or performance hit to users or horrible to write hack.
On DBM for example, I've already corrected Announce and timer objects to work just fine with async spell names in an efficient manor that is 7.3.5 ??? friendly. These are functions that update all the time so it's easy enough to get spell name in a follow up frame. However, the GUI itself, which populates mod options, descriptions, spellnames etc on load ONLY, supporting this system is quite frankly going to require ugly hacks that will not be pretty or efficient. Issues like this have been brought to blizzards attention and their response has been that they plan to make a callback system where we wrap our code in callbacks and they call/execute our code when spell name is returned. While this will work, again I just don't think it's a good solution.
What I believe to be the answer, is a separate GetSpellInfo rule that returns spell name that frame, but should and can only be used in a LoadAddon call or other situations. Many of these niche cases only intend to pull that spell info once and not all the time. I'm not talking about damage meters or things like that, which should use the new async system for the very performance reasons they want this for, either. I'm talking Something that literally asks for spell names once, then NEVER again in the 4 hours person is in raid. We should not have to write elaborate event listeners or callbacks for something so simple. If one of my mods literally just has "local spellName = GetSpellInfo(12345)" in it's declarations and never uses the api again, why should this mod require callbacks and nonsense to function properly? Suddenly one local variable is now several lines of hackish code for something that's not supposed to be complicated.
For those who just came here for what this means for DBM
- Announces work fine, timer work fine. Most features work fine. There may be new bugs/regressions as new code is tested and things ironed out. Especially in older content mods which will take time to update to new requirements after the current content ones are done. Just report any issues you come across. Even little things like the title of an infoframe saying "ReloadUI To Fix" instead of spell name (btw if you do see any timers/warnings/frames that say this OTHER than GUI, don't reload in combat, report the issue to me. I can fix in combat stuff that says this easily. I probably just missed it.
- Some timer line separators had to be deleted from mods. These are lines that separated timers into different categories. If those catagories used GetSpellInfo() to pull the name, they are now deleted/gone.
- Currently, the GUI will show no spell names for ANY mod options the first time any mod loads. It will look like this. http://mysticalos.com/images/DBM/DBM_735_GUI.jpg . The only way to fix it currently is to do a UI Reload after the zones mod has been loaded at least once via /console reloadu (or /reloadui or /reload if any addons are registering shortcut). So you walk into antorus, mod loads, you reload ui yourself, mod loads with actual spell names second time around. Currently This cannot be fixed until addon authors see this "callback" system and how it can be implemented to fix the DBM GUI