- Suivi des objectifs : titre « [niveau(+)] Titre (Type) », comme
QuestObjectiveTrackerMixin:UpdateSingle avec QuestUtilsOverrides :
préfixe de niveau toujours posé, « + » pour une élite, puis le type pour
quatre cas (Élite, Donjon, JcJ, Raid), tirés du questTag de
GetQuestLogTitle comparé aux textes du client (ELITE,
CALENDAR_TYPE_DUNGEON, CALENDAR_TYPE_PVP, RAID). Pas de couleur de
difficulté : la CVar showQuestDifficultyColor n'existe pas en 3.3.5.
- Journal : même étiquette de type pour les quatre cas (l'élite seule
avant) ; lignes de quête décalées de 4 (titleFrameLeftPadding).
- « Lien dans la discussion » retiré des menus du suivi et du journal
(camelot ne le garde qu'en mode manette) ; Maj-clic lie toujours la
quête.
SUIVI_DES_QUETES.md : décision 1 révisée.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
L'icône JcJ revient à la place de camelot 70450 (centrée en (17,6 ;
-62,8) du coin haut gauche du joueur, (-19,2 ; -62,8) du coin haut droit
de la cible), en gardant la taille pleine (24 x 27, l'icône chacun pour
soi à l'échelle 0,8), et passe par-dessus le cercle et le texte du
niveau : sur le joueur, un cadre fils un niveau au-dessus ; la cible
l'avait déjà.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Camelot 70450 pose l'icône JcJ à l'échelle 0,8 sous le cercle du niveau,
qui la masque en partie. À la demande de l'utilisateur, sur le joueur
comme sur la cible : taille pleine (24 x 27 ; l'icône chacun pour soi,
28 x 44, garde l'échelle 0,8) et posée juste au-dessus du cercle du
niveau, son bas à (17,6 ; -53) du coin haut gauche (cible : (-19,2 ; -53)
du coin haut droit).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Comme camelot (StatusTrackingBarContainerMixin:UpdateDividers, inchangé en
70450) : 20 segments, soit 19 séparateurs StatusBarDividerTemplate (3 x 10,
ui-hud-experiencebar-divider) à largeur / 20 x i, sur la barre
d'expérience et sur celle de réputation, au-dessus du remplissage ;
replacés quand la barre prend sa largeur.
Repère de repos (UI-HUD-ExperienceBar-Frame-Pip, 10 x 14) centré au bout
de la partie reposée, tant qu'il reste du repos ; sans infobulle.
NOTES.md §3 à jour.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Les trois blocs commencent 2 px sous la pierre (au lieu de 10) et
chaque bloc est resserré : ses lignes partent 3 px sous le menu
déroulant, dans l'ombre de son fond, au lieu de 11. Écart entre blocs
inchangé (12) ; les lignes gardent leurs 13 px et leurs rayures.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Un troisième sélecteur de catégorie, identique aux deux du client (même
menu déroulant, mêmes six lignes StatFrameTemplate remplies par
UpdatePaperdollStats), dans les 25 px gagnés sur la pierre. Son choix
est gardé dans ForeverUIDB.statThirdCategory ; par défaut, une catégorie
que les deux autres n'affichent pas (sorts pour les lanceurs de sorts,
distance pour le chasseur). Il suit les mises à jour du client.
L'écart entre deux groupes passe de 16 à 12 pour que les trois tiennent.
- La pierre de 60 devient un cadre de 233 x 60 portant ses deux morceaux :
le gestionnaire d'équipement et la page des titres, ancrés sous elle,
s'arrêtaient à 30 px du haut et prennent maintenant toute la hauteur
libérée.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Camelot 1.60.1.70450 :
- La ligne de niveau et de classe quitte le volet droit pour un bandeau
rocheux de 36 en haut du volet gauche (TopBackgroundStripHost :
UI-Background-Rock, liseré _UI-Frame-InnerTopTile), centrée à (0, -2),
police contourée de 14 (GameFontNormalMed2Outline), « Niveau 80 » puis
la classe dans sa couleur (PLAYER_LEVEL_NO_SPEC). Le bandeau est un
mobilier du personnage ; le modèle commence dessous, ses flèches de
rotation passent à TOP (0, -40).
- La pierre du volet droit passe de 85 à 60 (StoneBG3), tirée du haut et
du bas de StoneBG, sans art nouveau ; statistiques et titres gagnent
25 px.
Les deux sélecteurs de catégorie de statistiques deviennent le menu
déroulant de camelot (WowStyle1DropdownTemplate par Tpl.MenuStyle1 :
fond common-dropdown-textholder, flèche à états, texte à gauche) au lieu
de l'en-tête UI-Character-Info-Title ; le menu et ses catégories restent
ceux du client.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Les barres de vie et de ressource du joueur, de la cible, de la cible de
la cible et du familier étaient dans le calque BORDER, sous l'art du
cadre (ARTWORK). Les emplacements des barres de cet art sont un voile
sombre : noir à 40 % en 69893, brun à 74 % en 70450, qui recouvrait donc
les barres et les rendait très sombres. Camelot dessine ses barres
(StatusBar, cadres enfants) au-dessus de l'art : elles passent en
OVERLAY. Les cadres de groupe les avaient déjà dans un cadre enfant.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Camelot 70450 donne une variante c60 à toutes les barres et à tous les
voiles des cadres d'unité, et réimplante leur planche (uiunitframec60,
256 x 512 -> 1024 x 512). Les planches uiunitframec60, uipartyframec60 et
uiroguecombopointsc60 de la 70450 (BGRA non compressé) remplacent ou
rejoignent celles de l'atelier ; UIAtlas_04 prend leurs régions
(feuilles 12 à 14), et les noms du groupe quittent UIAtlas_06.
- Joueur : vie (87, -43), ressource (87, -61), nom centré de 116 en
(149, -37), voile de menace centré ; ordre combat, liste de haine, repos.
- Cible : barres identiques pour les créatures négligeables, vie (21, -41),
ressource (17, -60), bandeau (-82, -26), nom centré, voile (-1, 1) ;
cadre 194 x 68 (négligeable 163 x 57) par l'atlas.
- Insigne JcJ du joueur et de la cible : plus de cercle, l'icône seule à
l'échelle 0,8, environ 7 px plus bas.
- Points de combo : l'arc de camelot (cinq points autour du portrait de la
cible, rayon 39,6, de -10° par pas de 21°, depuis 2° avec l'insigne JcJ,
remplis par le haut) remplace le ComboFrame du client.
- Cible de la cible et familier : vie (45, -17,5), ressource (43, -29,5),
nom centré.
- Groupe : vie (47, -20), ressource (45, -31), nom (48, -7) de 55, rôle
(-5, -7), voile (1, -1), statut (-1, -1) ; vie vide pour un membre
déconnecté et mort.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Le grimoire prenait le sort par un PickupSpell de l'addon, que le client
refuse en combat. Chaque case porte maintenant l'emplacement et le livre
de son sort (attributs publiés par le contrôleur sécurisé), et un extrait
enroulé autour de OnDragStart les rend au client, qui prend le sort
lui-même (SecureHandlers.lua, Wrapped_Drag -> PickupAny), comme le
grimoire de WotLK. Un groupe n'a pas d'emplacement : il ne se glisse
toujours pas. L'aspect enfoncé de la case se termine au survol quitté.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Les langues du client HD, comme les autres mods : Texts_deDE, _esES et
_ruRU en jeu, ForeverUIGlueTexts_deDE, _esES et _ruRU pour les écrans de
connexion, listés après l'anglais dans le .toc et ForeverUIGlue.xml.
Mêmes 380 et 31 clés que l'anglais, mêmes %s/%d dans le même ordre ;
la terminologie suit les GlobalStrings 3.3.5 de chaque langue. Les noms
de race de la sélection de personnage sont repris tels quels de
ChrRaces.dbc de chaque langue (formes masculine et féminine).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Repris de camelot (TargetFrameMixin:ShowPvPIcon, CheckFaction) : cercle
et emblème à l'échelle 0,8, le haut du cercle à (-23, -50) du coin haut
droit en unités réduites ; emblème « chacun pour soi » en zone libre,
emblème de faction pour une cible marquée JcJ. Comme dans camelot, le
badge passe sur le cercle du niveau (cadre fils un niveau au-dessus).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le cercle et l'icône partageaient la couche BORDER : en jeu, le disque
opaque passait devant l'icône. Le cercle passe en BACKGROUND, l'icône
reste en BORDER, tous deux sous le cercle du niveau.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Camelot pose le cercle JcJ à l'échelle 0,8 en (20, -50) : des décalages
comptés dans ses unités réduites, soit (16, -40) dans celles du cadre. Il
était posé 10 px trop bas, sur le cercle du niveau. Le cercle et l'icône
passent aussi sous le cercle du niveau, comme dans camelot.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les annonces de raid et les emotes de boss du client sont en HIGH, comme
des parties de la carte, du journal et du butin : elles s'entremêlaient à
ces fenêtres selon les niveaux de cadre. Elles passent en DIALOG.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le client juge une créature attaquable du seul point de vue du joueur :
une faction cochée « en guerre » au rang Amical passe pour attaquable, et
son « ?? » sortait en rouge. Seules les créatures neutres ou hostiles
envers le joueur prennent la couleur de difficulté ; les joueurs gardent
la règle du client.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
Dans un véhicule à barre de véhicule, le client cache les barres de
droite et finit le glissement de l'icône des sièges contre la minimap :
sa place par défaut fait de même (recalculée à la montée et au retour).
Seul un ancrage du client sur la minimap est remplacé ; un déplacement
en mode Personnaliser n'est plus bloqué par un drapeau. Pour un élément
trop grand pour tous les côtés, la fenêtre de taille va du côté le plus
dégagé.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L'icône des sièges du véhicule devient un élément déplaçable ; sa place
par défaut reste celle du client (sous la minimap, à gauche des barres
de droite affichées) et suit la minimap, et le client ne la reprend plus
une fois déplacée. En mode Personnaliser, la fenêtre de taille suit
l'élément pendant son déplacement et se met sur le premier côté où elle
tient à l'écran sans le couvrir : droite, gauche, dessous, dessus.
Fondu : durée fixe de 0,3 s (MAINMENU_SLIDETIME est local au client).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
À la sortie d'un véhicule, les barres du joueur reviennent en fondu de
0 à 1 pendant MAINMENU_SLIDETIME, le temps que la barre du client met à
remonter. Une nouvelle montée coupe le fondu ; la disparition reste
instantanée.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Après un rechargement ou un écran de chargement dans un véhicule, le
client rebascule sur la barre du véhicule sans événement de montée et
cache les barres 2 et 3 avant que Vehicle.lua l'apprenne : la hauteur
sous les barres de posture, de familier et de totems se figeait à zéro.
L'état du client (MainMenuBar.state) la fige désormais aussi.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
Les animations de camelot, rejouées image par image comme dans le suivi
des quêtes (les groupes de 3.3.5 n'ont ni fromAlpha / toAlpha ni
setToFinalAlpha), avec leurs durées et leur lissage IN : ouverture (monte
de 10 et apparaît en 0,1 s), fermeture (descend de 10 et s'efface en
0,1 s), apparition des cartes (0,1 s), et glissement de 100 vers la droite
en 0,3 s avec fondu sur les 0,2 dernières à chaque ramassage, clic compris
(camelot : butin automatique seulement). À la fermeture, toute animation
en cours s'arrête et chaque carte reprend sa place : rien ne reste à
l'écran quand le dernier objet ferme le butin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GetMasterLootCandidate ne rend pas un nom absent du cache des noms (souvent
celui du maître du butin lui-même) ; le client le demande puis envoie
UPDATE_MASTER_LOOT_LIST, auquel le LootFrame de 3.3.5 ne répond que par
UIDropDownMenu_Refresh, qui ne reconstruit pas la liste : seul restait le
titre. La liste ouverte est rouverte. Les ombres de la liste passent, comme
chez camelot, dans un cadre 15 niveaux au-dessus des cartes, à l'échelle
0,2 : elles étaient dessinées sous les cartes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les portraits et les cadres de raid ne montraient que le chef. Camelot n'a
pas ces icônes : celles de 3.3.5 (UI-Group-AssistantIcon,
UI-Group-MasterLooter). Portrait du joueur et du groupe : l'assistant de
raid à la place du chef, le maître du butin placé comme 3.3.5 le fait près
de l'icône de chef (40, 2) et (32, 0). Cadres de raid : rang, rôle, maître
du butin puis le nom, comme l'onglet Raid ; sans eux, rien ne bouge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
La fenêtre de butin reprend le LootFrame de camelot : panneau plat
« Objets » de 220 de large et 290 de haut au plus, une carte par
emplacement (fond teinté par la qualité, contour, étiquette de rareté,
bouton d'objet de 37, nom), barre de défilement au-delà, place sous la
souris ou à (16, -116). Le LootFrame du client reste l'hôte, invisible :
événements, liste du butin de maître ancrée au bouton choisi, CloseLoot.
Feuille interface/lootframe/lootframe.blp ajoutée. Animations à venir.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comme sur la petite barre de camelot (SmallCastingBarFrameTemplate), le
bouclier d'une incantation non interruptible est dessiné derrière l'icône
du sort et l'entoure : 29 x 33 pour une icône de 20 x 20, depuis (-5, 4)
de son coin haut-gauche, ramené à notre icône de 16 x 16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Écrite en toutes lettres dans L["GLUECHARACTERSELECT_RACE_" .. ...], la clé
passait pour une clé sans texte anglais au contrôle des textes du banc ;
le préfixe redevient une variable, comme avant f920fde.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le bouclier d'une incantation non interruptible gardait la taille de son
image (54 x 64, et 38 x 45 sur la barre de la cible) : il prend celle du
BorderShield de camelot, 29 x 33 au coin haut-gauche (-27, 4) de sa barre
de 208 x 11, soit (-24, 1.5) dans notre cadre de 214 x 16. La barre de la
cible le réduit de 150 / 214 comme ses autres pièces.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
La classe était retrouvée par des noms traduits à nous (anglais et français
seulement) : ailleurs, aucune couleur. Elle se lit maintenant sur la
première ligne de <CLASSE>_DISABLED, que le client porte dans chaque
langue ; une forme féminine (« Kriegerin », « Prêtresse », « Жрица »)
prend la classe dont le nom partage le plus long début avec elle.
Vérifié sur les 75 formes de ChrClasses.dbc en enUS, frFR, deDE, esES
et ruRU.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le nom du résultat et les outils débordaient de la fiche (largeur de 800
de la fiche camelot normale) : ils suivent la règle de la fiche réduite de
camelot, 250 de large sur plusieurs lignes, et ce qui suit descend sous eux
quand ils dépassent sa place. Les composants passent au pas de 163 pour que
la deuxième colonne reste dans la fiche de 360. Écart noté dans NOTES.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
« Reagents: » venait de la table de textes de ForeverUI (anglais et
français seulement) : la page affiche SPELL_REAGENTS, le libellé de la
fenêtre de 3.3.5, sans le saut de ligne prévu pour les infobulles de sorts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Un personnage aux nombreux métiers et recettes peut attendre au premier
chargement d'une fenêtre de métier ; une fois les objets en cache, plus
d'attente.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le client 3.3.5 refuse un texte comme propriétaire d'infobulle
(« GameTooltip:SetOwner(): Wrong object type, expected frame ») : la ligne
de recette en devient propriétaire, et l'infobulle est placée sur le nom
comme ANCHOR_RIGHT le faisait.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pendant le chargement des objets d'un métier, le client envoie un
TRADE_SKILL_UPDATE par objet reçu (433 mesurés sur la Forge), et chacun
refaisait toute la page. Le premier appel d'une image rafraîchit tout de
suite ; les suivants de la même image donnent un seul rafraîchissement à
l'image suivante. UpdateButtons reçoit le résultat de la boucle des
réactifs au lieu de les relire.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le manifeste rend le dossier du worldserver facultatif : un joueur
n'installe que l'addon et les images ; avec le serveur, l'installeur pose
les lignes DBC des statistiques et applique le SQL, déplacé dans
data/sql/db-world et déclaré pour le retrait.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les fins de pas (qui peuvent lancer d'autres pas) se jouent apres le
parcours de la table, et le cadre d'animation ne s'arrete que lorsqu'il
ne reste aucun pas.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Au redimensionnement de la fenêtre, le client remet GlueParent à
l'échelle 1 avec ses propres ancres, sans changer la taille d'écran ni
gxResolution (vu par l'affichage de débogage) : l'échelle de GlueParent
est maintenant surveillée, et l'écart relance la mise en page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
Sur les écrans de connexion, un cadre sans parent ne reçoit pas
OnUpdate : le changement de taille de la fenêtre n'était jamais vu (et
l'état des curseurs des options jamais relu). Les deux sondes sont
maintenant enfants de GlueParent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
La mise en page est refaite sur l'événement du client, puis à l'image
suivante. La vérification par image ne reste qu'en secours, tant que
l'événement n'a jamais été reçu sur les écrans de connexion.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
L'écran affiché pendant un agrandissement de fenêtre restait mal mis en
page (changer d'écran le corrigeait) : le changement n'était traité
qu'une fois, pendant que la fenêtre changeait encore, sur des positions
pas encore recalculées. Le changement est maintenant appliqué une fois
la taille stable, puis une seconde fois au passage suivant, comme
l'affichage d'un écran le fait.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1