Blizzard Relaxing More Addon Limitations in Midnight

Starym's Avatar by Starym

We have another round of negotiations between Blizzard and the addon devs! With today’s beta there’s been some additional relaxing of the new addon restrictions, as well as more announced for future builds.

As spotted by Wowhead, Blizzard talked to the addon devs in the WoW UI Dev Discord and shared their plans. From loosening the healing and absorb prediction limitations to actually unlocking access to specific spells and resources like Shaman’s Maelstrom Weapon iconMaelstrom Weapon or Demon Hunter’s Soul Fragment iconSoul Fragments (or, less crucially, Skyriding ability charges), as well as adding more cast bar flexibility, these are all steps in the right direction to preserve as many addons as possible.

We’ll see just how many spells end up whitelisted in the end, and just how steep those intitially announced restrictions will end up being when the expansion launches.


Blizzard again! Below you will find a list of changes we are making to addon restriction APIs in the coming weeks.
These are not the entirety of the changes we are planning, just the ones already committed to for the immediately upcoming Beta releases.

NOTE: Beta 5 will be the last Beta build we put out this year. We will be continuing to work on addon dev requests until the holidays but Beta 6 won’t be made until January.
Also note that Beta 4 had more changes than expected, and Beta 5 has fewer due to build timing (Beta 4 ended up being built later than expected).

REMINDER: Beta builds have switched to a 12.0.1 version number instead of 12.0.0. This is because 12.0.0 will be the version used for Midnight pre-patch, and 12.0.1 will be the version used for actual Midnight launch. The remainder of Beta will feature 12.0.1 builds, while PTR (when it goes up) will feature 12.0.0 builds. We will continue to make addon-related changes in 12.0.0 until we make our pre-patch Release Candidate (RC) build.

One important thing to note here is that we DO plan to have these new addon restrictions active in pre-patch (12.0.0), rather than waiting until 12.0.1. The reason for this is we want to give players a chance to get used to the new addon landscape prior to Midnight launch. We are not in 12.0.0 RC yet, so you can continue to test in Beta for now, but once we pick an RC build (we will let you know when that happens) we advise addon authors looking to prepare for pre-patch switch to testing on PTR instead of Beta.

After the 12.0.0 RC is chosen, our engineers will be switching over to making most addon-related changes in 12.0.1 (outside of very high priority stuff). We will continue to make changes to 12.0.1 all the way up until launch (and well past launch even, in follow-up patches) to provide you with more of the QoL changes you have requested.

Coming in Beta 5 (ETA 12/17)

UnitFrame Heal Absorb & Heal Prediction
  • We have added a new UnitHealPredictionCalculator Lua object (created via a new CreateUnitHealPredictionCalculator API), and an associated API UnitGetDetailedHealPrediction that accepts this object type.
    • Addons can use these APIs to calculate all of the heal prediction and absorb data needed for passing directly into other APIs.
    • This object provides various options, such as allowing for damage absorbs to be clamped to either missing health, missing health after adding incoming healing, or maximum health.
    • Very brief example shown below:

      local calculator = CreateUnitHealPredictionCalculator(); UnitGetDetailedHealPrediction(unit, unitDoingTheHealing, calculator); -- 'calculator' is updated with new data after this call. local incomingHeals, incomingHealsFromHealer, incomingHealsFromOthers, incomingHealsClamped = calculator:GetIncomingHeals(); myStatusBar:SetValue(incomingHealsFromHealer);
Cast Bars
  • Added a new optional direction parameter to `StatusBar:SetTimerDuration` that allows the status bar to calculate its fill from remaining duration rather than elapsed (for channeled spells primarily).
Party Kill Event
  • Added a new `PARTY_KILL` event that gets sent when a party member kills a unit. The payload is 2 unitGUIDs, the attacker and target. Both are secret when the associated unit’s identity is secret.

Currently being worked on

Whitelisting Select Spells
  • Adding numerous spells to the whitelists for cooldown/aura secrecy: Skyriding spells, the GCD spell, Maelstrom Weapon, Devourer DH resource spells, Combat Res spells.
  • Continue to call out spells that you think should be whitelisted, we will evaluate each of them individually.
Removing Old Duration APIs
  • We are removing several APIs (in C_UnitAuras, C_Spell and C_ActionBar) that are no longer needed now that Duration objects are a thing.
Generic Boolean To Color APIs
  • We are adding 2 new APIs (C_CurveUtil.EvaluateColorFromBoolean and C_CurveUtil.EvaluateColorValueFromBoolean) that can be used to convert a secret boolean to a color.
  • This is in preference to adding SetStatusBarColorFromBoolean, SetColorTextureFromBoolean, etc.
Lots More Cast Bar Stuff
  • We are adding a new castbar spell sequence ID delivered with spellcast events and from the UnitCastingInfo/UnitChannelInfo APIs. This sequence ID is only delivered for casting events that should display a castbar in the UI, is incremented on each new spellcast, and is never secret.
  • We will be removing secret restrictions on several values needed by addons to properly display enemy empowered casts (number of stages and the percentage of cast time each stage consumes).
  • We will be adding a way to include the hold-at-max time of empowered casts in a duration object.
Formatting Secret Times
  • We are adding a new SecondsFormatter Lua object that will allow addons to format secret time values into strings.
  • Other numeric formatting solutions are also being worked on, including a solution for formatting differences between cast durations (eg. for spell pushback).
Restricted Environment Issues
  • Several functions (strsplit, strjoin, strconcat) that got mistakenly removed from the restricted environment are being added back.
Reload UI & Secrets
  • We are fixing an issue where secret values are made non-secret following a UI reload.