Commit Graph

33 Commits

Author SHA1 Message Date
Claude 7de47a2526 ForeverUI : sacs, tri limité aux sacs ordinaires, échelle gardée, BAG_UPDATE regroupés
Le tri plaçait n'importe quel objet dans un carquois, un sac d'âmes ou un
sac de métier : le client refuse (ERR_WRONG_BAG_TYPE), l'objet restait au
curseur et le tri attendait sa case verrouillée jusqu'à 400 pas (40 s).
Seuls les sacs de type 0 sont triés, comme EquipmentManager le fait, et un
objet encore au curseur au pas suivant est reposé et le tri s'arrête.

layoutGrid remettait l'échelle de base à chaque mise à jour d'un sac,
défaisant la réduction de containerScale (banque ouverte, écran court)
sans réempiler : les sacs débordaient jusqu'au prochain ouvert ou fermé.
L'échelle n'est plus posée que par l'empilement.

BAG_UPDATE arrive en rafales (butin, vente, courrier, tri) : une seule
passe au cadre suivant au lieu d'une mise en page complète par événement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:09:40 +00:00
Adrestie 30cc097b96 ForeverUI : sacs de banque jamais ouverts en fenêtres de sac
La fenêtre de banque les affiche déjà ; OpenAllBags (Maj+B, banque
ouverte) les ouvrait en plus, chacun dans une fenêtre de sac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:28:11 +02:00
Adrestie 35fc513c41 ForeverUI : sacs réduits quand ils ne tiennent pas, positions qui suivent l'écran
Sacs : règle GetContainerScale de Camelot (de 1 à 0,75 par pas de 0,01,
jusqu'à ce que la colonne de gauche reste dans l'écran, ou à droite de la
banque ouverte), avec l'empilement de ForeverUI ; refait quand la taille
de l'écran ou l'échelle de l'interface change.
Mode d'édition : un élément déplacé est accroché au point de l'écran du
tiers où il est posé, et garde sa place par rapport à ce bord.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:17:44 +02: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 e4639c55e8 Commerce a la DA de camelot : marchand, echange, courrier, banques, hotel
- Merchant.lua : ButtonFrameTemplate 336 x 444, portrait et titre du
  marchand, encart, fond du bas et du rachat de camelot, argent dore ;
  reparations SpellIcon-256x256-Repair* reposees apres
  MerchantFrame_UpdateRepairButtons ; nom et contour de qualite ; rachat
  115 x 37 et sa fleche ; onglets de Social qui commandent ceux du client
- Trade.lua : 344 x 446, deux portraits sous leur coin de metal, six
  encarts, voile et separation de l'autre, argent dore, noms au-dessus du
  metal, qualite des objets ; pieces a la taille de leurs textures
  virtuelles
- Mail.lua : reception (parchemin, places, contours, Tout ouvrir), envoi
  (pieces jointes et barre de camelot), lettre ouverte a droite de la boite
- Bank.lua : grille de camelot (banque et sacs de banque, 8 colonnes, 88
  par page, onglets de page), sacs a 0,75 et cadenas ; un clic ou un lacher
  pose le sac tenu (PutItemInBag), sinon le prend ; ombres a leur taille ;
  recherche et tri des sacs
- GuildBank.lua : BasicFrameTemplate a la taille des textures virtuelles
  (coin UI-Frame-TopLeftCornerNoPortrait 33 x 33), coffre de marbre, places
  de camelot, journal et information avec la barre minimale, recherche,
  onglets du bas
- AuctionHouse.lua : l'hotel de WotLK (Parcourir, Offres, Encheres) habille
  camelot : fenetre sur l'art visible de 3.3.5, encadres et fonds
  auctionhouse-background-*, categories a trois niveaux (niveaux croissants
  : l'ombre de l'art ne change plus d'un bouton a l'autre), lignes (largeur
  avec barre, choix, survol, rayures, icone), fleches de tri, champs, cases
  a 17 rapprochees, menus compacts a la hauteur des champs, mise en vente
  (onglet, cadre d'objet), onglets du bas et titre
- Gabarits.lua : Gb.MenuStyle1(dd, largeur, hauteur, compact) -- hauteur a
  l'echelle, mode compact (fond rogne a sa boite, fleche sans ombre, texte
  sur la ligne de la fleche) ; la hauteur est tenue apres
  UIDropDownMenu_Initialize (le client remet le menu a 32 a chaque
  ouverture) -- l'horloge en profite ; Contour, ContourQualite, Qualite,
  BarreA
- Bags.lua : le tri des sacs accepte une liste de sacs (banque)
- art : feuilles du marchand, de la banque, de l'hotel (auctionhouse.blp,
  fonds decoupes de auctionhousebackgrounds.blp), courrier, banque de
  guilde, icones des onglets de page
- banc : faux Merchant/Trade/Mail/Bank/GuildBank/AuctionUI, essais ;
  controle de la taille de toute texture d'atlas du commerce ; ouverture
  des menus simulee
- non repris : fenetre d'icone d'un onglet de banque de guilde, facture du
  courrier, papier a lettres, cabine et barre de mise en vente de l'hotel,
  StaticPopup

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 14:07:17 +02:00
Adrestie a66aabb7f6 Points d'AMELIORATIONS.md : carte, journal, sacs, trousseau, barres
- carte (WorldMapZoom.lua) : zoom a la molette vers le curseur (x 1,25 par
  cran, de 1 a 4) et deplacement au glisser ; tuiles rognees a la vue,
  reperes hors vue eteints, surface cliquable bornee, fleche du joueur
  reposee ; retour a 1 au changement de carte, de mode, a la fermeture
- journal : le micro-bouton et L rattrapes quand 3.3.5 refuse QuestLogFrame
  (carte agrandie), marque effacee a l'image suivante au lieu de GetTime
  (qui avance pendant l'ouverture de la carte) ; case de suivi redessinee
  au clic ; en-tete de categorie en trois tranches, centre en mosaique
- sacs : ecarts comptes et marge haute (ecart assume) ; le sac ouvert est
  empile des son ouverture
- trousseau : icone en double densite (feuille uiactionbar2xc60), voile a
  la recherche, animation d'entree de camelot
- minimap : la molette fait + et - ; latence du micro-menu : ancre reposee
  apres 3.3.5, trait a 3 pixels ; reputation a la place de l'XP au niveau
  maximum ; /fui barres plus disert
- ajouter_feuilles.py : un nom logique deja servi par une autre table garde
  sa feuille
- banc : cadres de carte freres de WorldMapDetailFrame, panneau "full",
  carte lente a charger ; AMELIORATIONS.md vide, NOTES.md a jour

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 04:11:16 +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 ef7b99c75b Sacs : le segment des monnaies suivies, sous la bourse
A la demande, donc une modification accordee d un ecran valide.
UpdateCurrencyFrames de camelot : le segment prend le bas de la fenetre
et c est la BOURSE QUI MONTE, son bas sur le haut du segment.
CalculateExtraHeight ajoute alors sa hauteur, et la fenetre grandit.

L encadre est ContainerFrameCurrencyBorderTemplate, deux bouts et un
milieu tendu, la planche commoncurrencybox entrant dans patch-Z. Les
jetons s enchainent vers la gauche, jusqu a MAX_WATCHED_TOKENS.

ManageBackpackTokenFrame reparente son propre segment dans le sac ET
lui pose BACKPACK_HEIGHT + 22, ce qui defaisait la hauteur calculee : on
masque le sien et on repasse derriere elle. Cocher "Show on Backpack"
passe par SetCurrencyBackpack et par rien d autre.

Les chiffres du segment sont d un cran au-dessus de ceux de camelot, a
la demande ; celui de la bourse ne bouge pas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:11:03 +02:00
Adrestie 47c740c75e mod-forever-ui: le champ et le tri redescendent des 6 remontes
Ils sont ancres en haut : le bord superieur s'etant eloigne de 6 quand la
fenetre a grandi, ils avaient suivi. SetSearchBoxPoint passe de -37 a -43 et
le bouton de tri de -34 a -40, pour qu'ils retrouvent leur place dans la
fenetre.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:59:27 +02:00
Adrestie 89b1315495 mod-forever-ui: egaliser l'espace sous la grille avec celui des cotes
Mesure en jeu, echelle 4/3 confirmee par le pas des cases (56 px ecran pour
42 logiques) : 7,5 d'espace a gauche, 6 a droite, et 1,5 seulement sous la
derniere rangee. Le metal du bas remonte plus haut que les cotes ne
rentrent -- les coins sont a -3 en vertical contre -13 et +4 en horizontal
-- si bien que GetFirstButtonOffsetY() a 9 ne laissait presque rien.

GetFirstButtonOffsetY passe de 9 a 15 et la bourse de 8 a 14. La fenetre
grandit des memes 6, la formule de la hauteur comptant ce nombre : 269 pour
le sac a dos, 226 pour un sac porte de 16 cases. Ecart assume, note dans
AMELIORATIONS avec sa mesure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:57:52 +02:00
Adrestie 127d412a56 mod-forever-ui: l'icone du sac suit la methode du client 3.3.5
Le client ne masque jamais une icone. Pour ses boutons de minimap il pose un
anneau par-dessus -- MiniMap-TrackingBorder, decode : couronne opaque, trou
transparent, rien au-dela -- dessine l'icone assez petite pour tenir dans le
trou, et la ROGNE de sa bordure. C'est l'anneau qui fait le rond.

Les deux pieces sont reprises ici. La taille : l'anneau de camelot est
opaque de 14,3 a 20,4 du centre, donc demi-cote >= 14,3 et diagonale <=
20,4, soit 28 -- et ses coins finissent sous le metal, mieux que les boutons
de minimap dont les coins flottent dans le trou. Le rognage : une icone de
WoW fait 64 px et porte 4 px de bordure sombre, d'ou 4/64 = 0,0625. C'est
lui qui manquait, et c'est pour cela que l'icone paraissait reduite : on en
voyait le cadre autant que le dessin.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:53:04 +02:00
Adrestie 5195697e80 mod-forever-ui: le portrait passe en BORDER, entre le fond et le metal
Le calque decide, pas l'ordre de creation. Le fond du panneau est en
BACKGROUND et le metal en OVERLAY : BORDER est libre entre les deux, et une
texture posee la est toujours au-dessus du premier et sous le second, quoi
qu'il arrive. Le portrait etait dans le calque du fond, et le corps de
celui-ci -- ancre a 20 px du haut -- passait devant lui : il coupait
l'anneau en deux, c'est le rectangle noir de la capture.

L'icone reprend sa taille et sa place d'origine, 36 a (-4, 1). La reduire a
28 pour qu'elle tienne dans le trou de l'anneau n'etait pas la masquer :
c'est retire. Le masquage reste a faire et est note comme tel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:47:30 +02:00
Adrestie 14c29b6e11 mod-forever-ui: l'icone tient dans l'anneau, et le coin du bas se rogne
Trois defauts vus sur la capture, trois causes.

L'ICONE RESTAIT CARREE. A 36 ses coins tombent a 25,5 du centre, au-dela du
metal de l'anneau qui s'arrete a 20,4 : ils depassaient. L'anneau est mesure
au pixel a la taille ou il est dessine -- trou net jusqu'a 10,3, degrade
jusqu'a 14,3, metal opaque de 14,3 a 20,4. Pour qu'un carre disparaisse il
faut demi-cote >= 14,3 et diagonale <= 20,4, soit un cote entre 28,6 et
28,8. 28 est la seule taille qui tienne, et elle donne le meme rond visible
que camelot, dont le disque mesure 28 sur la capture de reference.

LE TROUSSEAU AVAIT UNE BARRE DOREE EN TRAVERS DE SON ANNEAU. C'est
NineSliceUtil.UpdateCornerCropping qui manquait : sur une fenetre plus
courte que ses deux coins empiles -- 94 de haut contre 100 + 95 -- les coins
se chevauchent et le bord gauche, tendu entre eux, se dessine en travers.
La formule de ClipNineSliceBottomCorner est recopiee et rejouee a chaque
changement de hauteur, comme UpdateFrameSize le fait.

LE TROUSSEAU N'AVAIT PAS DE NOM. GetBagName(-2) ne rend rien ; on reprend
alors le titre que le client a pose lui-meme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:39:33 +02:00
Adrestie 83828fbc9e mod-forever-ui: l'icone du sac se glisse entre le fond et le contour
Elle etait creee avant l'art du panneau, donc SOUS le fond -- qui est
opaque : elle ne se voyait meme pas par le trou de l'anneau. Elle est
maintenant creee apres, dans le meme calque que le fond, donc au-dessus de
lui, tandis que le metal en OVERLAY reste au-dessus d'elle. C'est le contour
seul qui la decoupe.

Le harnais verifie l'ordre dans ce sens : le portrait apres le fond.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:32:31 +02:00
Adrestie dd89f2d7bb mod-forever-ui: l'icone du sac garde sa taille et passe derriere la fenetre
Elle reprend les chiffres de la source -- SetPortraitTextureSizeAndOffset(36,
-4, 1) -- au lieu du carre de 20 recale sur le trou de l'anneau. Ce client ne
sachant pas masquer une texture, c'est la FENETRE qui masque : la texture est
creee AVANT l'art du panneau, dans le meme calque que son fond, donc tout ce
qui suit la recouvre -- le fond opaque, puis le metal en OVERLAY. Elle ne se
voit que par le trou de l'anneau, et n'est plus rognee du tout.

Le harnais verifie le rang de creation des regions, puisque c'est lui qui
decide de l'ordre de dessin a l'interieur d'un calque.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:22:08 +02:00
Adrestie 06ac79acf8 mod-forever-ui: HeldBagLayout au pixel pres, metal en OVERLAY
Les quatre coins prennent les decalages de la source -- TopLeft (-13, 16),
TopRight (4, 16), BottomLeft (-13, -3), BottomRight (4, -3) -- et les huit
morceaux passent en OVERLAY comme elle les declare. Les valeurs approchees
(2, 16) et (-13/2, -8), en BORDER, sont abandonnees.

En OVERLAY le metal couvre toute region du cadre lui-meme. La source s'en
accommode en rangeant ce qui doit rester visible dans des cadres fils
(TitleContainer a frameLevel 510, PortraitContainer), un cadre fils se
dessinant au-dessus des regions de son parent quel que soit leur calque. Le
titre est donc reproduit tel quel : un cadre de 20 de haut, de 35 a la
largeur moins 24, pose a -1, avec un FontString ancre TOP (0, -5), LEFT et
RIGHT. Le titre du client s'efface.

Le portrait reste sous le metal, qui lui sert de masque. Les boutons
d'objet, la bourse, le champ de recherche et le bouton de fermeture sont
deja des cadres fils : ils passent devant sans rien changer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:09:51 +02:00
Adrestie bd247b18e8 mod-forever-ui: le portrait passe sous l'anneau, les sacs s'espacent de 8
Le portrait etait carre et AU-DESSUS de son anneau. camelot le pose bien
au-dessus, mais rond : PortraitContainer.CircleMask. 3.3.5 n'a pas de
MaskTexture -- c'est donc le trou de l'anneau de camelot qui sert de masque,
et le portrait passe dessous. Le trou de
ui-frame-portraitmetal-cornertopleftsmall mesure 18 de diametre une fois
dessine ; un carre de 20 le remplit (bords a 10 > 9) et ses coins, a 14,1 du
centre, restent caches par le metal opaque jusqu'a 19,5. L'icone n'est plus
rognee : le metal la decoupe. Le portrait parait donc plus petit que chez
camelot, 18 de rond au lieu de 36 : ecart assume et note.

Empilement recopie de UpdateContainerFrameAnchors (1372-1401) :
CONTAINER_SPACING = 8 entre deux sacs, premier sac a 10 du bord droit et
CONTAINER_OFFSET_Y = 85 du bas, saut de colonne a (-11, 0). 3.3.5 empilait
avec ses propres ecarts, plus serres, d'ou le chevauchement.
GetRightActionBarWidth n'existant pas, la largeur vient de MultiBarRight et
MultiBarLeft.

Note ecrite dans AMELIORATIONS : trois des quatre coins de PANNEAU_COINS
different de HeldBagLayout. Le rendu ayant ete valide en jeu, ils ne sont
pas touches.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:00:37 +02:00
Adrestie 336f7b1560 mod-forever-ui: le nom vient du sac, le portrait se voit, l'icone passe devant
Quatre points releves en jeu, quatre reponses prises dans la source.

UpdateName : SetTitle(GetBagName(bagID)). Le nom est lu sur le sac a chaque
mise a jour, aucun mot n'est ecrit dans le code, et un sac porte affiche le
nom de l'objet qu'il est.

SetTitleOffsets(35) : le conteneur du titre va de 35 a la largeur moins 24,
texte centre dedans. Le titre n'est pas centre sur la fenetre mais entre le
portrait et le bouton de fermeture, dont la largeur entre ainsi dans le
calcul. Le bord gauche etait reste a 58, la valeur par defaut.

UpdateMiscellaneousFrames : sac a dos Inv_misc_bag_08, trousseau son icone,
sac porte l'icone de l'objet. Le portrait passe dans un cadre fils de niveau
superieur, comme PortraitContainer -- le fond du panneau est en BACKGROUND
comme le portrait du client, et deux regions d'un meme calque ne sont
ordonnees que par leur ordre de creation : le fond, cree apres, le couvrait.

SetItemButtonTexture_Base : une seule texture par case, l'icone de l'objet
ou bags-item-slot64 quand elle est vide, jamais un fond derriere. Pose sur
la NormalTexture, l'emplacement se dessine AU-DESSUS de l'icone en 3.3.5 :
les objets disparaissaient derriere leur propre emplacement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:51:20 +02:00
Adrestie 2a083615a4 mod-forever-ui: un rattrapage remet la taille du sac que le client defait
Mesure en jeu : le cadre portait 178 x 240 la ou la formule de camelot donne
178 x 263. La largeur passait, la hauteur non -- donc un SetHeight tardif,
apres toutes les accroches (240 = 4 rangees x 41 + 76, le pas de 3.3.5).

ForeverUIBagsRecheck, reveille par les accroches, relit la mesure au premier
OnUpdate et la repose si elle a bouge, puis se rendort. Il ne se reveille
jamais lui-meme : il ne peut pas tourner en boucle contre le client.

/fui sacs ajoute un temoin quand il y a desaccord : la hauteur relue dans la
foulee du SetHeight, le nombre de fois ou elle a ete defaite, et les
ancrages du cadre. Cela separe les deux causes possibles sans supposer --
relecture immediate fausse = les ancrages imposent la hauteur ; relecture
bonne puis valeur fausse = quelqu'un repasse derriere nous.

Les trois cadres de service des sacs sont nommes (/fstack les montre), et le
harnais designe l'horloge du tri par son nom au lieu de prendre le dernier
cadre cree -- ce que le nouveau cadre avait casse.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:40:45 +02:00
Adrestie 5dd3379eba mod-forever-ui: la geometrie des sacs est celle de ContainerFrameMixin
La pile inventee au commit precedent est retiree. La source de camelot
(blizzard_uipanels_game/mainline/containerframe.lua, 945-981) calcule la
hauteur au lieu d'empiler des ancrages :

  largeur = CONTAINER_WIDTH = 178, une constante
  hauteur = rangees x 37 + (rangees-1) x 5 + comble + extra
  comble  = GetFirstButtonOffsetY() 9 + 48, + 30 sur le sac a dos
  extra   = la bourse sur le sac a dos

Soit 263 pour le sac a dos et 220 pour un sac porte -- les deux chiffres de
la capture de reference ; la pile en donnait 262. Le comble est ancre en
haut, comme dans la source : SetSearchBoxPoint TOPLEFT (42,-37) et le tri
TOPRIGHT (-9,-34). La grille du sac a dos part de la bourse (0, 4), celle
d'un sac porte du cadre (-7, 9).

3.3.5 repose ses propres morceaux dans ContainerFrame_Update et dans
updateContainerFrameAnchors, bien apres ContainerFrame_GenerateFrame : la
mise en page est rejouee depuis ces deux fonctions et a chaque BAG_UPDATE,
sinon la taille d'origine revient des le premier objet ramasse.

/fui sacs affiche desormais, pour chaque sac ouvert, la hauteur calculee en
regard de celle que le cadre porte, et dit DESACCORD si quelque chose est
repasse derriere nous.

Deux appels du harnais ne s'executaient pas : "cible:Methode() if False else
..." est une annotation en Python, jamais evaluee.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:32:58 +02:00
Adrestie 74a7a0388b mod-forever-ui: la fenetre des sacs se construit de bas en haut
Une seule fonction empile les bandes depuis le bas -- bourse, grille, ligne
de recherche, titre -- chacune separee de la suivante par un ecart nomme. La
fenetre prend la hauteur de la pile et chaque morceau se pose sur le bas de
sa bande : plus aucune position absolue ne vient fausser la mise a l'echelle.

Un sac porte n'a ni bourse ni recherche : ces deux bandes disparaissent et
les ecarts qui les entouraient se rejoignent.

/fui sacs affiche desormais la pile calculee en regard de la pile mesuree,
et la liste des reglages se construit du contenu de la table -- elle ne peut
plus se demoder. Le harnais execute cette commande : c'est ainsi qu'un
COLONNES devenu inexistant, qui l'aurait fait echouer en jeu, est apparu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:21:31 +02:00
Adrestie e45bdb66ca mod-forever-ui: the bag grid is pinned to the bottom, one number lifts it
grilleBas replaces the centring: it is the distance from the bottom of the
window to the bottom of the grid, and the window follows it. At 24 the last
row sits one pixel above the coin box border -- 8 from the edge, 13 of money
frame, 2 of border overhang, 1 of air -- which is what the capture shows. A
carried bag, which has no money frame, uses margeBas.

ecartGrilleBourse goes away: grilleBas states the same distance outright.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:07:46 +02:00
Adrestie 8605adb952 mod-forever-ui: the bag grid sits in the middle of the window
The grid was pushed against the bottom: seventy-eight above it, twenty-four
below. It now gets the same air on both sides -- whichever of the two sides
needs more decides, and the window grows to it. The backpack goes from 265 to
319 for four rows.

The grid no longer hangs off the money frame either: it anchors to the bottom
of the window and the money frame keeps its own place, so the two can be
tuned apart. grilleCentree in the settings block turns it off.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:05:35 +02:00
Adrestie c0881d20a7 mod-forever-ui: every dimension of the bag window is a named setting
One block at the head of Bags.lua holds them all -- slot size, the gap
between slots, columns, the margins of the grid, the header and the search
band, the search box, the sort button, the money frame and its border, the
close button, the portrait, and an overall scale. Each line carries camelot's
own value beside it. Nothing in the layout is written twice: the window, the
grid and everything on it are computed from these numbers, so a single change
redraws the lot.

They can be tried without reinstalling anything:

    /fui sacs                    prints the settings and what the frame
                                 actually measures
    /fui sacs emplacement 44     sets one and lays the window out again

The window is now 179 by 265 instead of 178 by 263: the margins are stated
one by one rather than lumped into camelot's padding, and the money frame's
border, which stands two pixels proud, is now counted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:03:10 +02:00
Adrestie e2768182c7 mod-forever-ui: one number makes the bag window bigger
ECHELLE at the head of Bags.lua, 1 being camelot's size. Everything follows
it -- slots, icons, text, the frame, the search box -- because the frame is
scaled rather than re-measured, which is how the modern client does it with
CONTAINER_SCALE. The client sets its own scale whenever it lays the bags out
again, so that call is hooked and the scale put back.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:57:37 +02:00
Adrestie 077eba4570 mod-forever-ui: /fui sacs reports the window's real measurements
Pixel measuring on a screenshot cannot separate a 240 unit window from a 263
one once the client's own scale is in the way. The debug line now reads the
numbers out of the game itself: slot count, rows, frame size and scale, then
the header, the grid, what lies under it, and the money frame.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:53:56 +02:00
Adrestie 7a72cf649c mod-forever-ui: three differences the two captures gave up
Comparing my own bag with camelot's, side by side and pixel by pixel, named
what was wrong.

The panel let the world through. Camelot's interior is (16,14,12) and opaque:
the gaps between slots went blue on mine. The colour is now the measured one,
at full opacity.

The title and the bag icon were missing. The metal nine-slice sat in OVERLAY,
where the modern client can afford it because its portrait and title live in
child frames at high level; 3.3.5 keeps them as plain regions of the frame,
in BACKGROUND and ARTWORK, so the metal covered both. The nine-slice moves to
BORDER.

Every slot in camelot wears a frame, full or empty, dark grey: edges between
25 and 49, corners near 100, which is WhiteIconFrame at a tint of 0.39. Mine
showed it white and only on full slots. It is now on every slot at that tint,
and the quality colour takes over only from uncommon up -- the common items
of the capture keep the grey.

Both captures are kept in docs/reference/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:47:50 +02:00
Adrestie 8e6f86931c mod-forever-ui: the bag skin never ran, a button texture killed the file
Nothing about the bags had ever appeared in game, and the reason was three
lines at the end of Bags.lua: the sort button was given texture objects, the
way a modern client allows. 3.3.5 takes a file path there and nothing else,
so those lines raised, and an error at the top level of a file abandons
everything after it -- including the call that skins the frames, which came
later in the file. The window stayed the client's own, which is why every
report since has described an untouched bag.

The three now set the sheet's path and then apply the atlas to the texture
the button just made, and the mock client raises on a texture object exactly
as the game does, so this class of mistake cannot pass again.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:22:50 +02:00
Adrestie 5eb09d6f79 mod-forever-ui: the bag window measured against the real client
A screenshot of camelot's own backpack settled it. At the 4/3 scale of that
capture the grid is 217 pixels for camelot's 163 units, a slot 49 for 37, the
pitch 56 for 42, the search box 100 wide for the 96 of an edit box whose art
runs 5 past its left, and the whole window 411 for the 305 the formula gives
on five rows. The numbers in the code were right.

So the thirty pixels added by hand go away: the window is again what
CalculateHeight says it is. The capture is kept in docs/reference/ beside the
one of the bottom row, and the measurements are written where they were taken.

The close button becomes the red X of the modern panels, 24 by 24 at (1, 0)
of the top right corner, as UIPanelCloseButtonNoScripts and its default
anchors have it. One more sheet came into the workspace for it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:16:58 +02:00
Adrestie 5940b45e90 mod-forever-ui: a taller backpack, its grid untouched, one pixel off the coin box
The window gains thirty pixels, and all of them go into the header. The frame
is held by its bottom, so the grid does not move a pixel on screen: the top
rises instead. One number governs it, AIR in Bags.lua.

The bottom row sits one pixel above the coin box border, which itself stands
two pixels proud of the money frame it surrounds.

The window already followed its contents and now says so in the test: one row
of four gives 94, nine rows give 430, and the width never moves.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:02:11 +02:00
Adrestie 805d25e57b mod-forever-ui: the bag window on camelot's own measurements, and gryphons down 2
The bag window was still laid out on 3.3.5's numbers. It now follows
mainline/ContainerFrame.lua, figure for figure: width 178, five pixels between
slots in both directions, padding of 9 + 48 and thirty more for the search
row of the backpack, money frame 13 high anchored 8 from each side and 8 from
the bottom, first slot sitting on the money frame. The search box no longer
touches the grid, and the window is as tall as what it holds.

The outline was the wrong one. The reference does not frame a bag slot with
the frame of the bags bar: SetItemButtonQuality_Base lays WhiteIconFrame over
the item and tints it with its quality colour, and an empty slot has none --
its background is what shows. That is what is done now, and the money frame
gets the coin box border it was missing.

Two more sheets came into the workspace for this, one of them a plain image
rather than an atlas: tools/ajouter_feuilles.py now knows both kinds.

The end caps go down 2 pixels, as measured on screen. The bars do not move.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 21:57:47 +02:00
Adrestie 0f9db07adb mod-forever-ui: the backpack window measured, centred, and its slots outlined
Four things the game showed and the code did not.

The window is now measured from what it holds -- header, grid, money frame,
margin -- instead of from the old background pieces that the reskin removed,
so it is tall enough and the money frame sits inside it. The grid is centred
instead of being flush right: 3.3.5 anchors it at -12 from the right edge and
lets the left margin fall where it may.

Item slots get an outline. The reference only gives the background of an empty
slot, which an item hides as soon as one is there; the frame of the bags bar
is laid over each slot, the same the bag buttons of the bottom row wear.

docs/reference/ keeps the screenshot of the real client that arrived with the
report. It confirms the bottom row point by point -- keybind at the top right,
page block over the gryphon, dividers, gryphon feet on the bar, reputation
above experience, both as long as the row -- and it is written down in
AMELIORATIONS what it says about the micro menu and the bags bar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 21:35:35 +02:00
Adrestie e6dd4715b9 mod-forever-ui: the bag interface, with its search box and its sort button
The bag windows take the modern panel: the flat background and the metal
nine-slice border of HeldBagLayout, the portrait in the ring of the top left
corner, the title centred in the bar, and item slots on bags-item-slot64.
ForeverUI.SetPanelArt builds that panel and is written to serve every panel
still to come.

The search box and the sort button sit where the reference puts them, on the
backpack alone: the box 96 x 18 at (42, -37), the button 28 x 26 at (-9, -34).
Neither of the two things they call exists in 3.3.5, so both are written here:

- the search compares the typed text with the name, the type and the subtype
  of each item, and veils what does not match with the same black 80% overlay
  the reference uses;
- the sort merges partial stacks, then orders the items by the game's own
  category order (GetAuctionItemClasses), quality, name and stack size, one
  move every tenth of a second because each swap must be confirmed before the
  next.

tools/ajouter_feuilles.py brings a sheet into the workspace with its preview
and regenerates the atlas table; seven sheets came in this way. Previews are
now exported with the alpha channel, without which they cannot be judged.

docs/AMELIORATIONS.md lists what departs from the reference here, the sort
order first: it is decided inside the client and cannot be read.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 20:34:14 +02:00