promotional bannermobile promotional banner

CEPGP LootMaster - ANADOLU [Core]

CEPGP LootMaster - ANADOLU - Core version is made for our guild standarts to use our raider members.

File Details

cepgp_lootmaster-8.7.3.zip

  • R
  • Jun 7, 2026
  • 856.48 KB
  • 842
  • 2.5.5
  • Classic TBC

File Name

cepgp_lootmaster-8.7.3.zip

Supported Versions

  • 2.5.5

Changes

8.7.3 — 2026-06-06

Features

Session Start — Visible Confirmation Message

  • Reported: starting a raid session was silent, so it sometimes felt like nothing had happened.
  • Fix: StartLootSession now prints a clear confirmation when a new session is created — Raid session started in <zone> (ID: N) plus the EPGP state: (EPGP enabled), (EPGP disabled), or (choose EPGP mode in the popup) when the Yes/No prompt is still pending (the existing "EPGP enabled/disabled for this session" line still prints once you answer). Only fires for a genuinely new session, not when re-attaching to an existing one.
  • Where: lootmaster_core.lua (StartLootSession).

Session Attendance — Re-Capture on Resume + Manual Capture Command

  • Reported: a session's attendance sometimes only contained the people who won loot, not the whole raid (and those names also had no class colour).
  • Mechanism: in RecordLootHistoryEntry the full-raid snapshot (UpdateSessionAttendance) is gated to the session's owner/ML, but the winner + distributor are always added (ungated, and with no class). So whenever that gated snapshot never runs for a session — most commonly a session synced in from another ML on an older addon version — attendance collapses to exactly "who had loot," which also explains those names rendering without a class colour. The owner's own freshly-started sessions already snapshot the full roster (at session start, on roster changes, on boss kills and on every award).
  • Improvements:
    • StartLootSession now re-snapshots the current raid roster whenever it resumes/re-attaches to an existing active session (previously it returned early without capturing), so raiders who joined after the session was first created are recorded — not just later loot winners.
    • New LootMaster:CaptureRaidAttendanceNow() + slash command /lm attendance (aliases attend, captureattendance): snapshots everyone currently in the raid into the active session's attendance, with class info. Safe — it only writes into a session you own or are currently the master looter of, so you can't pour another raid's roster into a session you're only watching. Prints how many were in the raid / newly added / total.
  • Note on past sessions: this can't retroactively repair a finished session that was already stored with only loot winners (e.g. SSC 06/04 if it came from an older client). Re-pull a clean copy from the actual master looter via LM Browse Raid Sessions, and make sure every ML is on the current version so their sessions sync complete. The guild-cache class-colour fallback (below) still colours whatever names are present.
  • Where: lootmaster_core.lua (StartLootSession resume snapshots, CaptureRaidAttendanceNow, SlashHandler).

Kael'Thas Fight Weapons No Longer Counted As Loot

  • Reported: During Kael'Thas Sunstrider, the Master Looter looting the legendary (orange) weapons the boss hands out for the fight made them count as real loot.
  • Cause: those weapons (Warp Slicer, Devastation, Cosmic Infuser, Infinity Blade, Phaseshift Bulwark, Staff of Disintegration, Netherstrand Longbow + its ammo — item IDs 30311–30318) are temporary fight tools, but being quality 5 they sailed past the loot threshold and got registered, announced, distributed and recorded like any drop.
  • Fix (cepgp_lootmaster_ml/lootmaster_ml.lua): a hard-coded IGNORED_LOOT_IDS set + LootMasterML:IsIgnoredLootItem(). AddLoot (the single loot-table chokepoint) now refuses to register an ignored item, so it never reaches the loot frame, attendance, loot history, or DO_YOU_WANT/CHAT_MSG_LOOT recording. OPEN_MASTER_LOOT_LIST skips them early (no misleading "could not register loot" message). Crucially the skip sits after the lootToBag handling, so the ML can still loot the weapons to use them in the fight — they're just never tracked as EPGP loot.
  • Extensible: add more item IDs to IGNORED_LOOT_IDS to ignore other temporary/fight items.

Loot History / Attendance — Class Colours Restored From the Guild Cache

  • Reported: in one session (SSC 06/04) nobody's name had a class colour.
  • Cause: a name's class is baked into the loot entry (and attendance) when it's recorded, resolved from that session's attendance at record time. For sessions recorded before attendance captured the class, or pulled in from another ML via lm-sync (where the per-entry class often isn't preserved), that field is empty — and the display's only fallbacks were the entry's stored class, the session attendance, and the live raid roster (useless when reviewing a past session, since those players aren't in your group now). With all three empty, every name rendered plain white.
  • Fix (lootmaster_player_ui.lua): both name-formatters — FormatHistoryName (loot history) and ColorizeNameByClassFile (attendance) — now fall back to the guild roster cache (GetCachedGuildMember(name).class), which knows every guild member's class whether or not they're online or in the raid. So any name that belongs to a current guild member gets its colour back, even on old or synced sessions. (Names of people who've left the guild and were stored without a class will still be plain — there's nothing left to resolve them from.)

Loot Session End — Shut Down Per Item When Given, and Fully When All Given

  • Reported: When an item is given out — whether by master-loot assignment, the addon's trade button, or the ML trading it by hand — that item's MS/OS popup and broadcasts should shut down immediately; and once everything's distributed, the whole thing should stop (receiving still works, sending stops). The trigger is "item given", not merely "loot window closed" (the ML often closes the loot window long before the items are actually handed out by trade).
  • Per-item shutdown — every give path now ends with LOOTAWARDED:
    • Master loot (GiveLootToCandidate) already broadcast LOOTAWARDED; the addon-trade path (evaluateTrade) and the new manual-trade path now broadcast it too, the instant the trade completes (no more waiting on the ~5s LOOTED path).
    • Player side (lootmaster_player.lua): LOOTAWARDED now closes the MS/OS popup for that item (RemoveLoot + UpdateLootUI), not just the roll-tracker row. So "item given → that item disappears from everyone's screen" holds for all three give methods.
  • Manual-trade detection (cepgp_lootmaster_ml/lootmaster_ml.lua): when the ML hand-trades (no addon-initiated trade), TRADE_SHOW/TRADE_ACCEPT_UPDATE now watch the trade (TrackManualTrade). Once both sides accept, the items being offered are matched against the loot table; a still-distributable match synthesizes a pendingTrade so the existing TRADE_CLOSED finalization runs (awards GP if the recipient is a candidate, broadcasts LOOTAWARDED + LOOTED, records history, removes the item). Strictly scoped: only fires for mayDistribute, not-yet-awarded loot items, and only charges GP when the recipient is a candidate for that item.
  • Full shutdown — ENDLOOT when the last item is gone: EndLootSession() broadcasts an ENDLOOT control comm ("ALERT" priority). On receipt the player wipes the popup list, clears the Roll Tracker and drops queued standings — every popup closes and, with nothing left to act on, sending stops (receiving is unaffected; the next DO_YOU_WANT reopens a fresh popup). On the ML it also sets _lootSessionEnded (so SendRollTrackerUpdate bails on any late responses) and wipes the roll-coalesce tables. _lootSessionEnded/_mlSessionActive reset the moment the next loot is handled (OPEN_MASTER_LOOT_LIST/AnnounceLootInternal).
  • What triggers the full ENDLOOT: CheckLootSessionComplete() — called after every give (GiveLootToCandidate, trade finalize) and on LOOT_CLOSED — ends the session only when no distributable item remains. Crucially it does not end just because the loot window closed, so guilds that loot to bags first and trade afterwards aren't cut off mid-distribution.
  • Edge cases: a normal/non-ML loot close never spams ENDLOOT (gated on _mlSessionActive); losing master-looter status clears the flag (OnMasterLooterChange) so a stale ex-ML can't close popups during the real ML's loot; reopening the same corpse re-arms the session and re-announces so popups come back.
  • Where: cepgp_lootmaster_ml/lootmaster_ml.lua (EndLootSession, CheckLootSessionComplete, HasDistributableLoot, TrackManualTrade, TRADE_SHOW/TRADE_ACCEPT_UPDATE/TRADE_CLOSED, evaluateTrade LOOTAWARDED, GiveLootToCandidate, LOOT_CLOSED, SendRollTrackerUpdate guard, AnnounceLootInternal+OPEN_MASTER_LOOT_LIST arming, OnMasterLooterChange), lootmaster_player.lua (LOOTAWARDED closes popup, ENDLOOT handler).

Roll Tracker — Per-Item Fairness, Instant Own-Response, Lighter Broadcasting (25-man)

  • Reported: With a full raid, after the ML handled the first item and moved to the second, the second item was slow to reach everyone, the tracker made you "wait and see everyone" before it moved on, your own MS/OS click didn't show in the list right away, and "for 25 person everything gets slow."
  • Root causes (three, all in the roll-tracker path):
    1. All-or-nothing fairness gate (lootmaster_player.lua ROLLUPDATE): the receiver hid every item's standings until the viewer's entire popup list was empty, and the withheld updates only flushed when the last popup closed (lootmaster_player_ui.lua UpdateLootUI). So one still-open popup froze the tracker for items you'd already decided.
    2. No local echo of your own pick: your MS/OS only appeared after a round-trip — you → ML → ML re-broadcasts ROLLUPDATE → you. Under load that lagged badly.
    3. Broadcast priority + frequency: the ML sent ROLLUPDATE at AceComm's top "ALERT" priority — the same lane as the DO_YOU_WANT announce — and on a short 0.4s window. 25 people responding flooded that lane and delayed the next item's announce (the actual "second loot isn't sent right away").
  • Fixes:
    1. Per-item fairness gate: standings for an item are shown the moment you've decided that item (its popup is gone) or you were never a candidate — other open popups no longer block it. You still can't see an item's rolls before committing your own response to it. The flush in UpdateLootUI is now per-item (surfaces each decided item immediately) instead of waiting for the whole list to clear.
    2. Instant own response: new LootMaster:ReflectOwnResponse injects your pick into the tracker locally on click (merging with any standings already shown), so it appears with zero delay. The next authoritative ROLLUPDATE from the ML reconciles it with everyone's real roll/PR. Each response button now also carries its buttonData for this.
    3. Lighter, non-blocking broadcasting: LootMasterML:SendCommand gained an optional priority arg (default "ALERT", so all control messages — DO_YOU_WANT, LOOTAWARDED, RESPONSESET, DISCARD, LOOTED — are unchanged). ROLLUPDATE now goes out at "NORMAL", below the control lane, so a response storm can no longer stall the next item's announce. The coalesce window widened 0.4s → 1.0s, so 25 responses produce ~1 broadcast/sec (each carrying the latest full standings) instead of several. The core broadcast-log wrapper forwards the new arg.
  • Net effect: award item 1 → it leaves the tracker and the next popup is right there; your own pick shows instantly; others' standings stream in ~1s batches without ever choking the item-to-item flow.
  • Where: lootmaster_player.lua (ROLLUPDATE gate), lootmaster_player_ui.lua (UpdateLootUI per-item flush, response button buttonData, new ReflectOwnResponse), cepgp_lootmaster_ml/lootmaster_ml.lua (SendCommand priority arg, ROLLUPDATE at "NORMAL", 1.0s coalesce), lootmaster_core.lua (broadcast-log SendCommand wrapper forwards priority).

EP/GP Controller — Session Tab Collapses Alts Onto Their Main

  • Reported: On the EP/GP Controller's Session source, the attendee list showed connected alt characters and their mains as separate rows. Awarding "the raid" then looked like the same person would be given EP twice — the list should show each person only once (the toon they raided on, shown as their main when they were on an alt), so EP is granted one time per person.
  • Root cause: f:GetSessionRoster() built the list straight from session.attendance, which legitimately holds every character that was in the raid (people rotate mains/alts during a night). It never collapsed alts onto their mains, so a raider who appeared on both — or just on an alt — produced multiple rows. (The underlying CEPGP:BulkEP/BulkGP already redirect alts to the main and de-dup by main, so the award was effectively once — but the displayed roster contradicted that, and a main awarded via its alt row could nondeterministically receive reduced alt-EP depending on table iteration order.)
  • Fix: f:GetSessionRoster() now resolves each attendee through the same alt-management rule the award uses (IsAltGetMainCharacterName, gated on altManagement.enabled) and de-dups by main, so the direct list shows one row per person keyed to their main (with the main's class colour). The exclude-from-guild-rank mode resolves attendees to mains too, so a person who raided on an alt is also excluded from the guild award (previously their main slipped through and got session EP and guild EP). With the default altEPPercentage = 100 the awarded amounts are unchanged; the list now simply matches what the bulk award actually does.
  • Where: lootmaster_core.lua (f:GetSessionRoster inside CreateEPGPController).