DopingControl 0.8.1

This commit is contained in:
2026-10-18 13:41:37 +02:00
parent e6561d3bce
commit 755194d1cb
8 changed files with 444 additions and 23 deletions
+45 -6
View File
@@ -17,6 +17,18 @@ without it.
in the cells, ready pills per role group, gaps first, unreadable players marked instead of
blamed.*
## What's new — v0.8.1 · 2026-10-18
- **The Addons tab checks two more addons:** **RABuffs** (RAB) and **BetterCharacterStats**
(BCS), from what those addons already broadcast. See [The Addons tab](#the-addons-tab).
- **Raiders can answer for themselves.** DopingControl now also sends one **addon check** that
shootyepgp builds with the matching responder answer: per addon *loaded* (with its version),
*installed but disabled* or *not installed*. Such an answer is certain and wins over every
passive rule, so BCS on a warrior, RABuffs on a rogue or the original Rinse become visible.
Raiders without it are read as before and are never shown red for staying silent.
- **Your own row** shows an addon you have installed even where the class rule says it is not
expected (Rinse on a warrior, for example).
## What's new — v0.7.0 · 2026-10-15
- **A new Addons tab** shows which raid addons the other raiders run — BigWigs, Threat Meter,
@@ -35,6 +47,7 @@ blamed.*
**Version history** — details in [CHANGELOG.md](CHANGELOG.md):
- **v0.8.0** — the Addons tab also checks RABuffs and BetterCharacterStats (passive only).
- **v0.7.0** — the **Addons tab** (BigWigs, Threat Meter, EPGP, SuperWoW, Rinse across the raid);
the Equipment tooltip names the enchant.
- **v0.6.4** — the equipment expectation top-up self-heals on every refresh, so a profile
@@ -180,14 +193,22 @@ a version with `!`, a red missing cell, a grey `?` for an unreadable player and
addon is not expected.*
The question this tab answers is **"who in my raid runs the addons I rely on?"** — BigWigs,
Threat Meter (TW Threatmeter), EPGP (shootyepgp), SuperWoW and Rinse. There are no
Threat Meter (TW Threatmeter), EPGP (shootyepgp), SuperWoW, Rinse, RABuffs and
BetterCharacterStats. There are no
expectations to set and nothing to whisper; it is a display tab like Resistances and Hit.
**How it checks.** The other raiders do **not** need DopingControl. Each column is detected only
through what that addon itself sends or answers: BigWigs' own version query, the Threat Meter
"who" query, shootyepgp's version announcement (and its SuperWoW reply), and the UpsiRinse
version query. DopingControl sends the queries those addons already understand and reads the
answers.
answers. RABuffs and BetterCharacterStats have no usable query, so for them DopingControl
listens to what they broadcast on their own.
On top of that, every check sends one **addon check** (prefix `ADDONCHECK`) for the whole list.
A raider whose shootyepgp carries the responder answers it per addon folder: loaded (with the
version from its `.toc`), installed but disabled, or not installed. That answer is **certain**
and beats every passive rule and class rule in its column (BW, THR, EPG, RIN, RAB, BCS). A
raider whose shootyepgp does not answer it is read the old way.
- The **Check addons** button sends one burst of queries and collects replies for six seconds.
The status line next to it counts the window down.
@@ -203,8 +224,8 @@ answers.
|---|---|
| Green, version, check mark | The addon is there and this is the **newest version in the raid** (your own row counts). |
| Green, version, "!" | The addon is there but **older than the newest** version seen, or the version cannot be compared. The tooltip names the newest. |
| Red | **No reply** after the query window passed. |
| Grey "?" | **Not asked yet** (or the player is offline). Silence before any query is never shown as red. |
| Red | **No reply** after the query window passed, or the raider's addon check reported the addon as **not installed** or **installed but disabled**. |
| Grey "?" | **Not asked yet** (or the player is offline). Silence before any query is never shown as red. The tooltip says "Not seen" for RABuffs silence and explains the other unknown cases. |
| Dot | **Not applicable** — see the limits below. |
Hovering a cell shows the version, the raw reply, which fork answered and how long ago it was
@@ -223,8 +244,26 @@ a red cell says exactly that, and each column header carries its own limits:
- **SW (SuperWoW)** — also guild members running shootyepgp only: SuperWoW itself cannot be seen
from outside, so shootyepgp answers for it. A raider outside your guild shows a dot, not red.
- **RIN (Rinse)** — only dispellers (Druid, Priest, Paladin, Shaman, Mage) are checked; everyone
else shows a dot. Only the **UpsiRinse** fork answers the query, so a raider with the original
Rinse shows red even though the addon is installed.
else shows a dot unless their addon check reports Rinse loaded. Only the **UpsiRinse** fork
answers the version query, so a raider with the original Rinse shows red even though the
addon is installed — unless their addon check answers, which knows both forks.
- **RAB (RABuffs)** — the addon check if it answers, otherwise passive. Every RABuffs client in a raid broadcasts its buff data every
30 seconds, and any such message from a raider proves the addon (no version; the disabled
upstream version messages are read if they ever arrive). A raider who has been in the raid
for at least **70 seconds** without a single message shows a grey "?" with the tooltip
**"Not seen"**, never red: this is **weak evidence**, because members without mana and
without a tracked timed buff send nothing at all. Before 70 seconds the cell is just unknown.
- **BCS (BetterCharacterStats)** — the addon check is the only reliable source. Without it,
the addon's only traffic is a message druids send on the **party** channel when their auras
change in **Tree of Life form**; hearing it proves the sender runs the addon. Everyone else
without an answer stays a grey "?", never red and never a dot: the addon is expected for
every class, it just cannot be seen from outside.
**The addon check, for addon authors.** Prefix `ADDONCHECK`, sent on RAID, PARTY, GUILD or
BATTLEGROUND. Query: `Q1:<id>:<Folder>,<Folder>,...` with at most 16 folder names. Answer:
`A1:<id>:<Folder>=L/<version>;<Folder>=D;<Folder>=M` — `L` loaded (version from the `.toc`, `?`
if it has none), `D` installed but disabled, `M` not installed. Long answers are split into
several messages of at most 240 characters; each query id is answered once per sender.
**Reading the totals.** Each class group's header counts the players, the gaps (red cells) and
how many answered. The footer **MISSING PER ADDON** counts the red cells per column, and the