Releases: mk418/HelloGear
Releases · mk418/HelloGear
Release list
v0.1.0
HelloGear
v0.1.0 (2026-07-25)
Full Changelog Previous Releases
- Add release packaging
Same shape as the sibling addons: a tag matching v* triggers the BigWigs
packager, which builds the zip, generates a changelog from the commits
since the last tag, creates a GitHub Release, and uploads to CurseForge
when CF_API_KEY is present in repo secrets.
The workflow checks the tag against the TOC's version before packaging.
The TOC carries a literal version rather than @Project-Version@ so a copy
loaded straight from a checkout shows a real number in game, which means
it can drift from the tag - better to fail than to publish a zip whose
in-game version is wrong.
.pkgmeta keeps the dev-only material out of the zip: the headless test
harnesses, the lint config, the docs, and the CurseForge project image.
Icon.png ships because the TOC's IconTexture points at it, and LICENSE
ships because the MIT terms ask for the notice to travel with copies.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Add the CurseForge project ID
Placed as the siblings do, after Category.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Group the panel buttons by what they act on
Undress moves up beside Equip, where it belongs: both act on the character
right now. That leaves three pairs, each row doing one kind of thing -
Equip/Undress on the character, Save/New set on sets, From/To bank on the
bank - instead of an arbitrary split between a top row and a footer.
New set comes up from the footer to fill the second row, which keeps the
row count and so leaves the list exactly the height it was.
The buttons also fit now: two at 83 plus a gap came to 170 in a 164-wide
column and overhung into the scrollbar. Halving the column gives 80.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Add an undress button
Takes everything off into your bags. The swap engine already knows how to
empty a slot, so this is all of them at once and inherits the bag-space
check and the retry loop rather than reimplementing either - gear stays on
if there's nowhere to put it, and it says so.
Sits beside New set in the footer, which shortens to fit; its tooltip
carries what the longer label used to say. Also /hg undress.
Deliberately not undoable. Recording it as a set's restore would mean
silently overwriting one, which is worse than making the user equip a set
to dress again.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Make every icon searchable by name
Your dump came back as 1106 bare file IDs, so IconNames.lua maps them,
generated from the community listfile (verified-listfile.csv) and filtered
to exactly those - 49KB rather than the megabyte the full retail listfile
would cost for no gain. Load is a table constructor; nothing is built until
the picker first opens.
Matching now happens on a form with every separator stripped. Names arrive
from three places and none of them agree on spelling -
spell_shadow_shadowbolt from the table, Chromatic Boots from an item,
Shadow Bolt from a spell - and nobody types them consistently either, so
"shadow bolt", "shadow_bolt" and "SHADOW BOLT" all find the same icons.
Runtime naming from gear and spells stays: it needs no shipped data and
covers whatever a later patch adds before the table is regenerated.
test_iconsearch.lua runs the search key against the real shipped table.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Add /hg dumpicons to capture the client's icon list
Groundwork for making every icon searchable. There is no API turning a
file ID into a name, so the mapping has to be generated offline from the
community listfile - and filtered to the icons this client actually has,
or it means shipping tens of thousands of retail entries for a Classic
addon.
/hg dumpicons writes the raw list to saved variables; a reload puts it on
disk where it can be read and turned into a table. Needed once, and again
only if a patch adds icons - file IDs are stable, so an out-of-date table
misses new icons rather than going wrong.
The picker already looks for ns.IconNames when naming an icon, so the
generated file drops straight in with no further wiring.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Widen icon search to everything with a name
Search covered twenty icons because this client reports its macro icons as
bare file IDs, which carry no name to match against - so only the set's own
gear, named from the items themselves, was searchable.
Everything else whose icon can be named now is: the rest of your gear,
whatever's in your bags and the bank when it's open, and every spell you
know. An icon shared with one of those is searchable by that thing's name,
which is what you'd type looking for it anyway. The spellbook call differs
across clients and neither form is guaranteed, so a miss there just means
fewer names.
The rest stay browsable but unsearchable. Covering them would need a file
ID to name database shipped with the addon; the tooltip says as much
rather than leaving the ceiling unexplained.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Make icon search work, and tidy the picker's placement
Search asked the wrong client call first. There are two: the indexed one
yields texture paths, whose last segment is a name, and the table-filling
one yields bare file IDs, which carry nothing to match against. The
table-filling call was tried first and returned successfully, so the
indexed one was never reached and almost nothing had a name to search.
Now the indexed call goes first and is only kept if it really does hand
back strings.
The header says what's actually searchable rather than leaving a box that
quietly covers a fraction of the grid and reads as broken - the count of
icons and, when they differ, how many have names. If none do, it says so
and the box is disabled. SetEnabled also becomes Enable/Disable, which are
the methods that certainly exist on an EditBox here.
The picker sat further from the options panel than intended: both frames
draw their borders inside their bounds, so the visible gap was the offset
plus both insets. Offset accounts for that now.
Closing the character sheet closes the picker, as does dismissing the
options popout it hangs off - it belonged to that popout, and leaving it
floating alone was debris.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Show sets with gear you don't have in red
A set whose items aren't on you or in your bags now reads red in both the
panel list and the quick menu, and its tooltip marks the offending slots
rather than making you compare the list against your bags by eye.
Anything the bank is holding is marked (bank) instead of (missing). Both
are red - either way it isn't going on right now - but one of them tells
you where to go. That distinction only exists while the bank window is
open, since the client won't report its contents otherwise, and the
tooltip degrades to "missing" when it can't ask.
The lookup reduces to an item-and-suffix key so a set's slots are table
lookups rather than a scan, and both lists build the inventory index once
for the whole list instead of once per set. Eight cases cover it: worn and
carried gear not counting, a re-enchant not counting, a different random
suffix counting, and the bank distinction appearing and disappearing with
the window.
Also fixes the icon picker opening on top of the options panel that
launched it - it sits beside it now - and drops "Use a set item", which
the set's own icons coming first already covers.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Move sets to and from the bank
The client only reports bank contents while the bank window is open, which
shapes the feature: this can't be something equipping reaches for on its
own, since the moment you want a set is the moment you're nowhere near a
bank. So it's two explicit actions - buttons on the panel and /hg bank
get|put - both disabled with an explanation unless the window is up.
From bank moves the set's gear into your bags, skipping anything already
on you or already carried. To bank moves it out of your bags and leaves
worn gear alone; stripping a set off to put it away is what unequipping is
for, and doing it implicitly would be a nasty surprise.
The move loop follows the swap engine: recompute from the world each pass,
move what can be moved, wait for the locks, go again. It gives up if the
bank window closes underneath it.
A swap that can't find something now says how many of the missing pieces
are in the bank, when the bank is open to be asked.
Four scenarios cover it against a simulated bank - withdrawing, skipping
what you already have, depositing without stripping worn gear, and the
window being shut.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com - Drop the key bindings
...