LifePlay-Revival/Docs/Migration/etat/ST/STE/STE-H10-IMPL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

7.1 KiB

STE-H10-IMPL : écritures MCP (étape (a)) — partielle, 2026-10-11 / 12

Orchestrateur LOT STE ; BUILD-GO (a) de Big Boss (11/10, confirmé le 12/10 par la nouvelle session Big Boss [9f1d99]) ; SPEC STE-H10-SPEC.md § « Complément d'IMPL » (C.2 à C.6) ; décisions de l'utilisateur : A1, B1-a, B2-a, B3-a, B4-a ; commit et repli par asset (Q-H10-14).

État : TopRight et Person écrits et enregistrés ; GI non écrit (reprise par la session suivante).

0. Entrée et instantanés

  • HEAD a7350fc au GO ; 0 processus ; git status -- Content Source Config vide.
  • Snapshot.ps1 -Lot STE-H10 : D:\Game\LifePlay_Backup_5.5\STE-H10\Content\UI\TopRight.uasset (3DF4DEC4), ...\Content\BPs\Person.uasset (BE21838A), ...\Content\BPs\GI.uasset (FE4406A0) ; MD5 contrôlés.
  • Éditeur headless lancé par commande directe (UnrealEditor.exe "<uproject>" -RenderOffScreen -unattended -nosplash -NoSound -ModelContextProtocolStartServer -ModelContextProtocolPort=8000 -abslog=…, pas le lanceur HyperAIStudio), 11/10 07:21:57.

1. E1 — TopRight : B4-a (fait)

  • Relus : CustomEvent_5 (AddEvent|Custom|Current, then = sortie 1 → SwitchString_1.execute, Amenity sortie 2 → SwitchString_1.Selection, VariableSet_18) ; SwitchString_1 (execute 0).
  • find_node_types « NextFrame » → Utilitaires|Contrôledeflux|DelayUntilNextFrame (seule entrée). Créé K2Node_CallFunction_85 (execute 0, then 0).
  • break_pins CustomEvent_5.then (1) / SwitchString_1.execute ; connect_pins CustomEvent_5.then → _85.execute ; _85.then → SwitchString_1.execute. Relu conforme.
  • Compilation (avertissements en erreurs) sans erreur ni avertissement (journal 05:23:26 UTC) ; save_assets true.
  • TopRight = 1FCB94A60061B418E9DEEB08BC1A990D (11/10 07:23:37).
  • Écart : un connect_pins et un get_node_infos envoyés dans le même message (chevauchement d'appels MCP) ; résultat relu conforme.

2. E2 — Person : A1 (fait)

Variables membres ajoutées : HairIdxs (int, ARRAY), PickedHairIdx (int), HairSearch (bool).

Nœuds relus avant (conformes à la SPEC) : CallArrayFunction_10 (Clear de Hairs, then → MacroInstance_402), MacroInstance_402 (ForEachLoopwithBreak sur HairstyleTable, sorties LoopBody 0, Array Element 1, Array Index 2, Completed 3 ; entrée Break ← Knot_47), MacroInstance_19 (IsValid, Is Not Valid 1 → CallFunction_96), CallFunction_96 (|LoadHairMeshIfNeeded, Index = entrée 2), CallArrayFunction_11 (Add à Hairs), MacroInstance_11, VariableSet_12 (|SetPickedHair, Output_Get 1), VariableGet_52 (Hairs), GetArrayItem_3 (Get par référence), CallFunction_133 (RandomInteger), VariableGet_896 (HairstyleTable), CallArrayFunction_14 (Length). Hairs et HairstyleTable sont des tableaux de SMBool.

Nœuds créés (correspondance SPEC → nom réel, type_id) :

SPEC Nom réel type_id
N1 CallArrayFunction_73 `Utilitaires
N2 CallArrayFunction_74 `Utilitaires
N4 VariableGet_157 `Variables
N5 CallArrayFunction_75 `Utilitaires
N6 CallFunction_497 `Math
N7 GetArrayItem_14 `Utilitaires
N3 VariableSet_237 `Variables
N8 VariableGet_202 `Variables
V1 VariableSet_238 `Variables
V2 VariableSet_239 `Variables
GH VariableGet_249 `Variables
W MacroInstance_44 `Utilities
B1 IfThenElse_150 `Utilitaires
IVI CallArrayFunction_76 `Utilitaires
B2 IfThenElse_151 Branche
IV CallFunction_536 `Utilitaires
V3 VariableSet_240 `Variables
R CallArrayFunction_77 `Utilitaires

8 coupures (b1-b8) et 34 liens (c1-c34) faits exactement comme le § C.4, un appel à la fois ; relecture finale : liens conformes, broches génériques typées Matrice de Nombre entiers / Nombre entier, CallFunction_96.execute ← VariableSet_237 seul, MacroInstance_44.Completed → CallFunction_1405, VariableSet_12.then → IfThenElse_151, GetArrayItem_3.Array ← VariableGet_896, Dimension 1 ← VariableGet_202. Restent sans exécution : MacroInstance_11, CallFunction_133, CallArrayFunction_14 (§ C.1-3).

3. E2 — Person : B3-a (fait)

Variable locale ProxySuffix (string, graphe ClearProxies). Créés : VariableSet_0 (DéfinirProxySuffix) et VariableGet_2 (ObtenirProxySuffix). break_pins DynamicCast_30.then / MacroInstance_301.Exec ; liens DynamicCast_30.then → VariableSet_0 → MacroInstance_301.Exec ; CommutativeAssociativeBinaryOperator_0.ReturnValue → VariableSet_0.ProxySuffix ; break_pins CommutativeAssociativeBinaryOperator_0 / CallFunction_2.InSuffix ; VariableGet_2 → CallFunction_2.InSuffix. Relu conforme.

Compilation de Person (avertissements en erreurs) sans erreur ni avertissement (journal 05:30:06 UTC) ; save_assets true. Person = D1B4C63D47621B1191AD9352C80C99CD (11/10 07:30:29).

4. E3 — GI : B1-a, B2-a (non fait)

Premier passage (11/10, session coupée) : variables SaveBeforeDestroy, RevertSkipped (membres), MeshSuffix (locale) ajoutées, 9 nœuds créés, 3 coupures et 9 liens faits, rien enregistré ; l'éditeur s'est fermé avec la session : GI sur disque inchangé (FE4406A0, = HEAD). À refaire entièrement depuis FE4406A0.

Points relevés lors de ce passage, utiles à la reprise :

  • CallFunction_104 (Préréglages|SavePreset) n'a pas d'entrée Person (self GI) ; CustomEvent_3172 (DestroyPerson) : then 1, Person 2, WithoutDestroying 3, ReuseableInScene 4 ; CallFunction_166 (destroyDummy) then → CallFunction_731 (PrintString « DestroyDummy was from DestroyPerson »).
  • Lecture Valid de Person : create_node type_id Classe|Person|ObtenirValid (le filtre avec contexte donne Variables|Pardéfaut|ObtenirValid, que create_node refuse). Appel : Classe|Person|RevertStripAll.
  • SavePreset : IfThenElse_2957.then (0) → CallFunction_16039 (|RevertStripAll, self ← VariableGet_9248).
  • GetSMBoolForSMC_Cloth : FunctionEntry_2157.then → MacroInstance_1872.Exec ; CommutativeAssociativeBinaryOperator_0 → CallFunction_2.InSuffix (1).

5. Pièges MCP rencontrés

  • create_node : paramètre pos (pas position) ; connect_pins / break_pins : output_pin, input_pin.
  • find_node_types « Hair » liste les variables nouvelles sous Variables|Pardéfaut|Obtenir… / Définir….
  • Après relance de l'éditeur, la session ne retrouve pas unreal-mcp d'elle-même : /mcp → Reconnect par l'utilisateur (mémoire unreal-mcp-reconnect) ; une session neuve se connecte au démarrage.