File Details
v0.4.4-bcc
- R
- Apr 12, 2026
- 214.17 KB
- 18
- 2.5.5
- Classic TBC
File Name
GuildMate-v0.4.4-bcc.zip
Supported Versions
- 2.5.5
GuildMate
v0.4.4 (2026-04-12)
Full Changelog Previous Releases
- Vendor libs: drop externals block from .pkgmeta
repos.curseforge.com has been returning 503s during release builds,
blocking CI. Switch to vendored libraries (already present in Libs/)
so builds work regardless of CurseForge availability.
Includes an inline note explaining the tradeoff and when to revert
(ideally we re-enable externals once CF stabilizes or we switch to
GitHub-hosted lib mirrors).
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Silence repeat scan messages while tradeskill window stays open
If the user keeps the tradeskill or craft window open, WoW periodically
re-fires TRADE_SKILL_UPDATE / CRAFT_UPDATE (for level changes, recipe
learns, etc.). Each burst got coalesced into a single scan, but the
"Scanning..." + "Synced" messages printed every time the 5s in-scan
debounce expired — spamming the chat frame every ~5s forever.
Now announce only the first scan of each window session. Subsequent
re-scans stay silent unless they actually find new data (changed=true).
Announced-flag resets on TRADE_SKILL_CLOSE / CRAFT_CLOSE (plus OnHide
fallback) so the next window open gets a fresh message.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Show goal in grey for off-rank users, with guild-wide progress bar
When a reroll/alt rank opens the Donations view, show the active
donation goal in a greyed-out status card instead of hiding it.
Alts can now see what the main ranks are expected to donate without
confusion.
Progress bar stays visible but switches meaning:- On-rank: personal donated / goal amount (current behavior)
- Off-rank: guild-wide "N / M members met" across all target ranks
Status summary below the bar shows GOAL_NOT_APPLICABLE when off-rank,
and the card appends a grey "Applies to: Officer, Raider" hint so
the user understands who the goal is for. Last-deposit timestamp
hidden when off-rank (nothing to report).
Added GOAL_APPLIES_TO locale string (enUS + frFR).
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- Accept data from unknown senders; trigger HELLO back
After a DB flush, addonUsers is empty and IsSenderCompatible rejected
everyone — the version gate was too aggressive. Fix: accept messages
from unknown senders (current wire formats are backward-compatible so
accepting is safe) and trigger our HELLO back so we learn their
version on the next round-trip.
Known-outdated senders are still rejected. Only previously-unknown
senders now get the benefit of the doubt.
The opportunistic HELLO is debounced to 10s to avoid a burst when
multiple unknown guildies message us at once (common right after a
flush or first login after install).
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Coalesce tradeskill/craft scan triggers into a single run
Opening a tradeskill or enchanting window fires multiple events in
quick succession (TRADE_SKILL_SHOW, TRADE_SKILL_UPDATE × N, our
HookScript OnShow). Each one used to schedule its own deferred
C_Timer.After(0.5, ScanRecipes), so the user saw 3+ "Scanning..."
chat messages per window open.
Replace all stacked timers with a single cancel-and-reschedule
NewTimer per scan type (tradeskill vs craft). Events still wake
the queue, but only the last one wins — one scan runs 0.6s after
the event burst settles. Delay bumped slightly to let CRAFT_UPDATE
pulses collapse cleanly.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Group enchanting recipes by slot instead of generic category
Blizzard's Craft window for enchanting only has one top-level category
("Enchant") which is useless for browsing. Replace it with slot-based
grouping derived from recipe names: Helm, Shoulder, Cloak, Chest,
Bracer, Gloves, Boots, 2H Weapon, Weapon, Shield, Ring.
Slot detection matches localized keywords (English + French) against
the recipe name. Unslotted recipes (e.g. "Runed Arcanite Rod") fall
back to the window's native category, sorted below slotted ones.
_NeedsRecategorize now also force-rescans when existing enchants have
category values outside the known slot set — handles the one-time
migration from v0.4.4's generic "Enchant" categorization to this one
without requiring any manual action.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Scan status via chat; fully-white triangle in comm feed
Replace the floating scan-status toast (anchored below tradeskill /
craft window) with a simple chat-frame print. Less intrusive, still
gives the player confirmation that GuildMate scanned + broadcast
their recipes, and no more orphan frames when the window closes.
The live comm feed arrow was rendered via ChatFrameExpandArrow +
SetDesaturated, which leaves mid-tone greys baked into the texture.
Replace with a true-white triangle built from stacked 1px WHITE8X8
strips — crisp, zero greyscale, identical size.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Fix enchanting categories not being captured
Three bugs in the Craft (enchanting) scanner:- Headers weren't being expanded before scanning, so recipes inside
collapsed sub-sections were invisible. Now calls
ExpandCraftSkillLine on every header before iterating (matches the
TradeSkill scanner behavior). - Header detection was too strict. TBC Anniversary can return nil or
empty craftType for enchanting category dividers instead of
"header". Added a fallback: entries with no reagents and no item
link are treated as headers. - Existing stored recipes scanned before v0.4.4 had no category
data, and the 5-second debounce was blocking the fresh re-scan.
Added a one-time force-rescan path that triggers whenever the
current player's recipes for a profession are missing categories.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- Headers weren't being expanded before scanning, so recipes inside
- HELLO handshake is now bidirectional
When we receive HELLO from a previously-unknown sender, reply with our
own HELLO so they also learn our version. Without this, HELLO was
one-way: whoever logged in last told everyone their version, but
older-online players never told the newcomer theirs, so the newcomer
would drop their broadcasts.
Debounced to 10s so two newcomers greeting each other don't ping-pong.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Sync recipe categories + gate comm by addon version
Two fixes users asked for:- Recipe categories now sync across the guild. RECIPE_UPDATE wire
format extended from "spellID<sub>icon</sub>reagents" to
"spellID<sub>icon</sub>catOrder<sub>category</sub>reagents". Receiver accepts both
old (3-field) and new (5-field) layouts for backward compat.
Strings encoded with backslash-escapes so category and reagent
names survive pipes / colons / commas / tildes / semicolons. - Minimum compatible version gate. GM.MIN_COMPAT_VERSION = "0.4.4".
All incoming messages except HELLO are dropped if the sender's
tracked version is below this. Prevents outdated clients (e.g. a
guildie still on v0.4.1) from writing stale-format data into the
local DB. Gate is centralized in GM:OnCommReceived and runs
before per-module handlers.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- Recipe categories now sync across the guild. RECIPE_UPDATE wire
- Show scan-status toast below tradeskill/craft window
Small floating indicator anchored to the bottom of TradeSkillFrame or
CraftFrame, telling the user we're scanning + broadcasting recipes
and to keep the window open. Shows "Scanning..." in white, then
"Synced N Alchemy recipes to the guild" in green on completion.
Auto-hides 4 seconds after the scan finishes. If the window is closed
before the toast is anchored, it simply doesn't appear (no floating
orphan frame).
Scanning itself is synchronous so the message pops in briefly, but
the completion toast reassures the user that sync happened — and the
4s linger gives them time to see it.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - Fix tradeskill-open freeze: debounce + stop touching user filters
Two causes of the lag / freeze when opening tradeskill:- Filter-reset (SetTradeSkillSubClassFilter / InvSlot / Makeable /
SkillUps) each fired TRADE_SKILL_UPDATE, queueing 10+ deferred
ScanRecipes() calls. Each call iterated 100+ recipes and made
expensive API calls. Removed — we only expand headers now, which
is enough to see categories. - Re-entrancy guard stopped synchronous loops but didn't help the
stacked C_Timer.After(0.5, ...) handlers. Added a 5-second
time-based debounce per scanner (ScanRecipes, ScanCraftRecipes).
Tradeoff: if the user has a tradeskill filter active, scanned recipes
miss their category. They can remove the filter and re-open.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- Filter-reset (SetTradeSkillSubClassFilter / InvSlot / Makeable /
- Fix PROF_UPDATE broadcast flood (61k+ messages per session)
Three bugs combining into a runaway loop:- ScanRecipes reset filters / expanded headers, each of which fires
TRADE_SKILL_UPDATE. The handler called ScanRecipes again, looping
forever. Added a _scanningRecipes re-entrancy guard (same for the
Craft/enchanting scanner). - ScanSelf broadcast PROF_UPDATE on every call without checking if
skill data actually changed. TRADE_SKILL_UPDATE fires constantly
during a scan, so we flooded comm. Now deduped: only broadcast
when profession count, rank, or maxRank differs from stored data.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- ScanRecipes reset filters / expanded headers, each of which fires
- Reset tradeskill filters and expand headers before scanning
Fixes category info being missing when users have sub-class, slot, or
"have materials" filters active — GetTradeSkillInfo omits header rows
under any filter, so all recipes landed under "Other".
Snapshot-and-restore proved unreliable (TBC filter APIs are flaky), so
we just reset to show-all. Side effect: user's tradeskill filter is
cleared when GuildMate scans. Acceptable tradeoff to fix category sync.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - v0.4.4: Enchanting recipes, category ordering, white comm arrow
- Add Enchanting scanner using the Craft API (CraftFrame, GetNumCrafts, CRAFT_SHOW/UPDATE) — TBC quirk where enchanting predates the tradeskill system
- Capture in-game category headers during scan; sort + display recipes grouped by category matching the tradeskill/craft window order
- Desaturate ChatFrameExpandArrow in comm feed so the triangle renders white instead of yellow
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

