superwow: TrackUnit/UntrackUnit, and the four chat-bubble CVars
TrackUnit is the one with a live consumer and a real feature behind it: 1.12 draws party members on the minimap and raid members NOWHERE, and pfUI puts the whole raid on it with these two — for every party and raid token on PARTY_MEMBERS_CHANGED/RAID_ROSTER_UPDATE/PLAYER_ENTERING_WORLD, each inside a pcall, so on a client without the function the feature is simply absent, which is what it has been here. The set is guids, not tokens, so a tracked raid member keeps its dot while the roster shuffles its token out from under it. The dot itself is drawn by a fourth always-show clause beside the reference's own three (`shows_tracking_dot`) — `tracked_creature` stays exactly `0x5ed210`, so the predicate that file documents is still the client's, and a tracked unit gets the ordinary cell, hover name and distance cull with nothing new drawn. The set is read off the VM handle the blip system already holds rather than behind a resource of its own: `BlipInputs` is at the 16-param ceiling and its last element is already a nested pair for that very reason. The bubble four come straight off the DLL's string pool. Three are nampower's `NP_ChatBubbles*` under SuperWoW's unprefixed names, writing the same fields — two mods, one knob, last writer wins, as the nameplate reach already is — each keeping 0 because the reference bubbles none of those kinds. `ChatBubblesCreatures` is SuperWoW's alone and the only behaviour of the four: it NARROWS `ChatBubbles` rather than standing beside it, because the mod hooks the reference's own gate and a switch added at that site can only subtract; the other reading would bubble creatures with the master switch off. It ships 1, so an untouched client bubbles monster say and yell exactly as 1.12 does. All four are welded to their struct literals in the defaults-mirror test. CREATE_CHATBUBBLE is deliberately NOT fired, and the row says why: its payload can only be the bubble, and this client's bubbles are not Lua frames — the same wall `C_ChatBubbles.GetAllChatBubbles` already answers an empty list for. Argless would be worse than silence, since an addon written against upstream reaches for arg1's regions and raises once per bubble. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
@@ -796,6 +796,11 @@ pub(crate) struct Model {
|
||||
pub(crate) uninvite_requests: Vec<String>,
|
||||
/// `ConsoleExec` lines that were not CVar writes.
|
||||
pub(crate) console_lines: Vec<String>,
|
||||
/// SuperWoW's `TrackUnit`/`UntrackUnit` set, by guid: the units the minimap draws a tracking
|
||||
/// dot for on top of whatever the player's own tracking spell finds
|
||||
/// (`benilla-app`'s `minimap::blips`). Sorted, so the app can binary-search it per candidate
|
||||
/// without building an index of its own.
|
||||
pub(crate) tracked_units: std::collections::BTreeSet<u64>,
|
||||
/// SuperWoW's `CombatLogAdd` lines, queued for the app to append to `WoWCombatLog.txt`
|
||||
/// (`compat/superwow.rs`). Not chat: nothing is printed to a window.
|
||||
pub(crate) combat_log_adds: Vec<String>,
|
||||
@@ -1950,6 +1955,7 @@ impl Model {
|
||||
roll_requests: Vec::new(),
|
||||
uninvite_requests: Vec::new(),
|
||||
console_lines: Vec::new(),
|
||||
tracked_units: std::collections::BTreeSet::new(),
|
||||
combat_log_adds: Vec::new(),
|
||||
logging_chat: false,
|
||||
logging_combat: false,
|
||||
|
||||
Reference in New Issue
Block a user