promotional bannermobile promotional banner

Decades GuildOps

The guild addon for Decades, a World of Warcraft guild since 2005, built for World of Warcraft: Forever. Decades GuildOps turns the guild into something you can see and use from inside the game.
Back to Files

v0.1.24-forever

File nameDecadesGuildOps-v0.1.24-forever.zip
Uploader
HybredTVHybredTV
Uploaded
Oct 11, 2026
Downloads
23
Size
10.1 MB
Flavors
Forever
File ID
9132158
Type
R
Release
Supported game versions
  • 1.60.1

What's new

Changelog

v0.1.24 (11 October 2026)

  • The roster broker's rebuild and an officer's relay offers no longer spike a frame (#410; the owner's /dgo perf after #407: the broker at 10.8 ms, the relay's offer at 6.3 ms). The broker rebuilds its list over a few frames after each roster read, and sorts and redraws only while the roster is shown. An officer's relay offers one dataset a step, scanning and hashing a large one 8 KB a step (Relay:BuildJob, Ids.NewHasher, RelayLogic.NewDepthScan). tests/perf_spikes_spec.lua now plays an officer and covers both.

  • Chat history and the chat copy box show each line in the game's chat colours, and copy plain text (#409; the owner, 11 October 2026: "color of the chat should follow, whispers pink, guild green, etc. same for the copy in chat as its consistent to read").

    • Chat history: every line is drawn in its chat type's colour from the client's ChatTypeInfo, so the player's own chat colours, in each channel view, All whispers (sent and received both pink, Battle.net cyan), a person's conversation and search results. A numbered channel (General, Trade, LookingForGroup…) takes its own CHANNELn colour while joined, else the channel default. Names stay class-coloured inside the line; the time and our own labels stay muted; a line hidden during an encounter stays muted. A colour changed in the game's chat settings (UPDATE_CHAT_COLOR) redraws the page once.
    • Fallbacks: Blizzard's defaults (Theme.chatTypeColors: whispers FF80FF, Battle.net 00FAF6, guild 40FF40, officer 40C040, party AAAAFF, raid FF7F00, raid warning FF4800, say white, yell FF4040, emote FF8040, #328's system yellow, channels FFC0C0…) when ChatTypeInfo has no readable r, g, b (absent, secret or out of range).
    • Readability: a colour is lifted toward white, keeping its hue, until it reads at 4.5:1 on the lightest background chat sits on (Theme:ReadableChat, Theme.CHAT_BG); a colour that already reads is unchanged. Of the defaults only yell moves, by two steps.
    • Copy boxes: the chat window's copy box (#350) and Chat history's Copy show the lines in the same colours, in a read-only view, while the text Ctrl+C copies is plain: a WoW EditBox copies its raw text, colour codes and all, and addons cannot write the clipboard (CopyToClipboard is restricted). The plain edit box keeps the focus with everything selected behind the coloured view, so Ctrl+C still copies at once; Copy plain text shows the plain text to select part of it, Show colours goes back. Widgets.CopyBox takes lines for this; boxes without it are unchanged.
    • Dev: "Chat colours" (Chat) previews every chat type in Chat history and opens the coloured copy box from Copy; "Copy chat"'s sample lines are coloured. Self-tests chat.colours (what the client answers for each type, and what was lifted) and chat.copyplain (interactive). docs/verification/409-chat-colours.md.
  • No GuildOps call spikes a frame after login, and the login's build is spread over frames (#402; the owner's /dgo perf on 10 October 2026: single calls of 20 to 30 ms after login, a 294 ms login frame).

    • The size check walks the saved file a slice per tick, at most 1 ms (Budget.NewWalker), not a whole section or 500 records at a time.
    • The roster: the read takes 50 rows a step over the frames after GUILD_ROSTER_UPDATE's debounce, its write a step of its own; each RosterUpdated and RosterBrokerUpdated listener gets a step of its own (Events:EmitSpread); the guild member list and auto-invite read the roster a frame after the event, not in comms' frame. The guild activity log resolves names from an index (GuildActivityLogic.Resolver), and the welcome check folds each name once.
    • The login: the launcher, main window, settings page (a section a step), search palette and flares are built on the frames after PLAYER_LOGIN (Events:Stage, 2 ms a frame, never in combat or a loading screen); anything opened first is built at once.
    • /dgo perf names one-shot and periodic jobs ("GuildActivity after ReadLog") and staged steps ("Shell stage Settings").
    • Tests: the mock's cost clock and mock.frame, and tests/perf_spikes_spec.lua, a 500-member guild with full streams that holds every call after login under 5 ms. docs/verification/402-perf-spikes.md has the numbers and what the owner runs.
  • Chat history's Whispers open on All whispers, the full summary, and People starts there (#405; the owner, 10 October 2026: "so on the main tab, the whispers section should be all of them, and the full summary should sit at the top of people").

    • The Whispers entry: the Channels view's Whispers entry, /dgo chat whispers and /dgo chat people open All whispers (#400), every whisper with everyone in one timeline, instead of the most recent person.
    • People's default: All whispers stays first in the People list and is selected whenever People opens (the People button, the Whispers entry, a slash command). Showing it marks every conversation read, and every person's row and the People button follow. A named person (/dgo chat Jaina, a name clicked in the timeline) still opens that person. Reopening the window keeps what was on screen, and a person whose conversation is pruned gives way to the next person, never to All whispers, so nothing is marked read unseen.
    • Also: the composer's compose.whisper self-test opens the most recent person, since All whispers whispers nobody; docs/verification/400-all-whispers.md covers the default.

Earlier releases: https://github.com/Decades-Guild/decades-guildops-addon/blob/main/CHANGELOG.md

This mod has no additional files