Sur le releve de GearSetButtonTemplate : croix 14 x 14 a BOTTOMRIGHT
(-21, 2) sur UI-GroupLoot-Pass-Up, engrenage 16 x 16 a RIGHT sur son
LEFT sur GEAR_64GREY, alpha 0,5 au repos et 1 au survol, texture decalee
de (1, -1) a l'appui. Les deux textures existent deja dans 3.3.5.
Le survol se suit a chaque image et non par OnEnter : ce sont des cadres
fils de la carte, y entrer declencherait son OnLeave. camelot fait de
meme dans PaperDollEquipmentManagerPane_OnUpdate.
La croix appelle CONFIRM_DELETE_EQUIPMENT_SET, la fenetre de validation
du client. L'engrenage choisit l'ensemble puis rouvre la fenetre de
creation : le client la remplit de son nom et de son icone, et son Okay
ecrase au lieu de creer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deux defauts distincts.
GetEquipmentSetLocations rend une table indexee par emplacement, et
EquipmentManager_UnpackLocation rend joueur, banque, sacs, SLOT. Je ne
lisais que les deux premiers drapeaux : une piece portee dans un AUTRE
emplacement passait pour bonne, d'ou des coches sur des ensembles sans
rapport. Le slot rendu doit valoir la cle.
Et si deux ensembles decrivent le meme equipement, la geometrie ne peut
pas les departager. 3.3.5 n'a aucune notion d'ensemble actif : le dernier
equipe est retenu par un greffon sur UseEquipmentSet, garde dans
ForeverUIDB, et la coche va a celui-la tant qu'il est encore porte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La liste glisse de 4 vers la droite, la carte descend a 40 de haut (fond
45, le debord de 5 de la source garde) et son fond passe a 174 de large.
Cette largeur est calculee, pas ecrite : l'ecart separateur -> icone
egale l'ecart carte -> bord de la fenetre, 8 de chaque cote.
Le choix et le survol etaient sur le meme calque, ou seul l'ordre de
creation departage. Le survol reste en BORDER, le choix monte en
ARTWORK.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Je les placais a l'oeil. SelectionFrameTemplate -- le gabarit qui porte
justement cet encadrement -- donne leur place : CancelButton 78 x 22 a
BOTTOMRIGHT (-11, 13), OkayButton a RIGHT sur son LEFT avec x = -2. Ce
sont les deux creux du coin bas droit de l'image.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La fenetre prend la hauteur de la feuille de personnage au lieu des 495
de camelot ; sept rangees s'y posent au lieu de huit.
L'ecart de la barre se calcule au lieu d'etre ecrit : le meme entre la
derniere colonne d'icones et la barre qu'entre la barre et le bord de la
fenetre, soit 12 de chaque cote aujourd'hui.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La bande droite etait ancree sur le BOTTOMLEFT du coin bas droit, qui
fait 174 de large puisqu'il porte le socle des boutons : elle s'etalait
donc sur 174 au lieu de 17. Deux points du meme cote suffisent, la
largeur vient de l'image.
Le contour d'epoque de la glissiere n'est pas porte par la barre mais par
le cadre de defilement : effacer les regions de la seule barre le
laissait en place.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Il est une region de la barre : la boucle qui efface les textures
d'epoque l'emportait, et lui rendre sa texture sans lui rendre son alpha
le laissait invisible. Il est exclu de l'effacement, et pose a 8 x 36 --
la taille du curseur le plus court de la source.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La fenetre s'ancre en TOPLEFT sur le TOPRIGHT de la feuille de
personnage, comme camelot ancre la sienne sur ce qu'elle accompagne.
Fond noir a 80 % de (7, -7) a (-7, 7), et SelectionFrameTemplate en neuf
pieces : les atlas macropopup-*, dont le coin bas droit de 174 x 39 qui
porte le socle des boutons.
MinimalScrollBar portee : 8 de large, glissiere et curseur en trois
morceaux, fleches de 17 x 11. Seules les textures changent, le
FauxScrollFrame du client garde son comportement.
Quatre feuilles versees.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Fenetre de 525 x 495 sur IconSelectorPopupFrameTemplate : champ de nom
en haut, zone du choix courant a droite, grille en dessous. La grille
prend les valeurs de ScrollBoxSelectorMixin -- dix par rangee, boutons
de 36, ecarts de 10, marges de 5.
Tout le remplissage du client passe par quatre globales
(NUM_GEARSET_ICONS_PER_ROW, NUM_GEARSET_ICON_ROWS,
NUM_GEARSET_ICONS_SHOWN, GEARSET_ICON_ROW_HEIGHT) : les porter suffit,
rien du parcours des icones ni du defilement n'est reecrit. Le client ne
creant que quinze boutons, les soixante-cinq manquants sont crees sur son
propre gabarit.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
GearManagerDialog est declaree toplevel dans le FrameXML et son OnShow
finit par GearManagerDialog:Raise() : a chaque ouverture elle repasse au
sommet de sa strate, apres tout niveau pose une fois pour toutes. D'ou un
bouton qui ne recevait rien malgre un niveau superieur.
SetToplevel(false), puisqu'elle n'est plus une fenetre, et le niveau du
bouton recalcule depuis le sien a chaque passage.
Le banc reproduit desormais Raise et toplevel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
GearManagerDialog est etalee sur tout le panneau, elle prend la souris et
elle est posee un cran plus haut : un bouton fils du panneau passait
dessous et ne recevait plus rien. Ceux du client -- Equip, Save -- sont
ses enfants a elle, donc epargnes.
Meme famille de defaut que le modele 3D sur les emplacements
d'equipement.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La recette du bouton tertiaire et ses mesures passent dans
ForeverUI.SkinTertiaryButton (AtlasUtil), employee par les selecteurs de
statistiques et par ce bouton. Son option auto fait suivre l'etat presse
au bouton de la souris ; sans elle l'appelant commande, ce que font les
selecteurs dont l'etat tient tant que leur liste est ouverte.
L'intitule est ecrit en dur : PAPERDOLL_NEWEQUIPMENTSET n'existe pas ici
et ce client ne porte aucune chaine equivalente.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les boutons du panneau sont ses cadres fils, pas ceux de la fenetre du
client : masquer GearManagerDialog ne les emportait pas, et le bouton
restait visible sous les statistiques. Le panneau entier se montre et se
cache avec l'onglet.
Son intitule venait de NEW_COMPACT_UNIT_FRAME_PROFILE, absente de ce
client -- d'ou "New Profile", une chaine d'un tout autre panneau.
PAPERDOLL_NEWEQUIPMENTSET, que camelot ecrit, n'existe pas ici non plus :
NEW est la plus proche, et elle va avec Equip et Save.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camelot n'impose qu'un minimum et laisse la liste s'elargir si une entree
est plus longue. A la demande, c'est desormais une egalite : la liste
prend exactement la largeur de son bouton, quitte a serrer le texte d'une
entree plus longue.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sans ancrage donne, ToggleDropDownMenu accroche la liste a "<nom>Left" --
la piece doree du menu deroulant, que nous avons justement masquee --
d'ou le decalage. UIDropDownMenu_SetAnchor est l'entree prevue par le
client : TOPLEFT de la liste sur le BOTTOMLEFT du bouton, sans ecart.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
UIDropDownMenu_InitializeHelper finit par
frame:SetHeight(UIDROPDOWNMENU_BUTTON_HEIGHT * 2). Cette constante, nous
l'avons portee a 20 pour les lignes de menu de camelot : le selecteur
reprenait donc 40 des qu'on cliquait dessus.
La taille voulue est retenue sur le cadre et reposee par un greffon sur
UIDropDownMenu_Initialize, qui passe apres le securecall de l'aide.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
habillerSelecteur la greffe sur la liste, et elle n'etait ecrite que plus
bas : son nom s'y resolvait en globale, donc nil, et HookScript refusait
le greffon. Declaration anticipee.
Le banc ne l'a pas vu parce que son HookScript acceptait nil. Il refuse
desormais tout greffon qui n'est pas une fonction, comme le vrai.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
common-insideframe fait 107 x 107 et porte un motif dans chaque angle :
tendue sur les 233 x 379 du panneau, elle est multipliee par deux en
largeur et trois et demi en hauteur, et tout se brouille.
Neuf tranches, coin de 20 -- mesure sur l'art : le filet occupe 2..12 et
94..104, le motif d'angle s'arrete a 19. Les marges de camelot (TOPLEFT
1,1 et BOTTOMRIGHT -4,2) converties en -1, 1, -4, -2.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sur le releve de PaperDollFrame.EquipmentManagerPane et de
GearSetButtonTemplate : panneau sous la bande de pierre, bordure
common-insideframe, cartes de 169 x 44 en colonne avec leur fond
OutfitCard, leur icone cerclee, leur intitule et la coche des ensembles
portes, puis Equip, Save et New Set au bas.
Rien n'est recree : GearManagerDialog passe dans le volet, son art de
fenetre est efface, ses cartes se reposent et se rhabillent. Le client
garde la liste, la selection et les infobulles.
Ecarts documentes : New Set passe par le Save du client, Delete est
garde (3.3.5 n'a pas le menu de carte de camelot), la coche se calcule
depuis GetEquipmentSetLocations, et la liste defile a la molette faute
de MinimalScrollBar.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
GearManagerDialog_OnShow appelle UpdateUIPanelPositions(CharacterFrame)
et _OnHide appelle UpdateUIPanelPositions() : le systeme replace la
feuille a SA position et la place retenue par le joueur est perdue.
Le greffon est pose sur UpdateUIPanelPositions elle-meme, pas sur le
seul gestionnaire : toute autre ouverture qui la declenche pose le meme
probleme.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camelot donne 42 a son Icon, soit tout le bouton, mais ses icones
portent leur propre marge transparente ; un portrait remplit sa texture
et ressortait des angles arrondis. Mesure sur UI-Character-Info-StatTab :
metal en 3..6 et 35..38, ouverture de 7 a 34, soit 28.
Les deux se comportent en onglets : le gestionnaire ouvre son panneau et
masque les statistiques, les statistiques le ferment et reviennent. Au
retour on laisse PaperDollFrame_UpdateStats refaire le travail -- lui
seul sait cacher la sixieme ligne des categories a cinq statistiques --
et poserStatistiques lit l'etat de l'onglet au lieu de tout rallumer a
chaque evenement.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PLAYER_LEVEL vaut ici "Level %s %s %s" -- niveau, RACE, classe. camelot
emploie PLAYER_LEVEL_NO_SPEC, absent de ce client : la ligne est
recomposee depuis UNIT_LEVEL_TEMPLATE et le nom de classe, pour ne pas
ecrire un format en dur.
Deux onglets de 42 x 42 au-dessus, sur le gabarit de
PaperDollSidebarTabs : cadre UI-Character-Info-StatTab, marque
...-Selected, paire centree et collee. L'onglet des statistiques prend le
portrait du joueur avec le rognage de la source ; celui du gestionnaire
prend UI-GearManager-Button, PaperDollSidebarTabs.blp n'existant pas
ici. Il ouvre le GearManagerDialog du client, dont le bouton d'origine
est masque.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
L'anneau est porte par le coin haut gauche de l'encadrement : le passage
au calcul sur le filet interieur a deplace le coin de (-13, 16) a
(-18,5 ; 17), et le portrait, pose en absolu, s'est retrouve a cote.
Sa place se calcule desormais depuis le coin, plus 38 / -38,5 -- le
centre du trou, mesure sur l'art (plages 13..39 et 113..138 en double
densite) et deja confirme par la place validee en jeu. Le banc verifie
l'ecart au coin, pas la position absolue.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reproduction fidele d'un defaut de la source.
UpdateContainerFrameAnchors diminue la place restante de la seule hauteur
du sac : l'ecart de 8 px empile entre deux sacs n'est jamais compte. Pour
N sacs dans une colonne, la pile depasse l'estimation de (N-1) x 8 et le
saut de colonne arrive trop tard. Aucune marge haute non plus.
Ce n'est pas un defaut d'ordre : le rattrapage rejoue bien l'empilement
quand une hauteur change.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Decalages relatifs au voisin de gauche, qui s'additionnent le long de la
chaine : main gauche -2, distance -2 de plus, soit -4 a l'ecran, et les
munitions -4 heritees sans reglage propre.
La fleche des munitions est une region de l'emplacement -- texture
OVERLAY de 23 x 41 centree a (-22, 0) sur CharacterAmmoSlot -- elle le
suit donc.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camelot pose l'emplacement de distance en 27 avec GearSlotSmall, comme
les munitions. Il porte pourtant, selon la classe, une arme a distance
ou une relique -- des objets de meme rang que les deux armes de melee.
Ecart assume, sur demande : les quatre font 40. Les munitions gardent le
petit emplacement de la source.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les decalages de la source posent le contour EXTERIEUR de l'image : le
filet interieur du metal tombait a 6 px dans la fenetre, et ces 6 px de
fond restaient visibles sous lui -- ce qui se lit comme un encadrement
qui n'atteint pas le bas.
Mesure sur l'art, pas sur une capture (une capture a sa propre echelle) :
uiframemetal2xc60 est en double densite, filet interieur a 18,5 px
d'affichage a gauche, 8,5 a droite, 14 en bas. Le haut ne se recalcule
pas, ses 41,5 sont la barre de titre, interieure par conception.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camelot/NineSliceLayoutOverrides.lua repasse sur TOUTES les mises en
page apres les avoir definies, parce que son art ne fait pas la taille
de l'art standard : coin haut droit x += -2, coins du bas y = -8.
Nous prenions les valeurs non corrigees, d'ou deux coins du bas 5 px
trop haut -- l'encadrement n'allait pas jusqu'en bas de la fenetre -- et
deux coins de droite 2 px trop a droite.
SetPanelArt prend une option coins ; la feuille s'en sert, plus 1 px de
montee juge a l'ecran. La fenetre des sacs, qui est validee, n'est pas
touchee bien que la meme correction s'y applique.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
SetUnit("player") lance un chargement asynchrone : le reglage pose juste
apres s'applique a un modele qui n'est pas encore la, et la fin du
chargement remet la transformation a zero. D'ou le symptome -- la meme
commande tapee a la main tient, parce que le modele est deja charge.
Le reglage se repose a chaque image pendant 1,5 s apres chaque passage,
sans condition : rien ne garantit que GetPosition rende ce que le moteur
dessine. Meme rattrapage que pour la hauteur des sacs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
C'est la position qui cadre, pas l'echelle : SetPosition(-5.5, 0, 0)
recule le personnage devant la camera sans deplacer son cadrage.
MODELE_ECHELLE repasse a nil -- on ne touche plus a l'echelle du client.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Releve dans Wow.exe : ce client ne porte que SetModelScale et
SetPosition. Ni SetCameraDistance, ni SetCameraPosition, ni
SetCameraTarget, ni SetCustomCamera, ni SetPortraitZoom.
SetModelScale reduit le modele autour de son origine, camera fixe : il
parait donc aussi glisser vers le bas. SetPosition l'eloigne devant la
camera, ce qui le rapetisse sans changer son cadrage.
Aucune des deux valeurs ne se releve dans la source -- camelot cadre par
une scene que 3.3.5 n'a pas -- d'ou /fui modele pour les juger a l'oeil
sans recharger l'interface.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Valeur d'essai demandee pour juger a l'ecran, pas une decision. A
remplacer par la valeur retenue.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La source ne donne qu'un ecart, 6, pour les deux sens. A la demande, les
deux colonnes passent a 4 ; la rangee des armes garde le 6 de la source
et l'ecart des munitions ne bouge pas.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ce client n'a ni SetCamDistanceScale ni SetPortraitZoom -- verifie dans
Wow.exe, seul SetModelScale y figure. Le personnage passe donc a 0,9,
repose a chaque passage parce que le client refait son modele quand
l'apparence change (UNIT_MODEL_CHANGED est ecoute pour cela).
Le separateur des volets etait pose au niveau du volet, donc SOUS le
cadre fils qui porte l'habillage (NIVEAU_ART) : il se perdait sous le
metal. Il prend un cran de plus, calcule depuis la constante puisque
l'habillage n'existe pas encore quand les volets se montent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Camelot donne tout le volet gauche a la scene du modele et pose les
emplacements par-dessus. Mais CharacterModelFrame prend la souris et
nait au meme niveau que les emplacements, tous enfants de
PaperDollFrame.
Mesure en jeu (/fui perso) : emplacement et modele tous deux a 28,
GetMouseFocus rend CharacterModelFrame. Le bouton avait pourtant tous
ses scripts et prenait la souris : a niveau egal, c'est le modele qui
recoit le clic -- plus de deseequipement, plus d'infobulle.
Les emplacements passent un cran au-dessus. Le test est un "au moins",
pas une incrementation : l'habillage se rejoue a chaque ouverture et a
chaque changement d'equipement.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La liste ouverte est a la DA de camelot, le bouton ferme ne l'est pas.
Ce qui est en place est l'en-tete de categorie
(CharacterStatFrameCategoryTemplate), pas WowStyle1DropdownTemplate --
common-dropdown-textholder, la fleche common-dropdown-a-button a six
etats, texte GameFontHighlight justifie a gauche. L'art est deja dans
l'atelier, rien a verser.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Camelot etire common-dropdown-bg d'un bord a l'autre. Mesure sur l'image
68 x 68 : le panneau n'occupe que x 9..58 et y 6..55, le reste est une
ombre de 9 / 6 / 9 / 12 et les angles sont coupes sur 6. Etiree sur une
liste de 200 x 130, cette ombre est multipliee par 3,3 en largeur et par
2 en hauteur -- le filet rentre d'une vingtaine de pixels, les angles
s'ecrasent et le bas du panneau remonte au-dessus de la derniere ligne.
ForeverUI.CreateNineSlice decoupe une image en neuf : coins a leur
taille, bords etires dans un seul sens, centre dans les deux. Coin de 18
(ombre la plus epaisse 12 + pan coupe 6), marges prises sur l'image pour
que le filet tombe sur le bord du cadre.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DropdownButtonMixin:RegisterMenu pose SetMinimumWidth(self:GetWidth())
quand la description du menu n'impose rien : la liste fait au moins la
largeur du bouton qui l'ouvre. 3.3.5 ne la taillait que sur son texte le
plus long.
Le plancher se pose a l'affichage de la liste -- ToggleDropDownMenu
retient UIDROPDOWNMENU_OPEN_MENU avant de la montrer et ne verifie le
debord d'ecran qu'apres -- et se repose derriere UIDropDownMenu_Refresh,
qui retaille. Les lignes gardent l'ecart de 25 du client.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un seul cadre pour tout le jeu : DropDownList1 et 2. camelot fait pareil
-- GetDefaultMenuMixin et GetDefaultContextMenuMixin rendent le meme
MenuStyle1Mixin -- donc l'habillage vaut pour tous les menus.
Saveur tranchee par l'art : les atlas common-dropdown-classic-* que cite
classic/ n'existent nulle part dans ce client, tandis que les
common-dropdown-* de mainline/ ont tous leur variante c60.
Fond common-dropdown-bg-c60 a (-10, 3) / (10, -3), alpha 0,925, a la
place des deux Backdrop d'epoque -- retires par SetBackdrop(nil), car
ToggleDropDownMenu relevera un cadre masque. Lignes de 20, police
GameFontHighlightLeft, case common-dropdown-ticksquare avec la coche
jaune par-dessus. Surbrillance et fleche de sous-menu etaient deja
identiques.
Deux feuilles versees : commondropdownc60 et commondropdown (la case et
la coche n'ont pas de variante c60).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
patch-enus-9.mpq porte l'extension .disabled : le client ne l'ouvre pas.
Le bloc des statistiques visait donc des cadres qui n'existent pas
(MostrarStatPaperDoll*DropDown, PStatFrameTemplate), d'ou des selecteurs
invisibles.
La chaine d'archives repond patch-enus-2 pour le .xml et patch-enus-3
pour le .lua : c'est le FrameXML d'origine. Les selecteurs y sont
PlayerStatFrame{Left,Right}DropDown, des UIDropDownMenuTemplate dont
l'art deborde du cadre et ne le suit pas ; il s'efface au profit de
l'en-tete UI-Character-Info-Title, la fleche du client revient contre le
bord droit et toute la barre ouvre le menu.
Le modele de ligne est StatFrameTemplate, 104 x 13 : le pas passe de 16
a 13. Rien ne depend d'une archive ajoutee.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les deux MostrarStatPaperDoll*DropDown n'ont qu'un surlignage et aucune
texture normale : sans art ils sont invisibles. Ils prennent le fond
UI-Character-Info-Title et l'intitule centre de
CharacterStatFrameCategoryTemplate (camelot), 40 de haut, debordant de 5
sur leurs lignes.
L'intitule vient de la CVar de categorie, dont la valeur est une cle ; un
hooksecurefunc sur UpdatePaperdollStats le fait suivre le menu. Le clic
reste celui du client.
Le hooksecurefunc du banc n'enveloppait pas : il enregistrait seulement,
donc un greffon ne se declenchait jamais.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DECOUVERTE : ce client n'a pas le PaperDollFrame d'origine. Son
Data/enus/patch-enus-9.mpq livre un FrameXML MODIFIE -- PaperDollFrame.lua
et .xml, CharacterFrame.lua et .xml, plus leurs textures. C'est ce code-la
qui tourne. Le FrameXML du client est donc lisible, contrairement a ce que
je croyais : il n'est pas dans les archives communes mais dans ce patch.
Sa presentation des statistiques est reprise telle quelle : deux groupes de
six lignes -- PlayerStatFrameLeft1..6 et PlayerStatFrameRight1..6 --
chacun coiffe d'un selecteur de categorie, le modele de ligne faisant
155 x 16 avec sa valeur calee a droite et un pas de 16.
Elles sont reposees dans le volet droit, sous la bande de pierre, elargies
a 193 -- le volet fait 233, moins 20 de marge de chaque cote -- et leur
niveau de cadre passe au-dessus du fond du volet. Ce sont des cadres du
client : deplaces et elargis, jamais recrees, puisqu'ils portent les
infobulles et les menus de categorie.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Clic maintenu sur la barre du titre, la fenetre suit. Elle est bornee a
l'ecran, et rien ne bouge en combat.
Le systeme de panneaux du client repose la fenetre a chaque ouverture : la
place choisie est donc retenue dans ForeverUIDB et REPOSEE apres lui, a
chaque passage de l'habillage -- qui tourne justement a l'ouverture. Sans
cela, la fenetre reviendrait a sa place d'origine des qu'on la rouvre.
Trois bouchons du faux client rendus utiles au passage : EnableMouse,
SetMovable et RegisterForDrag ne retenaient rien, on ne pouvait donc rien
verifier de ce qu'on leur demandait.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
characterFrameDisplayInfo fait suivre le titre au sous-cadre affiche : le
nom du joueur par defaut, puis REPUTATION, CURRENCY, PVP, SKILLS ou
STATISTICS selon le panneau. Ce n'est pas ce qui est voulu ici : la barre
du haut garde le nom du personnage et son titre, quel que soit le panneau.
UnitPVPName rend le nom accompagne du titre porte, ou le nom seul.
Ecart assume, note dans AMELIORATIONS, et le harnais verifie que le titre
ne change pas quand un autre panneau s'ouvre.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La ligne du niveau, de la race et de la classe etait restee centree dans la
fenetre entiere, a la place que 3.3.5 lui donne. Elle prend celle de
PaperDollLevelInfo : dans le volet DROIT, au TOP (0, -54) -- la bande est a
-50 des onglets lateraux, eux-memes a -4 du haut du volet -- large de 220
et centree. C'est le "Druidesse de niveau 3" de la capture.
PIEGE 3.3.5 : une region ne se reparente pas, SetParent n'est pas dans la
table des methodes de FontString de ce client. Ancrer celle du client au
volet ne suffirait pas non plus : elle appartient au cadre et se
dessinerait sous les volets, qui sont des cadres fils. On efface la sienne
et on pose la notre dans le volet, en recopiant son texte.
Les fleches de rotation du modele se centrent horizontalement dans le volet
gauche, de part et d'autre du milieu, 29 sous son bord haut comme le montre
la capture.
Le titre reste le nom du personnage et son titre (UnitPVPName), dans
TitleContainer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le titre du client restait a la place prevue pour un cadre de 384. Il est
repris comme sur les sacs, dans un cadre fils : TitledPanelMixin pose le
conteneur en TOPLEFT (gauche, -1) et TOPRIGHT (droite, -1), texte a TOP
(0, -5). CharacterFrame n'appelle PAS SetTitleOffsets et garde donc les
valeurs par defaut, 58 et -24 -- son milieu tombe a 332,5 sur 631, ce que
la capture confirme.
Le texte suit characterFrameDisplayInfo : le nom du joueur en clair par
defaut, l'intitule du sous-cadre affiche en jaune sinon.
Le bouton de fermeture du client passe au coin haut droit, 24 x 24 en
(1, 0), habille du X rouge des panneaux modernes. Titre et bouton sont
au-dessus du metal, comme TitleContainer a frameLevel 510 l'est du
NineSlice a 400.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>