- druids get the shift cloud back in both directions, by the reference's own mechanism: every shapeshift aura add *or* remove arms a one-slot pending-morph latch that the model-swap rebuild drains and replays — which is why shifting out (a client-side cancel the server sends no visual for) puffs at all, and why a GM morph or a revive correctly shows nothing; the first fix that merely let one-shot effects survive the swap's teardown produced the right pixels for the wrong reason and is superseded - the honor system lands whole: the Honor tab on the character window, the honor page on inspect, and thirteen missing Lua bindings over a real wire model — session/yesterday/this-week/last-week kills, lifetime HKs and DKs, rank progress and badge art - the load-bearing find: your current rank and your highest-ever rank are two separately-streamed fields, and the one we already had was the wrong one for anyone who ever de-ranked; a binary cross-check corrected five display details after the build, down to the rank title never being gendered Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
944 lines
64 KiB
XML
944 lines
64 KiB
XML
<Ui>
|
|
<!--
|
|
benilla's inspect window (decision 0631) — right-click a player → Inspect → their name,
|
|
portrait, level/race/class line, full-body model, and their 19 equipped items.
|
|
|
|
Dressed from the real 1.12.1 `Blizzard_InspectUI.xml`/`.lua` + `InspectPaperDollFrame.xml`/
|
|
`.lua`, extracted from the MPQ chain to session scratch this session (director-local
|
|
reference artifacts, never committed — the 0068/0138/0208 pattern; the `ref l.N` cites below
|
|
are into that extraction). Note the reference is NOT base FrameXML: it is the LoadOnDemand
|
|
addon `Blizzard_InspectUI` (`## LoadOnDemand: 1`). We implement no LoD mechanism for one
|
|
addon (decision 0631 §1) — this file simply loads with the rest, and `InspectUnit` below
|
|
stands in for the ref's `UIParentLoadAddOn`-then-show wrapper.
|
|
|
|
WHY THIS WINDOW NEEDS NO NEW READS: a player's worn gear rides `PLAYER_VISIBLE_ITEM_<n>_0`,
|
|
which is PUBLIC — the server streams it to every observer, and benilla already decodes it to
|
|
render other players' equipment. So the reference's own unit-keyed `GetInventoryItemTexture(
|
|
unit, slot)` family answers here exactly as it does for "player"; `Model::inv_slot` routes
|
|
the token to the inspect view (decision 0631 §2). Nothing waits on `SMSG_INSPECT` — it
|
|
echoes the guid and nothing else, and the ref paints immediately (`Blizzard_InspectUI.lua:
|
|
6-13` shows `NotifyInspect` and `ShowUIPanel` in the same breath).
|
|
|
|
Docks the left UIPanel slot like the character window (`UiPanels.xml`'s
|
|
`UIPanelWindows["BenillaInspectFrame"] = { area = "left", pushable = 0 }`, mirroring the
|
|
ref's own row `Blizzard_InspectUI.lua:4`) — so it competes for/replaces those windows rather
|
|
than stacking with them.
|
|
|
|
Naming: every frame here is Benilla-prefixed, this codebase's convention
|
|
(CharacterFrame.xml's header) — including the strings passed around internally. The two
|
|
addon-facing entry points keep their real global names (`InspectUnit`, and the engine's
|
|
`CanInspect`/`NotifyInspect`/`ClearInspectPlayer`), the same posture `ToggleCharacter`
|
|
takes.
|
|
|
|
THE HONOR TAB LANDED (ref tab 2, `Blizzard_InspectUI/InspectHonorFrame.{xml,lua}`, extracted
|
|
to session scratch alongside the rest of this window's reference). It was 0631's first named
|
|
deferral — it needed `MSG_INSPECT_HONOR_STATS` and an honor model that did not exist, and
|
|
the OWN character window had no Honor tab either — and the honor arc supplied all three at
|
|
once. The page is `BenillaInspectHonorFrame`, this window's own prefix convention; its five
|
|
row templates and both of its painters come from `HonorFrame.xml`, which is exactly the
|
|
sharing the reference does (its `HonorFrameTemplates.xml` is inherited straight into
|
|
`Blizzard_InspectUI`) and why that file must load first — see this window's `benilla.toc`
|
|
entry.
|
|
|
|
Named deferrals (decision 0631; each re-cited at its site):
|
|
- `InspectTitleText` / `InspectGuildText` — both `hidden="true"` in the ref itself, filled
|
|
only from PVP-rank / guild-query data (0208's own two named gaps). Not transcribed.
|
|
- Ctrl-click `DressUpItemLink` and shift-click chat-link insert (ref
|
|
`InspectPaperDollFrame.lua:104-112`) — 0208's named deferrals, both LANDED (decisions
|
|
1059/1060): ctrl previews the inspected item on your own body, shift posts its link.
|
|
Nothing else happens on a click, which is still the reference's own shape.
|
|
- `UnitHasRelicSlot` (ref l.123, l.22) — vanilla-always-false, so the relic branch can
|
|
never fire. Dropped outright, as CharacterFrame.xml drops it.
|
|
- The held-button continuous spin (ref `InspectModelFrame_OnUpdate`, l.7-22) needs
|
|
`GetButtonState() == "PUSHED"`, which this engine's Button has no method for
|
|
(CharacterFrame.xml hit the identical wall) — click-only, so no OnUpdate is wired.
|
|
-->
|
|
<Script><![CDATA[
|
|
-- ── GlobalStrings values this window uses (ref-GlobalStrings.lua, cited per line — the
|
|
-- `X = X or "..."` idiom is this codebase's convention, CharacterFrame.xml/CastingBar.xml:
|
|
-- a real GlobalStrings.lua, if one ever loads, wins over the fallback). Declared HERE and
|
|
-- not borrowed from CharacterFrame.xml's identical line: load order must not be a hidden
|
|
-- dependency between two windows (it bit exactly this file — the level line errored
|
|
-- "string expected, got nil" when the window was driven without CharacterFrame loaded).
|
|
PLAYER_LEVEL = PLAYER_LEVEL or "Level %d %s %s" -- :3075
|
|
|
|
-- The subframe roster (ref INSPECTFRAME_SUBFRAMES, l.2), now the reference's own two. Index
|
|
-- N is tab N's page, and each page's `id=` is the same mapping written the other way round
|
|
-- — the invariant CharacterFrame.xml states for its own row, and the reason `ToggleInspect`
|
|
-- below can select the tab from the page rather than being told which one it is.
|
|
BENILLA_INSPECTFRAME_SUBFRAMES = {
|
|
"BenillaInspectPaperDollFrame", "BenillaInspectHonorFrame",
|
|
}
|
|
|
|
-- The 19 inspect slots, in the ref's own `InspectPaperDollFrame_OnShow` order (l.60-78).
|
|
-- Note there is NO ammo slot and NO bag buttons: a foreign player exposes neither.
|
|
BENILLA_INSPECT_SLOTS = {
|
|
"Head", "Neck", "Shoulder", "Back", "Chest", "Shirt", "Tabard", "Wrist",
|
|
"Hands", "Waist", "Legs", "Feet", "Finger0", "Finger1", "Trinket0", "Trinket1",
|
|
"MainHand", "SecondaryHand", "Ranged",
|
|
}
|
|
|
|
-- ref InspectUnit: in the real client this is the FrameXML wrapper that load-on-demands the
|
|
-- addon and then shows the frame. We have no LoD (header), so it IS the show path — kept
|
|
-- under the real global name because that is what the UnitPopup row and any addon call.
|
|
function InspectUnit(unit)
|
|
BenillaInspectFrame_Show(unit)
|
|
end
|
|
|
|
-- ref InspectFrame_Show (l.6-13) verbatim in shape: hide first, gate on CanInspect, request,
|
|
-- remember the token, show. The CanInspect gate is the real client's `0x48a1b0` — a 10-yard
|
|
-- d² test (wow-re §5-VERIFIED), which the app folds together with is-a-player and
|
|
-- not-attackable (decision 0631 §"What the pin verified" 3/4).
|
|
function BenillaInspectFrame_Show(unit)
|
|
local frame = getglobal("BenillaInspectFrame")
|
|
HideUIPanel(frame)
|
|
if CanInspect(unit) then
|
|
NotifyInspect(unit)
|
|
frame.unit = unit
|
|
ShowUIPanel(frame)
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnLoad (l.15-25). UNIT_PORTRAIT_UPDATE is NOT registered in the ref
|
|
-- either (its OnEvent has a branch for it, l.34-38, that can therefore never fire — a
|
|
-- reference bug, transcribed as the ref behaves, not as it reads).
|
|
function BenillaInspectFrame_OnLoad(frame)
|
|
frame:RegisterEvent("PLAYER_TARGET_CHANGED")
|
|
frame:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
frame:RegisterEvent("UNIT_NAME_UPDATE")
|
|
frame:RegisterEvent("UNIT_MODEL_CHANGED")
|
|
frame.unit = nil
|
|
PanelTemplates_SetNumTabs(frame, 2)
|
|
PanelTemplates_SetTab(frame, 1)
|
|
end
|
|
|
|
-- ref InspectFrame_OnEvent (l.27-45). The retarget branch re-runs InspectUnit on the STORED
|
|
-- TOKEN, so an inspect window follows a re-target — the token resolves to whoever is
|
|
-- selected now. That is the ref's real behavior, not a quirk of ours.
|
|
function BenillaInspectFrame_OnEvent(frame)
|
|
if not frame:IsVisible() then
|
|
return
|
|
end
|
|
if event == "PLAYER_TARGET_CHANGED" or event == "PARTY_MEMBERS_CHANGED" then
|
|
InspectUnit(frame.unit)
|
|
elseif event == "UNIT_NAME_UPDATE" then
|
|
if arg1 == frame.unit then
|
|
getglobal("BenillaInspectNameText"):SetText(UnitName(arg1))
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnShow (l.47-51), with ONE deliberate deviation: the unit is nil-guarded.
|
|
-- The ref calls SetPortraitTexture(portrait, this.unit) unguarded, and `this.unit` is nil on
|
|
-- any show that didn't come through InspectFrame_Show — `ToggleInspect` re-opening after
|
|
-- OnHide cleared it is the reachable one. In the real client that leaks a swallowed Lua
|
|
-- arg error every time (the same class decision 0413 caught in the merchant frame); ours
|
|
-- would throw out of OnShow and abandon the rest of it, so the window would open with a
|
|
-- stale name too. Guarding paints nothing instead, and the ref's own OnUpdate closes a
|
|
-- target-less window on the next frame regardless.
|
|
function BenillaInspectFrame_OnShow(frame)
|
|
PlaySound("igCharacterInfoOpen")
|
|
if frame.unit then
|
|
SetPortraitTexture(getglobal("BenillaInspectFramePortrait"), frame.unit)
|
|
getglobal("BenillaInspectNameText"):SetText(UnitName(frame.unit))
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnHide (l.53-59): drop the token, play the close sound, and tell the
|
|
-- engine to stop inspecting (which stops the app's per-frame slot resolve). No subframe
|
|
-- hide-loop is needed (unlike CharacterFrame_OnHide's): BOTH pages are true engine children
|
|
-- of this frame — they are declared inside its own `<Frames>`, not as separate top-level
|
|
-- files the way the character window's four are — so they hide on the parent's cascade.
|
|
-- Dropping the token here is also what makes the honor page's nil check load-bearing: an
|
|
-- `MSG_INSPECT_HONOR_STATS` reply can outlive the window that asked for it.
|
|
function BenillaInspectFrame_OnHide(frame)
|
|
frame.unit = nil
|
|
PlaySound("igCharacterInfoClose")
|
|
ClearInspectPlayer()
|
|
end
|
|
|
|
-- ref ToggleInspect (l.67-83) + InspectFrame_ShowSubFrame (l.85-93). The ref's own "clicking
|
|
-- the tab of the page already showing CLOSES the window" is kept rather than smoothed away,
|
|
-- because that is what the real tab does. ToggleInspect is BARE (not Benilla-prefixed), the
|
|
-- addon-facing name, matching this codebase's ToggleCharacter/ToggleQuestLog precedent.
|
|
--
|
|
-- THE TAB ROW IS SELECTED HERE, from the page's own id, on every path — the line
|
|
-- CharacterFrame.xml's `ToggleCharacter` carries and the defect it records (director,
|
|
-- 2026-08-06: a page switch that did not move the row left the old tab enabled, and
|
|
-- clicking it took the "already visible" arm and shut the window). This window could not
|
|
-- show that defect while it had one tab; it can now, so the line lands with the second one
|
|
-- rather than after the report.
|
|
function ToggleInspect(tab)
|
|
local subFrame = getglobal(tab)
|
|
if not subFrame then
|
|
return
|
|
end
|
|
local frame = getglobal("BenillaInspectFrame")
|
|
PanelTemplates_SetTab(frame, subFrame:GetID())
|
|
if frame:IsVisible() then
|
|
if subFrame:IsVisible() then
|
|
HideUIPanel(frame)
|
|
else
|
|
PlaySound("igCharacterInfoTab")
|
|
BenillaInspectFrame_ShowSubFrame(tab)
|
|
end
|
|
else
|
|
ShowUIPanel(frame)
|
|
BenillaInspectFrame_ShowSubFrame(tab)
|
|
end
|
|
end
|
|
|
|
function BenillaInspectFrame_ShowSubFrame(frameName)
|
|
for _, name in ipairs(BENILLA_INSPECTFRAME_SUBFRAMES) do
|
|
local subFrame = getglobal(name)
|
|
if subFrame then
|
|
if name == frameName then subFrame:Show() else subFrame:Hide() end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnUpdate (l.61-65): the window closes the moment there is no target.
|
|
-- The ref's behaviour kept, bluntness included — the ref checks "target" specifically, even
|
|
-- when inspecting a party token, so inspecting a party member and then clearing your target
|
|
-- closes the window. That is the shipped 1.12 behavior.
|
|
function BenillaInspectFrame_OnUpdate(frame)
|
|
if not UnitExists("target") then
|
|
HideUIPanel(frame)
|
|
end
|
|
end
|
|
|
|
-- ── The paper-doll page (ref InspectPaperDollFrame.lua) ─────────────────────────────────
|
|
|
|
-- ref InspectPaperDollFrame_OnLoad (l.2-5).
|
|
function BenillaInspectPaperDollFrame_OnLoad(frame)
|
|
frame:RegisterEvent("UNIT_MODEL_CHANGED")
|
|
frame:RegisterEvent("UNIT_LEVEL")
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_OnEvent (l.41-50). The model branch is a no-op for us: the pane
|
|
-- samples the "inspect" booth slot, which the app re-bakes off the live unit's dressed look
|
|
-- on its own (decision 0631 §4) — there is no `SetUnit` to re-issue.
|
|
function BenillaInspectPaperDollFrame_OnEvent(frame)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if arg1 and arg1 == unit and event == "UNIT_LEVEL" then
|
|
BenillaInspectPaperDollFrame_SetLevel()
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_SetLevel (l.52-55). The "?" placeholders match
|
|
-- CharacterFrame.xml's: UnitRace/UnitClass read nil for the one tick before the app's first
|
|
-- snapshot for this token lands (an unguarded format() errors on nil), which for a foreign
|
|
-- unit is a genuinely reachable window, not just a startup race.
|
|
function BenillaInspectPaperDollFrame_SetLevel()
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
getglobal("BenillaInspectLevelText"):SetText(
|
|
format(PLAYER_LEVEL, UnitLevel(unit) or 0, UnitRace(unit) or "?", UnitClass(unit) or "?"))
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_OnShow (l.57-79): the level line then all 19 slots.
|
|
function BenillaInspectPaperDollFrame_OnShow()
|
|
BenillaInspectPaperDollFrame_SetLevel()
|
|
for _, slot in ipairs(BENILLA_INSPECT_SLOTS) do
|
|
BenillaInspectSlot_Update(getglobal("BenillaInspect" .. slot .. "Slot"))
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnLoad (l.81-93). `strsub(slotName, 8)` in the ref
|
|
-- strips its "Inspect" prefix to reach the GetInventorySlotInfo name; ours passes the bare
|
|
-- name in, CharacterFrame.xml's own convention (the prefix is longer here anyway).
|
|
function BenillaInspectSlot_OnLoad(button, slotName)
|
|
button:RegisterEvent("UNIT_INVENTORY_CHANGED")
|
|
local id, texture = GetInventorySlotInfo(slotName)
|
|
button.invSlotId = id
|
|
button.slotName = slotName
|
|
button.emptyTexture = texture
|
|
button.icon = getglobal(button:GetName() .. "IconTexture")
|
|
-- No RegisterForDrag and no right-click: an inspected item cannot be picked up, used, or
|
|
-- swapped. The ref registers no drag on these either — its OnClick (l.104-112) handles
|
|
-- ONLY ctrl (dressing room) and shift (chat link), both named deferrals here, so this
|
|
-- ships with the plain left-click registration and an inert handler.
|
|
button:RegisterForClicks("LeftButtonUp")
|
|
BenillaInspectSlot_Update(button)
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnEvent (l.95-102): only the inspected unit's own
|
|
-- inventory change repaints.
|
|
function BenillaInspectSlot_OnEvent(button)
|
|
if event == "UNIT_INVENTORY_CHANGED" and arg1 == getglobal("BenillaInspectFrame").unit then
|
|
BenillaInspectSlot_Update(button)
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnClick (l.104-112): CTRL previews the inspected
|
|
-- player's item on YOUR character in the dressing room (decision 1060), SHIFT posts its
|
|
-- link to chat (decision 1059) — "link me that" being most of why anyone inspects. Both
|
|
-- read through the unit-keyed `GetInventoryItemLink(unit, slot)`, the same binding the
|
|
-- paper doll uses: a foreign player's worn items are PUBLIC descriptor data, so their
|
|
-- links are as readable as our own (decision 0631's whole premise). Nothing else happens on
|
|
-- a click here — the reference has no third branch, and an inspected item is not ours to
|
|
-- pick up or use.
|
|
function BenillaInspectSlot_OnClick(button, mouseButton)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if IsControlKeyDown() then
|
|
-- DressUpItemLink carries the reference's own nil guard (DressUpFrame.lua:11-13).
|
|
DressUpItemLink(GetInventoryItemLink(unit, button.invSlotId))
|
|
elseif IsShiftKeyDown() then
|
|
-- The visible-and-non-nil guards both live in the shared helper (UIParent.xml).
|
|
-- Waiting on a template is the COMMON case at this window — an inspected player's
|
|
-- gear is usually gear we have never seen — so the nil arm is a live path here,
|
|
-- not a theoretical one.
|
|
BenillaChatEdit_InsertLink(GetInventoryItemLink(unit, button.invSlotId))
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_Update (l.114-139). No count text and no broken tint:
|
|
-- a foreign player's gear comes from the PUBLIC visible-item entries, which carry no stack
|
|
-- count and no durability (decision 0631) — which is exactly why the reference's inspect
|
|
-- window shows neither. SetItemButtonCount's 0 branch is therefore always the one taken,
|
|
-- and is dropped with the count region.
|
|
function BenillaInspectSlot_Update(button)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
local textureName = GetInventoryItemTexture(unit, button.invSlotId)
|
|
if textureName then
|
|
button.icon:SetTexture(textureName)
|
|
else
|
|
button.icon:SetTexture(button.emptyTexture)
|
|
end
|
|
-- ref l.130-138: a tooltip already owned by this button re-renders in place.
|
|
if GameTooltip:IsOwned(button) then
|
|
BenillaInspectSlot_OnEnter(button)
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButtonTemplate's OnEnter (InspectPaperDollFrame.xml:18-28):
|
|
-- SetInventoryItem against the INSPECTED unit, falling back to the slot-name string.
|
|
function BenillaInspectSlot_OnEnter(button)
|
|
GameTooltip:SetOwner(button, "ANCHOR_RIGHT")
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if not GameTooltip:SetInventoryItem(unit, button.invSlotId) then
|
|
GameTooltip:SetText(getglobal(strupper(button.slotName)) or button.slotName)
|
|
end
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
-- ── The model pane (ref InspectModelFrame, l.24-39) ─────────────────────────────────────
|
|
-- A booth-texture stand-in, not a live <PlayerModel> — the settled doctrine (0105's
|
|
-- "I don't like 3d btw go for better 2d", 0208 §5, decision 0631 §4). `frame.facing` stands
|
|
-- in for the ref's `model.rotation`; the ref's sign convention is preserved verbatim
|
|
-- (rotate-left SUBTRACTS, rotate-right ADDS — ref l.29-39), as is its 0.61 default (l.25).
|
|
function BenillaInspectModel_OnLoad(frame)
|
|
frame.facing = 0.61
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
|
|
function BenillaInspectModel_RotateLeft(frame)
|
|
frame.facing = frame.facing - 0.03
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
PlaySound("igInventoryRotateCharacter")
|
|
end
|
|
|
|
function BenillaInspectModel_RotateRight(frame)
|
|
frame.facing = frame.facing + 0.03
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
PlaySound("igInventoryRotateCharacter")
|
|
end
|
|
|
|
-- The character window's twin (CharacterFrame.xml's BenillaPaperDollModel_OnUpdate — the
|
|
-- same ref Model_OnUpdate, UIParent.lua:1444-1462, that EVERY 1.12 model pane wires:
|
|
-- PaperDollFrame l.222-224, DressUpFrame.xml:202-204, TabardFrame.xml:406-408). Held button
|
|
-- = half a turn per second; the 0.03 click above is the tap. The ref's held-vs-click sign
|
|
-- flip is quoted, not corrected.
|
|
function BenillaInspectModel_OnUpdate(frame, elapsed)
|
|
local step = elapsed * 2 * PI * ROTATIONS_PER_SECOND
|
|
if getglobal(frame:GetName() .. "RotateLeftButton"):GetButtonState() == "PUSHED" then
|
|
frame.facing = frame.facing + step
|
|
if frame.facing < 0 then
|
|
frame.facing = frame.facing + (2 * PI)
|
|
end
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
if getglobal(frame:GetName() .. "RotateRightButton"):GetButtonState() == "PUSHED" then
|
|
frame.facing = frame.facing - step
|
|
if frame.facing > (2 * PI) then
|
|
frame.facing = frame.facing - (2 * PI)
|
|
end
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
end
|
|
|
|
-- ── The honor page (ref Blizzard_InspectUI/InspectHonorFrame.lua) ───────────────────────
|
|
--
|
|
-- WHY THIS PAGE WAITS WHERE THE PAPER DOLL DOES NOT. The gear page needs no round trip at
|
|
-- all — worn items ride PUBLIC descriptor fields the server already streams (this file's
|
|
-- header). A player's kill counters do not: they are private fields on their own object,
|
|
-- which we never see, so they come over a request and a reply of their own
|
|
-- (`MSG_INSPECT_HONOR_STATS`). Their RANK is the exception and rides the public bytes like
|
|
-- the gear does, which is why the rank block can paint from the unit while the counters
|
|
-- wait.
|
|
function BenillaInspectHonorFrame_OnLoad(frame)
|
|
frame:RegisterEvent("INSPECT_HONOR_UPDATE")
|
|
end
|
|
|
|
function BenillaInspectHonorFrame_OnEvent()
|
|
if event == "INSPECT_HONOR_UPDATE" then
|
|
BenillaInspectHonorFrame_Update()
|
|
end
|
|
end
|
|
|
|
-- ref InspectHonorFrame_OnShow: ask only when this player's numbers are not already held,
|
|
-- and repaint from them when they are. Both arms matter — the request arm is the first
|
|
-- visit, the repaint arm is every visit after it, and skipping the request when the answer
|
|
-- is already in hand is what keeps flipping between the two tabs from re-asking the server.
|
|
function BenillaInspectHonorFrame_OnShow()
|
|
if HasInspectHonorData() then
|
|
BenillaInspectHonorFrame_Update()
|
|
else
|
|
RequestInspectHonorData()
|
|
end
|
|
end
|
|
|
|
function BenillaInspectHonorFrame_Update()
|
|
-- THE TOKEN IS THIS WINDOW'S OWN, not the reference's hardcoded "target". The ref reads
|
|
-- `UnitPVPRank("target")`/`UnitFactionGroup("target")` while its own paper doll reads
|
|
-- `this.unit`, so inspecting a PARTY member paints that party member's gear under
|
|
-- whoever you happen to be targeting's rank and faction colour. This window already
|
|
-- tracks the token it was opened on (`BenillaInspectFrame_Show` stores it; every other
|
|
-- read in this file goes through it), so the honor page reads it too and the two halves
|
|
-- of one window agree about whose player they are showing.
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
-- The token is nil'd when the window closes, and the reply is asynchronous: closing
|
|
-- before it lands is an ordinary thing to do. The reference cannot notice, because
|
|
-- "target" is still a unit; ours would paint a rank block for nobody, so it doesn't.
|
|
if not unit then
|
|
return
|
|
end
|
|
|
|
-- Twelve figures in one call, in the order the reply's own body carries them.
|
|
local sessionHK, sessionDK, yesterdayHK, yesterdayHonor, thisWeekHK, thisWeekHonor,
|
|
lastWeekHK, lastWeekHonor, lastWeekStanding, lifetimeHK, lifetimeDK, lifetimeRank =
|
|
GetInspectHonorData()
|
|
-- The same twelve rows the character window's page paints, through the same painter
|
|
-- (HonorFrame.xml) — one section per line, in the order they read down the page.
|
|
BenillaHonorPane_SetRows("BenillaInspectHonorFrame", {
|
|
CurrentHK = sessionHK, CurrentDK = sessionDK,
|
|
YesterdayHK = yesterdayHK, YesterdayContribution = yesterdayHonor,
|
|
ThisWeekHK = thisWeekHK, ThisWeekContribution = thisWeekHonor,
|
|
LastWeekHK = lastWeekHK, LastWeekContribution = lastWeekHonor,
|
|
LastWeekStanding = lastWeekStanding,
|
|
LifeTimeHK = lifetimeHK, LifeTimeDK = lifetimeDK,
|
|
LifeTimeRank = GetPVPRankInfo(lifetimeRank) or NONE,
|
|
})
|
|
-- The rank block, off the unit for the rank and the reply for the bar. The two do come
|
|
-- from different places and that is not an inconsistency: the rank is public unit state
|
|
-- we can read at any time, the bar position is a private byte that only the reply
|
|
-- carries.
|
|
BenillaHonorPane_SetRank("BenillaInspectHonorFrame", UnitPVPRank(unit),
|
|
GetInspectPVPRankProgress(), unit)
|
|
end
|
|
]]></Script>
|
|
|
|
<!--
|
|
The inspect slot button. The ref's own template inherits ItemButtonTemplate
|
|
(InspectPaperDollFrame.xml:4-46); ItemButtonTemplate's XML isn't part of this session's
|
|
extraction, so its shape is taken from this codebase's prior reconstruction of it
|
|
(CharacterFrame.xml's BenillaPaperDollItemSlotTemplate) minus what inspect can't have:
|
|
no $parentCount region (no stack counts on public gear), no PushedTexture (nothing to press
|
|
— the click is inert), no cooldown.
|
|
-->
|
|
<Button name="BenillaInspectItemSlotTemplate" virtual="true">
|
|
<Size><AbsDimension x="37" y="37"/></Size>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<Texture name="$parentIconTexture"/>
|
|
</Layer>
|
|
</Layers>
|
|
<NormalTexture file="Interface\Buttons\UI-Quickslot2">
|
|
<Size><AbsDimension x="64" y="64"/></Size>
|
|
<Anchors>
|
|
<Anchor point="CENTER" relativePoint="CENTER"><Offset><AbsDimension x="0" y="-1"/></Offset></Anchor>
|
|
</Anchors>
|
|
</NormalTexture>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Square" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnClick>BenillaInspectSlot_OnClick(self, arg1)</OnClick>
|
|
<OnEnter>BenillaInspectSlot_OnEnter(self)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
<OnEvent>BenillaInspectSlot_OnEvent(self)</OnEvent>
|
|
</Scripts>
|
|
</Button>
|
|
|
|
<Frame name="BenillaInspectFrame" hidden="true">
|
|
<!-- The real 384x512 window (ref l.4-14). No <Anchors> — ShowUIPanel SetPoints this to the
|
|
left slot on open (UiPanels.xml's convention, CharacterFrame.xml's precedent). -->
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="45"/></HitRectInsets>
|
|
<Layers>
|
|
<!-- Portrait 60x60 TOPLEFT (7,-6) (ref l.19-31) — the inspected unit's booth bake,
|
|
pointed at the token in OnShow (unlike the character window's fixed "player"). -->
|
|
<Layer level="ARTWORK">
|
|
<Texture name="BenillaInspectFramePortrait">
|
|
<Size><AbsDimension x="60" y="60"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="7" y="-6"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- Name: CENTER (6,232) wrapper, GameFontNormal centered inside it, white (ref l.35-64). -->
|
|
<Frame name="BenillaInspectNameFrame">
|
|
<Size><AbsDimension x="109" y="12"/></Size>
|
|
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="6" y="232"/></Offset></Anchor></Anchors>
|
|
<Layers>
|
|
<Layer>
|
|
<FontString name="BenillaInspectNameText" inherits="GameFontNormal" text="NAME">
|
|
<Size><AbsDimension x="300" y="12"/></Size>
|
|
<Anchors><Anchor point="CENTER"/></Anchors>
|
|
<Color r="1.0" g="1.0" b="1.0"/>
|
|
</FontString>
|
|
</Layer>
|
|
</Layers>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() + 1)</OnLoad>
|
|
</Scripts>
|
|
</Frame>
|
|
<!-- Close: the ref's own position (CENTER of TOPRIGHT, -44,-25 — ref l.65-78) on the
|
|
minimize-button art this codebase's close buttons all use. The +1 frame level is
|
|
CharacterFrame.xml's documented compensation: the page's BACKGROUND art is a
|
|
full-window sibling created after this button, so at level 0 it would paint over. -->
|
|
<Button name="BenillaInspectFrameCloseButton">
|
|
<Size><AbsDimension x="32" y="32"/></Size>
|
|
<Anchors><Anchor point="CENTER" relativePoint="TOPRIGHT"><Offset><AbsDimension x="-44" y="-25"/></Offset></Anchor></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Highlight" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() + 1)</OnLoad>
|
|
<OnClick>HideUIPanel(getglobal("BenillaInspectFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
<!-- The tab row (ref l.79-120 — CENTER of BOTTOMLEFT +60,+61, the second chained off
|
|
the first's RIGHT by -16, CharacterFrame.xml's own row spacing). BOTH of the ref's
|
|
tabs now. Its tabs carry a hover tooltip (CHARACTER_INFO / HONOR); ours follows
|
|
CharacterFrame.xml's own tab row, which carries none — the visible label already
|
|
says what it does. Tab 2's label is the GlobalStrings KEY, so it localizes with the
|
|
player's install; tab 1's enUS literal predates that convention and is left where
|
|
it is rather than swept up in an honor change. -->
|
|
<Button name="BenillaInspectFrameTab1" inherits="CharacterFrameTabButtonTemplate" text="Character">
|
|
<Anchors><Anchor point="CENTER" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="60" y="61"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnClick>ToggleInspect("BenillaInspectPaperDollFrame")</OnClick></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFrameTab2" inherits="CharacterFrameTabButtonTemplate" text="HONOR">
|
|
<Anchors><Anchor point="LEFT" relativeTo="BenillaInspectFrameTab1" relativePoint="RIGHT"><Offset><AbsDimension x="-16" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnClick>ToggleInspect("BenillaInspectHonorFrame")</OnClick></Scripts>
|
|
</Button>
|
|
|
|
<!-- The paper-doll page (ref InspectPaperDollFrame, l.47-371). The ref uses
|
|
setAllPoints="true"; this is sized to fill the parent instead — equivalent, and the
|
|
shape CharacterFrame.xml's own paper doll takes (its header has the history).
|
|
id=1 is the ref's own, and it is what `ToggleInspect` selects the tab from: a
|
|
page's id IS its slot in this window's tab row (the roster's own note above). It
|
|
was absent while one page shipped, because a row of one cannot disagree. -->
|
|
<Frame name="BenillaInspectPaperDollFrame" id="1">
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="45"/></HitRectInsets>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<!-- The same four quadrant slabs the character tab uses (ref l.49-93). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-L1">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"/></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-R1">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="256" y="0"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-BottomLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="-256"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-BottomRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="256" y="-256"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<!-- "Level %d %s %s" under the name (ref l.94-102). -->
|
|
<FontString name="BenillaInspectLevelText" inherits="GameFontNormalSmall">
|
|
<Anchors>
|
|
<Anchor point="TOP" relativeTo="BenillaInspectNameText" relativePoint="BOTTOM"><Offset><AbsDimension x="0" y="-6"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- The model pane (ref PlayerModel InspectModelFrame, l.124-187): 233x300 at
|
|
TOPLEFT (65,-78) — taller than the character window's 233x224 because the
|
|
inspect page carries no stats block under it. A plain Frame sampling the
|
|
"inspect" booth bake (header). -->
|
|
<Frame name="BenillaInspectModelFrame">
|
|
<Size><AbsDimension x="233" y="300"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="65" y="-78"/></Offset></Anchor></Anchors>
|
|
<Layers>
|
|
<!-- BACKGROUND, not ARTWORK — the booth quad is an OPAQUE stand-in for a
|
|
widget the reference renders outside the layer batches, so it must
|
|
sit as low as a region goes or it swallows same-level siblings
|
|
(decision 1070; the pet page's diet icon is where that bit). -->
|
|
<Layer level="BACKGROUND">
|
|
<Texture name="$parentTexture">
|
|
<Size><AbsDimension x="233" y="300"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"/></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- Rotate buttons (ref l.148-185): 35x35, left then right chained off
|
|
its TOPRIGHT, both at the pane's own TOPLEFT. RegisterForClicks on
|
|
both edges + the pane's OnUpdate below = the ref's tap-and-hold. -->
|
|
<Button name="BenillaInspectModelFrameRotateLeftButton">
|
|
<Size><AbsDimension x="35" y="35"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-RotationLeft-Button-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-RotationLeft-Button-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Round" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:RegisterForClicks("LeftButtonDown", "LeftButtonUp")</OnLoad>
|
|
<OnClick>BenillaInspectModel_RotateLeft(getglobal("BenillaInspectModelFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectModelFrameRotateRightButton">
|
|
<Size><AbsDimension x="35" y="35"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectModelFrameRotateLeftButton" relativePoint="TOPRIGHT"/></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-RotationRight-Button-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-RotationRight-Button-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Round" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:RegisterForClicks("LeftButtonDown", "LeftButtonUp")</OnLoad>
|
|
<OnClick>BenillaInspectModel_RotateRight(getglobal("BenillaInspectModelFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>
|
|
BenillaInspectModel_OnLoad(self)
|
|
BenillaSetBoothTexture(getglobal(self:GetName() .. "Texture"), "inspect")
|
|
</OnLoad>
|
|
<OnUpdate>BenillaInspectModel_OnUpdate(self, arg1)</OnUpdate>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!-- The 19 slots (ref l.188-358). Left column from TOPLEFT (21,-74) chaining
|
|
-4 down; right column from (305,-74); the three weapon slots from
|
|
BOTTOMLEFT (122,127) chaining +5 right. The ref's own geometry, and the
|
|
same numbers the character window's doll uses. -->
|
|
<Button name="BenillaInspectHeadSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="21" y="-74"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "HeadSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectNeckSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectHeadSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "NeckSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectShoulderSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectNeckSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ShoulderSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectBackSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectShoulderSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "BackSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectChestSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectBackSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ChestSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectShirtSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectChestSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ShirtSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTabardSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectShirtSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "TabardSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectWristSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectTabardSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "WristSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectHandsSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="305" y="-74"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "HandsSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectWaistSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectHandsSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "WaistSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectLegsSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectWaistSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "LegsSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFeetSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectLegsSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "FeetSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFinger0Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFeetSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Finger0Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFinger1Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFinger0Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Finger1Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTrinket0Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFinger1Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Trinket0Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTrinket1Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectTrinket0Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Trinket1Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectMainHandSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="122" y="127"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "MainHandSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectSecondaryHandSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectMainHandSlot" relativePoint="TOPRIGHT"><Offset><AbsDimension x="5" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "SecondaryHandSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectRangedSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectSecondaryHandSlot" relativePoint="TOPRIGHT"><Offset><AbsDimension x="5" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "RangedSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectPaperDollFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectPaperDollFrame_OnEvent(self)</OnEvent>
|
|
<OnShow>BenillaInspectPaperDollFrame_OnShow()</OnShow>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!--
|
|
The honor page (ref InspectHonorFrame, its own file's l.4-364), id=2. Geometry for
|
|
geometry it is the character window's Honor tab with the level line taken out and
|
|
the frame names re-prefixed — the reference ships the two as near-copies of each
|
|
other, and every number below is quoted from the inspect one. What it is NOT a copy
|
|
of is the LOGIC: the row templates and both painters are HonorFrame.xml's, called
|
|
from this file's `BenillaInspectHonorFrame_Update` above.
|
|
|
|
A true engine child of this window (declared inside its `<Frames>`), unlike the
|
|
character window's pages, which are separate top-level files pinned by name. That is
|
|
why it needs no `parent=` substitute and why the parent's hide cascade closes it.
|
|
-->
|
|
<Frame name="BenillaInspectHonorFrame" enableMouse="true" hidden="true" id="2">
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="75"/></HitRectInsets>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<!-- The shared "General" quadrants every PaperDollInfoFrame page wears,
|
|
carrying the portrait-ring cutout the window's own portrait shows
|
|
through (ref l.10-57). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-TopLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="2" y="-1"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-TopRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="258" y="-1"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-BottomLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="2" y="-257"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-BottomRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="258" y="-257"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
<Layer level="ARTWORK">
|
|
<!-- The honor plaque and the five section plates (ref l.60-107). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-TopLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-69"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-TopRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="275" y="-69"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-BottomLeft">
|
|
<Size><AbsDimension x="256" y="128"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-325"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-BottomRight">
|
|
<Size><AbsDimension x="128" y="128"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="275" y="-325"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<!-- The rank title and its "(Rank N)". The title's y is the one the repaint
|
|
writes, not the reference's XML -81 that nothing ever sees —
|
|
HonorFrame.xml's header states the collapse and its reason. -->
|
|
<FontString name="BenillaInspectHonorFrameCurrentPVPTitle" inherits="GameFontNormal">
|
|
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="-83"/></Offset></Anchor></Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameCurrentPVPRank" inherits="GameFontNormalSmall">
|
|
<Anchors>
|
|
<Anchor point="LEFT" relativeTo="BenillaInspectHonorFrameCurrentPVPTitle" relativePoint="RIGHT"><Offset><AbsDimension x="5" y="-1"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<!-- The five section headings (ref l.126-170), each chained off the last;
|
|
the uneven gaps are each section's own row count. -->
|
|
<FontString name="BenillaInspectHonorFrameCurrentSessionTitle" inherits="GameFontNormal" text="HONOR_THIS_SESSION">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="36" y="-112"/></Offset></Anchor></Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameYesterdayTitle" inherits="GameFontNormal" text="HONOR_YESTERDAY">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentSessionTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-41"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameThisWeekTitle" inherits="GameFontNormal" text="HONOR_THISWEEK">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-43"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameLastWeekTitle" inherits="GameFontNormal" text="HONOR_LASTWEEK">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-42"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameLifeTimeTitle" inherits="GameFontNormal" text="HONOR_LIFETIME">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-64"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
</Layer>
|
|
<Layer level="OVERLAY">
|
|
<!-- The rank badge (ref l.172-185). Pathless: the file is chosen per rank at
|
|
repaint time and there is none below rank 1. -->
|
|
<Texture name="BenillaInspectHonorFramePvPIcon">
|
|
<Size><AbsDimension x="24" y="24"/></Size>
|
|
<Anchors>
|
|
<Anchor point="RIGHT" relativeTo="BenillaInspectHonorFrameCurrentPVPTitle" relativePoint="LEFT"><Offset><AbsDimension x="-5" y="0"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- The twelve rows (ref l.188-295), on HonorFrame.xml's five templates. Same
|
|
sections and the same row sets as the character window's page, because they
|
|
are the same figures about a different player. Today. -->
|
|
<Frame name="BenillaInspectHonorFrameCurrentHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentSessionTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameCurrentDK" inherits="HonorFrameDKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Yesterday. -->
|
|
<Frame name="BenillaInspectHonorFrameYesterdayHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameYesterdayContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- This Week. -->
|
|
<Frame name="BenillaInspectHonorFrameThisWeekHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameThisWeekContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Last Week, the only three-row section. -->
|
|
<Frame name="BenillaInspectHonorFrameLastWeekHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLastWeekContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLastWeekStanding" inherits="HonorFrameStandingButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekContribution" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Lifetime. -->
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeDK" inherits="HonorFrameDKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeRank" inherits="HonorFrameRankButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeDK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- The rank hover: an invisible strip spanning badge to ordinal (ref
|
|
l.296-315), so the whole phrase explains itself. -->
|
|
<Frame name="BenillaInspectHonorFrameRankButton" enableMouse="true">
|
|
<Size><AbsDimension x="10" y="24"/></Size>
|
|
<Anchors>
|
|
<Anchor point="LEFT" relativeTo="BenillaInspectHonorFramePvPIcon"/>
|
|
<Anchor point="RIGHT" relativeTo="BenillaInspectHonorFrameCurrentPVPRank"/>
|
|
</Anchors>
|
|
<Scripts>
|
|
<OnEnter>BenillaTooltip_AddNewbieTipFor(self, RANK, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, NEWBIE_TOOLTIP_RANK)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!-- The progress bar (ref l.316-351). The two frame-level drops are the
|
|
reference's own and the mechanism is the same one HonorFrame.xml's twin
|
|
documents: they put the BORDER-layer fill in the pane's own bucket so the
|
|
pane's ARTWORK plaque draws over it rather than under. -->
|
|
<StatusBar name="BenillaInspectHonorFrameProgressBar" enableMouse="true" drawLayer="BORDER" minValue="0" maxValue="1" defaultValue="0">
|
|
<Size><AbsDimension x="315" y="29"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-77"/></Offset></Anchor></Anchors>
|
|
<Frames>
|
|
<Frame name="BenillaInspectHonorFrameProgressButton" enableMouse="true" setAllPoints="true">
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() - 1)</OnLoad>
|
|
<OnEnter>BenillaTooltip_AddNewbieTipFor(self, RANK_POSITION, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, NEWBIE_TOOLTIP_RANK_POSITION)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
</Scripts>
|
|
</Frame>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() - 1)</OnLoad>
|
|
</Scripts>
|
|
<BarTexture name="$parentBar" file="Interface\PaperDollInfoFrame\UI-Character-Skills-Bar"/>
|
|
</StatusBar>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectHonorFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectHonorFrame_OnEvent()</OnEvent>
|
|
<OnShow>BenillaInspectHonorFrame_OnShow()</OnShow>
|
|
</Scripts>
|
|
</Frame>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectFrame_OnEvent(self)</OnEvent>
|
|
<OnShow>BenillaInspectFrame_OnShow(self)</OnShow>
|
|
<OnHide>BenillaInspectFrame_OnHide(self)</OnHide>
|
|
<OnUpdate>BenillaInspectFrame_OnUpdate(self)</OnUpdate>
|
|
</Scripts>
|
|
</Frame>
|
|
</Ui>
|