LifePlay-Revival/Docs/Migration/etat/PROP/PROP-BUG.md
2026-10-08 01:40:50 +02:00

5.8 KiB
Raw Blame History

ERR-043 — Seul le verre reste apparent

ID registre : ERR-043
Lot : PROP
Date signalement : 2026-10-08
Gravité : moyenne (visuel)
Statut : corrigé en code (CHG-244) — à valider en PIE
Fiches liées : PROP-CART (dumps / graphes), CHG-243 (ERR-008 MapMarkers, corrélé), ERR-011 (bruit No SkeletalMesh)


1. Symptôme

Dans un lieu intérieur (ex. pub pub___vin01), un PNJ en animation quotidienne avec accessoire (drinkglass, parfois suivi d’une autre pose) laisse le verre (prop StaticMesh) visible alors que :

  1. le corps du personnage a disparu (mesh skeletal vide / dummy recyclé), ou
  2. le personnage est encore là mais un verre flotte à hauteur de torse / tête, détaché de la main (souvent pendant qu’il tient déjà un autre prop, ex. carnet write).

Phrase utilisateur : « seul le verre reste apparent ».

Capture Contenu
Verre orphelin + barmaid Verre à pied opaque blanc flottant devant le buste ; PNJ visible avec bloc-notes
Cliente qui boit État nominal : corps + verre à la bouche (référence du comportement attendu)

Chemins Cursor (session) :
…/assets/…image-d4b12d9d-651a-4448-b327-8c6923b9a1e0.png,
…/assets/…image-c2441b41-47f4-4c3a-9cad-0120376c2833.png.


2. Reproduction

  1. Lancer PIE (carte CentralLondon), entrer dans un pub.
  2. Laisser les PNJ play daily (drinkglass / occupations meubles).
  3. S’approcher d’un PNJ ou changer de lieu (déclenche DestroyDummies).
  4. Observer : spam log GetSocketInfoByName(…): No SkeletalMesh for Component(CharacterMesh0) sur Person_C_*, messages test0204 DestroyDummies / test0304 DESTROY…, et éventuellement verre flottant.

Preuve session : Saved/Logs/LifePlay.log (PIE 2026-10-07→08) — premier warning mesh vide ~l.5331 (22.39.21), ~21 083 occurrences dans la session, acteurs Person_C_0…Person_C_5.


3. Cause racine

3.1 Cycle de vie des props

Étape Blueprint Comportement
Apparition Person::spawnProp AddComponent (NODE_AddStaticMeshComponent-0) → AttachToComponent(Mesh, Socket) → SetStaticMesh → ajout au tableau Props
Nettoyage prévu Person::clearProps détruit les SMC de Props + enfants SMC de Mesh, vide le tableau
Recycle dummy GI::destroyDummy SetActorHiddenInGame(true) → ResetVars → transform origine → unOccupyFnt — n’appelle pas clearProps

Le verre n’est pas un acteur séparé : c’est un composant du Person. Quand CharacterMesh0 n’a plus de SkeletalMesh, le corps disparaît ; les SMC de props peuvent rester le seul rendu.

3.2 Chaîne observée

DestroyDummies
  → destroyDummy(Person)   // sans clearProps
  → CharacterMesh0.SkeletalMesh = None
  → warnings GetSocketInfoByName(head|pelvis|…)
  → verre (Props / SMC attaché) encore visible

Dumps : etat/PROP/PROP_LPDumpFunction_20261008-010449 (spawnProp), -010554 (clearProps), -010647 (destroyDummy). Détail dans PROP-CART §3.

3.3 Variante « PNJ encore visible + verre flottant »

Après un glitch mesh / changement d’anim (drinkglass → write) sans clear : le prop peut rester parenté au Mesh avec socket None ou invalide → position relative à l’origine du mesh (torse), d’où l’aspect « flottant ».


4. Non-causes (à ne pas re-investiguer pour ce symptôme)

Piste Verdict
ERR-008 MapMarkers.WidgetComponents[0] Corrélée à l’approche (updateAllPersonButtons → SpawnMapMarkers), pas la cause du verre. Atténuée CHG-243.
Person::updateButtonSize Masque seulement ButtonSM (bouton de nom), pas le corps ni les props.
Réglages VQ / LPSettingsSubsystem Aucune lecture de Props / spawnProp / mesh Person.
ERR-011 No SkeletalMesh « normal » Bruit accepté en 4.27/5.5 ; ici le pic au DESTROY + props non clear = bug distinct.
Verres blancs opaques sur les étagères Matériau / translucency — hors ERR-043.

5. Correctif

Élément Détail
CHG CHG-244
Code Source/LifePlay/LPPersonPropGuardSubsystem.h/.cpp
Mécanisme Sous-système d’instance de jeu, tick ~0,2 s
Si Person caché ou Mesh sans asset skeletal ProcessEvent(clearProps) + purge C++ du tableau Props + destruction des enfants SMC nommés NODE_AddStaticMeshComponent* (pas les vêtements *SM)
Si Person visible Retrait des entrées Props orphelines (mauvais parent, socket None / inexistant)
BP modifiés Aucun
Compile LifePlayEditor Win64 Development PASS (2026-10-08)

Alternative BP (non retenue pour ce lot) : appeler clearProps au début de GI::destroyDummy (et idéalement avant chaque nouveau spawnProp d’anim).


6. Critères d’acceptation

  • Relancer l’éditeur avec la DLL CHG-244.
  • Pub : PNJ qui boivent / changent d’occupation ; changer de lieu (DestroyDummies).
  • Aucun verre flottant orphelin après DESTROY / disparition temporaire du corps.
  • Log : au moins une ligne PersonPropGuard : clearProps ou props orphelines lors d’un recycle.
  • Pas de régression vêtements (les SMC *SM ne doivent pas être détruits à tort).

7. Assets / références

Objet Chemin
Prop verre Content/Heavy/New3/Anims/Daily/Props/drinkglass_prop.uasset
Anims …/Anims/Daily/drinkglass_F.uasset, drinkglass_M.uasset
BP Content/BPs/Person.uasset (spawnProp, clearProps), Content/BPs/GI.uasset (destroyDummy)
Registre Docs/Migration/Registre_Erreurs.md → ERR-043
Journal Docs/Migration/Journal_Modifications.md → CHG-244