- socle : Textes.lua (ForeverUI.L) et ForeverUIGlueTextes.lua (G.L) ; les
textes dans Textes_enUS / Textes_frFR (325 cles en jeu) et
ForeverUIGlueTextes_enUS / _frFR (41 cles aux ecrans d'accueil) ; une cle
absente prend l'anglais, une langue sans fichier lit l'anglais ; ajouter
une langue = un fichier de plus
- les textes que le client 3.3.5 connait se lisent dans ses globales
(GlobalStrings, GlueStrings en glue) ; les textes de secours sont retires
- tous les fichiers repris : libelles, infobulles, mode edition, messages et
aide de /fui, erreurs internes ; .toc : Notes + Notes-frFR
- selection des personnages : race et classe traduites ramenees a leur jeton
par les tables de langue (GetAvailableRaces / GetAvailableClasses font
planter le client hors de la creation)
- tools/cartes_instances.py : noms des instances dans toutes les langues de
la LibBabble-Zone de WDM (portails de la carte sur tout client)
- banc : toute cle employee existe en anglais et en francais, memes cles dans
les deux, bascule frFR / deDE essayee ; chaines 3.3.5 ajoutees au faux client
- README : etat des sections mis a jour, langues, glue, deploiement --glue
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Il l etait sur le CHEVRON -- LEFT sur sa droite, +4 -- et le temoin a
montre le meme nom pose tantot a 57, tantot a 101 du panneau, AVEC LA
MEME ANCRE ET LA MEME CIBLE : ligne a 12, chevron a 40 de bord droit 53,
donc 57 attendu. L ecart vaut 44, soit exactement RETRAIT_ENFANT moins
RETRAIT_AUTRE.
disposer pose les ancres du nom PUIS reancre la ligne dans le meme
passage. Une region ancree sur une autre region du meme cadre ne suit
pas toujours ce deplacement ; un cadre fils, lui, suit -- les noms
ancres sur ligne.barre, un Frame, n ont jamais derive.
On enleve l intermediaire : le nom s ancre sur la ligne, a CHEVRON_X
plus la largeur du chevron plus l ecart. Meme pixel, sans relais. La
largeur ne depend pas de l etat du bouton -- plus et moins font 13 de
large, seules leurs hauteurs different, mesure sur l art.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le nom d Alliance se pose a 57 dans un etat et a 101 dans l autre, alors
que la ligne et le chevron ne bougent pas -- releve en jeu. Son ancre
annonce pourtant le meme LEFT sur la droite du chevron. La cible n est
donc pas celle qu on croit, et le temoin ecrivait "?" : la plupart des
morceaux d une ligne n ont pas de nom.
Il les reconnait desormais par IDENTITE -- chevron, barre, fleche,
survol, et ceux des autres lignes -- et imprime les deux bords de la
cible.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Quinze factions font trois blocs de quinze lignes : illisible quand on
cherche ce qui bouge sur une seule. Le temoin prend desormais un filtre
-- /fui reput Alliance -- et les trois blocs s y plient.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les ancrages d Alliance sont identiques dans les deux etats -- releve en
jeu -- et pourtant le nom se deplace. Ce n est donc pas la declaration
qui bouge mais son resultat. Le temoin imprime desormais la position
resolue de la ligne, du chevron et du nom, RELATIVE AU PANNEAU pour que
le defilement ne brouille pas la comparaison, avec la largeur du nom, sa
justification et son objet de police.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un nom qui se deplace de quelques pixels ne se lit nulle part ailleurs :
ni le texte ni les donnees ne bougent, seuls les ancrages le disent. Le
temoin imprime donc, ligne par ligne, ou elle est posee, sa largeur et
sa hauteur, la taille du chevron, et les ancrages du nom -- avec leur
NOMBRE, qui trahirait un ClearAllPoints oublie.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un objet de police porte la SIENNE. GameFontNormalLeft est a gauche ;
GameFontHighlight, NumberFontNormal et NumberFontNormalSmallGray n ont
aucun justifyH -- donc CENTRE, releve dans le FontStyles.xml du client.
Un SetJustifyH pose a la creation, ou avant SetFontObject, ne survit
donc pas.
Dans la reputation, le nom se retrouvait centre dans une boite dont la
largeur change d un gabarit a l autre : il se deplacait horizontalement
au fil du defilement, selon le role que la ligne reprenait. Meme faute
dans les competences et les monnaies, ou le compte d une monnaie a zero
passait de RIGHT a CENTER avec GameFontDisable.
Et sur les boutons d action, ou le raccourci et la quantite sont cales
a droite dans le code mais etaient centres a l ecran. C est du code
VALIDE : le geste ne change pas l intention, il la retablit.
camelot le fait exactement ainsi, et c est ce qui le trahit :
<FontString inherits="GameFontHighlight" justifyH="LEFT">
Le faux du harnais ne touchait pas a justify : il est desormais fidele,
et c est lui qui a trouve la faute des boutons d action.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ScrollBar.lua refait MinimalScrollBar -- 3.3.5 n a ni ce gabarit ni le
ScrollBox qui le pilote. La barre ne connait pas la liste : on lui donne
combien de lignes existent, combien tiennent et ou l on en est, et elle
rend le nouveau decalage. Elle s efface quand tout tient.
Ancrages de camelot : TOPLEFT sur le TOPRIGHT du ScrollBox (5, -2),
BOTTOMLEFT sur son BOTTOMRIGHT (5, 4).
LES TRANCHES SONT MESUREES, PAS DEDUITES DE LEUR NOM. Celle que la
source appelle thumb-bottom fait 8 x 36 et n est PAS un embout : son
alpha monte de 1 a 255, donc son haut est transparent, et posee au bas
du curseur elle le faisait fondre dans le noir de la glissiere. Les deux
bouts du curseur sont donc le MEME morceau, thumb-top, le second
retourne : le curseur est plein jusqu a ses extremites.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
RefreshBackgroundHighlightColor teinte le voile avec
FACTION_AT_WAR_COLOR, qui n existe pas dans le FrameXML de 3.3.5 --
verifie dans Constants.lua, GlobalStrings.lua et ReputationFrame.lua.
La teinte retombait donc sur le blanc.
Ces couleurs ne sont plus ecrites en Lua dans le client moderne : elles
sont generees depuis GlobalColor.db2. Relevee dans ce fichier :
FACTION_AT_WAR_COLOR = 0xFF690300, soit 105, 3, 0. Le decodage est
verifie sur deux temoins de la meme table, WHITE_FONT_COLOR a 0xFFFFFFFF
et RED_FONT_COLOR a 0xFFFF2020.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A la demande, l'onglet valide recoit le traitement des competences : toutes
les regions ET tous les cadres fils du ReputationFrame du client sont
masques a chaque passage, sans enumeration a tenir a jour. Sa liste a
ascenseur, ses intitules de colonne et ses traits d'arborescence partent
avec.
Deux consequences : les deux traits de liste ont migre sur NOTRE panneau,
hors d'atteinte du balayage, et le balayage de construction devient inutile
-- celui de chaque passage le fait deja, des le premier.
Le cadre de detail echappe au balayage : il a change de parent et vit dans
le volet droit.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le OnClick du client appelle SetFactionInactive(GetSelectedFaction()), qui
DEPLACE la faction dans le bloc des inactives : tout se renumerote, et
l'indice retenu designait alors une autre ligne.
Le detail suit donc le NOM -- comme la marque de la liste depuis le repli --
et retrouve l'indice a chaque passage, qu'il repose au client pour que ses
trois cases agissent sur la bonne faction. Si la faction quitte la liste, le
volet garde ce qu'il montrait plutot que de se vider.
Et sans faction choisie, le volet droit est VIDE : c'est l'etat de depart.
La source de verite est notre nom retenu, pas GetSelectedFaction, que le
client peut laisser pointer n'importe ou.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les trois cases partagent le meme fond, checkbox-minimal, mais pas la meme
coche. AtWarCheckbox porte Interface/Buttons/UI-CheckBox-SwordCheck -- deux
epees croisees, en 32 posees a (3, -5) -- tandis que MakeInactiveCheckbox et
WatchFactionCheckbox prennent checkmark-minimal, centre.
Les epees avaient ete donnees aux trois.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deux corrections d'un meme geste.
LA COULEUR. camelot declare fontName = GameFontNormal sur son
ScrollingFontTemplate, mais cet objet de police est DORE en 3.3.5 -- c'est
celui des titres. Le blanc y est GameFontHighlight, et c'est ce que montre
la reference.
LE REPLI. Un texte n'a de quoi revenir a la ligne que s'il a une BOITE.
Ancree par son seul haut et ses deux cotes, la description n'avait pas de
bas : un peu longue, elle n'avait nulle part ou aller et disparaissait. Elle
a maintenant ses quatre bords -- du bas de la jauge au haut des trois
cases -- et se replie dedans.
Le faux client retient desormais SetWordWrap et SetJustifyV, pour que le
banc puisse le verifier.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ReputationDetailFrame porte un fond de fenetre declare en <Backdrop> --
UI-DialogBox-Background et UI-DialogBox-Border, avec ses marges et sa taille
de tuile. Un fond de ce type ne figure PAS dans GetRegions : le balayage des
textures ne l'atteignait pas, et son cadre gris restait a l'ecran.
SetBackdrop(nil) l'enleve, comme pour les listes de menu. A verifier sur
tout cadre du client que l'on reprend : les deux facons de poser un fond
demandent deux gestes differents.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CharacterFrameSidePaneTemplate donne la surface -- TOPLEFT (16, -14) et
BOTTOMRIGHT (-12, 14) sur l'hote droit -- puis le titre large de 195 et
centre, le sous-titre, un UI-Character-Info-ScrollLine et la description.
ReputationDetailFrame y ajoute une StandingBar de 180 x 29 et trois cases de
26 empilees depuis le pied : la premiere a x = -4, les suivantes a (0, -2),
fond checkbox-minimal, coche UI-CheckBox-SwordCheck en 32 posee a (3, -5),
intitule large de 158 a +2, celui d'At War en rouge.
C'est le CLIENT qui remplit : ReputationFrame_Update ecrit le nom, la
description et l'etat des trois cases pour la faction que
SetSelectedFaction designe, et seulement si son cadre de detail est visible.
Cliquer une ligne le lui dit donc, puis relit ce qu'il a pose. Les trois
cases restent les siennes -- elles portent la declaration de guerre, le
rangement parmi les inactives et le suivi sur la barre du bas.
Deux ecarts assumes : GameFontNormalMed3 n'existe pas en 3.3.5, et la
description de camelot defile la ou la notre est simplement bornee.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Releve par /fui reput : le client annonce NEUF factions et repond encore a
la DIXIEME -- l'en-tete "Inactive", hors du compte. Sa propre boucle le sait
et teste factionIndex <= numFactions ; la notre lisait tant que
GetFactionInfo repondait, et posait une ligne de plus.
C'est ce qui rendait le repli incomprehensible : la liste raccourcit, mais
nous continuions a lire au-dela du compte, la ou le client rend des entrees
d'un autre bloc. Un sous-en-tete paraissait alors hors de sa categorie, et
vide.
Le faux client reproduit desormais ce piege -- il repond a l'indice qui suit
son propre compte -- sinon l'essai ne prouverait rien.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le temoin ne montrait que les lignes posees. Il liste maintenant tout ce que
le client expose -- entete, enfant, replie, avecRep, attitude et les trois
valeurs brutes -- puisque c'est lui qui decide de la hierarchie, pas nous.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Replier RACCOURCIT la liste, il ne masque pas : CollapseFactionHeader retire
les enfants de la numerotation du client, GetNumFactions diminue et tout ce
qui suit remonte d'un cran. C'est ainsi que 3.3.5 et camelot fonctionnent
tous les deux.
Ce qui n'allait pas venait d'ailleurs, et de deux endroits.
Le defilement etait borne APRES la pose : replier en bas de liste laissait
un passage entier pose depuis un decalage devenu trop grand -- des lignes
vides, ou les mauvaises factions, jusqu'au passage suivant. On borne
maintenant, et on repose si cela a bouge.
La selection se retenait par un INDICE, qui ne survit pas a un repli : les
factions se renumerotent et la marque changeait de ligne. Elle se retient
par le nom, seule cle stable, GetFactionInfo ne rendant pas de factionID en
3.3.5.
Le faux client se contentait d'un drapeau : il renumerote desormais comme le
vrai, et le banc verifie les deux sens ainsi que la marque apres un
aller-retour.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
SetElementFactory choisit selon deux drapeaux : ni en-tete ->
ReputationEntryTemplate, 30 ; en-tete et pas un enfant ->
ReputationHeaderTemplate, 28 ; en-tete ET enfant ->
ReputationSubHeaderTemplate, 22. SetElementIndentCalculator donne le
retrait : 0 pour un en-tete de premier niveau, 46 pour un enfant qui n'est
pas un en-tete, 2 pour tout le reste. SetPadding ajoute 10 de marge sur les
quatre bords et 3 entre deux lignes.
3.3.5 rend les trois drapeaux qu'il faut : isHeader en neuvieme position,
hasRep en onzieme, isChild en treizieme. Les hauteurs variant, la liste ne
se divise plus : elle s'empile jusqu'a la marge du bas.
Deux corrections venues de la meme lecture : le nom d'une entree est a 15 et
non 25 -- Initialize le decale de -10 quand l'AccountWideIcon est masquee,
ce qu'elle est toujours ici -- et un sous-en-tete ancre son nom a +4 de son
bouton, pose a x = 28, en ne montrant sa barre que s'il porte de la
reputation.
ENFIN : le client remontre ses propres lignes a chaque passage --
ReputationFrame_Update finit par factionRow:Show() sur chacune des quinze.
Les masquer a la construction ne suffisait pas, elles revenaient avec tout
leur art d'epoque. C'est pourquoi certaines reputations echappaient au
theme.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pour chaque ligne visible : ce que GetFactionInfo rend brut -- attitude,
seuil, seuil suivant, valeur -- puis ce qu'on en fait : barre visible,
largeur du remplissage, teinte appliquee. C'est la seule facon de departager
une donnee fausse d'un affichage faux.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camelot le decoupe par common-stat-bar-Mask, une MaskTexture ancree LEFT et
RIGHT sur la barre -- donc tendue sur toute sa largeur -- a sa hauteur
d'atlas, 29. Sans elle, le remplissage avait des bouts carres qui ne
suivaient pas le contour du fond.
tools/cuire_masque.py multiplie donc l'alpha du masque dans le sien, une
fois pour toutes. Et il le DECOUPE comme notre fond : celui de camelot
s'etire avec la barre, le notre garde ses bouts a 10 px et n'etire que le
milieu -- un masque tendu ne coinciderait plus avec lui.
Le resultat est un fichier a lui seul, calcule pour une barre de 160, qu'on
rogne a la fraction voulue comme le fait SetFillPercent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
common-stat-bar-bg mesure 68 x 30 et la barre en fait 160 : etire, ses bouts
arrondis s'allongeaient. La mesure se prend sur l'art -- la premiere colonne
dont le profil vertical rejoint celui du milieu, c'est-a-dire ou le bord est
fini : elle tombe a 10. La hauteur ne changeant pas, seules les tranches
horizontales du milieu s'etirent.
Le remplissage, lui, reste une seule texture : c'est une jauge, que
SetFillPercent rogne a la fraction voulue, et la decouper en ferait un
cadre. La compression horizontale de sa feuille -- 240 pour une barre de
160 -- est celle de la source.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ReputationHeaderTemplate la pose sans ancrage, donc etiree sur toute la
ligne : a 64 x 29 pour une ligne de plus de trois cents, ses coins arrondis
s'etalaient en ellipses.
Mesure prise sur l'art -- l'alpha de la colonne de gauche -- l'arrondi court
sur une dizaine de pixels. Un coin de 12 le couvre et reste sous la moitie
de la hauteur, au-dela de quoi les tranches se chevaucheraient. La plaque
passe donc par CreateNineSlice, et le banc compte ses neuf tranches.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Trois tentatives pour reposer et rhabiller les quinze ReputationBar<i> de
3.3.5, trois echecs de la meme nature : ReputationFrame_Update ne remplit
pas, il REPOSE son art a chaque passage -- SetNormalTexture sur les boutons,
les AtWarHighlight additifs, les traits d'arborescence, la texture de la
StatusBar -- et le clic en declenche un. Chaque correction tenait jusqu'au
passage suivant.
Les lignes sont donc les NOTRES, baties d'apres les gabarits lus en entier
et remplies depuis GetFactionInfo, la seule chose que 3.3.5 apporte ici :
en-tete 28 plaque common-button-list-collapseExpand etiree, nom en or a
LEFT x = 10, fleche plus/moins a RIGHT (-8, -1)
entree 30 barre 160 x 29 a RIGHT x = -3 -- fond common-stat-bar-bg,
remplissage common-stat-bar-white haut de 15 teinte par
FACTION_BAR_COLORS, texte centre -- et nom en blanc de x = 25,
le bord droit de l'AccountWideIcon, au LEFT de la barre moins 10
survol trois tranches, cotes de 6, aux alphas de
RefreshBackgroundHighlightOpacity : 0 / 0,10 / 0,20, et
0,50 / 0,65 / 0,85 en guerre
A l'attitude maximale la barre est pleine et sans texte de progression,
comme InitializeBarForStandardReputation le veut ; au survol elle montre la
progression au lieu de l'attitude.
Lecon : quand un ecran du client se repose lui-meme, on ne le rhabille pas,
on le remplace.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Trois erreurs, une seule cause : lire un bout du XML de camelot et le plaquer
sur les cadres de 3.3.5, au lieu de lire le gabarit en entier avant d'ecrire.
ReputationEntryTemplate donne tout : barre ancree RIGHT x = -3, nom en
GameFontHighlight de hauteur 15 allant de x = 25 -- le RIGHT de
l'AccountWideIcon, large de 23 et posee a LEFT x = 2 -- jusqu'au LEFT de la
barre moins 10, et intitule d'attitude centre sur la barre par un LEFT plus
un RIGHT. Tout cela est desormais pose tel quel.
Et l'art du client revient a CHAQUE mise a jour : ReputationFrame_Update
rappelle SetNormalTexture sur les boutons et remontre la texture de la
StatusBar, les deux AtWarHighlight additifs et les traits d'arborescence.
L'etouffer une fois a la construction ne suffisait pas -- l'image reprenait
sa taille declaree, 16 x 16 ancree a LEFT +3 pour une ligne de 20, et se
superposait a la notre. C'est ce qui deformait les plus et les moins et
faisait sortir les barres de leur cadre. On repasse apres lui a chaque fois.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le troisieme argument de SetAtlas veut dire "ne touche pas a la taille" : il
ne vaut que si on la pose soi-meme juste apres -- un SetAllPoints, un
SetWidth, un second ancrage. Pose sur une texture sans dimension ni second
point, il la laisse s'etaler sur tout son parent.
Les deux traits de liste de la reputation etaient dans ce cas : une immense
bande doree par-dessus l'ecran. La fleche plus/moins aussi, en plus discret.
Les deux reprennent leur taille d'atlas -- 384 x 8 et 13 de large -- et le
banc les verifie.
Les appels du reste de l'addon sont tous suivis d'un dimensionnement :
c'etait bien l'usage, mal repris.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
common-button-list-collapseExpand n'est PAS une fleche : c'est le fond d'une
ligne d'en-tete, une plaque arrondie de 64 x 28 que ReputationHeaderTemplate
pose sans ancrage, donc etiree sur toute la ligne. Posee a sa taille d'atlas
sur un bouton de 20, elle se repetait sur chaque ligne et recouvrait les
noms.
La vraie fleche est le StateIcon du meme gabarit, que ReputationHeaderMixin
remplit avec common-button-list-plus ou -minus, ancre RIGHT en (-8, -1) --
a droite de la ligne, et pas a gauche.
Un en-tete porte donc sa plaque, son nom a LEFT x = 10 et sa fleche, mais
aucune barre : celle-ci appartient aux entrees. GetFactionInfo rend isHeader
en neuvieme position, et c'est lui qui decide.
Lecon notee : un nom d'atlas ne dit pas ce que l'art contient. Le recadrage
d'un sprite depuis sa feuille prend dix lignes et evite cette erreur.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ReputationFrame.xml donne la liste -- TOPLEFT (10, -40) et BOTTOMRIGHT
(-25, 15) sur le volet gauche, deux traits UI-Character-Info-ScrollLine-Long
centres sur son haut et son bas -- et les gabarits : entree de 30, barre de
160 x 29 heritee de ColoredProgressBarTemplate, fond common-stat-bar-bg,
remplissage common-stat-bar-white teinte et haut de 15.
3.3.5 a les memes pieces sous d'autres noms : quinze ReputationBar<i>
ancrees une fois dans le XML, que ReputationFrame_Update ne fait que
remplir. On les repose une fois pour toutes et on se greffe apres lui pour
teindre, FACTION_BAR_COLORS donnant la couleur de chaque attitude.
Trois ecarts assumes, ecrits dans le fichier : pas de MaskTexture, donc les
bouts du remplissage restent carres ; un seul pas de ligne, la pagination du
client en exigeant un ; le nombre de lignes recalcule pour le volet, la
constante du client etant calee sur l'ancienne fenetre.
Un contenu peut se batir avant que la fenetre soit posee : la hauteur du
volet est prise par construction, la mesure ne servant que credible.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>