La place par défaut de la figurine de durabilité reste à jour même une
fois déplacée, pour qu'une remise à zéro retrouve la place du client du
moment. Ses pièces d'arme, de bouclier et à distance, qui débordent de
son cadre, restent dans l'écran. Layout.Fractions sert aussi au mode
Personnaliser au lieu d'une copie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Layout.RegisterClientFrame rend déplaçable un cadre que le client
réancre lui-même : tant que le joueur ne l'a pas déplacé, sa place par
défaut reprend le dernier ancrage du client (posé sur l'écran au même
endroit) et suit le cadre de référence, la minimap ; une fois déplacé,
sa place revient après chaque réancrage du client. La figurine de
durabilité (texte DURABILITY du client) en profite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Page raid : les boutons sécurisés posés sur les lignes du menu étaient
masqués sans être détachés ; ancrés aux lignes de DropDownList1, ils les
gardaient protégées toute la session, et le menu suivant ouvert en combat
voyait ses lignes refusées (réancrage, hauteur). Détachés, comme ceux de
DropDown.lua.
Discussion : la boucle par image traitait aussi les fenêtres fermées (cadre
et onglet cachés), environ 75 appels chacune, dix fenêtres par défaut.
/fui reset en combat effaçait les positions enregistrées puis déplaçait des
cadres sécurisés (bloqué) : écran et réglages ne concordaient plus. Refusé
en combat, avec le message du client.
Éditeur : un élément caché pendant qu'on le tient (barre d'incantation en
fin de sort, cadre de cible perdue) ne reçoit pas le relâchement ; le
glisser se termine sur la disparition de son voile.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
Strate LOW : fenêtres et sacs (MEDIUM) passent devant. Boutons sans fond
de case. Barres Right / Right 2 réduites (une échelle commune, au plus 1)
pour tenir entre le griffon de droite et la minimap, à 10 de chacun,
comme UpdateRightActionBarPositions de Camelot ; une barre déplacée par
le joueur garde sa taille. Layout.SetBaseScale pour l'ajustement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bottom Left / Bottom Right côte à côte au-dessus des barres d'expérience
et de réputation (à +22 et +606 du bord gauche de la barre principale),
postures et familier remontés d'un rang quand elles s'y trouvent ;
Right / Right 2 debout contre le bord droit, RIGHT (-5, -77). Douze
boutons de 45, écart 2, dans la strate de la barre principale (le 3.3.5
les mettait en HIGH, devant fenêtres et sacs), retenues dans l'écran,
déplaçables et redimensionnables en mode d'édition ; le 3.3.5 ne les
replace plus. Rien n'est disposé en combat.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
- 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>
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>
- hauts faits (Achievements.lua) : camelot n'en a pas, la fenetre du
client se deplace par son en-tete, place gardee et reposee apres
UpdateUIPanelPositions
- tutoriel (Tutorial.lua) : fenetre, bouton d'alerte et compteur masques
- horloge (TimeManager.lua) : ButtonFrameTemplate 220 x 240, globe en
portrait, encart, menus d'alarme en style 1 (Gb.MenuStyle1), case
d'alarme
- carte de zone (ZoneMap.lua) : cadre battlefieldminimap-border, croix
rouge, alpha suivant l'opacite (image retiree : le client la repose)
- cabine d'essayage (DressUp.lua) : ButtonFrameTemplate 450 x 545, fond de
race, fleches et rotation a la souris
- inspection (Inspect.lua) : 338 x 424, deplacable, portrait 48, onglets
lateraux, page du personnage a la camelot (cadre Char-Paperdoll), page
JcJ en cartes avec en tete le nom du rang et l'embleme de la faction
sous son insigne, Civilian sans rang ni donnees ; bouton Talents
- talents de l'inspecte (Talents.lua) : notre fenetre en lecture seule,
compacte (colonnes de 260, sans portes ni bande du bas), sans recherche
ni points ; elle ne suit pas l'inspection
- JcJ (PvPTab.lua) : seuils de rang lus du serveur (canal d'addon
PVPTITLES de mod-pvp-titles-ext : RANKS, REQ), sans serveur les seules
victoires ; etat Deshonore (DISHONOR) : rang et temps restant, blason
brise de la faction a la place de l'embleme
- debuff Deshonore dessine par ForeverUI en tete des affaiblissements
(Buffs.lua), aucun sort ni DBC requis
- art : blasons brises honor-dishonored-alliance / -horde (cuits par
tools/cuire_deshonneur.py), battlefieldminimap, char-paperdoll-*
- /fui croix : temoin de la croix de la feuille de personnage
- banc : inspection, talents compacts, tete JcJ, canal du serveur, blason
brise, debuff dessine, temoin de la croix
- README : lignes JcJ, fenetres secondaires, ameliorations et affaiblissements
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- onglets (Chat.lua) : l'art de ChatTabArtTemplate (cotes a -2 / +2, milieu
tendu), texte au centre (0, -5), largeur texte + 20 + marge (au moins 32)
par accroche de PanelTemplates_TabResize, pour les seuls onglets du chat
- dock : pose sur le haut du fond du chat principal (FCFDock_SetPrimary),
onglets a 1 l'un de l'autre, bouton de debordement au bas a droite
(FCFDock_UpdateTabs)
- saisie : jusqu'au bout de la barre de defilement + 8
- selection : Alt maintenu, glisser sur le chat surligne le texte comme dans
un editeur ; au relacher, il passe dans une saisie invisible en lecture
seule (Ctrl+C) ; coupures du moteur retrouvees par mesure ; liens copies
par leur texte, marques par leur etiquette
- /fui chatlignes : releve de la mise en lignes du chat (ForeverUIDB)
- banc : onglets, dock, PanelTemplates_TabResize et FCFDock de 3.3.5,
fenetres de chuchotement, touches Alt / Ctrl, coupure mot a mot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Chat : cadre, barre et bouton de retour, colonne, bouton d'amis de camelot ;
au repos fond, onglets, colonne et saisie s'effacent, allumage au survol
- Barres d'ameliorations et d'affaiblissements (Buffs.lua) : grille, bordures
par type, clignotement, repli, regroupement, enchantements d'arme
- Souillure : StaticPopupDialogs n'est plus reaffectee (BindEnchant bloque) ;
menus deroulants, suivi des objectifs, choix d'icone, ajout de canal et
carte du monde n'ecrivent plus les globales du client ; menus d'unite :
lignes protegees servies par des boutons securises hors combat, grisees en
combat ; seule MAP_QUEST_DIFFICULTY reste, par decision
- Gestionnaire d'ensembles : plus d'appel GetEquipmentSetIconInfo(nil)
- Banc : garde des globales ecrites (bytecode Lua 5.1), faux client durci
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Carte du monde : un clic sur le portail d'un donjon ou d'un raid (icones de
WDM, livre dans patch-enus-n.mpq) ouvre sa carte par SetMapByID
(WorldMapInstances.lua, genere des DBC du client par
tools/cartes_instances.py)
- "World" mene a la vue cosmique (Azeroth / Outreterre), reste actif en donjon
- premiere ouverture en plein ecran habillee camelot d'emblee
- les listes des menus de la carte s'ouvrent vers le bas, calees dans l'ecran
- Feuille de personnage : icone de l'onglet Pet selon la classe ; le
personnage et le familier tournent a la souris (reglages de camelot)
- /fui souris : le cadre sous la souris a chaque clic (diagnostic)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Livre de camelot dans SpellBookFrame : deux pages ou une, categories en
onglets-icones, grille condensee, en-tete repete, portrait cuit rond.
- Menus volants : groupes de SpellFlyout.db2, completes des sorts de BC et
WotLK, un groupe par onglet et par faction ; Seals et Judgements en plus.
- Combat : controleur securise ; onglets, pages, roulette, groupes,
agrandir/reduire et les trois reglages passent par des blocs securises,
les huit jeux de reglages publies hors combat.
- Banc : modele de securite de 3.3.5, OnShow/OnHide propages.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Carte du monde (WorldMap.lua) : fenetre reduite camelot 702 x 534 posee
sur l'ossature de WotLK, fil d'Ariane, filtres, etages, coordonnees,
deplacable par la barre du titre.
- Journal de quetes (QuestLog.lua) : volet liste de camelot a droite de la
carte (recherche, compteur, reperes, suivi, menus), L ouvre carte + volet ;
page d'une quete (texte, objectifs, recompenses, Abandon / Share / Track)
avec bouton Retour qui rend la carte d'avant.
- Suivi de quetes (ObjectiveTracker.lua) : modules camelot Quests et
Achievements a la place des gestionnaires d'affichage de WotLK, API des
gestionnaires conservee ; tri et filtres de WotLK dans le bouton filtre ;
deplacable par /fui, position par defaut de camelot.
- Menus : les menus contextuels et sous-menus prennent la largeur de leur
contenu, mesuree dans la police affichee.
- Art : feuilles questmaplogatlas, questtracker, cadres et fonds ; outils
tranches_atlas.py ; banc d'essai etendu (WatchFrame, journal, menus).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Minimap.lua : cadre c60, barre du nom de zone, suivi, courrier, zoom,
cycle jour/nuit, calendrier (GameTimeFrame), horloge dans la barre
(TimeManagerClockButton) et coordonnees sous la carte, releves dans
blizzard_minimap, blizzard_timemanager et GameTime.xml de camelot.
- Les etats de bouton absents en 3.3.5 sont crees par chemin puis atlas
(MiniMapTrackingButton n'a qu'une HighlightTexture).
- La carte garde sa taille de 3.3.5 a l'echelle 198 / 140 : le moteur pose
les fleches du bord a un rayon fixe en unites de la carte. Leurs images
sont reduites d'autant, en 64 x 64 avec mipmaps (tools/reduire_fleches.py).
La fleche de groupe, sans methode, remplace le fichier d'origine dans
patch-Z (exception accordee a la regle du prefixe).
- Constantes regroupees en tables : le Lua 5.1 du client refuse plus de
60 upvalues par fonction.
- Banc : compilation Lua 5.1 de chaque fichier, et faux client qui ne donne
a un bouton que les etats que son gabarit 3.3.5 declare.
- blp.encoder accepte des mipmaps.
Co-Authored-By: Claude Opus 5.5 <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>
mod-pvp-titles pose des CharTitles -- 1 a 14 pour l Alliance, 15 a 28
pour la Horde, verifie dans le CharTitles.dbc du serveur -- et ne touche
jamais UnitPVPRank, qui reste donc a zero pour toujours. Le rang se
demande au plus haut titre connu.
IsTitleKnown rend un NOMBRE, 0 ou 1, et zero est VRAI en Lua : le client
ecrit `if ( IsTitleKnown(i) ~= 0 )`. Ecrit autrement, la boucle partait
du rang 14 et s arretait au premier tour.
La progression se calcule sur les victoires honorables comparees aux
seuils du serveur, recopies de sa configuration : aucune fonction du
client ne les donne, c est le seul ecart qu il ne peut pas verifier.
Elle s ecrit en chiffres, "victoires / seuil", comme le fait
CurrentRankProgressField.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deux questions a la fois, pour le bouton du personnage signale decale et
sans reponse au clic.
L'ANCRAGE de chaque bouton dit s'il a bouge : nous les posons une fois, a
gauche du bandeau, d'un pas fixe. Un ancrage sur autre chose que notre
bandeau, un decalage qui n'est pas un multiple du pas, ou plus d'un point,
veulent dire que quelqu'un les a repris.
GetMouseFocus, pendant cinq secondes, dit qui recoit reellement le clic : un
bouton peut etre au bon endroit et recouvert.
Lecture du cote client : en 3.3.5, seul VehicleMenuBar_MoveMicroButtons les
deplace, et CharacterMicroButton_SetPushed ne change que le rognage et
l'alpha du portrait -- ni position, ni verrou. La cause n'est donc pas la.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PVPRankFrame.xml et pvprankframe.lua lus en entier. camelot tire tout de
C_MajorFactions -- le renom -- qui n'existe pas ici. Mais les trois
fonctions de l'epoque des rangs sont TOUJOURS dans le binaire, verifie dans
Wow.exe : UnitPVPRank, GetPVPRankInfo et GetPVPRankProgress. WotLK a
simplement cesse de s'en servir dans son FrameXML.
Heureuse coincidence : la planche c60 de camelot porte QUATORZE icones de
rang, exactement les quatorze rangs classiques. Son art est celui de
l'epoque.
Tout cet art vit sur une feuille que le listfile ne nomme pas :
ajouter_feuilles.py accepte desormais "fdid:<n>.blp => interface/...", et
retrouve ses entrees d'atlas par ce meme identifiant.
Trois ecarts assumes. La jauge circulaire n'est pas portable -- camelot la
fait avec un Cooldown dont il remplace la texture de balayage,
SetSwipeTexture, ABSENT du binaire ; l'anneau, la lueur, le fond de faction
et le badge sont poses, la progression s'ecrit en toutes lettres.
GameFontNormalMed2 n'existe pas. Le compte a rebours de saison demande un
C_SeasonInfo absent.
Le volet droit porte ce que WotLK sait vraiment donner : l'honneur.
Temoin : /fui pvp, qui dit ce que les trois fonctions rendent sur ce
serveur.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
SkillsFrame.xml et skillsframe.lua lus en entier. Tout est commun avec la
reputation -- liste (10, -40) / (-25, 15), deux traits, retraits 0 / 2 / 46,
marges 10, ecart 3, survol a 0 / 0,10 / 0,20 -- sauf quatre choses :
* l'en-tete fait 26 et non 28 ;
* le nom d'une entree est a x = 2 et non 15, faute d'AccountWideIcon ;
* la description du volet droit est a -8 sous la jauge et non -6 ;
* LA BARRE EST BLEUE PAR SON SPRITE -- SetFillTextureByColorType(Blue)
suivi d'UpdateBarColor(WHITE_FONT_COLOR), donc aucune teinte. Le
remplissage bleu est cuit au masque comme le blanc.
Le texte de la barre est TOUJOURS la progression : rang / maximum, ou
rang (+bonus) / maximum avec le bonus en vert -- TryShowBarProgressText est
appele des l'initialisation. Et a l'ouverture, la premiere competence qui
n'est pas un en-tete est choisie, comme SelectFirstSkillIfNoneSelected le
veut.
Trois ecarts assumes : 3.3.5 n'a pas de sous-en-tete -- sa hierarchie n'a
qu'un niveau -- les lignes d'armes ne sont pas detaillees, faute des chaines
WEAPON_SKILL_DETAIL_*, et la description ne defile pas.
Temoin : /fui skills.
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>
Renommer un ensemble laissait la liste vide jusqu'a l'operation suivante.
Le rattrapage d'une image manquait encore la publication du client : les
ensembles vivent cote serveur, et aucun moment n'est sur -- ni le retour de
SaveEquipmentSet, ni l'instant de EQUIPMENT_SETS_CHANGED, ni l'image d'apres.
Le panneau compare donc toutes les 0,2 s ce que le client rend au contenu
affiche, et repose les cartes des que cela differe. Liste inchangee, rien
n'est repose. Le controle ne tourne que panneau ouvert.
Le banc rejoue desormais le pire cas -- evenement avant publication,
rattrapage dans le vide, plus rien d'annonce ensuite -- et verifie qu'un
seul battement repare, sans pose inutile quand la liste ne bouge pas.
Ajoute /fui sets : temoin des trois etats qui decident de l'affichage.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Releve dans Wow.exe : ce client ne porte que SetModelScale et
SetPosition. Ni SetCameraDistance, ni SetCameraPosition, ni
SetCameraTarget, ni SetCustomCamera, ni SetPortraitZoom.
SetModelScale reduit le modele autour de son origine, camera fixe : il
parait donc aussi glisser vers le bas. SetPosition l'eloigne devant la
camera, ce qui le rapetisse sans changer son cadrage.
Aucune des deux valeurs ne se releve dans la source -- camelot cadre par
une scene que 3.3.5 n'a pas -- d'ou /fui modele pour les juger a l'oeil
sans recharger l'interface.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un bouton d'equipement qui ne repond pas est soit recouvert par un cadre
qui prend la souris, soit prive de ses scripts : rien de tout cela ne se
voit a l'ecran. Le temoin rend l'etat du bouton (strate, niveau, souris,
scripts), la liste de tout ce qui couvre son centre en prenant la souris
avec strate et niveau, puis pendant cinq secondes ce que GetMouseFocus
rend sous le curseur.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
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>
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>