Les outils restent en local (ignores par mod-forever-ui/.gitignore) ; seul tools/patcher
est publie, son executable desormais a cote de ForeverUIPatcher.cs.
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>
Onglet Statistics (StatisticsTab.lua, nouveau)
- Le StatisticsFrame de camelot sur les statistiques de hauts faits du
client (GetStatisticsCategoryList, GetCategoryInfo, GetStatistic) :
categories repliables, sous-categories au bouton campaign_headericon,
survol, barre de camelot masquee si inutile, mise a jour sur
CRITERIA_UPDATE ; l'etat replie survit aux mises a jour.
- Valeurs telles que le client les rend (noms des statistiques
« ... most », montants d'or avec leurs pieces), « -- » sans valeur ;
colonne de la valeur elargie a ce qu'elle porte.
Statistiques de camelot ajoutees aux hauts faits (data/dbc/statistiques.json)
- 14 boss de donjons classiques et 4 statistiques de raids a 20 / 40
joueurs (entrees ; morts, en somme des morts sur les cartes de cette
taille), suivies par le coeur.
- deployer.py, etape dbc (--dbc, --retirer-dbc, --serveur) : lignes
ajoutees au DBC du client dans patch-Z, DBC du serveur recopie du client,
lignes d'achievement_criteria_data (une creature tuee n'est comptee que
si son critere y a une ligne) ; --verifier les controle.
- tools/foreverui/dbc.py : ajout et retrait de ses seules lignes DBC.
Micro-menu et exports pour les autres addons (session Progression)
- BottomBar.lua : ForeverUI.AjouterMicroBouton(def) et
ForeverUI.MajMicro(nom, ouvert) ; ForeverUI ne connait plus aucun
addon qui y ajoute un bouton.
- ForeverUI.PvPJauge (jauge circulaire, textures au choix),
ForeverUI.StatusBarsPoser, exports de TradeSkill.lua.
- Art : legacy-up-c60 (et son masque), honorfill(half)blue,
inv_misc_book_09 ; cuire_masque.py, cuire_portrait.py,
decouper_elements.py.
Banc : essais de l'onglet Statistics et d'un micro-bouton d'un autre addon.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Coiffeur (BarberShop.lua, nouveau)
- Plein ecran a la disposition de camelot : interface cachee, vignettes,
panneau heavybronze, lignes a fleches, Annuler / Reinitialiser /
Accepter, prix, Echap, ligne d'erreurs, retour de l'ecran 3.3.5 en
combat ; l'apparence appliquee ferme le coiffeur.
- Client patche : la case s'ouvre sur la liste de la creation (apercu au
survol, Echap et clic a cote pour revenir, molette), echantillons de
couleur (cheveux, peau), noms des choix rendus par le client dans sa
langue ; choix valides calcules sur les donnees du client
(BarberShopData.lua, BarberShopColors.lua, ecrits par
choix_personnalisation.py et couleurs_personnalisation.py).
Creation de personnage
- Nom de la coiffure et de la pilosite dans la case et dans la liste
(numero + nom), client patche.
Patcheur (ForeverUIPatcher)
- GetBarberShopStyleInfo rend l'indice du choix en cours (et le visage
pour la peau) ; avec un numero, le seul nom de ce choix.
- CycleCharCustomization(reglage, 0, n) rend aussi le nom du choix n.
- Le code des noms va dans une section .fui ajoutee a Wow.exe, retiree a
l'octet pres a la restauration ; les clients deja patches sont mis a
jour piece par piece.
Gabarits : heavybronze-frame-basic, survol et echantillons de la liste.
Banc : faux coiffeur (client d'origine et patche) et ses essais.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Etape 3
- Maitre (Trainer.lua, nouveau) : liste de camelot (categories
professions-recipe-header, lignes TrainerTextures), filtre, rang de
metier lu dans les competences.
- Maitre de vol (Taxi.lua, nouveau) : TaxiFrame de camelot 590 x 608,
cadre bronze, images de vol 1463 / 1464 (positions reportees du carre
3.3.5), boutons et traits de camelot ; zones BC, Outreterre et Norfendre
sur l'image de 3.3.5.
- Etable (Stable.lua, nouveau) : scene de camelot, fond selon la
specialisation, rangee de 5 centree.
- Sertissage (Socketing.lua, nouveau) : decor et chasses de camelot.
- Boites de dialogue (Dialogues.lua, nouveau) : StaticPopup1-4 aux
contours de camelot (fond sombre, bordure en losanges, croix).
- Gabarits : Gb.CadreSimple (repris de la banque de guilde), Gb.MenuFiltre.
Etape 4 (metiers, disposition de camelot)
- Fabrication (TradeSkill.lua, nouveau) : 673 x 594, liste en arbre,
filtre, recherche, rang, fiche (carte du metier, resultat, reactifs),
boutons ; noms mesures sur un texte a part (une ligne reutilisee coupait
le nom suivant) ; eclat du rang rogne a la largeur du masque.
- Micro-bouton Professions (BottomBar.lua) apres la feuille de personnage.
- Livre des metiers (ProfessionsBook.lua, nouveau) : cartes de camelot,
rangs, sorts securises, oubli ; plus de deux metiers principaux (zone a
defilement, colonnes reduites) ; portrait cuit rond ; onglets lateraux
(ensemble + metiers a fabrication, retrecis s'ils sont trop nombreux) ;
fenetre deplacable (place commune livre / fabrication).
- DropDown : liste du filtre des metiers elargie a ses entrees.
- Art : feuilles et elements des metiers, icones d'onglets cuites
(cuire_masque.py), portrait rond (cuire_portrait.py, nouveau).
- Banc : essais des etapes 3 et 4 ; micro-menu a neuf boutons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- GuildBank.lua : le noir de l'interieur du coffre passe au-dessus du
marbre en Journal, Journal de l'argent et Informations. Camelot range
marbre et noir dans le meme calque, le noir un sous-calque plus haut ;
3.3.5 n'a pas de sous-calque et le marbre passait devant en jeu. Marbre en
BACKGROUND, noir en BORDER, cadres du coffre en ARTWORK
- BottomBar.lua : apres un changement d'embleme, GetGuildTabardFileNames
ne rend rien le temps que les donnees de la guilde arrivent, et aucun
evenement ne suit : le bouton Social retombait sur son jeu de base. Dans
une guilde, un tabard illisible garde le visuel, et le tabard est relu
toutes les 0,5 s pendant 10 s apres chaque evenement ; la derniere
lecture tranche (guilde sans tabard : jeu de base), quitter la guilde le
remet tout de suite
- banc : calques du coffre ; changement d'embleme simule (tabard absent un
moment, puis nouveau ; guilde sans tabard ; guilde quittee)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- PvPTab.lua (bloc du canal PVPTITLES) : au survol d'une creature,
l'entree lue dans son GUID est demandee au serveur (« CIV:<entree> »),
une fois par entree et par session, seulement si le serveur a dit ses
seuils ; la reponse « CIV:<entree>:1 » ajoute la ligne Civil a la fin de
l'infobulle, aussi a celle deja ouverte si elle montre encore cette
creature ; joueurs et familiers ignores, seul le joueur lui-meme ecoute
- le drapeau (CREATURE_FLAG_EXTRA_CIVILIAN) vient de mod-pvp-titles-ext :
la requete de creature de 3.3.5 ne le porte pas
- textes : PVPTAB_TOOLTIP_CIVILIAN (Civilian / Civil)
- banc : faux UnitGUID et GetUnit, faux serveur qui repond a CIV, essais
(sans module, premiere demande, reponse gardee, non civil, joueur et
familier, auteur etranger, reponse tardive)
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>
- infobulles (Tooltips.lua) : decoupe en neuf TooltipDefaultLayout a la
place du Backdrop de 3.3.5, couleurs du client suivies, infobulles des
addons reprises, bandeau de comparaison (tooltip-compare-label), croix
rouge d'ItemRefTooltip
- gabarits communs (Gabarits.lua) : portage en jeu des gabarits valides de
l'accueil -- cadre de dialogue, en-tete, fenetre translucide, encart,
croix, boutons rouge / de panneau / argente, barre MinimalScrollBar
posee sur celle du client, cadre interieur, recopie de texte
- menu Echap (GameMenu.lua) : DialogBorder, en-tete, boutons rouges en
colonne (ecarts de 20)
- Video, Son et voix, Interface (Settings.lua) : fenetre de camelot, croix
= HideUIPanel, listes de categories, cases, curseurs, cadres de groupe,
menus deroulants style 2 (DropDown.lua), onglets MinimalTab ; cadre
interieur Options_InnerFrame pour les trois fenetres ; Interface a la
disposition de camelot (listes a -76, fenetre +36)
- raccourcis (Bindings.lua) : fenetre calee sur l'art visible de 3.3.5,
boutons argentes et lisere du choisi, textes recopies au-dessus
- macros (Macros.lua) : disposition de camelot (338 x 424, portrait,
onglets du haut, grille 6 x), choix d'icone 525 x 495 en rangees de dix
- configuration du chat (ChatConfig.lua) : DialogBorder, boites en
decoupe d'infobulle aux couleurs du client, lignes creees ensuite
reprises, liste des filtres sans lisere
- selecteur de couleur (ColorPicker.lua) : 388 / 331 x 210, places de
camelot, curseur d'opacite du client en colonne alpha (damier, degrade,
fleches) ; OpacityFrame en DialogBorder
- art : tooltiplabel, commonbuttonsdropdown, ui-silver-button-select,
colorpicker (6 entrees d'atlas ajoutees, aucune modifiee)
- banc : vrais types de cadre, OnEnable / OnDisable, OnValueChanged,
couleurs de Backdrop, degrades ; faux et essais des fenetres reprises
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- 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>
- la saisie de copie ne prend le clavier que pendant que Ctrl est enfonce
(Ctrl+C copie) ; au relachement de Ctrl, la selection s'efface
- effacent aussi : un clic, se deplacer, tourner, sauter (hors taxi), lancer
un sort, une autre saisie qui prend le clavier, une fenetre qui s'ouvre
(ShowUIPanel), Echap (ToggleGameMenu), le chat qui defile, un message
selectionne qui change, le chat cache
- banc : personnage (vitesse, orientation, chute, taxi), focus du clavier,
menu du jeu ; chaque geste essaye
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>
- cinematiques (ForeverUIGlueCinematics.lua) : le CinematicsMenu de
camelot sur les films du client -- fenetre 819 x 559, vignettes
StreamCinematic-*-Large, bouton de lecture, surbrillance, case des
sous-titres ; sous-titres des films en bas de l'ecran (SubtitlesFrame)
- credits (ForeverUIGlueCredits.lua) : fond et illustration de
l'extension (tuiles, ForeverUIGlueIllustrations.lua), degrades, logo,
colonne de texte pleine hauteur, boutons de vitesse, Back / Expansion,
liste des extensions ; textes, musique et bascule restent ceux du client
- connexion : un seul fondu d'apparition (celui du client est retire)
- decouper_elements.py : CreditsScreen-Selected / -Highlight ; table
d'atlas des ecrans d'accueil completee
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- liste des royaumes : fenetre de camelot (ButtonFrameTemplate sans
portrait, fond noir translucide demande), encart, croix, Annuler / OK
dans la barre du bas, barre de defilement dans l'encart ; fonctions
communes G.Fenetre, G.Encart, G.CroixFenetre
- liste des AddOns (ForeverUIGlueAddonList.lua) : la liste de camelot sur
les donnees de 3.3.5 -- menu des personnages, case des AddOns perimes,
recherche, lignes, infobulle, boutons ; note d'adresse de 3.3.5 gardee ;
dialogue des AddOns perimes rhabille
- menus deroulants des ecrans d'accueil (ForeverUIGlueMenuDeroulant.lua) :
WowStyle1 / WowStyle2 et leurs listes, a l'echelle de GlueParent ;
noms Windows-1252 (sorties audio) convertis en UTF-8 a l'affichage
- options (ForeverUIGlueOptions.lua) : menu Options, fenetres Video et Son
en 3.3.5 rhabillee -- categories, cases, curseurs (feuille affinee),
boites, infobulle, boutons
- echelle et zone utile recalculees quand la resolution change
- connexion : Echap quitte le jeu comme en 3.3.5
- selection : icone des boutons de rotation au-dessus de leur fond
- atlas_accueil.py : feuilles de densite 2 ou 4 acceptees, feuille -hd du
curseur des options
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ForeverUIGlueRealmList.lua : la liste du client garde ses places, ses
tailles et sa logique ; en-tete DialogHeader, onglets uiframe-tab /
uiframe-activetab, croix 128-RedButton-Exit, Annuler / OK 128-RedButton,
barre de defilement minimale, polices de camelot (GlueFont*, Realm*)
- l'art herite que la liste moderne garde (HelpFrame, WhoFrame-ColumnTabs,
UI-SortArrow, UI-QuestLogTitleHighlight) reste : identique chez camelot
- croix de fermeture decoupee de 128redbuttonc60 (et sa lueur de
128redbutton) ; table d'atlas des ecrans d'accueil completee
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GlueXML ForeverUI (data/glue) : cadre 2:1, polices, atlas, gabarits ;
connexion, menu, selection des personnages, dialogues, creation en deux
etapes (races et classes ; personnalisation numerotee, listes ouvrantes,
echantillons de couleur, apercu differe, nom en bas de l'ecran)
- choix valides calcules sur CharSections aux regles du moteur
(tools/choix_personnalisation.py) ; couleurs des echantillons lues dans
les textures du client (tools/couleurs_personnalisation.py), peau teintee
par la lumiere du decor
- decors de la creation et de la selection reduits a 0,912 pour compenser
le cadre 2:1 (tools/decors_accueil.py) ; deployer.py suit aussi
Interface\Glues\Models
- patcheur optionnel de Wow.exe (tools/patcheur, source et executable) :
CycleCharCustomization rend l'indice du reglage
- art des ecrans d'accueil (data/art), outils de decoupe, d'atlas et de
donnees
- barre du bas : boutons JcJ et Aide retires, bandeau a la largeur de ses
boutons
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>
- Talents : trois arbres cote a cote facon camelot sur PlayerTalentFrame,
noeuds carres/ronds (TalentsData.lua genere des DBC), fleches, portes,
changements en attente (Apply / Undo), onglets lateraux des specialisations,
Activate, talents du familier en fenetre reduite, recherche (marques sur les
noeuds, apercu, options, absents des barres), confirmation a la fermeture,
glisser un sort de talent appris vers une barre
- Glyphes : page refaite sur l'art fourni (tools/cuire_glyphes.py), lueurs,
etincelles, cercles concentriques tournants ; le GlyphFrame de WotLK reste
sous PlayerTalentFrame (le reparenter plantait le client a la deconnexion)
- Cadre du familier facon camelot (PetFrame.lua)
- Superposition.lua : feuille, grimoire et talents passent entierement l'un
devant l'autre, grimoire et talents deplacables
- Grimoire : la recherche "Missing from action bar" suit les barres
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Recherche du grimoire (SpellBookSearch.lua) : champ, apercu de 5
resultats, resultats en sections (exact, apparente, nom, description),
"Missing from action bar" ; suit Hide Passives et Show all spell ranks,
ne groupe jamais ; resultats feuilletables en combat.
- README : minimap, carte et journal, suivi de quetes, grimoire.
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>
- Mode agrandi (etape 4) : le plein ecran de WotLK habille a la camelot,
carte seule. Cadre aux dimensions de UpdateMaximizedSize, pose en haut au
centre dans l'unite de l'interface ; bordure sans portrait ; titre
WORLD_MAP ; fil d'Ariane, filtres, etages, coordonnees, boutons rouges.
La carte remplit le canevas par les constantes QUESTLIST / FULLMAP que
WotLK lit pour la fleche et les reperes ; bordure, menus et liste des
quetes du plein ecran de WotLK etouffes.
- Petite fenetre et mode agrandi partagent le meme ancrage.
- Selecteur d'etages : fond decoupe en trois (16 / 19), variante c60 ; nom
elide ; la liste ne descend pas sous la largeur du selecteur.
- Banc d'essai : plein ecran de WotLK et ses deux vues, essais du mode
agrandi et du selecteur.
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>
Un objet de police porte la SIENNE. GameFontNormalLeft est a gauche ;
GameFontHighlight, NumberFontNormal et NumberFontNormalSmallGray n ont
aucun justifyH -- donc CENTRE, releve dans le FontStyles.xml du client.
Un SetJustifyH pose a la creation, ou avant SetFontObject, ne survit
donc pas.
Dans la reputation, le nom se retrouvait centre dans une boite dont la
largeur change d un gabarit a l autre : il se deplacait horizontalement
au fil du defilement, selon le role que la ligne reprenait. Meme faute
dans les competences et les monnaies, ou le compte d une monnaie a zero
passait de RIGHT a CENTER avec GameFontDisable.
Et sur les boutons d action, ou le raccourci et la quantite sont cales
a droite dans le code mais etaient centres a l ecran. C est du code
VALIDE : le geste ne change pas l intention, il la retablit.
camelot le fait exactement ainsi, et c est ce qui le trahit :
<FontString inherits="GameFontHighlight" justifyH="LEFT">
Le faux du harnais ne touchait pas a justify : il est desormais fidele,
et c est lui qui a trouve la faute des boutons d action.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ScrollBar.lua refait MinimalScrollBar -- 3.3.5 n a ni ce gabarit ni le
ScrollBox qui le pilote. La barre ne connait pas la liste : on lui donne
combien de lignes existent, combien tiennent et ou l on en est, et elle
rend le nouveau decalage. Elle s efface quand tout tient.
Ancrages de camelot : TOPLEFT sur le TOPRIGHT du ScrollBox (5, -2),
BOTTOMLEFT sur son BOTTOMRIGHT (5, 4).
LES TRANCHES SONT MESUREES, PAS DEDUITES DE LEUR NOM. Celle que la
source appelle thumb-bottom fait 8 x 36 et n est PAS un embout : son
alpha monte de 1 a 255, donc son haut est transparent, et posee au bas
du curseur elle le faisait fondre dans le noir de la glissiere. Les deux
bouts du curseur sont donc le MEME morceau, thumb-top, le second
retourne : le curseur est plein jusqu a ses extremites.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le reste -- ecarts, pieges, outillage, ce que 3.3.5 ne sait pas faire --
passe dans docs/NOTES.md, ou rien n a ete demande et ou tout m est
seulement utile.
AMELIORATIONS ne garde donc que les deux points demandes : l icone de
l onglet du familier, et le volet droit du PvP.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le nom d un rang se lit a l indice "numero + 4". A numero = 0 cela
donnait l indice 4 -- PVP_RANK_4, "Dishonored" -- et l ecran annoncait
donc deshonore tout joueur de moins de cinquante victoires. Or les
indices 1 a 4, Pariah, Outlaw, Exiled et Dishonored, sont les rangs
NEGATIFS, ceux qu on obtient en tuant des civils.
Trois cas desormais, et non deux : un vrai rang se nomme a numero + 4,
un indice de 1 a 4 se nomme par son indice tel quel, et le reste est un
civil.
Ecart assume : "Civilian" n est pas une chaine du client. Cherchee dans
GlobalStrings -- les quarante chaines de rang vont de PVP_RANK_0 a
PVP_RANK_19 -- et dans le binaire : absente des deux. Elle est donc
ecrite en clair, et ne se traduira pas.
AMELIORATIONS gagne une section 5 : l icone qui manque a l onglet du
familier, et le volet droit du PvP, a reprendre sur
CharacterFrameSidePaneTemplate comme les autres.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Un faux plus aimable que le client ne prouve rien. Six l etaient, et
chacun couvrait une faute que le jeu a montree :
IsTitleKnown rendait un booleen au lieu de 0 ou 1 -- et zero est VRAI
en Lua ; idem IsEnabled, qu un bouton desactive rend a 0.
FACTION_AT_WAR_COLOR etait inventee, alors qu elle n existe pas.
GetRegions oubliait les FontString.
UpdatePaperdollStats ne faisait rien, alors que le vrai remontre ses
lignes a chaque passage.
Les onglets CharacterFrameTab n avaient aucun OnClick : tout le chemin
de ToggleCharacter -- qui FERME la fenetre -- n etait jamais joue.
Les fleches de rotation faisaient 16 de large au lieu de 35, et leur
ecart se calcule sur leur largeur.
S y ajoutent les faux des nouveaux ecrans : titres, monnaies, familier,
monnaies suivies du sac, et le systeme de panneaux qui replace tout ce
qui est inscrit dans UIPanelWindows.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
SetSwipeTexture est absent de 3.3.5 et la texture de balayage du Cooldown
est cablee dans le moteur : la remplacer changerait tous les temps de
recharge du jeu. Le cadran est donc coupe en quatre quarts ; un quart
depasse montre le quart de l anneau, le quart ou la jauge s arrete montre
un DEMI anneau tourne par SetTexCoord a huit arguments.
La cuisson recale le centre du cercle sur le centre du canevas -- une
texture qu on fait tourner decrirait sinon une boucle -- et interpole la
couleur ponderee par l alpha, sans quoi le blanc des texels vides bordait
l anneau d un lisere clair.
Verifie par la geometrie et non par l oeil : le harnais relit les
coordonnees posees et interroge l image sur 72 angles, pour sept
fractions.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
/fui micro a montre deux boutons, et eux seuls, ancres ailleurs que sur
notre bandeau : CharacterMicroButton a BOTTOMLEFT (552, 2) et
SocialsMicroButton sur le BOTTOMRIGHT de QuestLogMicroButton. C'est
exactement ce que fait VehicleMenuBar_MoveMicroButtons, appelee par
MainMenuBar_ToPlayerArt ET MainMenuBar_ToVehicleArt -- donc a chaque entree
ou sortie de vehicule. On repose apres elle, et a chaque passage general.
MainMenuBar avalait les clics a son tour : declaree enableMouse="true" et
couvrant tout le bas de l'ecran, son art remplace par le notre mais sa
souris intacte. Meme remede que pour BonusActionBarFrame.
La lecon se generalise : tout contenant du client qu'on vide garde sa
souris, et il faut la lui retirer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
/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>
/fui pvp a tranche : UnitPVPRank rend 0 sur ce serveur et GetPVPRankInfo ne
repond rien. Le "1" du haut n'etait pas un rang mais la SAISON d'arene,
ecrite sans intitule juste au-dessus. Trois corrections.
LE DECALAGE, enfin etabli. UnitPVPRank rend un INDICE, et je n'avais aucun
usage de reference pour en deduire le numero -- WotLK ne s'en sert plus.
L'ordre des quarante chaines le tranche : PVP_RANK_1..4 sont les rangs
NEGATIFS (Pariah, Outlaw, Exiled, Dishonored), PVP_RANK_5 est Scout /
Private donc le rang 1, PVP_RANK_10 est Stone Guard / Knight donc le rang 6.
L'indice est la cle telle quelle, et le numero vaut l'indice moins quatre.
Le nom se lit donc dans ces chaines, comme GetPVPRankText le fait chez
camelot.
LA SAISON porte son intitule : ARENA, ce que le client a de plus proche
d'EXPANSION_SEASON_NAME, absent.
SANS RANG, PAS D'ANNEAU : un cercle dore vide se lit comme un defaut. Le
cadran garde sa lueur, son fond de faction et l'embleme.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A LA DEMANDE, et non d'apres la source : camelot ecrit les deux en haut --
PVP_RANK_NUMBER_AND_TITLE donne "Rang N : Nom" dans le CurrentRankField --
puis repete le numero dans l'anneau de recompense, par LevelLabel.
Ici le titre reste seul en haut, et le numero n'est qu'a un endroit : dans
le cercle dore.
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>
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>
Il ne s'agissait pas que de ses lignes. SkillFrame declare aussi un bouton
de tri, un "tout replier", son cadre de depliage et ses trois tuiles, deux
boutons accepter / annuler, sa liste a ascenseur, et tout un cadre de detail
-- ScrollFrame, ScrollChildFrame, StatusBar. Les enumerer serait une liste a
tenir a jour et a oublier.
On masque donc TOUT ce que ce cadre porte et qui n'est pas a nous :
GetRegions ne rend que les textures, GetChildren que les cadres fils -- il
faut les deux, et a chaque passage, SkillFrame_UpdateSkills remontrant les
siennes.
Consequence : nos deux traits de liste sont crees sur NOTRE panneau et non
sur le cadre du client, sinon le balayage les emporterait.
Le faux client ne connaissait pas les cadres fils -- il rendait GetRegions
mais pas GetChildren, et l'essai ne pouvait pas s'ecrire. Chaque cadre tient
desormais la liste des siens, que SetParent met a jour.
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>
Le OnClick du client appelle SetFactionInactive(GetSelectedFaction()), qui
DEPLACE la faction dans le bloc des inactives : tout se renumerote, et
l'indice retenu designait alors une autre ligne.
Le detail suit donc le NOM -- comme la marque de la liste depuis le repli --
et retrouve l'indice a chaque passage, qu'il repose au client pour que ses
trois cases agissent sur la bonne faction. Si la faction quitte la liste, le
volet garde ce qu'il montrait plutot que de se vider.
Et sans faction choisie, le volet droit est VIDE : c'est l'etat de depart.
La source de verite est notre nom retenu, pas GetSelectedFaction, que le
client peut laisser pointer n'importe ou.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les trois cases partagent le meme fond, checkbox-minimal, mais pas la meme
coche. AtWarCheckbox porte Interface/Buttons/UI-CheckBox-SwordCheck -- deux
epees croisees, en 32 posees a (3, -5) -- tandis que MakeInactiveCheckbox et
WatchFactionCheckbox prennent checkmark-minimal, centre.
Les epees avaient ete donnees aux trois.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>