File Details
ClassicCalendar-v1.6.0
- R
- Jul 4, 2026
- 411.43 KB
- 1.7K
- 2.5.5+1
- Classic + 1
File Name
ClassicCalendar-ClassicCalendar-v1.6.0.zip
Supported Versions
- 2.5.5
- 1.15.8
Classic Calendar
[v1.6.0] (2026-07-04)
New Features
- Officer "Clear All" for world buffs (guild-wide start-fresh). An officer-only button in the World Buff window (and
/calwbclear guild) wipes all world-buff data for the whole guild after a confirmation prompt. Implemented as a synced wipe epoch (WBWipeAt): the timestamp propagates like a setting (LWW), every member clears entries at/before it, and pre-wipe entries are rejected on sync (and skipped by migration) so cleared data can't resurrect from an offline peer. Location:WorldBuffDB.lua,WorldBuffSync.lua,WorldBuff.lua. - Sortable columns in the World Buff window. Click a column header (Player Name, Main Name, Date Received, Dropped) to sort by it; click again to reverse direction. The active column shows a sort-direction arrow (
Interface\Calendar\MoreArrow— the same icon Blizzard's calendar and FastGuildInvite use), and each header has a hover tooltip. Headers are fixed above the scroll area rather than scrolling with the rows. Location:WorldBuff.lua.
Changed
- Rebuilt world buff sync on the DeltaSync-1.0 library stack. Replaced the bespoke hash/session/delta protocol (
WorldBuffHash.lua,WorldBuffDelta.lua,WorldBuffSession.lua, the oldWorldBuffSync.lua, and the deadDataSync.lua) with a thin DeltaSync bridge routed throughAceCommQueue-1.0(throttled sends) andLibGuildRoster-1.0(identity/trust). New hard dependencies:DeltaSync,AceCommQueue-1.0,GuildRoster.- Each of the 4 buff tables plus a guild-settings record is one DeltaSync "item" (
wb:rend|hakkar|onyxia|nefarian,wb:settings); entries reconcile per-entry via last-writer-wins onlastModified. Uses the multi-hostDS:NewHostAPI (DeltaSync MINOR 15+) under an isolated AceAddon shell (ClassicCalendarSync) so it can't clobber other DeltaSync consumers on the same client.
- Each of the 4 buff tables plus a guild-settings record is one DeltaSync "item" (
- World buff storage is now account-wide, keyed by guild (
ClassicCalendarWBDB), replacing the four per-character positional arrays. Entries are stored as[normalizedPlayerKey] = entrymaps (LibGuildRoster-normalized keys) instead of index arrays, eliminating duplicate rows and index/name drift. A one-time migration folds each character's legacyWorldBuff*Datainto the guild store on first login. Location:WorldBuffDB.lua. - Ship explicit per-flavor TOCs instead of packager-generated multi-version.
ClassicCalendar.tocis now Classic Era only (## Interface: 11508); a newClassicCalendar_BCC.toccarries BCC (## Interface: 20505)..pkgmetaenable-toc-creationis nowno. Multi-## Interface-*single TOCs proved unreliable to load on live installs; matches the per-flavor convention used by GuildRoster / FastGuildInvite. Both TOCs must keep the same file load list.
Bug Fixes
- Fixed
droppedstatus never propagating. The field was written as the string"Yes"/"No"but hashed astostring(entry.dropped == true), so it always hashed as"false"— toggling it never changed the sync hash.droppedis now a canonical boolean everywhere. Location:WorldBuff.lua,WorldBuffDB.lua. - Fixed guild event creation being blocked while the GM is offline. The
RestrictGuildEventsToOfficersgate now fails open — members can create guild events unless an officer has explicitly enabled the restriction. The setting rides the DeltaSync relay, so any guildmate holding it can serve it (previously only the setter could answer a request). Location:ClassicCalendar.lua,WorldBuff.lua. - Fixed unthrottled comms. World buff messages now route through
AceCommQueue-1.0, preventing ChatThrottleLib chunk interleaving / CRC corruption under guild load.
Hardening
- Deterministic convergence tie-break. Version vectors now carry a content checksum alongside the timestamp, so two edits to the same entry (or setting) in the same second resolve to the same winner on every peer instead of offering forever. The guild-settings hash also excludes
setBy(not reconciled by the LWW merge) to avoid the same no-op-resync trap. Location:WorldBuffSync.lua,WorldBuffDB.lua. - Anti-grief wipe epoch. A wipe epoch more than a day in the future is rejected, so a modified client can't clear everyone's data and block new entries indefinitely. Migration and the receive path both honor the epoch, so cleared data can't resurrect from an offline peer. Location:
WorldBuffDB.lua. - World Buff window: frame pooling, key case-folding, roster-load refresh. Table rows are pooled/reused instead of leaking a frame per row on every render/sort/sync; normalized player keys are case-folded so
bob/Bobdedupe to one entry; the window refreshes once the guild roster loads so it isn't stuck empty when opened at login. Location:WorldBuff.lua,WorldBuffDB.lua,WorldBuffSync.lua. - Guildless edits are rejected with a message instead of silently dropped (world buffs are guild-scoped). Location:
WorldBuff.lua.
Removed
DataSync.lua,WorldBuffHash.lua,WorldBuffDelta.lua,WorldBuffSession.lua, and the bespokeWorldBuffSync.luaprotocol. The XOR-obfuscatedCC-SETguild-settings channel is retired in favour of thewb:settingsDeltaSync item.
[v1.5.4] (2026-05-05)
Bug Fixes
- Fixed ZG (Zul'Gurub) and AQ20 (Ruins of Ahn'Qiraj) 3-day lockout schedule
- Adjusted first reset from January 1 to January 3, 2026
- Now correctly displays resets on May 3, 6, 9, 12, 15, etc. (matching official schedule)
- Previously showed incorrect dates: May 1, 4, 7, 10, 13
[v1.5.2] (2026-05-03)
New Features
- Added "Hide the calendar minimap button" checkbox to General settings in the Options panel
- Saves and restores across sessions via
CCConfig.HideMinimapButton - Uses
LibDBIcon:Hide/Showto toggle the icon - Calendar remains accessible via
/calor/calendarwhen hidden
- Saves and restores across sessions via
[v1.5.1] (2026-04-13)
Bug Fixes
- Fixed delete event confirmation popup covering half the screen (BUG-024)
- Replaced oversized
StaticPopupDialogs["CALENDAR_DELETE_EVENT"]with a compact custom frame (320×115 px) - Supports Escape to cancel, Enter to confirm, and standard OK/Cancel buttons
CalendarFrame_PushModal/PopModalpreserved viaOnShow/OnHide
- Replaced oversized
- Fixed
SetBackdropnil error on delete confirmation frame- Added
"BackdropTemplate"inheritance toCalendarDeleteConfirmFrame - Same fix applied pre-emptively to
CalendarGuildRankConfirmPopupinGuildRankConfirm.lua
- Added
[v1.5.0] (2026-04-13)
New Features
- Invite list right-click menu now shows RSVP options (Confirmed, Standby) directly in the context menu — previously displayed behind a blank flyout arrow
- Right-click RSVP menu restricted to event creator/moderator only (
EventCanEdit()) — non-creators use the existing top RSVP buttons - Removed redundant
myInviteIndexplayer scan fromCalendarViewEventInviteListScrollFrame_Update
Bug Fixes
- Fixed invite list
#, Rank, and Level sort buttons firing both their own handler and the inherited template handler on each click — addedinherit="false"to<OnClick>inClassicCalendarTemplates.xml - Fixed custom sort columns cycling through a redundant third "clear" state — now toggles between ascending and descending only, matching native sort button behavior
- Fixed Status column header rendering lower than all other column headers — was anchored to
inviteList.ScrollBoxinstead ofinviteList
Internal
- Fixed undefined globals in
GuildRankConfirm.lua:GameTooltip_Hide,DONE,CALENDAR_CREATEEVENTFRAME_DEFAULT_TITLE,CalendarGuildRankConfigButton - Added nil guard for
popupinPopulateAndShowPopup - Fixed
tabFocusGroup:OnTabPressednil safety inClassicCalendar.lua - Used
_G[]lookup forCalendarCreateEventDividerto resolve linter undefined global
[v1.4.4] (2026-04-10)
Bug Fixes
- Fixed art type checkbox labels not showing for non-English locales (BUG-023)
checkLocale()now iterates overenUSkeys so keys absent from other locale tables correctly fall back to English- All 9 newly-added art type checkbox labels now display properly regardless of client language
[v1.4.3] (2026-04-04)
Bug Fixes
- Removed all leftover debug print statements from click handlers and Today View
- Cleaned up remaining
print()calls that were not gated behindClassicCalendar.debug
- Cleaned up remaining
[v1.4.2] (2026-04-04)
Bug Fixes
- Removed leftover debug print from LibDBIcon
OnClickhandler
[v1.4.1] (2026-03-30)
New Features
- Calendar frame position now persists across
/reloadand sessionsCalendarFramesaves and restores its position viaCCConfig.calendarFramePos- Removed hardcoded XML anchor; default position now set in Lua on first load
- Frame marked movable with
clampedToScreento keep it on screen
- Today View frame position now persists across
/reloadand sessionsOnDragStopsaves position toCCConfig.todayViewPos; restored onPLAYER_LOGIN
[v1.4.0] (2026-03-30)
New Features
- Today's Events panel — new Today View window showing all events for the current (or navigated) day
- Holiday banner art displayed matching the main calendar — BORDER texture for non-ONGOING, ARTWORK banner for ONGOING events
- Prev/Next day arrow navigation buttons in the title strip to move between days without closing the panel
- Filter dropdown for event category visibility
- Right-click an event button to open the full context menu (Create Personal Event, Create Guild Event, and event-specific options)
- Right-click empty content area to open the day-level create menu
- Consistent gradient background on every calendar day cell
EventBackgroundTexturenow always rendered on all cells, including holiday-only and empty cells, eliminating the inconsistent look where some cells lacked the gradientCalendarEventBackgroundadded as a permanent overlay in Today View to match the main calendar aesthetic
[v1.3.1] (2026-03-30)
Bug Fixes
- Fixed debug messages bleeding through without
/caldebugenabled (BUG-021)- Wrapped all sync and diagnostic print statements behind
ClassicCalendar.debugcheck - Affected files: CalendarHelper.lua, WorldBuffSession.lua, WorldBuffSync.lua, WorldBuffHash.lua, WorldBuffDelta.lua
- User-facing error messages remain visible by default
- Wrapped all sync and diagnostic print statements behind
- Fixed calendar day cells remaining highlighted after mouse leaves event buttons (BUG-022)
- Added missing
UnlockHighlight()calls to event buttonOnLeavehandlers - Prevents visual clutter from accumulated stuck highlights
- Added missing
[v1.3.0] (2026-03-27)
New Features
- Officer-controlled guild event creation restriction via Options > Officer Settings
- General tab now shows "Valid Hash" and "Event Creation" status (Yes / No / Unknown)
- "Create Guild Event" context menu entry hidden for non-officers when restriction is active
- Right-click minimap button or calendar button to toggle the Options panel directly to the General tab
- Left and right clicks on calendar/minimap buttons now both toggle open/closed
Bug Fixes
- Fixed multi-day holiday banner art only displaying on the final day of an event (BUG-008)
ShouldDisplayEventOnCalendarnow returns true for ONGOING sequence days whendisplayBanner=true
- Fixed Love is in the Air and Winter's Veil textures returning nil due to incorrect texture path casing (BUG-008)
- Added individual on/off toggles for all 11 holiday banner art types in Options > Art (BUG-008)
- All checkboxes persist through
/reload; Fireworks Spectacular only appears in Season of Discovery
- All checkboxes persist through
- Added Winter's Veil 2026–2027 calendar entry (BUG-008)
- Fixed Fishing Extravaganza starting on Monday instead of Sunday (BUG-008)
- Removed duplicate Noblegarden entry causing date overlap (BUG-008)
- Optimized version detection —
isClassicEraandisSoDare now cached globally at load time (BUG-008)
[v1.2.2] (2026-03-26)
Bug Fixes
- Fixed string vs number comparison error in officer rank checking (BUG-005)
- Added
tonumber()conversion before all rank comparisons;GetGuildInforeturns rank as a string, not a number - Affected: ClassicCalendar_Options.lua, WorldBuff.lua, WorldBuffSync.lua, ClassicCalendar.lua, DataSync.lua
- Added
- Fixed FontString OnUpdate script error spamming the UI error log (BUG-006)
- FontStrings do not support OnUpdate; replaced with invisible Frame intermediaries that update the FontStrings
- Eliminates 21+ repeated errors when opening the Options panel
- Fixed incorrect
GetGuildInforeturn index causing all officer checks to fail (BUG-007)- Changed
select(2, GetGuildInfo(...))→select(3, ...)to retrieve the numeric rank index instead of the rank name string - Guild Master and officers can now broadcast guild settings correctly
- Changed
[v1.2.1] (2026-03-16)
Bug Fixes
- Fixed debug mode status display in
/calwbsync - Fixed integer overflow in FNV-1a hash computation (BUG-004)
- Persist debug mode state across
/reload - Improved debug diagnostics output for WorldBuff sync
[v1.2.0] (2026-03-16)
New Features
- Added
/calwbsynccommand for manual WorldBuff sync trigger - Enabled WorldBuffSync debug messages via
/caldebug
Bug Fixes
- Added nil checks for
ClassicCalendar.debugacross all WorldBuff modules - Fixed function argument count and type issues in sync modules
[v1.1.12] (2026-03-16)
Changes
- Complete WorldBuff Sync rewrite with delta-sync P2P system (Protocol v4)
- 96% traffic reduction via hash-based pull protocol
- Session management: limits concurrent syncs (3 inbound / 3 outbound)
- Self-healing mesh via periodic heartbeat for eventual consistency
- Fixed critical DataSync issues and improved sync reliability
New Files
WorldBuffHash.lua- FNV-1a hash computation and trackingWorldBuffDelta.lua- Delta computation and applicationWorldBuffSession.lua- P2P session managerWorldBuffSync.lua- Protocol coordinator and message router
Breaking Changes
- No backward compatibility with v1.1.x clients (protocol v3)
- All guild members must upgrade for sync to function
[v1.1.11] (2026-02-26)
Bug Fixes
- Fixed
deletedDate/deletedTimefield inconsistency causing garbage collection failure in DataSync - Fixed direct table reference bleeding in
SendGuildSync()— now creates shallow copies before sending - Implemented separate communication prefixes per buff table (
CCWB_RH,CCWB_HH,CCWB_OH,CCWB_NH) for complete isolation - Added 5-minute cooldown on
GUILD_ROSTER_UPDATEto prevent spam (~90% network traffic reduction) - Added prefix-to-buffType validation layer
- Rejected wipe commands when guild roster not yet loaded (closes exploit window)
- Skipped processing own addon messages to prevent double-processing by officers
- Bumped sync protocol to v3 (backward compatible with v2)
- Moved
BUG_TRACKER.md,FEATURE_TRACKER.md,developer_log.mdtodocs/folder
[v1.1.10] (2026-02-01)
Changes
- Moved world buff data to per-character SavedVariables to prevent data bleed between characters
[v1.1.9] (2026-01-27)
Changes
- Added Darkmoon Faire schedule for 2026
[v1.1.8] (2026-01-22)
Changes
- Guild Leader is now the authoritative source of truth for World Buff scheduler data
- Prevents data corruption from non-GM characters overwriting GM data
[v1.1.7] (2026-01-22)
Changes
- Updated
.pkgmetato exclude development documentation (BUG_TRACKER.md,FEATURE_TRACKER.md,developer_log.md) from CurseForge release packages
[v1.1.6] (2026-01-22)
Bug Fixes
- Fixed BUG-002: World Buff data corruption — deep copy and table separation to prevent cross-contamination
[v1.1.5] (2025-11-20)
Bug Fixes
- Fixed BUG-001: Intermittent BG event display issue
[v1.1.4] (2026-01-19)
Changes
- Updated holiday dates
[v1.1.3] (2025-12-04)
Changes
- Updated
.pkgmetato includecalendar-helperdependency
[v1.1.2] (2025-12-03)
Changes
- WB sync now only accepts data newer than the last wipe timestamp
- Improved wipe function reliability
[v1.1.1] (2025-11-25)
Changes
- Added function to wipe corrupted world buff data
- Split WB sync into 4 separate messages per buff type to stop cross-table data contamination
[v1.1.0] (2025-11-19)
New Features
- Added CalendarHelper as a dependency for Discord Raid Helper event import
[v1.0.0] (2025-10-01)
New Features
- Added duplicate event detection to prevent creating duplicate raid events from CalendarHelper data
- CalendarHelper integration stable
[v0.9.6] (2025-10-30)
Changes
- Updated world buff event creation logic
[v0.9.5] (2025-10-26)
Changes
- Updated world buff data table logic
[v0.9.4] (2025-10-25)
Bug Fixes
- Fixed Lua errors in
ClassicCalendar.xml
[v0.9.3] (2025-10-25)
Changes
- Hid debug print statements behind debug flags
[v0.9.2] (2025-10-25)
Bug Fixes
- Fixed bug in hide/show filters for world buff events
[v0.9.1] (2025-10-25)
Changes
- Updated display logic and spacing for player names in the world buff window
[v0.9.0] (2025-10-24)
Changes
- All world buff window buttons now match the calendar button style
[v0.8.8] (2025-09-28)
Changes
- Removed Brewfest (not present in Classic Era)
[v0.8.6] (2025-09-18)
Changes
- Updated December Darkmoon Faire schedule
[v0.8.5] (2025-09-18)
Changes
- Hard-coded Darkmoon Faire event dates
[v0.8.4] (2025-09-17)
Changes
- Added
/caldebugdebug slash command
[v0.8.3] (2025-09-17)
Changes
- Updated calendar to display a full year of events
[v0.8.2] (2025-09-15)
Changes
- Removed unused textures
- Miscellaneous bug fixes
[v0.8.1] (2025-09-14)
Changes
- Added deployment automation
- Added minimap button
v0.7.0beta (2024-09-26)
Full Changelog Previous Releases
- Fix bugs introduced by 1.15.4