20 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
Adrestie 1f1cd55486 TabMacros: tab-on-action-bar service shared with other addons
The character sheet's tab macros move to TabMacros.lua, which any addon or
AIO window can call (Register, Pickup, EnableDrag); ActionBar's
ActionButton_Update hook shows each registered tab's icon.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 05:36:03 +02:00
Adrestie fe70f4b34f Character sheet: drag a side tab onto an action bar
A dragged tab becomes an account macro (made once, found again by its
body) whose click opens the tab's screen, or closes the sheet when it
already shows it. On a bar the macro shows the tab's icon. No new macro
in combat or without a free slot.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 05:29:33 +02:00
Adrestie bc91692a37 ForeverUI : wyvernes sur la barre d'action pour la Horde
Camelot pose toujours les griffons (camelot/MainMenuBarEndCaps.xml). À la
demande de l'utilisateur, la Horde prend les wyvernes de la même feuille
(ui-hud-actionbar-wyvern-left/right, même taille 240 x 140) ; la faction
est relue à l'entrée dans le monde.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 00:18:03 +02:00
Adrestie 20e276a042 ForeverUI : flèches de page cliquables, niveau de la cible coloré
Les flèches de page gardaient les retraits de zone cliquable du client
3.3.5 (6 et 7 px pour un bouton de 32 x 32) sur un bouton de 17 x 14 :
aucune zone ne restait cliquable. Elles n'en ont plus, comme celles de
camelot.

Le niveau d'une cible attaquable prend la couleur de sa difficulté
(GetQuestDifficultyColor, comme TargetFrame_CheckLevel), doré sinon ;
« ?? » prend la couleur la plus difficile. Recalculé sur UNIT_FACTION de
la cible et du joueur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:32:49 +02:00
Adrestie 8362e5ca0b ForeverUI : barre de véhicule au rythme du client
Les barres du joueur partent dès la montée dans un véhicule à barre de
véhicule (UNIT_ENTERING_VEHICLE), comme le client commence à retirer la
sienne, et reviennent avec la barre du client (MainMenuBar_ToPlayerArt).
La barre d'action et les barres du client deviennent transparentes
(permis en combat), les autres cadres se masquent ; les pilotes
[vehicleui] sont retirés. Les barres de posture, de familier et de
totems gardent leur rangée pendant le véhicule, et la barre de droite
retrouve son seul ancrage à la fin du glissement du client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:49:51 +02:00
Adrestie 7eff45cdf7 ForeverUI : barre de véhicule
Dans un véhicule, la barre d'action, les griffons, le bandeau des
micro-boutons, le cadre des sacs et les barres d'expérience et de
réputation disparaissent (pilotes sécurisés [vehicleui], valables en
combat). Les micro-boutons passent dans la place que la barre du
véhicule leur garde, sur deux rangées, à l'échelle 0,85 de Camelot ou
moins pour tenir, quel que soit leur nombre ; ils reprennent leur place
et leur taille à la sortie. Les barres de droite gardent leur ajustement
tant que le véhicule cache le griffon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:21:52 +02:00
Claude 39fbfc8c10 ForeverUI : barres, la barre de forme reste à l'écran en combat
Les boutons bonus sont ancrés à la glissière, ce qui la rend protégée :
en combat, ses SetPoint étaient bloqués (action bloquée par image). Après
un retrait hors combat elle reposait 45 px plus bas, et un druide prenant
une forme en combat gardait sa barre à moitié sous l'écran tout le combat.
Elle ne bouge plus en combat, attend au repos, y revient avant le
verrouillage, et suit une barre réaffichée pendant son propre retrait.
Durée : BONUSACTIONBAR_SLIDETIME du client (0,15 s).

Familier et postures : le porteur, protégé par les boutons qu'on y ancre,
était masqué avant le test de combat (familier mort ou expiré en combat :
action bloquée). Le test passe d'abord ; la sortie de combat le replace.

Choix d'icône d'un ensemble : une icône portée deux fois (deux anneaux,
bijoux ou armes identiques) ne compte qu'une fois, comme
RefreshEquipmentSetIconInfo, sinon la grille gagnait des cases vides au
delà de la liste du client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:19:58 +00:00
Adrestie ab998c9995 ForeverUI : cases vides gardées en combat, griffons sous tout l'écran de jeu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:00:22 +02:00
Adrestie 729da261c9 ForeverUI : Customize UI (menu Echap, grille, poignees, aimant, collage, taille), README resserre
- CustomizeUI.lua : bouton Customize UI apres AddOns, grille reglable (pas, origine 3x3),
  voiles de selection camelot, 9 poignees sur l'element selectionne, Snap on Grid et
  Sticky UI par attraction, fenetre de taille 50-200 %, Cancel / Reset / Validate
- Layout : session de travail, echelle par element, Validate ne touche plus aux places
  des fenetres
- griffons detaches de la barre d'action
- art : editmode (camelot) et poignees housing-advancedmode-scale-handle
- banc : textes sans police refuses, fichiers charges sous leur nom, essais de l'editeur
- README reduit a l'essentiel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 14:17:58 +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 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 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 155acf9a15 Bas de l'ecran : la barre bonus n'avale plus les clics du micro-menu
/fui micro a nomme le coupable : les dix boutons sont exactement a leur
place, un seul ancrage chacun, et GetMouseFocus rend BonusActionBarFrame.

Elle est declaree 505 x 43, strate HIGH, toplevel, avec enableMouse="true".
Effacer son art la rend invisible mais PAS inoffensive : elle reste une
dalle au-dessus du bas de l'ecran et avale les clics de tout ce qu'on y a
pose -- le bouton du personnage ne repondait plus.

C'est le meme piege que CharacterModelFrame sur les emplacements
d'equipement, et le meme remede : un cadre qui ne sert que de contenant n'a
pas a recevoir de clic. Ses douze boutons gardent le leur, etant des cadres
fils.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 09:08:00 +02:00
Adrestie 3591100f9a mod-forever-ui: la barre bonus glisse aussi au retrait
Elle montait a l'apparition mais disparaissait d'un coup. Le client rend le
mouvement inverse possible : comme pour ses autres barres glissantes, il
pose mode = "hide", CONTINUE d'afficher la barre le temps du mouvement, et
ne la masque qu'a la fin. La glissiere lit donc son mode et pas seulement sa
visibilite, et redescend d'une hauteur de bouton avant l'effacement.

Quand la barre est masquee, la glissiere se remet en bas : le mouvement
suivant repart d'en bas au lieu de sauter.

Si un client ne portait pas ce champ, le retrait resterait instantane :
rien ne peut animer des boutons deja masques. C'est note.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 02:11:03 +02:00
Adrestie 011bfd0745 mod-forever-ui: la barre bonus glisse a nouveau, par une glissiere
Ancrer ses boutons au porteur lui avait fait perdre son mouvement. On ne
peut pas le rendre en deplacant les boutons image par image : ils sont
securises, le client l'interdit en combat, et c'est precisement la qu'on
change de posture.

Les boutons bonus sont donc ancres UNE FOIS a une glissiere --
ForeverUIBonusSlide, un cadre a nous pose sur le porteur -- et c'est elle
qui glisse. Les boutons suivent sans qu'on y touche, et deplacer son propre
cadre reste permis en combat. La course vaut une hauteur de bouton, la
duree BONUS_ACTIONBUTTON_SLIDE_TIME quand le client la declare, 0,2 s
sinon. Au repos la glissiere est exactement sur le porteur, donc la barre
reste a la place de la barre de sorts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 02:06:38 +02:00
Adrestie da55479c0b mod-forever-ui: la barre bonus se pose sur la barre de sorts
Celle qui remplace la barre de sorts quand le joueur change de posture --
BonusActionBarFrame -- etait montree par le client a une position a elle,
d'ou le decalage. Ses douze boutons sont maintenant poses sur LE MEME
PORTEUR que la barre de sorts, aux memes places : elle suit donc la
position du porteur, y compris celle que le joueur a choisie par /fui.

Rien n'est reparente : un bouton reste enfant de la barre du client, donc
il suit sa visibilite (posture, vehicule, possession) ; seul son ancrage
change. Deux consequences assumees : la barre bonus glissait a l'ecran en
se deplacant, ancree au porteur elle ne glisse plus, elle parait ; et son
art d'epoque est efface par le meme balayage de regions que celui de la
barre du familier.

Le harnais verifie que les deux barres se posent au meme endroit et sur le
meme porteur, et qu'un deplacement du porteur les emmene toutes les deux.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 01:48:52 +02:00
Adrestie 8f3f6b3242 mod-forever-ui: les emplacements vides de la barre restent affiches
Ce n'est pas le fond que 3.3.5 masque, c'est LE BOUTON ENTIER :
ActionButton_HideGrid le cache des que son compteur showgrid retombe a
zero, et ce compteur ne monte que le temps d'un glisser-deposer. L'art
d'emplacement vide de camelot disparaissait avec lui.

Le compteur est maintenu a 1 : le client garde alors ses boutons vides
affiches de lui-meme, et c'est lui qui appelle Show, pas nous. Un Show de
secours couvre le cas d'un bouton deja masque, jamais en combat --
afficher un cadre securise y est interdit. Ce qui est masque pendant un
combat revient a la sortie, PLAYER_REGEN_ENABLED etant deja surveille.

Defaut du harnais corrige au passage : un test posait STATE.inLockdown a
vrai sans le rendre, si bien que tout ce qui suivait tournait en combat --
et masquait donc les comportements gardes par InCombatLockdown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 01:03:22 +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 115de7ed41 Add mod-forever-ui: the modern interface rebuilt for a 3.3.5a client
The addon and the art it needs, read from a modern client and served to
3.3.5 through texture coordinates, since that client has no atlas.

What is in place: player frame with its states, death knight runes, target
frame and its classification rings, cast bar, action bar with its page block
and end caps, micro menu, bags bar, experience and reputation bars. Every
piece registers itself as a movable system.

This folder is the workspace. The addon in a client and the art in patch-Z
are copies tools/deployer.py makes, and what sits under Interface\ForeverUI
in the patch is exactly what data/art holds -- the deployer removes from the
archive anything this folder no longer carries. Each .blp comes with the .png
that shows what it holds.

docs/AMELIORATIONS.md lists what is known to be improvable: where the
reproduction departs from the reference and why, what the 2010 client cannot
do, and the debts left in the tooling.

The repository README also gains the row for mod-limit-break, which was
written earlier and had not been committed.

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