33 Commits

Author SHA1 Message Date
Adrestie ca2b78e217 Remove every debug command
/fui keeps edit mode, reset and list. The thirty diagnostic and tuning
functions behind the other subcommands (bar, bags, character, tabs, close,
model, minimap, mouse, map, questlog, chat, chatlines, tabard...) go with
them, with Panes.Report, the bags read-back and the 205 texts they alone used.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 13:39:35 +02:00
Claude afdd314370 ForeverUI : feuille de personnage, lignes des listes, statistiques, ensembles par personnage
Listes de réputation, compétences et statistiques : une ligne qui ne tenait
plus était cachée, mais la boucle continuait, et une ligne plus courte plus
loin (un en-tête après une entrée) prenait sa place, hors d'ordre. Rien
n'est plus placé après la première ligne qui ne tient pas.

Statistiques : la page possédait les douze lignes et les réaffichait toutes
après chaque mise à jour, y compris la sixième que le client cache pour la
catégorie Distance (les chasseurs par défaut), avec le contenu de la
catégorie d'avant. Elle possède désormais leur parent, CharacterAttributesFrame.

Ensembles : le panneau était créé visible, et GearManagerDialog_Update
(ensemble porté depuis une barre, /equipset) pouvait le construire avant
la première ouverture de sa page, par-dessus les statistiques. Il naît
caché, et sa page le connaît même ouverte en combat.

L'ordre d'affichage et le dernier ensemble porté étaient au compte, alors
que les ensembles sont à un personnage : ouvrir la page sur un autre
personnage élaguait l'ordre du premier. Ils sont rangés par personnage, et
le premier usage reprend les anciennes valeurs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:35:58 +00:00
Claude 66ccb1ba1f ForeverUI : feuille de personnage, ensembles, réputation, familier en combat
Ensembles d'équipement : le crochet qui abandonne une modification sur
Annuler ou Échap visait la globale GearManagerDialogPopup_OnHide, que le
XML lie directement (function=) : il ne se déclenchait jamais. La session
restée ouverte faisait de la sauvegarde suivante une modification : l'ancien
ensemble était rééquipé, enregistré sous le nom tapé, puis supprimé. Le
script du cadre est désormais greffé (comme Taxi.lua).

Réputation : la description et les trois cases venaient de la liste du
client, qui ne les remplit que pour ses 15 lignes visibles ; cachée et
jamais défilée, elle laissait à partir de la 16e faction celles de la
précédente, et un clic agissait sur la nouvelle à contresens (en guerre,
barre suivie). Elles sont lues sur la faction elle-même.

Combat : PetPaperDollFrame, et donc CharacterFrame, sont protégés par les
boutons de compagnon sécurisés. Les masquer, les déplacer ou retailler la
feuille depuis l'addon en combat était bloqué : à chaque rafraîchissement
du familier (PET_BAR_UPDATE...), à chaque ouverture de la feuille, à chaque
onglet. Ces appels attendent la fin du combat ; Panes n'appelle plus Show
ou Hide sans changement, que le client refuse aussi.

Performance : les événements d'unité de la feuille (inventaire, portrait,
modèle) ne relancent plus toute la mise en page pour les autres unités ni
feuille fermée ; l'onglet du familier ne réagit plus qu'à son familier ;
l'onglet des statistiques relit l'arbre au plus deux fois par seconde.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:29:03 +00:00
Adrestie 5842eb7a2b ForeverUI : code en anglais, commentaires resserres, code mort retire
Traduction
- Identifiants en anglais dans tout le module : addon, ecrans d'accueil,
  outils Python, banc d'essai et patcheur C#.
- Fichiers au nom francais renommes (Gabarits.lua -> Templates.lua,
  Textes_*.lua -> Texts_*.lua, deployer.py -> deploy.py,
  tools/patcheur -> tools/patcher, etc.).
- Commandes /fui et options de deploy.py en anglais (--check, --server,
  --remove-dbc).
- Cles des variables sauvegardees et de data/dbc/statistics.json
  traduites, sans reprise des anciennes cles.
- API de la micro-barre : ForeverUI.AddMicroButton(def) avec les champs
  name, atlasSet, after, tooltip, onClick, ready, et
  ForeverUI.UpdateMicro(name, isOpen).
- Commentaires reecrits en anglais, courts, sans dates ni historique ;
  les fonctions au nom peu parlant et leurs parametres sont expliques.

Code mort
- Exports, fonctions et variables jamais lus retires.
- Retires a la demande des modules : ForeverUI.PvPJauge, les exports
  FondEntete / TuilerEntete / Polices de TradeSkill, l'art legacy-up-c60,
  honorfill(half)blue et inv_misc_book_09, leurs entrees d'atlas et les
  parties d'outils correspondantes.

Verifications : liaisons des noms comparees avant et apres, banc vert,
chemins de textures inchanges, generateurs reproduisant les fichiers,
patcheur identique octet pour octet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 09:15:52 +02:00
Adrestie 2c94ea6bc9 PNJ etapes 1-2, barres selon le contenu, liste des donjons, tabard
- PNJ (NpcDialog.lua, nouveau) : dialogue et quete, livres et lettres,
  petition, registre de guilde a la DA de camelot (parchemin
  QuestBG-Parchment, portrait, croix, places de camelot, contours de
  qualite des objets).
- Barres de defilement : chacune cachee quand rien ne defile, et sans
  elle le contenu laisse a droite la marge qu'il a a gauche (courrier et
  papeterie, banque de guilde, hotel des ventes, reputation, competences,
  monnaies, contacts, guilde, macros, reglages, chercheur, dialogues des
  PNJ) ; ecrans d'accueil : selection des personnages (cartes centrees),
  royaumes, AddOns, creation.
- Chercheur de donjon : la liste des donjons reprend la liste a
  categories des raids (en-tetes de la feuille, cases de camelot),
  l'en-tete gardant sa case "tout cocher".
- Tabard : camera 1 et modele dans la moitie gauche de l'encadre, cadrage
  independant de la race (gnome).
- Cabine : portrait a 48 (1, 1.5) ; README a jour (fenetres secondaires,
  commerce).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:48:43 +02:00
Adrestie eb681aa9cd Aucun texte en dur : anglais en base, francais, langues extensibles
- 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>
2026-09-28 03:22:30 +02:00
Adrestie 769c7f0f9c Reputation : le nom d un sous-en-tete s ancre sur la ligne
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>
2026-09-23 16:48:54 +02:00
Adrestie 1e9c89bf9b Reputation : le temoin nomme la cible d une ancre, par identite
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>
2026-09-23 16:46:17 +02:00
Adrestie 383e722ecf Reputation : /fui reput <faction> ne garde que celle-la
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>
2026-09-23 16:43:56 +02:00
Adrestie 70650bc61e Reputation : le temoin dit la position RESOLUE, pas l ancre
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>
2026-09-23 16:41:28 +02:00
Adrestie 39c5492ead Reputation : /fui reput dit aussi la geometrie de chaque ligne
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>
2026-09-23 16:33:17 +02:00
Adrestie 1a71d63e40 SetFontObject efface la justification : elle se repose apres lui
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>
2026-09-23 16:27:06 +02:00
Adrestie dc4932127c Reputation et competences : la barre de defilement de camelot
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>
2026-09-23 16:21:03 +02:00
Adrestie 6b17ff610e Reputation : une faction en guerre porte du rouge, pas du blanc
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>
2026-09-23 13:10:48 +02:00
Adrestie f6f5d10903 Feuille : le balayage complet s'applique aussi a la reputation
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>
2026-09-23 01:57:35 +02:00
Adrestie bf9b3aea4a Feuille : cocher "Move to Inactive" ne deselectionne plus
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>
2026-09-23 01:45:29 +02:00
Adrestie 63a76b63e0 Feuille : seule la case de guerre porte les epees
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>
2026-09-23 01:42:05 +02:00
Adrestie 1148378293 Feuille : la description de faction est blanche et se replie
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>
2026-09-23 01:39:34 +02:00
Adrestie 4baec59d08 Feuille : le cadre gris du volet de reputation s'en va
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>
2026-09-23 01:36:09 +02:00
Adrestie 22e13463c8 Feuille : le volet droit montre le detail de la faction choisie
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>
2026-09-23 01:32:32 +02:00
Adrestie 9403d3cdc4 Feuille : la liste de reputation s'arrete au compte du client
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>
2026-09-23 01:22:16 +02:00
Adrestie 0471616561 Feuille : /fui reput expose les drapeaux bruts de chaque faction
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>
2026-09-23 01:00:19 +02:00
Adrestie 92fdb3976c Feuille : replier une section se comporte enfin correctement
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>
2026-09-23 00:30:35 +02:00
Adrestie 55e9e53699 Feuille : la hierarchie de l'onglet de reputation
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>
2026-09-23 00:27:32 +02:00
Adrestie effd31e7e8 Feuille : /fui reput, temoin de l'onglet de reputation
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>
2026-09-23 00:16:49 +02:00
Adrestie ff85b3df1b Feuille : le remplissage des jauges suit enfin le contour
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>
2026-09-23 00:13:12 +02:00
Adrestie 0307513515 Feuille : le fond des jauges de reputation se decoupe en neuf
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>
2026-09-23 00:09:22 +02:00
Adrestie 56eed4c390 Feuille : la plaque d'en-tete de reputation se decoupe en neuf
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>
2026-09-22 23:32:01 +02:00
Adrestie 8224528cb3 Feuille : les lignes de reputation sont baties d'apres camelot
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>
2026-09-22 23:29:19 +02:00
Adrestie da7ac025dd Feuille : la ligne de reputation suit enfin le gabarit en entier
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>
2026-09-22 23:18:28 +02:00
Adrestie f130d6221a Feuille : le trait de liste ne couvre plus tout le volet
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>
2026-09-22 23:13:51 +02:00
Adrestie 46d0dcd6ae Feuille : corriger l'en-tete de reputation, mal lu
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>
2026-09-22 23:09:57 +02:00
Adrestie 6517687593 Feuille : l'onglet de reputation, repris du code de camelot
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>
2026-09-22 23:06:03 +02:00