22 KiB
Fiche CAM-B2s — Niveau N3 — Modèle prévu non précisé par la fiche | utilisé claude-opus-5-5 — Agent lp-mcp-bp (A-MCP-BP) — Skills sk-protocol, sk-change-safety, lp-mcp, lp-lot
CAM-B2s-IMPL : orientation de C1 recalée à chaque passage (P5) et pose avant le retour de la vue (P6), Room enregistré (2026-10-14)
Résultat : réussi, P5 et P6, en un passage dans l'éditeur headless déjà lancé par l'orchestrateur (pid 22200, port 8000).
- L'état lu est conforme au tableau « État attendu avant écriture ».
- 4 nœuds créés, 11 liens posés (L1 à L11). L5 remplace bien
449.then → 434. - Relecture conforme. Compilation stricte sans diagnostic.
save_assetsde Room seul. - Room passe de
3a451fdd…àc5ab7241…. GI, PC et Person sont inchangés et n'ont pas été chargés.
Spécification : Docs/Migration/etat/CAM/CAM-B2s-FICHE.md (parties P5 et P6, étapes 1 à 6). UE-GO accordé par Big Boss à la
session CAM (message de l'orchestrateur). Préfixe des nœuds : /Game/BPs/Room.Room:EventGraph.. Un seul appel MCP par
message, aucun en parallèle. Outils : editor_toolset.toolsets.asset.AssetTools (AT) et
editor_toolset.toolsets.blueprint.BlueprintTools (BT). Aucune écriture par HyperAIStudio.
Abréviations : n = K2Node_CallFunction_n ; PO_n = K2Node_PromotableOperator_n ; 8x = K2Node_IfThenElse_8x ;
265 = K2Node_VariableGet_265. PinID écrit {direction, index_id} sur le nœud nommé ; refPath complet = préfixe + nom.
1. Fichiers modifiés
Content/BPs/Room.uasset: 4 nœuds créés, 11 liens posés. Un seul lien existant a été remplacé (449.then → 434, voulu par L5).- MD5 avant :
3a451fddf991ac01a699af7bd1fbdc12(6 408 870 octets). - MD5 après :
c5ab724101fa898457293d64059d21a9(6 422 095 octets, 2026-10-14 08:41:19 locale). - Seule sauvegarde au journal de l'éditeur : l. 2354,
LogFileHelpers: Saving Package: /Game/BPs/Room.
- MD5 avant :
Content/BPs/GI.uasset=e64b5b37…,PC.uasset=f45be57a…,Person.uasset=8668a47c…: identiques avant et après. Aucun n'a été chargé (0 ligne/Game/BPs/(GI|PC|Person)au journal de l'éditeur).Docs/Migration/etat/CAM/CAM-B2s-IMPL.md: ce livrable.
1.1 Étapes de la fiche
| Étape | Contenu | Statut |
|---|---|---|
| Entrée | MD5 de Room = 3A451FDD… (manifeste et disque), revérifié juste avant la première écriture |
fait |
| 1 | load_asset ; get_node_infos sur les 6 nœuds du tableau (+ 524, 148, 80 à 83, 329, 440, 441) |
fait, conforme (§ 1.4) |
| 2 | Types : `Transformation | SetWorldRotationetMath |
| 3 | P5 : R1, W1, L1 à L4 ; R1 Pitch et Roll à 0, W1 bSweep et bTeleport faux (défauts, aucun set_pin_value) |
fait |
| 4 | P6 : L6, W6, L5 à L11 | fait |
| 5 | Relecture (512, 265, 514.Yaw, PO_2, 449, 434, R1, W1, L6, W6 ; 80, 81, 82, 83, 329, 440, 441) | fait, conforme (§ 1.5) |
| 6 | is_dirty = true ; compile_blueprint strict ; save_assets Room seul ; Saving Package ; MD5 |
fait (§ 1.6) |
1.2 Appels MCP, dans l'ordre (30)
| # | Appel | Arguments | Retour |
|---|---|---|---|
| 1 | AT.load_asset |
{asset_path:"/Game/BPs/Room"} |
{"refPath":"/Game/BPs/Room.Room"} |
| 2 | BT.get_node_infos |
512, 514, 265, 449, 434, PO_2 | état avant, conforme |
| 3 | BT.get_node_infos |
524, 148, 80, 81, 82, 83, 329, 440, 441 | état avant des voisins |
| 4 | BT.find_node_types |
{graph:"…:EventGraph", type_id_filter:"SetWorldRotation", context_pins:[265 {EGPD_Output,0}]} |
`["Transformation |
| 5 | BT.find_node_types |
{graph:"…:EventGraph", type_id_filter:"MakeRotator", context_pins:[]} |
13 types, dont `Math |
| 6 | BT.create_node |
`Math | Rotateur |
| 7 | BT.create_node |
`Transformation | SetWorldRotation`, pos (32350, 3800) |
| 8 | BT.get_node_infos |
539, 540 | broches libres, défauts (§ 1.3) |
| 9 | BT.connect_pins L1 |
512 {EGPD_Output,0} then → 540 {EGPD_Input,0} execute |
null |
| 10 | BT.connect_pins L2 |
265 {EGPD_Output,0} FirstPersonSM → 540 {EGPD_Input,1} self |
null |
| 11 | BT.connect_pins L3 |
539 {EGPD_Output,0} ReturnValue → 540 {EGPD_Input,2} NewRotation |
null |
| 12 | BT.connect_pins L4 |
514 {EGPD_Output,2} Yaw → 539 {EGPD_Input,2} Yaw |
null |
| 13 | BT.get_node_infos |
539, 540 | P5 conforme |
| 14 | BT.create_node |
`Transformation | SetWorldLocation`, pos (34550, 900) |
| 15 | BT.create_node |
`Transformation | SetWorldRotation`, pos (34950, 900) |
| 16 | BT.get_node_infos |
541, 542 | broches libres, défauts (§ 1.3) |
| 17 | BT.connect_pins L5 |
449 {EGPD_Output,0} then → 541 {EGPD_Input,0} execute |
null |
| 18 | BT.get_node_infos |
449, 434 | 449.then → 541 seul ; 434.execute ← 80 seul (lien 449 → 434 remplacé, voulu) |
| 19 | BT.connect_pins L6 |
541 {EGPD_Output,0} then → 542 {EGPD_Input,0} execute |
null |
| 20 | BT.connect_pins L7 |
542 {EGPD_Output,0} then → 434 {EGPD_Input,0} execute |
null |
| 21 | BT.get_node_infos |
434 | execute ← 80 [0] et 542 [0] : l'entrée depuis 80 est gardée |
| 22 | BT.connect_pins L8 |
265 {EGPD_Output,0} → 541 {EGPD_Input,1} self |
null |
| 23 | BT.connect_pins L9 |
PO_2 {EGPD_Output,0} ReturnValue → 541 {EGPD_Input,2} NewLocation |
null |
| 24 | BT.connect_pins L10 |
265 {EGPD_Output,0} → 542 {EGPD_Input,1} self |
null |
| 25 | BT.connect_pins L11 |
539 {EGPD_Output,0} → 542 {EGPD_Input,2} NewRotation |
null |
| 26 | BT.get_node_infos |
512, 265, 514, PO_2, 449, 434, 539, 540, 541, 542 | relecture finale, conforme (§ 1.5) |
| 27 | BT.get_node_infos |
80, 81, 82, 83, 329, 440, 441 | identiques à l'appel 3 |
| 28 | AT.is_dirty |
{asset_path:"/Game/BPs/Room"} |
true |
| 29 | BT.compile_blueprint |
{blueprint:{refPath:"/Game/BPs/Room.Room"}, warnings_as_errors:true} |
null (pas d'exception) |
| 30 | AT.save_assets |
{asset_paths:["/Game/BPs/Room"]} |
true, confirmé par le journal et le MD5 |
Aucun break_pins, delete_node ni set_pin_value. Le journal de l'éditeur compte 30 lignes Dispatching toolset tool
(l. 2291 à 2352) : 1 load_asset, 9 get_node_infos, 2 find_node_types, 4 create_node, 11 connect_pins,
1 is_dirty, 1 compile_blueprint, 1 save_assets.
1.3 Nœuds créés
| Rôle | refPath | type_id | Position | Broches (PinID) |
|---|---|---|---|---|
R1 MakeRotator |
/Game/BPs/Room.Room:EventGraph.K2Node_CallFunction_539 |
`Math | Rotateur | MakeRotator` |
W1 K2_SetWorldRotation |
/Game/BPs/Room.Room:EventGraph.K2Node_CallFunction_540 |
`Transformation | SetWorldRotation` | (32350, 3800) |
L6 K2_SetWorldLocation |
/Game/BPs/Room.Room:EventGraph.K2Node_CallFunction_541 |
`Transformation | SetWorldLocation` | (34550, 900) |
W6 K2_SetWorldRotation |
/Game/BPs/Room.Room:EventGraph.K2Node_CallFunction_542 |
`Transformation | SetWorldRotation` | (34950, 900) |
Contrôle des types :
get_node_infosne donne pas le nom C++ de la fonction : il donne letype_id, les broches et leurs types.- W1 et W6 : catégorie
Transformation, selfScene Component, broches NewRotation, bSweep, SweepHitResult, bTeleport. C'est la déclaration deUSceneComponent::K2_SetWorldRotation(D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\Engine\Classes\Components\SceneComponent.h:573-574:Category="Transformation",ScriptName="SetWorldRotation").find_node_typesne rend qu'un seul type pour ce filtre. - R1 : même
type_idque leMakeRotatorexistant 148. La déclaration estD:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\Engine\Classes\Kismet\KismetMathLibrary.h:2252-2253(UFUNCTION(BlueprintPure, Category="Math|Rotator"…) MakeRotator(). R1 est donc pur (aucune broche d'exécution à la relecture) et il est réévalué à chaque appel de W1 et de W6. - L6 : même
type_idet mêmes broches que 512 (K2_SetWorldLocation, établi en B2k). - Le nom exact de la UFunction appelée par chaque nœud est estimé sur ces preuves. Le dump de V5 le tranchera.
- Les noms
K2Node_CallFunction_539à_542sont absents du dump de référence (Grep surCAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt: 0 occurrence). Ils sont donc nouveaux au diff de V5.
1.4 État lu avant écriture (appels 2 et 3), comparé au tableau de la fiche
| Nœud | Lu | Tableau |
|---|---|---|
| 512 `Transformation | SetWorldLocation` (31550, 3800) | execute ← 83 [0] ; then {EGPD_Output,0} vide ; self ← 265 [0] ; NewLocation ← PO_2 [0] ; bSweep, bTeleport false |
| 514 `Math | Rotateur | BreakRotator` (34000, 1900) |
| 524 `Pion | GetControlRotation` (33700, 2200) | self ← VariableGet_262 [0] (Controller) ; ReturnValue → 513 [0] et 514 [0] |
| 265 ` | GetFirstPersonSM` (30200, 2400) | self ← VariableGet_261 [0] ; FirstPersonSM {EGPD_Output,0} → 430, 431, 433, 446, 512 [1] |
| 449 `Utilitaires | Contrôledeflux | DelayUntilNextFrame` (34200, 700) |
| 434 `Jeu | Joueur | SetViewTargetWithBlend` (32200, 600) |
| PO_2 `Math | Vecteur | vector*vector` (31450, 1050) |
| 148 `Math | Rotateur | MakeRotator` |
| 80, 81, 82, 83, 329, 440, 441 | voir § 1.5 (identiques avant et après) | hors tableau |
Aucun écart : l'écriture a commencé.
1.5 Relecture finale (appels 26 et 27)
| Broche | Avant | Après |
|---|---|---|
512 then {EGPD_Output,0} |
vide | → 540 [0] ; execute, self, NewLocation identiques |
265 FirstPersonSM {EGPD_Output,0} |
→ 430, 431, 433, 446, 512 | → 430, 431, 433, 446, 512, 540, 541, 542 ([1], 8 liens) ; self ← 261 identique |
514 Yaw {EGPD_Output,2} |
→ PO_28 [0], PO_30 [0] | → PO_28 [0], PO_30 [0], 539 [2] ; InRot ← 524 identique |
PO_2 ReturnValue {EGPD_Output,0} |
→ 446 [2], 512 [2] | → 446 [2], 512 [2], 541 [2] ; A, B identiques |
449 then {EGPD_Output,0} |
→ 434 [0] | → 541 [0] seul |
434 execute {EGPD_Input,0} |
← 449 [0], 80 [0] | ← 80 [0], 542 [0] ; self, NewViewTarget, then → 329 identiques |
539 (R1) |
absent | Yaw ← 514 [2] ; Roll, Pitch 0.0 libres ; ReturnValue → 540 [2], 542 [2] |
540 (W1) |
absent | execute ← 512 [0] ; self ← 265 [0] ; NewRotation ← 539 [0] ; bSweep, bTeleport false ; then libre |
541 (L6) |
absent | execute ← 449 [0] ; self ← 265 [0] ; NewLocation ← PO_2 [0] ; bSweep, bTeleport false ; then → 542 [0] |
542 (W6) |
absent | execute ← 541 [0] ; self ← 265 [0] ; NewRotation ← 539 [0] ; bSweep, bTeleport false ; then → 434 [0] |
80 |
execute ← 78 [1] ; Condition ← 267 ; then → 434 ; else → 430 | identique |
81 |
execute ← 91 [1] ; Condition ← 258 ; then vide ; else → 82 | identique |
82 |
execute ← 81 [1] ; Condition ← 269 ; then → 83 ; else → 440 | identique |
83 |
execute ← 82 [0] ; Condition ← PO_0 ; then → 512 ; else → 440 | identique |
329 |
execute ← 434 [0], 94 [0] ; Delegate ← CustomEvent_45 ; Time 0.016 ; bLooping true ; then → VariableSet_54 | identique |
440 |
execute ← 83 [1], 82 [1] ; then → 441 | identique |
441 |
execute ← 440 ; Handle ← VariableGet_274 ; then vide | identique |
Chaîne obtenue :
- P5, chaque passage de la minuterie en C1 :
83.then → 512 (SetWorldLocation) → 540 (SetWorldRotation, Yaw de contrôle). - P6, entrée en C1 :
VariableSet_53 → 449 → 541 (SetWorldLocation) → 542 (SetWorldRotation) → 434 (SetViewTargetWithBlend) → 329.
1.6 Compilation et sauvegarde (journal D:\Game\LifePlay-master 5.8\Saved\Logs\portage\CAM-B2s-editeur_20261014-083521.log)
- Avant l'appel 1, le journal compte 2289 lignes, aucune ligne
Saving Packageet aucune ligneDispatching toolset tool. is_dirty(appel 28) =true. La procédure B2f-a n'a pas été nécessaire.- Appel 29 : l. 2349,
LogBlueprint: Compiling Blueprint '/Game/BPs/Room.Room'. Aucune exception côté outil. - Aucune ligne
errorouwarning(insensible à la casse) de la l. 2290 à la fin (l. 2384), compilation, sauvegarde et validation comprises. hyper_blueprint_debug_inspectn'a pas été appelé : il est absent du serveur. Repli :warnings_as_errorset le journal.- Sauvegarde, l. 2354 :
Saving Package: /Game/BPs/Room. Ensuite, le fichier temporaireSaved/Room704350214F5C610295BDF5A0F0F51841.tmpest déplacé versContent/BPs/Room.uasset, puisAssetCheck: /Game/BPs/Room Validation de la ressource. Le journal n'a pas d'autre ligneSaving Package.
1.7 Garde Accessed None (lp-mcp § 1 règle 4)
- Aucun
IsValidajouté : la fiche n'en prévoit pas. - W1, L6 et W6 lisent
265(PlayerCharacter.FirstPersonSM) etPO_2(GetSocketLocationsur les yeux). La voie C1 lit déjà ces deux valeurs sans garde, par 446, 512 et 431/433. - R1 lit
514, donc524GetControlRotationsurVariableGet_262(PC).524et514sont déjà lus sans garde par513et parPO_28/PO_30(fiche, § Garde). - Que la voie
VariableSet_53 → 449lisait déjà524avant P6 est non vérifié ici (estimé par la fiche). Ce point est repris au § 5.
2. Écarts à la SPEC
- Aucun écart sur l'état lu, les types, les nœuds, les liens, la relecture, la compilation ni la sauvegarde.
- Positions : 434 (32200) est à gauche de 449 (34200) dans le graphe. « Entre 449 et 434 » a donc été pris dans l'ordre d'exécution : L6 et W6 sont posés à droite de 449, en (34550, 900) et (34950, 900). R1 et W1 sont à droite de 512 (§ 1.3). Ce choix est cosmétique.
- Lectures en plus de la fiche :
- avant écriture : 524, 148 et les voisins 80 à 83, 329, 440, 441, pour avoir leur état avant (étape 5) ;
- pendant l'écriture : trois relectures intermédiaires (appels 13, 18, 21), pour s'arrêter au premier écart. L'appel 18 a confirmé le remplacement de L5 ; l'appel 21 a confirmé que 434 garde 80.
- Total : 30 appels, pour environ 35 estimés.
- Types : la fiche demande un contrôle par
get_node_infos. Cet outil ne donne pas le nom C++ de la fonction : le contrôle s'est fait sur letype_id, les broches et la déclaration du moteur (§ 1.3). - GI, PC et Person n'ont pas été ouverts. Ni build, ni commandlet, ni jeu. L'éditeur n'a été ni lancé ni arrêté.
3. Instantané
-
D:\Game\LifePlay_Backup_5.5\CAM-B2s\manifest.csv(pris par l'orchestrateur), relu :"Content\BPs\Room.uasset","True","6408870","3A451FDDF991AC01A699AF7BD1FBDC12","2026-10-14T07:53:13". -
MD5 sur le disque = manifeste, au début de la fiche et juste avant l'appel 6 (première écriture).
-
Retour arrière proposé, non lancé. L'orchestrateur le fait, éditeur fermé, sur accord :
.\Tools\Snapshot.ps1 -Lot CAM-B2s-retour -Path Content\BPs\Room.uasset;.\Tools\Restore.ps1 -Lot CAM-B2s -Only Content\BPs\Room.uasset -WhatIf;.\Tools\Restore.ps1 -Lot CAM-B2s -Only Content\BPs\Room.uasset.
Contrôle :
md5sum Content/BPs/Room.uasset=3a451fdd…. -
Entrée de journal :
2026-10-14 | CAM-B2s, P5 (512.then → K2_SetWorldRotation, Yaw de contrôle) et P6 (449 → SetWorldLocation → SetWorldRotation → 434) | Content/BPs/Room.uasset | retour arrière : Restore.ps1 -Lot CAM-B2s -Only Content\BPs\Room.uasset | instantané : D:\Game\LifePlay_Backup_5.5\CAM-B2s | vérification : relecture conforme, compilation stricte 0 diagnostic, Room = c5ab7241….
4. Ce qui n'a pas été fait
- Le nombre de nœuds de l'EventGraph (V5 : 1276 attendu) n'a pas été compté, car
find_nodesn'a pas été appelé. VariableSet_53,513,PO_28etPO_30n'ont pas été relus : seules les extrémités côté 449 et 514 l'ont été.is_dirtyn'a pas été relu après la sauvegarde : la fiche ne le demande pas.- Hors fiche (lp-mcp § 1 règles 3 et 5) :
CompileAllBlueprintséditeur fermé, build empaqueté,LogStatset essai en jeu. - L'éditeur n'est pas fermé : c'est le rôle de l'orchestrateur, puis
BUILD-FIN.
5. Points à confirmer en VAL
-
Room =
c5ab724101fa898457293d64059d21a9. GI =e64b5b37…, PC =f45be57a…et Person =8668a47c…sont inchangés. -
V5 : EventGraph 1272 → 1276 nœuds.
-
V5 : nœuds nouveaux et fonction appelée :
K2Node_CallFunction_539:KismetMathLibrary::MakeRotator, Roll et Pitch à 0 ;_540:SceneComponent::K2_SetWorldRotation;_541:SceneComponent::K2_SetWorldLocation;_542:SceneComponent::K2_SetWorldRotation.
Pour les trois derniers, bSweep et bTeleport valent false.
-
V5 : diff des liens limité au § 1.5, c'est-à-dire :
512.then → 540;- sorties de
265(+540, 541, 542), de514.Yaw(+539) et dePO_2(+541) ; 449.then → 541au lieu de 434 ;434.execute ← 80, 542;- liens propres à 539 à 542.
-
80, 81, 82, 83, 329, 440, 441 : liens inchangés.
-
V6 :
CompileAllBlueprints= référence (3 erreursCR_FaceExpRig, 420 compilations réussies). -
V7 : cas de la fiche (CAM-49 ; bar, assis puis levé ; après une scène ; sortie de CharGen).
-
V7, en plus :
LogStatssansAccessed Nonenouveau surRoom(UpdateRoomCamet voie d'entrée en C1 par 449, où R1 lit maintenantGetControlRotation, § 1.7).
6. Fichiers à commiter
- M
Content/BPs/Room.uasset(dépôt du jeu, branche ue5.8). - A
Docs/Migration/etat/CAM/CAM-B2s-IMPL.md(dépôt du jeu, branche ue5.8). - GI, PC et Person ne sont pas à commiter ici : leur
Mdansgit statusexistait au début de la session (lots antérieurs) et leur MD5 n'a pas changé.
Mesuré
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/PC.uasset Content/BPs/Person.uasset (avant l'appel 1)
3a451fddf991ac01a699af7bd1fbdc12 *Content/BPs/Room.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
$ wc -l <journal> ; grep -c "Saving Package" ; grep -c "Dispatching toolset tool" (avant l'appel 1)
2289
0
0
$ md5sum Content/BPs/Room.uasset (avant l'appel 6, première écriture)
3a451fddf991ac01a699af7bd1fbdc12 *Content/BPs/Room.uasset
$ wc -l ; grep -c "Saving Package" ; grep -c "Dispatching toolset tool" (avant l'appel 29)
2346
0
28
$ tail -n +2347 <journal> (après l'appel 29, extrait)
[2026.10.14-06.41.10:175][884]LogBlueprint: Compiling Blueprint '/Game/BPs/Room.Room'
$ grep -n "Saving Package" <journal> (après l'appel 30)
2354:[2026.10.14-06.41.18:625][275]LogFileHelpers: Saving Package: /Game/BPs/Room
$ tail -n +2290 <journal> | grep -ciE "error|warning"
0
$ grep -o "Dispatching toolset tool: '[^']*'" <journal> | sort | uniq -c
1 …AssetTools.is_dirty
1 …AssetTools.load_asset
1 …AssetTools.save_assets
1 …BlueprintTools.compile_blueprint
11 …BlueprintTools.connect_pins
4 …BlueprintTools.create_node
2 …BlueprintTools.find_node_types
9 …BlueprintTools.get_node_infos
$ grep -cE "/Game/BPs/(GI|PC|Person)\b" <journal>
0
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/PC.uasset Content/BPs/Person.uasset (après l'appel 30)
c5ab724101fa898457293d64059d21a9 *Content/BPs/Room.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
$ stat -c "%s %y" Content/BPs/Room.uasset
6422095 2026-10-14 08:41:19.340416100 +0200
$ git status --short -- Content/BPs/
M Content/BPs/GI.uasset
M Content/BPs/PC.uasset
M Content/BPs/Person.uasset
M Content/BPs/Room.uasset
<journal> = D:\Game\LifePlay-master 5.8\Saved\Logs\portage\CAM-B2s-editeur_20261014-083521.log.
Tours : 46 / 60
Constats
- Sur une entrée d'exécution,
connect_pinsajoute le lien sans remplacer les liens existants :434.executegarde80.then(appel 21). Sur une sortie d'exécution, il remplace le lien existant :449.thena perdu 434 (appel 18). Les deux cas ont été vérifiés aujourd'hui. type_idvérifiés dans la copie 5.8, éditeur en français :Transformation|SetWorldRotation(filtreSetWorldRotationaveccontext_pinssur une sortie de composant : 1 seul résultat) ;Math|Rotateur|MakeRotator(filtreMakeRotatorsans contexte : 13 résultats, dont des types PCG et caméra).
create_nodea numéroté les nœuds_539à_542, à la suite des numéros existants.- Le crochet
ecriture-gardienrefuse une commande Bash qui contient>même dans un programmeawk($1>2289) : il le prend pour une redirection. Contournement non tenté : la commande a été réécrite sans comparaison. - À verser :
lp-mcp§ 3 :type_idTransformation|SetWorldRotationetMath|Rotateur|MakeRotator;connect_pinsajoute sur une entrée d'exécution et remplace sur une sortie d'exécution ;get_node_infosne donne pas la UFunction, à croiser avec la déclaration du moteur (SceneComponent.h:573,KismetMathLibrary.h:2252) ;- mémoire
hook-ecriture-gardien:>dans unawkest refusé.