File Details
cepgp_lootmaster_ml-8.7.4.zip
- R
- Jul 9, 2026
- 189.80 KB
- 39
- 2.5.6
- Classic TBC
File Name
cepgp_lootmaster_ml-8.7.4.zip
Supported Versions
- 2.5.6
Changes
8.7.4 — 2026-07-09
Compatibility — WoW Classic Anniversary 2.5.6
EP/GP Operations Restored — Officer-Note API Removed in 2.5.6
- Reported: right after the client updated to 2.5.6, every EP/GP operation stopped working — awarding EP, setting GP, Init, and Decay all failed with
...Libs/CEPGP/CEPGP_OfficerNote.lua:56: attempt to call a nil value, thrown up throughCEPGP_EPGP.lua DecayGuild→lootmaster_options.lua. - Cause: 2.5.6 removed the legacy index-based global
GuildRosterSetOfficerNote(index, note)(and its siblingGuildRosterSetPublicNote). Since every EP/GP write funnels throughCEPGP:WriteOfficerNote, and that called the now-nilglobal, the entire standings system was dead. The modern engine replaces it withC_GuildInfo.SetNote(guid, note, isPublic)— which needs the member GUID (17th return ofGetGuildRosterInfo), not the volatile roster index, andisPublic = falseto target the officer note (truewould write the public note and leak/corrupt EPGP data). - Fix: a local
SetOfficerNoteByIndex(index, note)helper resolves the GUID from the roster index and prefersC_GuildInfo.SetNote(guid, note, false), falling back to the legacy global on older clients.WriteOfficerNotenow returns a clean error instead of hard-erroring when neither API exists. Applied to all four officer-note write sites: the core EPGP write and the three alt-tagging / note-clearing paths. - Where:
Libs/CEPGP/CEPGP_OfficerNote.lua(SetOfficerNoteByIndex,WriteOfficerNote),Libs/Guild/guild.lua(alt-tag write, unlink clear, clear-by-rank).
Guild Roster Refresh Restored — Bare GuildRoster() Removed in 2.5.6 (was failing silently)
- Cause: the same migration removed the bare
GuildRoster()global that requests a fresh roster from the server (the modern engine usesC_GuildInfo.GuildRoster()). Seven call sites still guarded only on the legacy global (if GuildRoster then GuildRoster() end), so on 2.5.6 they silently skipped the refresh and then scanned/wrote stale roster data — affecting alt-tagging, officer-note clearing, EPGP-by-rank, and the auto-EP bulk boss award. - Fix:
Libs/Guild/guild.luaroutes all six sites through a new localRequestGuildRoster()(prefersC_GuildInfo.GuildRoster(), legacy fallback);Libs/InstanceTracking/instancetracking.luainlines the same dual-path. (lootmaster_core.lua/lootmaster_player_ui.luaalready used the dual-path.) - Where:
Libs/Guild/guild.lua(RequestGuildRoster, 6 sites),Libs/InstanceTracking/instancetracking.lua(auto-EP pre-award refresh).
TOC Interface Version → 20506
- Bumped
## Interface:from20505to20506in all three addons so they load without the "Out of Date" flag on the 2.5.6 client. Verified no Lua code hard-codes a build/interface check that would reject 2.5.6, and no other removed guild-roster globals (SetGuildRosterSelection,GuildRosterSetPublicNote,SortGuildRoster, …) are in use. - Where:
cepgp_lootmaster.toc,cepgp_lootmaster_ml/cepgp_lootmaster_ml.toc,cepgp_lootmaster_rt/cepgp_lootmaster_rt.toc.
Removed
Raid Groups Feature Removed Completely
- Decision: the addon no longer supports Raid Groups. Both subsystems that went by that name are gone:
- Raid Groups (guild teams) — the named teams of guild members, the "All Raid Groups" attendance-filter pill on the Loot History → Attendance dashboard, the class-coloured members-grid popup, the
/lm groupslash command, and the per-action permissions (raidgroup.*). - Raid Groups Tool (composition planner) — the spec/player-picker drag-and-drop composition window, the "Enable Raid Groups Tool" toggle and "Open Raid Groups Manager" button under LootMaster Admin, and the whole embedded
LootMaster.RGmodule.
- Raid Groups (guild teams) — the named teams of guild members, the "All Raid Groups" attendance-filter pill on the Loot History → Attendance dashboard, the class-coloured members-grid popup, the
- What was deleted:
- Files:
Libs/RaidGroups/(lrg_init/raids/compositions/ui.lua — the composition tool) andLibs/RaidTeams/raidteams.lua(the guild-teams subsystem), plus their TOC entries. - Core API:
CreateRaidGroup/DeleteRaidGroup/AddPlayerToRaidGroup/RemovePlayerFromRaidGroup/GetRaidGroup*/IsSessionForRaidGroup/SetRaidGroupFilter/GetRaidGroupFilter/CanonicalizeMemberName/PrintRaidGroupList/HandleGroupSlash(raidteams.lua), andShowRaidGroupMembersFrame/ShowRaidGroupsManagerFrame(lootmaster_player_ui.lua). - UI: the Raid Group attendance-filter pill + dropdown (the search bar is re-anchored to the From pill), and the
raidgroupsection of the Permission Matrix. The Root Admins help text no longer mentions managing raid groups.
- Files:
- Kept (NOT a raid-groups feature, despite living in the old file):
NormalizeRaidName+MAIN_RAID_PATTERNS— these canonicalise a session's instance name ("Coilfang SSC, Gruul's Lair" → "Serpentshrine Cavern") and are used all over the session / loot-history display. They were moved verbatim fromraidteams.luaintoLibs/InstanceTracking/instancetracking.lua(their natural home) so nothing in the history/attendance UI changes. - One-time data purge (
lootmaster_core.luaOnInitialize, gated bydb.global.raidGroupsPurgedV1): on next login the retired SavedVariables are stripped — the profile keys (raidGroups,raidGroupFilter,raidGroupsTool,raidGroupsToolEnabled), the per-guildraidGroupsblocks in theCEPGPLootMasterGuildstore (dropped fromGUILD_DATA_KEYS, so otherwise never cleaned up), and any copies captured inside saved config snapshots. Runs once. - Localisation: removed the raid-group / composition-tool strings from enUS/trTR/deDE (generic words that other features reuse — e.g.
Select All,Ranged,none,members— were kept). The Root Admins description key was updated in code + enUS + trTR to drop the "manage raid groups" clause. - Where:
cepgp_lootmaster.toc,Libs/RaidGroups/*(deleted),Libs/RaidTeams/*(deleted),Libs/InstanceTracking/instancetracking.lua(NormalizeRaidNamemoved in),Libs/Permissions/permissions.lua(raidgroup.*removed),lootmaster_core.lua(slash command,GUILD_DATA_KEYS, purge),lootmaster_player_ui.lua(filter pill, members popup, manager frame),cepgp_lootmaster_ml/lootmaster_options.lua(tool toggle group, permission section, help text), locale files.
Bug Fixes
Session Recorder — Un-Announced Loot Hand-Traded Now Records as "Free"
- Reported: The raid session recorder still wasn't capturing everything. Looting an item to your bags and announcing it later records correctly, but giving an item out directly by trade without announcing it never showed up — it should be recorded as a Free hand-out to whoever received it.
- Cause: The manual-trade detection added in 8.7.3 (
TrackManualTrade) only recognised items that were already in the announced loot table. An item you looted to your bags but never announced isn't in that table, so the hand-trade matched nothing: no record was created, and the only trace left was the session's provisional "ML looted it" placeholder — so the loot showed as the Master Looter holding the item (type Manual), never as Free to the actual recipient. On top of that,TRADE_SHOWonly armed manual-trade watching when there was announced loot still to give (HasDistributableLoot()), so for an un-announced hand-out the watcher wasn't even running. - How it now works: when the ML loots an item to their own bags during an active session, the recorder already logs a provisional
auto:self-loot placeholder (coreOnChatMsgLoot). That placeholder is the precise signal that "the ML looted this exact item this session but never distributed it." So:TRADE_SHOWnow arms manual-trade tracking whenever you're the ML with an active session (newLootMasterML:ShouldTrackManualTrade()), not only when announced loot remains — so an un-announced hand-out is watched too.TrackManualTradegained a second branch: if a hand-traded item isn't in the announced loot table but the session does have an un-distributedauto:placeholder for it (new coreLootMaster:HasUnannouncedSessionLoot(itemLink)), it synthesises apendingTradewith nolootIDandgp = 0. The existingTRADE_CLOSEDFree path then records it asLOOTTYPE.FREEto the trade recipient, broadcastsLOOTAWARDED/LOOTED, andRecordLootHistoryEntry's placeholder-removal swaps out the "ML looted it" placeholder — so the session shows the real recipient as Free, not the ML as Manual.
- Scoped to avoid false positives: a hand-trade is only recorded as Free when the session already logged the ML looting that exact item (the placeholder must exist). Items you trade that weren't looted during the session (bank items, mats from elsewhere, gold) have no placeholder and are never recorded. Announced items are unchanged — they still take the existing GP/award path.
- Known limitation: like the existing manual-trade and addon-trade paths, only one loot item per trade is finalised (the single
pendingTradedesign). Hand out multiple un-announced items in separate trades, or announce them, to record each. - Where:
cepgp_lootmaster_ml/lootmaster_ml.lua(ShouldTrackManualTrade,TrackManualTradeun-announced branch,TRADE_SHOWarming),Libs/SessionSync/sessionsync.lua(HasUnannouncedSessionLoot).