Buff Monitor System (BMS)
by Garritt Grandberg (Tirrag)
Support: https://www.shroudoftheavatar.com/forum/index.php?threads/buff-monitor-system.164099/
Download 5.9.58This addon places small icon indicators on your HUD for buffs, pet buffs, and combat windows of opportunity such as riposte, dodge, shield block (Answering Blow), and spell critical hits, so you can see at a glance what is active and how much time is left, with optional threshold sounds. Every tracked skill can be enabled or disabled, repositioned by dragging or with a reset button, given custom warning and severe thresholds via sliders, and assigned a custom sound or silenced. This update adds an option to use the game's own spoken buff-expiry warning for skills with no custom sound file, a toggle for how that warning is phrased, and makes icon-scale changes apply immediately to existing HUD icons instead of requiring a reload. Everything is configured through in-game windows, no file editing required.
Files: buff_monitor_system.lua, BMS-ui.lua, BMS-hudtoast.lua, BMS-events.lua, BMS-settings.lua, core-sound.lua, CLP.lua, modules-SWS-SWS-core.lua, modules-libsotamod-libsota-commands.lua, modules-libsotamod-libsota-timers.lua
Readme
# Buff Monitor System (BMS)
Places small icon indicators on your HUD for your buffs, your pet's buffs, and combat windows-of-opportunity (riposte after a parry, opportunity strike after a dodge, aetheric feedback after a spell crit) -- so you can see at a glance what's active, how much time is left, and when a window to act has opened. Icons use the game's own real skill art when available, falling back to bundled artwork otherwise.
Every monitor is fully configurable in-game, with no file editing required:
- Global Settings: default warn/severe thresholds, icon scale, the hotkey that opens the
configuration screen, sound volume, and more.
- Skill Settings (per monitor, via the small settings button on each icon): enable/disable,
reposition (hold Left Control and drag), per-skill threshold overrides, and a custom threshold sound.
Install
From the game: open Community Addons and install Buff Monitor System (BMS).
By hand: copy this folder into your Lua folder (type /lua path in game to find it) as Lua/bms/, type /lua reload, and enable the add-on in the add-on manager.
If you're updating from a pre-package (loose-file) install of BMS, your existing settings are imported automatically on first load -- see "Upgrading from the old file-based version" below.
How it is built
| File | What it does | |---|---| | buff_monitor_system.lua | The only file with real ShroudOnStart/ShroudOnUpdate callbacks; starts every other module in order and owns the saved-settings dirty-flag flush | | BMS-ui.lua | The configuration screen, Global/Skill Settings windows, and every live HUD indicator -- all built on the vendored SWS window system | | BMS-events.lua | Subscribes to the SotA Event System (SES) addon's buff/pet-buff events and re-emits BMS's own normalized buff-start/tick/recast/end events, including the synthesized health and window-of-opportunity monitors | | BMS-settings.lua | Every monitor's static definition (name, underlying skill, bundled icon) as a plain Lua table, plus the one-time import of a pre-package install's monitors.ini/user.ini into the new saved-settings format | | core-sound.lua | Threshold sound playback | | CLP.lua | Combat log parsing, used to detect the window-of-opportunity monitors | | modules-SWS-SWS-core.lua | Vendored shared window system (also used by this author's other add-ons) | | modules-libsotamod-libsota-*.lua | Vendored helper library (timers, chat commands) |
Upgrading from the old file-based version
Earlier versions of BMS stored settings in monitors.ini/user.ini inside its own folder. On first load, if either file is still present, BMS imports it into the new saved-settings format automatically and renames it with an .imported extension as a visible backup/completion marker -- nothing further to do. If you're installing fresh from the Community Addons store, there's nothing to import and this step is skipped entirely.
Full reference: [the add-on API](https://catnipgames.net/lua/reference.html) and [the add-on guide](https://catnipgames.net/lua/guide.html).
Approved versions
- v5.9.58 2026-10-28 Buff Monitor System 5.9.58 Changes since the Shroud.UI HUD indicator release: New Built-in buff warnings. Buffs with no custom sound file now play the game’s own spoken expiry warning (“<Buff> is decaying”), using the API 36 warning-sound functions. It triggers at the skill’s Sound Threshold, once per buff or recast. Buffs shorter than 10 seconds, pet buffs and the health, window and stack indicators don’t warn. New Global Settings toggles: “Built-in Buff Warnings” (on by default) and “Warning Says ‘Attention’” (on by default). Entering none as a skill’s Sound File silences that skill. Answering Blow opportunity window indicator. It shows for a few seconds after a shield block and resets on every new block. The game doesn’t always print the block line to combat chat, so a few windows can’t be detected. Reset Position buttons. Skill Settings has a per-icon button, and Global Settings has “Reset All Positions” with a confirm step. HUD icon offset sliders in Global Settings, to line HUD icons up with the old ones. Improved Shroud.UI HUD icons. Indicators now use the new HUD frames, with the classic icons kept as a fallback. The “HUD Icons (reload)” toggle controls it, and frames are created only while an icon is visible, which keeps within the 25-frame limit. Native hover tooltips. Hover text comes from the game’s own buff name and tooltip, with the same hover delay as before. Player and Pet Health tooltips show the current health percentage. Positioning and stacks. HUD icons land where the classic ones did, stack and unstack correctly, and remember where you drag them. Settings windows. Global Settings is wider and shorter, and its sliders line up with their labels and values. Icon Scale now applies to HUD icons when you save Global Settings, with no reload needed. Fixed A missing stack function that threw an error in the visibility handler. Icons past the first 23 no longer fall back to classic. Stack icons returned to the top-left after leaving the stack. Notes The warning sounds play in English only, and follow the game’s Master and NPC Dialogue volume sliders rather than BMS’s Sound Volume. Players who also use the game’s Announce Expiring Buffs option will hear each warning twice. Turn off either “Built-in Buff Warnings” or the game option. Requires add-on API 21 or later, and the built-in warnings need API 36.
- v5.9.56 2026-10-11 HUD icons: Indicators are now HudFrame-based icons, with the classic icons kept as a fallback and a “HUD Icons (reload)” toggle in Global Settings. Frames are created when an icon shows and destroyed when it hides, so only visible icons count against the 25-frame cap. Tooltips: Hover text now comes from the game’s own buff name and tooltip, as in the bi-main.lua sample, with the same hover delay as before. Player and Pet Health tooltips show the current health percentage. Position and stacking: HUD icons now land where the old ones did. The HUD layer is scaled differently, so I corrected for that. New icons now stay on the stack and return to their old spot when you unstack. Dragging an icon is remembered. Global Settings has X/Y offset sliders. Reset Position buttons: Skill Settings has a per-icon button. Global Settings has “Reset All Positions”, with a confirm step. Settings windows: Global Settings is wider and shorter, and the sliders line up with their labels and values. Answering Blow indicator: A new opportunity-window indicator opens on a shield block, resets on every new block, and uses the Answering Blow skill icon. Some blocks never reach it, because the game doesn’t always print the block line to combat chat. I’ve written that up as a bug report.
- v5.9.30 2026-09-30 added support link url to the manifest
- v5.9.29 2026-09-30 fixed issue with tray window not remembering minimized state on lua reload. fixed issue with comments causing the the lua check to false positive on files.
- v5.9.27 2026-09-29 added support for ShroudOnCombatEvents which in turn fixes the Aetheric Feedback opportunity window not firing. fixed issue with tray window not remembering minimized state on lua reload.
- v5.9.22 2026-09-28 converted rest of UI to System.UI except for the indicators which cant due to the small hud window limit of 8. added indicator overlay and associated settings.
- v5.5.0 2026-09-28 first phase of the UI conversion to System.UI with tray window converted.
- v5.4.0 2026-09-28