The Spell Timer plugin for Genie 5 —
a port of UFTimmy's SpellTimer for the Genie 5 platform.
Turns DR's Active Spells window (the percWindow stream) into persistent
script variables and renders the live list to the Active Spells dock window:
Active: 3
──────────────────────────────────────
Stellar Collector 42% charged
Clear Vision 14 roisaen
Substratum indefinite
For each tracked spell it publishes the same $SpellTimer.* globals the Genie 4
plugin provided, so existing .cmd scripts keep working:
$SpellTimer.ClearVision.active=1
$SpellTimer.ClearVision.duration=14
Use them to keep buffs up:
if (!$SpellTimer.ClearVision.active) then put cast cv
if ($SpellTimer.ClearVision.duration < 2) then put cast cv
The spell token strips spaces, apostrophes and hyphens (Clear Vision →
ClearVision), matching the Genie 4 variable names exactly. Stellar Collector
also gets $SpellTimer.StellarCollector.charge (0–100).
- .NET 8 SDK (to build).
- A Genie 5 install with the plugin system (host version ≥ 5.0).
dotnet build -c ReleaseOutput: bin/Release/net8.0/Plugin_SpellTimerV5.dll.
The project references the Genie 5 plugin contract (Genie.Plugins.Abstractions)
from a committed copy in lib/, so no NuGet feed is required to compile.
Open your plugins folder with Plugins → Open Plugins Folder (this works for both standard and portable installs — it always opens the right one). The standard locations are:
- Windows:
%APPDATA%\Genie5\Plugins\ - macOS:
~/Library/Application Support/Genie5/Plugins/ - Linux:
~/.local/share/Genie5/Plugins/(or$XDG_DATA_HOME/Genie5/Plugins/)
Copy Plugin_SpellTimerV5.dll into that folder, then in Genie 5 either:
- Reconnect — plugins load on connect, or
- Plugins → Load → Plugin_SpellTimerV5.dll (menu), or
#plugin load Plugin_SpellTimerV5(command bar).
Open the panel via Window → Active Spells. Cast a buff (or wait for the next spell refresh) to populate it.
From the Plugins menu:
- Reload Plugins — pick up a freshly rebuilt DLL.
- Enable / Disable → Spell Timer — toggle without unloading (panel blanks when disabled; re-enabling repaints on the next prompt).
- Unload → Spell Timer — fully remove (releases the
.dll).
Or from the command bar:
#plugin list
#plugin enable "Spell Timer"
#plugin disable "Spell Timer"
#plugin unload "Spell Timer"
#plugin load Plugin_SpellTimerV5
#plugin reload
#plugin folder
You can also type /spelltimer in-game to print the current active and
recently-inactive spell list to the main window.
- Reads DR's
percWindowstream: each refresh is a<clearStream id="percWindow"/>followed by one<pushStream id="percWindow"/>Spell Name (N roisaen)line per active spell. - The full list is re-sent on every refresh, so a spell that drops off simply stops appearing — the plugin marks it inactive on the next refresh.
- Parses the duration forms DR uses:
N roisaen/N roisan(singular),Indefinite/OM→ indefinite,Fading, Stellar Collector(N%)charge, Osrel Meraud(N%), and the Moonblade "slivers of lunar magic" count phrase. - Re-renders the Active Spells window on each
<prompt>when anything changed, and writes the$SpellTimer.*globals as they update.
The plugin has no UI dependency — it writes formatted text to a named window
via the host API (SetWindow("Active Spells", …)), and the host surfaces that
window as a dock panel.
GPL-3.0 — same as Genie 5 and the Genie 4 ecosystem.
Behaviour ported from UFTimmy's Plugin_SpellTimer for Genie 4.