79cb3b670d
PARTY_MEMBERS_CHANGED fires once per SMSG_GROUP_LIST, whatever the list changes, an empty list and an identical one included: GroupState counts the lists and the feed answers each (0x5e6a40, 0x5e6b3c, 0x5e6c61) (#691)
Sam SungandClaude Opus 5.52026-09-30 08:18:47 +07:00
7623cbae11
pet bar: 0x4bcf70 is one predicate, asked by GetPetActionsUsable, every press and order, Dismiss, both autocast toggles and the drag's writes, so an unusable pet greys the bar and does nothing (#687)
Sam SungandClaude Opus 5.52026-09-30 07:45:16 +07:00
8f6d337ad6
party and raid tokens: UnitIsConnected answers 1 for a held member whatever the roster status byte says, and reads the record's online bit only with no object (0x517d50, 0x517daf, 0x517dd3) (#686)
Sam SungandClaude Opus 5.52026-09-30 07:10:56 +07:00
47794e489c
pet cooldown list: Cooldowns::add drops the records that have run out before it appends, so neither list outgrows its live records, and the drop fires no flush (#685)
Sam SungandClaude Opus 5.52026-09-30 06:59:03 +07:00
3a613971bb
UnitCreatureType answers the one resolver's type for every unit, so a cat-form druid or a Ghost Wolf shaman is a Beast: the snapshot takes the form, then the template, then the race (0x605570, 0x51a2bc) (#681)
Sam SungandClaude Opus 5.52026-09-30 06:20:12 +07:00
9d4b3420f3
pet bar: a spell press with no Spell.dbc record, no active player object or no pet object sends nothing and arms nothing, as the spell arm's exits do (0x4bd2e7-0x4bd34f) (#660)
Sam SungandClaude Opus 5.52026-09-30 05:49:04 +07:00
6a36d8c351
world pick: while no word carries flag 0x20, a unit the active player possesses is no candidate, beside the active player, so the cursor and click reach the unit behind it (0x480610, 0x48064f-0x480674) (#659)
Sam SungandClaude Opus 5.52026-09-30 04:49:08 +07:00
3a0728cde2
ground-targeting cursor: the range verdict takes GetMinMaxRange's bounds, so a range talent (op 5) and the caster's reaches reach it (0x6e6810, 0x6e3480) (#658)
Sam SungandClaude Opus 5.52026-09-30 04:31:13 +07:00
79dc262eea
pet cooldown list: every mutation fires ACTIONBAR_UPDATE_COOLDOWN, SPELL_UPDATE_COOLDOWN and PET_BAR_UPDATE_COOLDOWN (0x4b31b0, 0x4bce90), and the SMSG_SPELL_GO pet leg no longer signals PET_BAR_UPDATE (#657)
Sam SungandClaude Opus 5.52026-09-30 03:57:20 +07:00
840719fc98
spell bind: BindTarget's party and raid arms ask 0x606c20 and 0x606d20 and CanAssist, so a group member binds Power Word: Shield, the Blessings and the Seals, and the world pick shares the party predicate (#655)
Sam SungandClaude Opus 5.52026-09-30 03:36:20 +07:00
3b3ae850fa
spell range: min_max_range takes the unit target and the auto-attack target apart, so a tooltip no longer pads a ranged spell by the swing target's reach (#654)
Sam SungandClaude Opus 5.52026-09-30 03:09:50 +07:00
ec5083f471
world pick: while a spell targets, a unit or player the word cannot take is no candidate, so the pick reaches the one behind it (0x481050, 0x480610) (#652)
Sam SungandClaude Sonnet 5.52026-09-30 02:10:24 +07:00
4573596e27
UnitIsConnected answers 1 for every held unit: snapshot sets it, so the pet frame's power bar reads the pet's power instead of a grey maximum (#651)
Sam SungandClaude Opus 5.52026-09-30 01:49:11 +07:00
44fb6e5e43
spell tooltip feed: each pushed view records what it read, and a change of the player's state rebuilds only the views that read it (#650)
Sam SungandClaude Opus 5.52026-09-30 01:22:18 +07:00
e071b8ded3
partypetN and raidpetN unit snapshots: the getters read the held pet or its owner's record, UNIT_PET fires with the owner's token, and the stock party pet frame shows (#644)
Sam SungandClaude Opus 5.52026-09-30 00:02:42 +07:00
8ef62da6ac
spell bind: BindTarget's unit gates run ahead of the relation arms at the press, the click and the hover, through one creature-type resolver (#640)
Sam SungandClaude Opus 5.52026-09-29 23:31:30 +07:00
0e04e54fbf
pet bar: a spell press starts the pet's global cooldown on the pet's list, as 1.12.1's spell arm does before it sends (#636)
Sam SungandClaude Opus 5.52026-09-29 22:11:40 +07:00
66340800a9
unit tokens: partypetN and raidpetN resolve to the member's held pet, tested before party and raid, and the reach feeds cover them (#635)
Sam SungandClaude Opus 5.52026-09-29 21:36:15 +07:00
f768cf3e60
CastSpellByName's onSelf and CastSpell's third argument cast the spell at the player, the pet book's at the player too, read through GetBoolOrDefault as the reference does (#634)
Sam SungandClaude Opus 5.52026-09-29 21:11:47 +07:00
666300c6a5
doodad anim gate: a meshed host is drawn only while its fade sphere intersects the world camera's frustum, like a meshless one (#633)
Sam SungandClaude Opus 5.52026-09-29 20:35:20 +07:00
cd441385c7
zone music: a start that plays nothing leaves the pump armed, so the next frame retries with a fresh pick, and a bad path warns once (#632)
Sam SungandClaude Opus 5.52026-09-29 20:05:34 +07:00
06f9cc93df
char create: the CharBaseInfo guard requires every shipped race/class pair and lets a patch add more, as the class-list builder lists every row (#631)
Sam SungandClaude Opus 5.52026-09-29 19:52:19 +07:00
6e9e5e995d
ui_dialog_verbs: a battleground's run time is the time since its status plus the wire's elapsed ms, read forwards so no Instant precedes the clock's origin (#630)
Sam SungandClaude Opus 5.52026-09-29 19:34:39 +07:00
57f33aa620
guild roster: zone and class keys order a miss after every name and NaN days get a place, so the comparator is a total order (#629)
Sam SungandClaude Opus 5.52026-09-29 19:25:44 +07:00
45825b0609
ui_battlefield: a queued battleground's time waited is the time since the status plus the wire's waited ms, computed forwards so no Instant precedes the clock's origin (#628)
Sam SungandClaude Opus 5.52026-09-29 19:17:58 +07:00
61f17d46c3
who_sort: the class, race and zone arms order a miss after every resolved name and tie two misses, a total order sort_by can take (#626)
Sam SungandClaude Opus 5.52026-09-29 19:08:28 +07:00
b065554f4b
config.toml saves one quiet second after a change, not only on the exit frame, and a unit test resolves no state folder unless it pins BENILLA_HOME (#625)
Sam SungandClaude Opus 5.52026-09-29 18:50:38 +07:00
b26f7c1f20
terrain_stream: a placement or WMO prop whose model load failed is retired as resolved, so it stops counting as pending and the loading screen clears (#624)
Sam SungandClaude Opus 5.52026-09-29 18:34:03 +07:00
5d25ac9286
entities: a torn-down net unit gets no new visual work (attach, rebuild, re-dress, re-seat, held items), so no command lands on a despawned unit (#623)
Sam SungandClaude Opus 5.52026-09-29 18:20:17 +07:00
d4c280d2b1
Caps Lock remapped to Escape (X11 caps:escape) acts as Escape on Linux, as in the real client (#602)
f000aa0128
The pet bar's, pet book's and pet-learn trainer's spell tooltips are built against the pet: its level scales the per-level terms, cost and cast time, and its base mana is the percentage cost's basis (#606)
Sam SungandClaude Opus 5.52026-09-29 16:31:47 +07:00
e4b06c5c2f
The battleground queue slots answer "none" from the first frame, so a party login no longer breaks BattlefieldFrame_Update (#603)
Sam SungandClaude Opus 5.52026-09-29 15:53:20 +07:00
ca7111ed1a
What 1.12.1 lacks lives on top of benilla, which opens a piece of itself to a crate only when its own 1.12.1 work creates it, and loads whatever the stock client loads from a patch (#597)
Sam SungandClaude Opus 5.52026-09-29 14:49:51 +07:00
91cd43c88d
fix: apply per-level scaling to spell descriptions (#579)
084354c231
Spell text keeps "every 1 second": the $l plural keying on every token is recorded as a deviation (#595)
Sam SungandClaude Opus 5.52026-09-29 13:56:56 +07:00
34b7c30af2
The core loads the chain's Bindings.xml and DefaultBindings.wtf, and every command runs its stock body (#587)
Sam SungandClaude Opus 5.52026-09-29 10:51:21 +07:00
c574e20031
fix: drop the spell body from passive talent tooltips (#538)
459e0e90c1
The stock video window's boxes are registered and ffx, ffxGlow, ffxDeath and gxMaximize work; benilla's options gain Spell Detail; load failures go to FrameXML.log (#585)
Sam SungandClaude Opus 5.52026-09-29 10:09:02 +07:00
b8cb886210
fix: select the nearest enemy when a combat ability is pressed with no target (#503)
33c2c5aa70
The fourteen missing 1.12.1 functions are defined, the keyring hover runs the stock path, and the stock CloseAllBags keeps a backpack that was open (#581)
Sam SungandClaude Opus 5.52026-09-29 03:19:56 +07:00
48afcbce0a
The host's clock, zone texts, game clock and error-handler slot leave _G, and the getters over them answer the reference's shapes (#580)
Sam SungandClaude Opus 5.52026-09-29 02:30:40 +07:00
78a983b00e
The VM speaks 1.12 alone: the Era globals and the uncalled hooks are gone, the engine's tooltip seams are Rust calls, strata/draw-layer/state-texture/sound/OnClick/quest-item/pickup take their 1.12 shapes, and the surface gate covers the production load (#573)
Sam SungandClaude Opus 5.52026-09-29 01:44:52 +07:00
0a1f69466c
The nameplate verbs write two runtime bits, cleared at world entry, and the setting lives in FrameXML's saved variables, not two CVars (#571)
Sam SungandClaude Opus 5.52026-09-29 01:21:17 +07:00
05e204de10
benilla's layer speaks the 1.12 API alone: handlers take this and no arguments, GetBinding answers the 1.12 list, the Key Bindings page captures through its window, /errors chains the error handler, and the host hooks leave the VM (#569)
Sam SungandClaude Opus 5.52026-09-29 00:12:27 +07:00
0f36374445
The core loads the player's own FrameXML.toc in its order, and the boot VM loads no Fonts.xml (#568)
Sam SungandClaude Opus 5.52026-09-28 23:52:14 +07:00
a21fb2750a
The stock video options window opens, saves, restores defaults and cancels clean: its CVars are registered, spellEffectLevel drives the particle and shard rates, and the video pairs, frame enumeration and client queries are defined (#565)
Sam SungandClaude Opus 5.52026-09-28 22:12:45 +07:00
6e869eea4e
The core loads the stock GameMenuFrame.xml, and the layer reshapes it in place into benilla's menu, keeping every stock rung in the chain anchored TOP (#564)
Sam SungandClaude Opus 5.52026-09-28 22:01:24 +07:00
22634279bd
benilla's own interface loads as one layer after the stock FrameXML and before the addons; the core loads StatsFrame.xml and runs LocaleProperties.lua once, as FrameXML.toc does (#562)
Sam SungandClaude Opus 5.52026-09-28 21:01:28 +07:00
44fa1813ac
SetCVar and RegisterCVar read their arguments as 1.12.1 does: a number as %.14g text, "0" for a value with no string form, the reference usage text, realmList/realmName/scriptMemory read-only in the world, and CVAR_UPDATE fired inside the call for every token (#557)
Sam SungandClaude Opus 5.52026-09-28 20:19:05 +07:00
db94ea038e
fix: show spell tooltips whole on the first hover (#472)
ae6d9f3500
MouselookStart and MouselookStop start and end mouse look with no button held, and a look session outlives losing focus with the OS cursor handed back (#534)
Sam SungandClaude Opus 5.52026-09-28 16:07:37 +07:00
0e39273f13
"mouseover" names nobody once no unit wins the hover: empty ground, a corpse or a nearer GameObject clear it, and the fading tooltip's health bar follows the unit's guid, not the token (#518)
Sam SungandClaude Opus 5.52026-09-28 15:28:30 +07:00
829194ac1a
SendChatMessage sends nothing for an empty line unless its type is AFK or DND, checked after the chat type as 1.12.1 does (#499) (#505)
Sam SungandClaude Opus 5.52026-09-28 15:09:27 +07:00
6633a11d60
A dev build of a crate on top of benilla finds its install, benilla-config/ and .probe-identity in its own folder, which its build stamp hands in, not in cargo's checkout of benilla (#504)
Sam SungandClaude Opus 5.52026-09-28 14:55:24 +07:00
1a37909c9c
The mouseover unit carries the hovered guid, so UnitIsUnit("mouseover", "target") answers 1 over the target: unit snapshots take their guid (#502)
Sam SungandClaude Opus 5.52026-09-28 14:04:09 +07:00
bacbb791db
The player's Attack runs the attack validator's target pick: a friend selected retargets the nearest enemy in call order, a corpse or a fruitless scan says "You cannot attack that target.", nothing selected and no enemy says "There is nothing to attack." (#249) (#501)
Sam SungandClaude Opus 5.52026-09-28 13:32:22 +07:00
c6767d6a79
SendChatMessage resolves its language name against Languages.dbc, raising "Unknown language" on a miss, and the chat send carries that id, so a racial language picked in the chat menu is spoken (#164) (#498)
Sam SungandClaude Opus 5.52026-09-28 13:09:44 +07:00
65a5e44d48
Unit aura bindings resolve their token as 1.12.1 does, so mouseover, party1target and any casing read the unit they name (#497)
Sam SungandClaude Opus 5.52026-09-28 12:46:33 +07:00
8d31e9e91e
A crate on top of benilla adds its own Bevy plugins through benilla_app::run_with, and a client started through it reads extended in its build line (#495)
Sam SungandClaude Opus 5.52026-09-28 12:05:27 +07:00
476da9b2f0
GetAuctionItemInfo names the bidder on the player's own owner-list auctions, nil until the name lands, and 1 or nil on every other row (#259) (#492)
Sam SungandClaude Opus 5.52026-09-28 11:40:53 +07:00
a6cbb932fa
Guid-tail channel notices are delivered through the channel stamp, so a member's join or leave, a kick, a ban and an owner or moderation change print numbered in the stock chat frame (#491)
Sam SungandClaude Opus 5.52026-09-28 10:49:04 +07:00
36b359f007
Logout and the AddOns screen's Okay write only a changed character's own enable rows, so a character with no row keeps following the realm's others (#418) (#490)
Sam SungandClaude Opus 5.52026-09-28 10:11:40 +07:00
78862ff291
UnitBuff and UnitDebuff answer for raid1-40 and raidpet1-40, each unit's list built once and shared by every token naming it (#489)
Sam SungandClaude Opus 5.52026-09-28 09:39:51 +07:00
06bc451bac
The 48 movement, camera and targeting functions Bindings.xml calls are Lua globals on their keys' paths: Start/Stop hold the key's command inside a binding body, targeting and AttackTarget go through the call queue (#485)
Sam SungandClaude Opus 5.52026-09-28 09:09:45 +07:00
7362a87f95
player-tests gets the addon corpus link as $BENILLA_ADDON_CORPUS and BENILLA_REQUIRE_DATA where the corpus is, so its 30 corpus tests run and a skip fails (#482)
Sam SungandClaude Opus 5.52026-09-28 07:41:44 +07:00
208ab10cc3
EnableAllAddOns and DisableAllAddOns switch the Lua index array only, so a disable-all leaves the server-hidden Blizzard_* addons loadable (#480)
Sam SungandClaude Opus 5.52026-09-28 07:31:16 +07:00
4e0e89cb0b
MONKEY (sync-020): Update ambiguity ceiling re-measured on the v0.2.0 merge, 5,488 -> 5,509
pkuzicandClaude Opus 5.52026-09-27 17:53:25 +01:00
884dff7747
MONKEY (sync-020): Update ambiguity ceiling re-measured on the v0.2.0 merge, 5,488 -> 5,509
pkuzicandClaude Opus 5.52026-09-27 17:53:25 +01:00
655854c154
The zoom limit is cameraDistanceMax × cameraDistanceMaxFactor held to [0, 50] by the reference's ordered compares, cameraDistanceMax a registered CVar, and a NaN factor zooms without panicking (#475)
Sam SungandClaude Opus 5.52026-09-27 20:40:06 +07:00
0237dbd19b
Geosets above 1700 stay visible, as 1.12.1 switches off only 0 to 1700: an asset pack's Night Elf eye glow on 1702 shows (#438)
bd074c3f47
After thirty idle minutes the logout warning prints once per logout: the idle leg, line and request, is skipped while a logout is pending (0x482ef5) (#474)
Sam SungandClaude Opus 5.52026-09-27 20:07:30 +07:00
03b1072220
A script's selection, cast and targeting-cursor calls apply in the order it made them, so a macro's /target then /cast casts at the new target (#473)
Sam SungandClaude Opus 5.52026-09-27 19:48:00 +07:00