Oxed Hub
v2.3.39 (2026-08-28)
Full Changelog Previous Releases
- Release 2.3.39
- Make the Debug tab actually receive errors
The journal was recording nothing while BugSack showed the very same
faults. BugGrabber ends its setup with an empty seterrorhandler, so every
addon loading after it installs a handler into a function that does
nothing. It publishes what it catches, so the journal subscribes to that
instead; where it works, our own handler was never installed, so nothing
is recorded twice.
The list now marks what appeared since the last visit, carries a Copy on
each row for pasting one problem rather than the whole journal, and the
top button says Copy All because that is what it does. One formatter
serves both, so a row and the report read identically.
Self Aura asks the client for a native aura sound once instead of twice
before accepting the refusal. - Make toy tiles clickable, and add a My Mixes section
Clicking a toy in the ToyBoxes grid did nothing, and never could: the
tiles were plain buttons, while using a toy is protected and needs a real
click on a secure one. The floating dock had secure tiles but registered
only for button-up, so on a client set to act on key-down its secure
handler was never reached either. Both now register both edges, the way
the quick slots that always worked do.
Clicking is tied to the lock: locked uses the tile, unlocked moves it.
The attributes are set once when the panel is drawn and when the lock is
toggled, rather than flipped on every click -- doing it per click left a
tile disarmed whenever anything returned early, with nothing to restore
it.
Dragging a box onto another never moved a shipped category, because the
saved order was only ever seeded when empty and the categories were
missing from it, so their position came back nil and the move was
abandoned silently. The order is rebuilt from what is on screen instead.
The drop target is also found by asking which row the cursor is over: the
receiving row cannot detect it, since the mouse-up goes to the row the
drag started on.
Boxes can be hidden from a button of their own rather than only from
inside the delete confirmation, and the header row lays itself out over
the buttons actually showing.
The sidebar carries a My Mixes section built from the saved mixes. It
holds names rather than item IDs, so the toy APIs that would raise on a
string are kept away from it and the box cannot be written into.
Adds /oxedhub toydebug, which reports what a tile actually is at runtime.
Every guess about the click problem was about how the attributes get set;
none of them checked whether the button was still reachable when clicked. - Split mix execution into secure and plain halves
A mix is two different things at once: toys and spells, which only a real
click on a secure button may use, and sound, animation, emote and chat,
which are plain Lua. PlayMixActions is that second half on its own, so a
secure button can drive the first through macro text and add the rest
without trying to use the toys a second time from a path where it can only
fail.
The split icon a mix shows in My Mixes is shared the same way, instead of
each view drawing its own.
Saving or deleting a mix now also refreshes the toy box views, which did
not exist when the notification list was written. - Ship the full toy category catalogue
The eight grouped categories were a summary of a larger set. This is the
catalogue itself: thirty-five categories in their own order, each with the
blurb that explains what belongs in it, shown on hover.
Icons are hardcoded paths rather than looked up. Two earlier attempts --
the first owned toy in the category, then an item icon resolved at runtime
-- produced duplicates and blanks, because the client only answers for
items it has cached and most of these toys have never been seen.