- the select screen's ghost is four mechanisms off one roster-row bit, and the rest of them land: the FFX pass swap — the reference builds TWO pass pairs, world and glue, and a ghost row installs the glue DEATH pass over the whole diorama while the character list and buttons composite clean above it; the ghost-gated sun — the scene's light gather is wiped and one hardcoded overhead directional injected, its colours turning out to be Light.dbc's death preset (diffuse (94,153,198), ambient (26,56,85)) rather than the live capture we had parked them as, with the sign settled at the bytes (an authored light already carries one negation, so reusing that convention lights the ghost from underneath); and three glow weights corrected — the glue screens pin 0.30 login / 0.40 living select / 0.15 ghost where we rendered a flat 0.5 everywhere, so login and create get slightly less glow too, a fidelity correction to a value we had never verified - a press brings its window to the front: the mouse-DOWN handler raises the capture-or-hover frame unguarded, the toplevel gate living inside the worker — which is what makes a click on a child raise the window that owns it — and the release never raises; behind it, a frame-by-frame diff against the reference put back what the transcription dropped: toplevel on 47 frames (without it every raise trigger was a silent no-op across the whole interface), the mouse on 16 window bodies (a click on the bank's or merchant's own background was turning the camera or dropping your target), and id= on 81 frames — the slot index a 1.12 addon reads, where GetID() answered 0; a new gate reads our flags off the LOADED engine against the reference's, both directions with a reason each, so the next drift can't hide behind renamed templates - the jump stops being frame-rate dependent: the fall step becomes the reference's closed form (the mean of the endpoint velocities is the exact displacement rate, and both our movers had the error in opposite directions), taking the apex from 1.668 yd at 144 fps and 1.844 at 20 to a flat 1.640 against the analytic 1.640 — a live run apexed at 1.6410; and the knockback's freeze is its PLANTED direction bit, not a velocity test — air control opens exactly while the direction nibble is clear, the launch plants forward whatever its speed, and the bit now rides the wire, which we had never sent at all - the walk-away leash belongs to the OBJECT: the reference's watchdog overwrites the opener's stored range on the player typemask bit alone with (10+4)², so a player-shared quest panel is leashed at 14 yards — not at the 5.56-yard NPC reach, and not never, as two earlier readings had it — while a census of all 14 arming sites confirms every other NPC window already closed at the right distance; the walk-away also sends strictly LESS than the button: an NPC panel closes silently while a share still owes its decline Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
135 lines
7.3 KiB
XML
135 lines
7.3 KiB
XML
<Ui>
|
|
<!--
|
|
The chat-link tooltip (decision 0274 P4) - ref ItemRef.xml/ItemRef.lua, quoted: a
|
|
standalone GameTooltip instance parked above the bottom center that SetItemRef fills via
|
|
SetHyperlink when a chat item link is clicked, plus its corner close button. The plate,
|
|
the status bar and the OnHide come from GameTooltipTemplate — the same inheritance the ref
|
|
uses (ref ItemRef.xml l.4) — declared in GameTooltip.xml, which the manifest loads first.
|
|
|
|
Departures, each named:
|
|
- No coin row (ref: the template's $parentMoneyFrame): our money row is the coin trio the
|
|
GameTooltip instance declares, and its OnTooltipAddMoney/OnTooltipCleared pair stays
|
|
there with it, so a chat-link tooltip renders no price line. The reasoning is on
|
|
GameTooltipTemplate.
|
|
- No drag (ref: movable + RegisterForDrag + StartMoving/StopMovingOrSizing +
|
|
ValidateFramePosition): benilla has no user-moved-frame affordance yet - the window
|
|
sits on its declared anchor.
|
|
- SetItemRef's player-link branch lands here (ref l.3-46): left-click whispers,
|
|
right-click opens the name-only FRIEND dropdown (FriendsFrame_ShowDropdown, the
|
|
minimal FriendsFrame stand-in below), shift-click inserts into the chat editbox. The
|
|
ref's shift-click friends/ignore popup fills + SendWho("n-"..name) wait on the
|
|
friends/who arc (both guarded). The ITEM branch's Ctrl-DressUp landed with the dressing
|
|
room itself (decision 1060).
|
|
- No UIPanelWindows row (the ref has none either): ShowUIPanel's unregistered branch is
|
|
a plain Show, and SetHyperlink's own empty-gate shows/hides the plate.
|
|
-->
|
|
<Script><![CDATA[
|
|
-- ref ItemRef.lua SetItemRef (l.2-63): the chat-link click router. `link` is the payload
|
|
-- inside |H...|h ("item:2947:0:0:0" / "player:Name"), `text` the full escaped link,
|
|
-- `button` the mouse button.
|
|
function SetItemRef(link, text, button)
|
|
if strsub(link, 1, 6) == "player" then
|
|
local name = strsub(link, 8)
|
|
if name and strlen(name) > 0 then
|
|
-- ref l.6-7: collapse a space-separated name to its last token (a no-op for
|
|
-- the single-token names 1.12 uses).
|
|
name = gsub(name, "([^%s]*)%s+([^%s]*)%s+([^%s]*)", "%3")
|
|
name = gsub(name, "([^%s]*)%s+([^%s]*)", "%2")
|
|
if IsShiftKeyDown() then
|
|
-- ref fills a visible ADD_IGNORE/ADD_FRIEND/… popup editbox first (those
|
|
-- dialogs are the friends/ignore arc, deferred), else the chat editbox,
|
|
-- else SendWho (the /who arc, deferred) — we take the ref's editbox tail,
|
|
-- both branches guarded.
|
|
if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then
|
|
ChatFrameEditBox:Insert(name)
|
|
elseif SendWho then
|
|
SendWho("n-"..name)
|
|
end
|
|
elseif button == "RightButton" then
|
|
FriendsFrame_ShowDropdown(name, 1)
|
|
else
|
|
ChatFrame_SendTell(name)
|
|
end
|
|
end
|
|
return
|
|
end
|
|
if IsControlKeyDown() then
|
|
-- ref l.50: ctrl-clicking an item link in chat previews it on your own character
|
|
-- (decision 1060). `text` is the FULL escaped link, not the bare payload —
|
|
-- DressUpItemLink pulls the id out of it itself.
|
|
DressUpItemLink(text)
|
|
return
|
|
end
|
|
if IsShiftKeyDown() then
|
|
if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then
|
|
ChatFrameEditBox:Insert(text)
|
|
end
|
|
return
|
|
end
|
|
ShowUIPanel(ItemRefTooltip)
|
|
if not ItemRefTooltip:IsVisible() then
|
|
ItemRefTooltip:SetOwner(UIParent, "ANCHOR_PRESERVE")
|
|
end
|
|
ItemRefTooltip:SetHyperlink(link)
|
|
end
|
|
|
|
-- Minimal FriendsFrame stand-in for the chat-name right-click menu (ref FriendsFrame.lua
|
|
-- l.35-47). The full social window (friends/ignore/who tabs) is a later arc; this hosts
|
|
-- only the name-only FRIEND dropdown the chat links share with the unit popups.
|
|
function FriendsFrame_ShowDropdown(name, connected)
|
|
HideDropDownMenu(1)
|
|
if connected then
|
|
FriendsDropDown.initialize = FriendsFrameDropDown_Initialize
|
|
FriendsDropDown.displayMode = "MENU"
|
|
FriendsDropDown.name = name
|
|
ToggleDropDownMenu(1, nil, FriendsDropDown, "cursor")
|
|
end
|
|
end
|
|
|
|
function FriendsFrameDropDown_Initialize()
|
|
UnitPopup_ShowMenu(getglobal(UIDROPDOWNMENU_OPEN_MENU), "FRIEND", nil, FriendsDropDown.name)
|
|
end
|
|
]]></Script>
|
|
|
|
<!-- `toplevel` is the ref's (ItemRef.xml l.3) — a linked-item tooltip is a window that must
|
|
land above the HIGH-strata frames it is opened over (decision 1318). -->
|
|
<GameTooltip name="ItemRefTooltip" inherits="GameTooltipTemplate" enableMouse="true" parent="UIParent" frameStrata="HIGH" toplevel="true" hidden="true">
|
|
<Size><AbsDimension x="128" y="64"/></Size>
|
|
<Anchors>
|
|
<Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="80"/></Offset></Anchor>
|
|
</Anchors>
|
|
<Frames>
|
|
<!-- ref ItemRefCloseButton (ItemRef.xml l.17-36, quoted): the corner minimize-style
|
|
close; OnLoad's SetPadding(16) keeps it off the text. -->
|
|
<Button name="ItemRefCloseButton">
|
|
<Size><AbsDimension x="32" y="32"/></Size>
|
|
<Anchors>
|
|
<Anchor point="TOPRIGHT"><Offset><AbsDimension x="1" y="0"/></Offset></Anchor>
|
|
</Anchors>
|
|
<Scripts>
|
|
<OnClick>HideUIPanel(ItemRefTooltip)</OnClick>
|
|
</Scripts>
|
|
<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"/>
|
|
</Button>
|
|
</Frames>
|
|
<Scripts>
|
|
<!-- The template's own OnLoad, re-declared to add the padding (ref ItemRef.xml
|
|
l.38-42's shape, minus its drag arming — see the no-drag departure above); the
|
|
loader's later SetScript wins, so GameTooltip_OnLoad has to be called here too.
|
|
OnHide is the template's unchanged, so it is not re-declared — ref ItemRef.xml
|
|
declares none either. -->
|
|
<OnLoad>
|
|
GameTooltip_OnLoad(self)
|
|
self:SetPadding(16)
|
|
</OnLoad>
|
|
</Scripts>
|
|
</GameTooltip>
|
|
|
|
<!-- The chat-name dropdown host (ref FriendsFrame's FriendsDropDown): a bare UIDropDownMenu
|
|
the SetItemRef player branch toggles at the cursor. UIDropDownMenuTemplate + UnitPopup
|
|
both load before this file (the ui_script load order). -->
|
|
<Frame name="FriendsDropDown" parent="UIParent" inherits="UIDropDownMenuTemplate" hidden="true"/>
|
|
</Ui>
|