GuildArmory-0.1.15
What's new
Changelog
0.1.15
A congratulation in guild chat when somebody levels, and four things that were showing the wrong thing: professions in somebody else's language, a character list sorted by the wrong column, a scrollbar sitting on top of one, and map pins that changed size with the zoom.
The armory as a character window
Chosen from four drawn directions: the one that keeps what was already right — eight slots left, eight right, three weapons below, the way the game's own character window lays them out — and changes what stood around it.
The character list. The class as text is gone; it came capitalised differently depending on the roster's language, and the crest says it without a word. Each row now carries the class crest, the name with an online dot, the level, and the item level as a number with a short bar beside it. The bar is measured against the best in the list, not against 60 — in a guild at level 20 a bar against 60 is equally short everywhere and says nothing. No measured item level means a dash and no bar: unknown is not zero. The selected row has a gold edge and stays marked without the mouse over it.
No online dot where the roster says nothing. A grey dot would read as "offline", and that is a different claim from "don't know".
Every slot is labelled, in the client's own language — the game keeps those names for every locale, so nothing is written down twice. With a ring or a trinket empty, the silhouette alone does not say which slot it is.
The character stands in the middle as a model when they are there to be shown: yourself, your target, anybody in the group. Anybody else keeps the text panel from before. The alternative — dressing a stand-in model in their items — would show the wrong race in the right helmet, and this window shows nothing invented. The item-level history sits fixed below, above the weapons, so it stays put whether a model or text is above it.
The model blinked at first. Setting the unit reloads the model, and the panel refreshes not only on a click but every time the client finishes loading any item — bundled to twice a second, but still — so the figure was torn down and rebuilt on a half-second beat. It is set once per unit and character now; the same unit again is not a refresh, it is a reload with no reason.
And now for everybody, not only for those in range. A guild member in another zone has no unit — but they have a race id, a sex and seventeen item ids, all measured. The figure is assembled from those, the way the dressing room does it: race and sex first, then every item put on. Nothing is guessed.
For that, the sex now travels with the character over the sync, one small number, checked on arrival to be one of the two the game uses. A record from before today has none, and shows the text panel until its owner's client sends again — a guessed body would be wrong for every second character, and wrong looks exactly like right.
The first probe run crashed on it — not on those calls, but earlier: the race id came back as a number that "is" a number and throws the moment you do arithmetic with it, the same obscured kind that killed the health bar. The check that let strings through and waved every number past now has a numeric twin that actually adds and compares before it says yes, and race and sex go through it before anything else touches them. The probe report also keeps the line number now instead of fifty characters of file path.
Whether Forever's client actually honours the two calls involved was the
open question, and /ga probe has an entry for it now ("dressUp").
Measured on the third run, 27 September: TryOn and Undress exist,
SetCustomRace does not. Items can be put on a figure, but there is no way
to give the figure a body that is not a unit in range — so on this client
the assembled figure never appears. The fall-back was already there: the
call says why it cannot, and the text panel stands as before. Everything
that carries the data — race id, sex, the sync — stays, because it costs
one number per character and the day a client answers differently, nothing
else has to change. The probe now also reports whether SetDisplayInfo
exists, the one other route to a body, so the next look is one command.
Two things overlapped on first sight and made the whole thing look unfinished: the line under the name ran into the item level once a race name was long enough, and the three weapon labels stuck together below their slots. The line has a right end now, the class tile that hung off it is gone (the class is a word in that line and a crest in the list already), and the weapons stand further apart than the columns, because their names sit underneath and are wider than a slot.
The guild's logo sits in the portrait circle of the window instead of the player's face. That circle says whose window this is, and this one belongs to the guild.
The professions page, built the same way
The professions page had the old shape: two framed panels, a plain list on each side, a hint line doing the work of a title. It is built like the character window now.
Left, the professions as a table with a header — the profession's icon,
its name, how many can do it, how many recipes they know between them. The
selected one has the gold edge. The icon comes from the client by the
profession line's id, the same id the name already comes from; where the
client has no icon for a line, the cell stays empty rather than showing a
guessed one, and /ga probe has an entry ("professionIcon") that says how
many of your own lines resolve.
Right, one surface with a head. A tile with an icon, a title, a line underneath, and a large number at the right — the same head the character window has, and it always says what the table below it is: all professions (the addon's mark, the number of crafters), one profession (its icon, its crafters), one item (its icon in its quality colour, how many can make it), one person (their class crest, name in class colour, skill as 120/300 and when their list was read, the number of recipes). The search field and the two buttons sit in one row under the head instead of stacking above the list.
The crafter table carries what the character list carries: class crest and class colour where the character database knows the person, an online dot where the roster says so and none where it does not, the skill as a number with a short bar against the profession's maximum — no bar where the maximum is unknown, because "how full" has no answer then — and when the list was read. Recipes get their own table with icon, name in quality colour and whether it is an item or an enchantment; two tables with two honest headers instead of one whose header lied about half its contents.
Two gaps in the module came to light while rebuilding. The list of a
person's professions never handed the profession link back — it was stored
since the beginning, and /ga craft link found it in the store, but the
view read it through a function that left it out, so every foreign
profession said "no profession link yet". And the crafter list for an item
looked the profession's display name up with a variable that did not exist,
so it always fell back to the name in the scanner's language. Both fixed;
both have tests now.
The loot table and the bid cards
Two directions were drawn for each window; the guild picked the second of each. Both windows are rebuilt.
The loot window is a table now, not two lists. Across the top the items as cards, the way they fall from a boss — quality edge on top, icon, name, slot and armour type, the state ("bidding open", the recipient in green, "transfer pending" in amber) and a badge with the number of bids. More cards than fit, and two arrows page through them; the selected card stays in view. Below, the candidates for the selected item grouped by answer: Best in Slot first, then Main-Spec, then the rest, each group with its colour bar and count, Pass folded shut by default — a click on a group head folds it either way. Inside a group, whoever has the least stands on top: lowest item level first, then votes, then name. For rolls the roll, for points the bid. The item level has a short bar against the best in the list; a class crest and class colour stand at every name.
At the right, the decision. Who leads — strictly the most votes, the highest bid, or the highest roll in the highest tier — with crest, name, answer and item level, the vote split as three bars, how many votes are in, and one button: "Award to Rudi". On a tie the button is off and the head says so: the addon does not quietly pick whoever came first. Below it the facts about the item that were spread over the old view or not shown at all: who has it soft-reserved, the rotation seats and cycle, the evidence, how long ago it was detected, its source, the loot method at the time.
The bid window is cards. One card per item, three to a row: icon with quality edge, name, slot and armour type — and a comparison block that was missing before: what you wear at that slot, its item level, the new item level, and the difference, as two bars. Measured, not guessed: the game names the item's slot, the client names what you have there, and where a slot can be one of two (rings, trinkets, one-hand weapons) the one with the lower item level is the one you would replace — an empty slot counts as zero, the biggest upgrade there is. Below the block the seven answers as a grid, or the three roll ranges, or the points field with bid and withdraw and the line that says what you have and what the minimum is. The foot of each card says its state: "no answer yet", or the answer given in green. The head counts "1 of 3 answered", and a thin amber bar under it shrinks with the bidding time if the loot master set one. "Pass on the rest" at the bottom passes on every card that still has an answer to give — not on rolls or bids, which have no pass.
An answered card leaves the window, and the rest move up. Reported the same evening: with nine or twelve items the window grew past the screen. Now an answer or a roll takes the card out and whatever was behind it moves into its place; at most six cards stand in the window at once, and the head says how many are waiting ("2 of 12 answered · 6 waiting"). When the last card is answered the window closes. A DKP bid does not remove the card — you can raise it or withdraw it, so it stays until you pass.
You can pass everywhere now. With rolls and points there was no way to say no; the loot master saw silence, and silence looks exactly like "has not seen it yet". Roll and DKP cards carry a Pass button in their third row that sends the same answer the council's Pass sends, and takes the card out. "Pass on the rest" passes on every open card of any kind; a standing DKP bid counts as answered and is left alone.
Changing an answer still goes through the loot window's "Bid window" button, which opens the cards again — a card that can be flipped under your hand leads to "but I clicked BiS" in the raid.
The dashboard: the hall of banners
Three directions were drawn for the first page — a banner hall, a command deck of numbers and curves, a guild newspaper — and the guild picked the banner hall. It is built.
Across the top, the guild. The guild emblem as a tile — dark ground, thin gold edge, a warm glow behind it — and the guild name large, under it members and online count, the guild master in class colour, your rank. Chips say what is happening right now and are simply absent otherwise: a loot session with its item count, "you are master looter", hand-overs still pending in your bags. At the right four figures with their footing under each: average item level and how many of the roster were actually measured (unmeasured members are not zeros), online of total, loot awarded this week and how many of those the game itself confirmed, achievements unlocked of the catalogue.
Left, your character. Portrait, name in the fullest spelling the addon knows, level and class and rank, the item level large with "10/17" under it, and the seventeen slots as a strip of colour — quality where something is worn, dark where nothing is. Under that five lines about you, each a click to the page behind it: the open loot session, how many of your wishes lie on its table, your oldest profession scan and how old it is (amber past three days), your DKP, and the achievement you are closest to — the measurable one with the highest fraction that is still reachable.
In the middle, today in the guild. A stream: who reached which level, who joined or was promoted, who received what, who unlocked which achievement, who lit a campfire where. Every line has the time, the class crest, and its source under it — "confirmed by the game", "entered by hand", "roster". This needed a small new module, Armory/Activity: the addon measured all of these things already but kept none of them as events; a level-up was only ever a higher number in the roster afterwards. The module listens to the events the other modules fire and keeps a bounded log — 150 entries, seven days, the same thing within ten minutes counted once, a loot award updated in place as it goes from awarded to received. It measures nothing itself.
Right, who is where. The zones of the online members from the roster, each with its people as class-coloured dots, the unknown zone last and grey; and, while it is fresh, the last campfire with who lit it. Below it the tradable items, as before, with the item's icon and its owner on the same line.
The old "guild online" list is gone from this page: the zones say more with less, and the full list is one click away on the characters page.
After the first screenshot. Four things the picture showed. The footing lines under the figures had no left end and grew into the neighbouring tile — "0 confirmed by the game" stood in the online tile; every line has a width now and clips, the tiles are wider, the loot footing shorter. The line under your name ended before the item level number but collided with the label under it, which is wider than the number; both end before the label now. The slot strip had nineteen strips for a line that promises seventeen — shirt and tabard do not count and are out. And the emblem first sat in the minimap's tracking ring: thick, round, over a square picture that brings its own round wreath; it is the tile described above now.
The fourth was not the dashboard's at all. "Cooking read vor 1 Tagen" on
an English page: Util.TimeAgo had the German words built in, although
the keys for every language had existed since the locale switch. It reads
them at call time now — which fixes every "vor 3 Std." on every English
page, not only this one.
Profession names in your own language
They were showing in German on an English client. The name that travels with a profession is the scanning client's — so showing it means showing somebody else's language setting, and in a guild with two of them the same profession stands in the list twice. That was visible a day earlier without being understood: "Kochkunst" and "Cooking" under each other, "Lebendige Wurzel" and "Living Root".
The id of the skill line has no language. Asked for locally it gives the name this client uses, which is the only version that comes out the same everywhere.
If the client does not answer for an id, the transmitted name stays. A name in the wrong language still beats a number — 185 means nothing to anybody.
The character list: sorted by item level, and a scrollbar that behaves
The list answers one question — who is how far along — and sorted by name it answered a different one. Highest item level first now; the search field above is there for looking somebody up.
Anybody without a measured item level goes to the end rather than down among the weak. Somebody nobody has inspected is not badly geared, they are unknown, and putting them between the low numbers is a statement nobody measured. Equal levels are broken by name, so the same guild twice gives the same list and a change in it means something.
The scrollbar overlapped the ILVL column. The rows were already inset by the width of the bar; the header was not, so the last heading sat over the bar while the numbers underneath sat six pixels to the left. Two ends that have to agree were written in two places — a test now insists they match.
The groove is dark instead of row-coloured, and both it and the handle only appear when there is something to scroll. It used to run the full height in the colour of a row, which read as the start of another column even in a list of eight. A control that controls nothing is decoration. The handle sits a pixel narrower than its groove, which turns a stripe into a handle in a rail.
A congratulation in guild chat on a level-up
There is no event for somebody else levelling. What the server hands out is the current level, so the rise is the difference to the last roster read — and only where there was a last one: on the first read after login every level looks new, and the addon would congratulate half the guild on levels they have had for weeks.
Five people with the addon would mean five congratulations. Every client reads the same roster and sees the same rise. So whoever sees it first claims it over the addon channel and waits a moment; anyone who sees a foreign claim for the same rise stays quiet. The wait is spread at random, because if everybody waited the same time everybody would claim at once and nobody would see anybody else — the same shape as the map positions.
It is off until somebody turns it on. The addon writes in the player's name into a channel the whole guild reads, and that is not something to switch on for them. Not every level either: round tens and the maximum, which is where a guild actually says something. The maximum is asked for rather than written down — a 60 in the code is wrong at the next expansion, and only somebody standing on the old maximum would notice.
And not about yourself. Whoever levels gets a fanfare from the game already; congratulating yourself in guild chat is a different thing from being congratulated.
The map pins are bigger, white-edged, and the same size everywhere
Twenty-two pixels instead of sixteen. The crest needs the room to be a crest, and the limit upwards is the map itself: what a pin covers, nobody can read. The way there was twelve, fourteen, sixteen, twenty, twenty-four — and twenty-four was one step too far, which is the kind of thing only a screen can say.
The edge around it is white now, not black. The edge has a job, which is to set the pin apart from the map, and which colour does that depends on what is underneath: black separates better on pale parchment, white on dark water and forest. The crest itself is dark — deep blue, black, gold — so a dark edge only makes the dark patch bigger, while a light one turns it into a token with a rim. Decided on screen rather than reasoned out.
It comes from one place now, for the crest and for the square fallback alike. Two pairs of numbers meant to mean the same thing drift apart.
And it keeps its size on every screen and at every zoom. The screen alone would be no problem — WoW rescales the whole interface, and 24 units look the same everywhere. But a pin does not hang off the interface, it hangs off the map surface, and that has a scale of its own: it is stretched as you zoom, and everything in it with it. The pin now carries the ratio between the two, which leaves it at exactly the scale every other frame has.
The offsets are divided by that ratio, because anchor offsets count in the frame’s own scale — set a pin to 0.7 and keep asking for 300 and it lands at 210, further off the further you zoom in. Without zooming, you would never see it.
This mod has no additional files

