5.8 KiB
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 :
- le corps du personnage a disparu (mesh skeletal vide / dummy recyclé), ou
- 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
- Lancer PIE (carte
CentralLondon), entrer dans un pub. - Laisser les PNJ play daily (
drinkglass/ occupations meubles). - S’approcher d’un PNJ ou changer de lieu (déclenche
DestroyDummies). - Observer : spam log
GetSocketInfoByName(…): No SkeletalMesh for Component(CharacterMesh0)surPerson_C_*, messagestest0204 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 : clearPropsouprops orphelineslors d’un recycle. - Pas de régression vêtements (les SMC
*SMne 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 |