Asylum Companion

An all-in-one, peer-to-peer toolkit for a premade group: SimC profiles, a live interrupt tracker and an OmniCD-style cooldown board, buff & durability checks, loot tips, Great Vault sharing, a keystone assistant and a quality-of-life toolbox.

File Details

AsylumCompagnon_0.35.4.zip

  • B
  • Jul 11, 2026
  • 2.16 MB
  • 11
  • 12.0.7
  • Retail

File Name

AsylumCompagnon_0.35.4.zip

Supported Versions

  • 12.0.7
  • 0.35.4Inventory: "Misc" family (Auto-Hammer) + audit of tracked consumables vs the buff-checker. Added a 5th inventory filter chip Divers / Misc for shared utilities, with Auto-Hammer (132514) as its first item (group repair). Cross-checked the tracked NS.TRACKED_ITEMS list against what the buff-checker actually validates: the checker is name-based (FLASK_NAME_HINTS, FOOD_NAME_HINTS → any "flask"/"well fed" aura passes, incl. the Paladin Rite special case), while the inventory needs explicit itemIDs — so the inventory was the incomplete side. Findings: flasks (4 Midnight flasks) and combat potions (2, with health/mana intentionally excluded) are complete; oils are complete for practical use (Phoenix Oil + Oil of Dawn; the other "weapon buffs" seen in-game are old TBC sharpening/weightstones like Adamantite Weightstone 28421 at <1% usage). Food had real gaps — added three current Hearty feasts from the popularity lists: Hearty Glitter Skewers (242753), Hearty Sunwell Delight (242765), Hearty Bloodthistle-Wrapped Cutlets (242768 from the confirmed +472 Hearty offset, with non-Hearty 242296 as fallback). Chip row re-fitted for 5 families (padding 16→12, gap 5→4). The Rite is deliberately not an inventory item (it's a spell, not something you carry).
  • 0.35.3Inventory: family filter (no more overflow). The left "Consumables" list previously drew every tracked item stacked with absolute positioning, so with all flasks + potions + food + oils it spilled past the window bottom onto the action bars. Replaced with a family filter (mockup B): a row of chips under the title — Flacons · Potions · Nourriture · Huiles — shows one family at a time, so the list always fits with no scrollbar and never overflows. The active chip is underlined (accent) and acts as the section title, so the in-list gold category headers were dropped (redundant). New invCat state (default flask); refreshInvList hides all rows, restyles the chips, and lays out only the rows whose t.cat == invCat from a fixed top offset. The right "who has it" panel (Mon perso / Groupe / Guilde / Rerolls) and the item-click selection (invFilter) are unchanged.
  • 0.35.2Mass Dispel, Tranquilizing Shot & Cauterizing Flame moved into the Dispel category. 0.35.1 added the single-target cleanses but left these three where they already were (ext/def); they're genuine dispels, so they now carry type = "disp": Priest Mass Dispel (32375, was ext), Hunter Tranquilizing Shot (19801, was ext — the hunter's only, offensive, dispel), Evoker Cauterizing Flame (374251, was def — removes Bleed/Poison/Curse/Disease). No duplication: their existing entries were re-typed in place (the vestigial def = true flag, which nothing reads, was left as-is). They now appear in the Dispel column/tab alongside the rest.
  • 0.35.1New "Dispels" cooldown category. Each class that has a dispel can now be tracked: single-target cleanses added to NS.COOLDOWNS with a new type = "disp" — Priest Purify (527), Paladin Cleanse (4987) / Cleanse Toxins (213644), Druid Nature's Cure (88423) / Remove Corruption (2782), Shaman Purify Spirit (77130) / Cleanse Spirit (51886), Mage Remove Curse (475), Monk Detox (115450/218164), Evoker Naturalize (360823) / Expunge (365585), Warlock Devour Magic (19505), DH Consume Magic (278326). (Mass Dispel 32375, Tranquilizing Shot 19801 and Cauterizing Flame 374251 were already tracked under ext/def and are unchanged.) A new "disp" entry in NS.CD_TYPES (before pot) drives the menu block-toggle and the per-class window tab; TYPE_ORDER/CAT_ORDER/CAT_LABEL/CAT_TIP in Cooldowns.lua and CAT_SEQ/CATNAME/CATCOL/CATSHORT in UI.lua all gained disp. On the overlay board the dispel sits just before the potion slot (sorted after res, potion still appended last). Filtering is automatic: CD.RefreshKnown already tests IsPlayerSpell, so each player only shows the dispel they actually have (Holy Paladin → Cleanse; Prot/Ret → Cleanse Toxins), and the two-ID cases (Monk Detox, Shaman Purify) merge to one icon by name. The category block-buttons were narrowed (92→84 / step 96→90) so all six fit on one row. Most dispels have an 8s cooldown, so the icon only flashes briefly.
  • 0.35.0Per-class window bigger & resizable, inventory reworked, Vault solo/guild fix, duplicate-CD merge. Per-class cooldown window: default size ~×1.6 (576×700), resizable by a bottom-right grip (SetResizable + StartSizing("BOTTOMRIGHT")), size saved to NS.db.cdClassWinW/H; the spell list width follows the window (w.sc/fitList, re-applied in RenderClassWindow and OnSizeChanged). Inventory reworked: the left panel is renamed "Consommables" and now lists every tracked consumable grouped by category (Flasks / Potions / Food / Oils — new cat field on NS.TRACKED_ITEMS), always visible with no scrollbar, showing your own quantity (— = never owned, red 0, yellow ≤5); the right panel gains a "Mon personnage" section on top (your own count of the selected item) before Group / Guild / Rerolls. Keys & Vault self-classification fixed: in a group → "Group"; solo but in a guild → placed first under "Guild"; solo with no guild → a new "Solo" section (group color). Duplicate cooldowns fully merged on the board: MemberSpells returns one entry per resolved spell name carrying all its spellIDs (merged), and place() fuses their CD state — the single icon now goes on cooldown if either variant is cast (fixes the Paladin double-spell case).
  • 0.34.12THE Mythic+ sync fix: WHISPER fallback when the key blocks addon channels. Analysis of OmniCD, MiniCC and especially BliZzi_Interrupts revealed the actual root cause: in a timed Mythic+, Blizzard blocks all group addon channels (PARTY/RAID/INSTANCE_CHAT) — Midnight's C_ChatInfo.SendAddonMessage returns status 11 ("addon channels blocked"), 0 = success. It's not our routing or versions. BliZzi's technique: check the return value and, when the group channel is blocked, whisper each party member individually (WHISPER still delivers inside a key, cross-realm). Implemented: new RawSend checks the return code; SendGroupOrWhisper tries the group channel first and, on failure, whispers each member (GroupWhisperTargets builds Name-Realm for party1-4 / raid1-40 minus self); Pump (queue) and SendGroupNow (immediate) both route group-channel sends through it. This repairs everything in an active key — kicks, cooldowns, potions, stats, hello — with no combat-log rewrite. Whisper only kicks in when the channel actually fails (open world / normal dungeon still use one PARTY message). (Reference addons OmniCD/MiniCC/BliZzi_Interrupts confirm: OmniCD reads the combat log for CDs; MiniCC infers from auras because non-local UNIT_SPELLCAST_SUCCEEDED spell IDs are secret in Midnight; BliZzi reads interrupts from combat events + uses this exact whisper fallback for its comms.)
  • 0.34.11Revert 0.34.10's routing regression + multi-channel /asylum ping probe. 0.34.10 forced INSTANCE_CHAT for any non-raid instance to try to fix M+, but the in-game diag showed the premade M+ group is home category (groupe-instance=false) — you can't reliably send to INSTANCE_CHAT from a home-category group, so that change also broke normal dungeons (they went silent too). GroupChannel() is reverted to the standard DBM/BigWigs routing (INSTANCE_CHAT only when IsInGroup(instance-category), else RAID/PARTY), restoring open world / normal dungeon / raid. To pin down which channel actually delivers in an active key, /asylum ping is now a multi-channel probe: it sends a tagged PING\t<chan> on each channel separately (PARTY, RAID, INSTANCE_CHAT if in an instance, GUILD); a receiver prints which channel it arrived on and whisper-replies PONG\t<chan> (whisper is reliable + cross-realm), so the sender sees [pong] de X ✓ — il t'a reçu via PARTY/INSTANCE/GUILDE. Running this inside an active M+ tells us exactly which channel(s) work, so routing can be fixed from data. Cooldown board de-dup (one icon per resolved spell name in MemberSpells) and the hardened Enum.PartyCategory.Instance constant are kept.
  • 0.34.10(superseded by 0.34.11: the INSTANCE_CHAT-forcing routing change is reverted; board de-dup + ping diagnostic retained.)
  • 0.34.9Overlay lock ↔ menu checkbox linked, faster sync. The padlock on the Kick/Cooldown overlay title bar is now bidirectionally linked to the "Verrouiller le cadre" checkbox in each menu: Kicks.SetLocked/CD.SetLocked call back into both the overlay padlock (_syncLock) and the menu checkbox (new NS._syncKickMenuLock / NS._syncCDMenuLock, the latter returned by MakeCDToggle), and the checkboxes re-sync in UpdateKicksPage/UpdateCDPage on open — so locking via the padlock ticks the box and vice-versa. Sync sped up ~3×: HEARTBEAT 30→10s, OFFLINE_AFTER 90→40s, offline sweep 20→15s. On top of the periodic hello, buff/consumable changes now broadcast immediately — a debounced (0.7s) UNIT_AURA watcher on the player recomputes Buffs.SelfFlags() and, only if the flask/food/oil/raid-buff flags actually changed, updates myProfile.flags and re-sends the hello (group + guild), so eating or applying an oil/enchant reaches friends in ~1s instead of up to 30s. Receivers refresh the buffs grid / dashboard live via the new NS.RefreshBuffsUI, called from Sync.OnHello. The change-gate means combat aura spam produces no extra traffic (prep flags are stable in combat).
  • 0.34.8Kick hit/miss fixed, friends' addon versions, Paladin Rite oil. Kick success detection reworked: hits were credited only if the combat-log SPELL_INTERRUPT arrived while a kick was pending, but UNIT_SPELLCAST_SUCCEEDED (which starts the pending state) and the combat-log event fire in an undefined order — when the interrupt event landed first, CreditMyKickHit found nothing and the 0.6s timer then marked the kick missed, so successful kicks showed as misses in the end-of-run recap. Now StartKick records the cast time and, after HIT_DECIDE (0.8s), decides hit/miss by checking whether a successful interrupt of mine happened within that window of the cast (lastMyInterruptAt, set in the combat-log handler) — order-independent. CreditMyKickHit still credits instantly for live overlay feedback (and bumps gen so the timer no-ops), avoiding double counting. Friends online (dashboard) now shows each online friend's addon version in parentheses, colored green (up to date / newer), orange (one version behind) or red (older) versus your own NS.VERSION (version was already broadcast as p.ver in the hello). The offline count line was removed (not useful). Paladin oil: with Rite of Sanctification (a max-level self-imbue), any weapon enchant on a Paladin now counts as green (OilLevel returns 2 for class PALADIN) instead of the orange "lower quality" dot.
  • 0.34.7Full Midnight secret-value / taint purge (fixes buff check AND sync). The Bloodlust fix in 0.34.6 only covered the Lust scan; Buffs.lua still read aura.name/aura.points in HasAuraNameHint and FlaskLevel, which in Midnight are secret values — comparing them throws (attempt to compare local 'nm' … secret string value) and taints the whole addon's execution, which is what was silently breaking sync (kick/cooldown broadcasts on a tainted path get dropped). Rewrote all aura reads to be spellID-only: HasAnyAura now queries the player via C_UnitAuras.GetPlayerAuraBySpellID(sid) (presence only, never reads name/value); HasAuraNameHint is a safe stub (name matching is impossible now); FlaskLevel checks presence by spellID. Flask quality is no longer readable (its aura value is secret) — flask is now green=present / red=absent like food; the orange "lower quality" dot survives only for oil (read via non-secret enchant ID). The /asylum auras debug print no longer reads aura.name (prints spellID only). Note for users seeing these errors: the crash traceback references pre-0.34.6 code (Stats.lua:731 with LUST_NAME_HINTS, Toolbox.lua:200 CheckLowHP with NS.VERSION 0.22.0) — that means an old/duplicate copy of the addon is still installed; delete any stale AsylumCompagnon folder and reinstall the current files (a taint cascade from old code, plus the pre-0.27 INSTANCE_CHAT bug, is why kicks didn't sync in M+).