Skip to content

feat(mythicplus): add the Mythic+ Tools module - #1238

Open
wanghwplus wants to merge 1 commit into
EllesmereGaming:mainfrom
wanghwplus:feat/mythic-plus-tools
Open

feat(mythicplus): add the Mythic+ Tools module#1238
wanghwplus wants to merge 1 commit into
EllesmereGaming:mainfrom
wanghwplus:feat/mythic-plus-tools

Conversation

@wanghwplus

Copy link
Copy Markdown

What does this PR do?

Adds Mythic+ Tools (EllesmereUIMythicPlus), a new child addon that turns the Group
Finder into a Mythic+ dashboard. It is one addon with five independent features, each with
its own switch:

Feature What the player gets
Score Overlay Dungeon name, best key level and season score drawn onto each Group Finder dungeon icon (Blizzard's own key level can be hidden)
Dungeon Teleports Click a dungeon icon to cast its teleport, with an optional party/instance announce
Weekly Panel This week's runs docked beside the Group Finder; hold Shift for season best, plus a per-dungeon summary and Great Vault reward item levels
Party Keystones A floating list of every party member's keystone, hidden once a run starts
Keystone Owners Names who is holding a key for the Mythic dungeon the group just entered

Both keystone displays are placed through the shared Unlock Mode, and the module registers
its own page group (Dungeon Icons / Weekly Panel / Keystones), profile storage, global
search aliases and first-install entry alongside every other module. /emp opens it
directly.

Season maintenance is deliberately near-zero. The module duplicates no season data: the
current dungeon set comes from C_ChallengeMode.GetMapTable(), and abbreviations plus
teleport spells resolve out of the existing EllesmereUI.SEASON_PORTALS by localized
dungeon name. A season rollover therefore needs no change here at all. Great Vault reward
item levels ask C_MythicPlus.GetRewardLevelForDifficultyLevel first and only fall back to
a hardcoded per-season table when that data has not landed yet.

This PR also records the complete SEASON_PORTALS consumer list at its definition, plus the
constraint that season entries must be replaced rather than appended -- the two portal
flyouts and the DataBars travel tooltip render that list whole, so an entry committed early
for a future season would show up as a dead portal button.

How was it tested?

Live retail, 12.0 client. All five features were run against a real character and a real
group -- the screenshots below are from that session, on live season data (season score,
full run history, a five-player group each holding a keystone).

Covered in game: all three options pages, the score overlay and teleport buttons on the
Group Finder dungeon list, the weekly panel in both its weekly and Shift season-best views,
the party keystone list with a full group, and the owner banner on entering a Mythic
dungeon.

Not exercised on the 12.1 PTR client. The module uses no 12.1-only API and is not gated on
IS_121, but it has not been loaded there.

Screenshots

Options -- Dungeon Icons (score overlay + teleports):

Dungeon Icons page

Options -- Weekly Panel:

Weekly Panel page

Options -- Keystones:

Keystones page

In game -- score overlay on the dungeon icons (left) and the weekly panel docked to the
Group Finder, here in its Shift season-best view (right):

Score overlay and weekly panel

In game -- the party keystone list (left) and the keystone owner banner (right):

Party keystones and owner banner

The boxed glyphs in that last shot are a non-Latin character name on a Western client --
the suite-wide LOCALE_FONT_FALLBACK keys off the client locale, not off the text being
drawn, so this is existing behavior rather than anything this module introduces.

This is a new module, so there is no "before" state to show.

Checklist

  • New settings default OFF (no behavior change without opt-in)

    Applied where it matters: Announce Teleports defaults OFF, since it is the
    only feature that speaks to other players. The module and its display features
    default ON, matching how every sibling child addon ships (Mythic+ Timer, Quest
    Tracker, ...) -- installing and enabling the addon is itself the opt-in.
  • Zero cost while disabled: no events registered, no polling, no hooks doing work, no frames built

    Each feature is a ns.RegisterFeature entry whose Start runs only on first
    enable; a disabled feature registers no events, builds no frames and installs no
    hooks. C_MythicPlus.RequestMapInfo() is likewise only requested from Start.
  • Cheap while enabled: event-driven (no polling, no timer-based logic, no per-frame allocations)

    Purely event-driven (PLAYER_ENTERING_WORLD, CHALLENGE_MODE_COMPLETED,
    MODIFIER_STATE_CHANGED and friends), with the modifier event subscribed only while
    the panel is actually up. Tooltip and panel row buffers are allocated once and reused.
    No OnUpdate anywhere.
  • No writes onto Blizzard-owned frames (weak-table pattern used); HookScript/hooksecurefunc only, never SetScript on Blizzard frames

    PVEFrame is only ever HookScripted. The weekly panel parents to UIParent
    and anchors to PVEFrame rather than re-parenting into its tree.
  • Tested in-game, works on live retail; no load errors on the 12.1 PTR client

    Live retail: yes, see above. 12.1 PTR: not verified -- the module uses no
    12.1-only API, but I have not loaded it on that client. Happy to test if you would
    like that confirmed before merge.

A Group Finder companion built as one child addon with five independent,
self-gating features: a dungeon score overlay drawn onto each Group Finder
dungeon icon, one-click teleports on those same icons with an optional
party announce, a weekly/season run panel docked to the window, a floating
party keystone list, and an in-dungeon keystone owner banner. Every feature
registers no events, builds no frames and hooks nothing while it is off.

Season data is deliberately not duplicated. The current dungeons come from
C_ChallengeMode.GetMapTable() and abbreviations plus teleport spells resolve
out of EllesmereUI.SEASON_PORTALS by localized dungeon name, so the module
follows a season rollover with no code change. Great Vault reward item
levels ask C_MythicPlus.GetRewardLevelForDifficultyLevel first and fall back
to a per-season table only when that data has not landed.

Announce Teleports defaults OFF: it is the only thing here that speaks to
other players, and installing an addon should not start broadcasting to the
group.

Also records the full SEASON_PORTALS consumer list at its definition, and
the constraint that season entries must be replaced rather than appended --
the portal flyouts and the travel tooltip render that list whole.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants