ERR-038 : detection par la forme de la piece seulement, reaffichage apres 3 s (faux positifs du premier test)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
edujiro5972 2026-10-02 11:01:00 +02:00
parent b8d7383439
commit 3c955005d1
3 changed files with 12 additions and 16 deletions

View file

@ -916,3 +916,4 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol
| CHG-069 | 2026-10-02 | Réconciliation | fusion `-s ours` de `vinfamy/master` dans `main` (commit `82a64d9`, arbre inchangé) ; `Docs/Migration/12_Reconciliation_Vinfamy.md` | historique de l'auteur rattaché ; aucun fichier récupérable ; les 33 scènes `corruption` vides de `vin_Base` existent dans `vin_Corruption` (non restaurées : doublons) | `git reset --hard reconcil-avant` (avant toute autre publication) |
| CHG-070 | 2026-10-02 | ERR-038 | nouveau `Source/LifePlay/LPRoomTransitionSubsystem.h/.cpp` | relevé (`ERR038_releve_20261002.log`) : la nouvelle pièce est construite ≈ 2 s avant que `destroyDummy` rende les personnages de l'ancienne à la réserve ; le sous-système cache aussitôt, au changement de pièce, les personnages actifs juste avant (hors compagnon et scène en cours), cesse de les suivre dès que le jeu les rend ou les réaffiche, et les réaffiche après 10 s par sécurité ; aucun Blueprint modifié ; build `LifePlay_Build_5.5_ERR038` ; test en jeu en attente | supprimer les 2 fichiers (`git checkout ERR038-avant -- Source`) |
| CHG-071 | 2026-10-02 | Ménage | `README.md` : V1.2 en téléchargement principal (lien Mega), V1.1 et V1 en versions précédentes ; suppression de 13 builds 5.5 obsolètes (V1rc, L7a, L7b, L7i, L7i_B12, L7cdj, O1, O1_essai1, O2, O4, O9, O9b, Shipping_V1.2_essai1, ≈ 43 Go) après copie vérifiée de `Saved`, `Content\Saves` et des lanceurs dans `D:\Game\LifePlay_Backup_5.5\builds_supprimees\` ; `08_Guide_Developpeur.md` §4 | lien V1.2 reçu ; place disque | builds : reconstruction depuis les tags git |
| CHG-072 | 2026-10-02 | ERR-038 | `LPRoomTransitionSubsystem` : détection par la seule échelle de la racine de `Room`, délai de réaffichage 10 s → 3 s | premier test en jeu concluant (anciens personnages cachés, compagnon présent, nouveaux personnages apparus), mais 2 faux positifs au relevé : nom de lieu vidé un instant sans changement de pièce ; arrivée au restaurant peuplée 3 s avant la construction de la pièce (personnages apparus 10 s en retard) ; build `LifePlay_Build_5.5_ERR038` reconstruit | `git checkout ERR038-apres -- Source/LifePlay/LPRoomTransitionSubsystem.*` |

View file

@ -11,7 +11,9 @@
namespace
{
constexpr double SafetySeconds = 10.0;
// Releves ERR-038 : les personnages de l'ancienne piece sont rendus ~2 s apres la reconstruction. Un personnage
// encore actif au-dela appartient a la nouvelle piece (le jeu peut peupler l'arrivee avant de la construire).
constexpr double SafetySeconds = 3.0;
template <typename T>
T* GetObjectProperty(const UObject* Container, const TCHAR* Name)
@ -41,16 +43,6 @@ namespace
return Result;
}
/** Valeur texte d'une variable de GI, quel que soit son type (chaine, nom, texte). */
FString GetPropertyText(const UObject* Container, const TCHAR* Name)
{
FString Text;
if (const FProperty* Prop = Container ? Container->GetClass()->FindPropertyByName(Name) : nullptr)
{
Prop->ExportTextItem_Direct(Text, Prop->ContainerPtrToValuePtr<void>(Container), nullptr, nullptr, PPF_None);
}
return Text;
}
}
void ULPRoomTransitionSubsystem::Initialize(FSubsystemCollectionBase& Collection)
@ -95,7 +87,10 @@ bool ULPRoomTransitionSubsystem::Tick(float DeltaTime)
}
// 2. Changement de piece : cacher les personnages actifs au tick precedent, sauf compagnon et scene en cours.
const FString Signature = GetPropertyText(GI, TEXT("CurrentAmenity")) + TEXT("|") + Root->GetRelativeScale3D().ToString();
// Signature = forme de la piece (echelle de la racine de Room) : elle change a chaque reconstruction (tout trajet
// passe par la rue, de forme differente). Le nom du lieu n'est pas utilise : il peut se vider un instant sans
// que la piece change (releve ERR038_apres_20261002, 08:55:59).
const FString Signature = Root->GetRelativeScale3D().ToString();
if (!LastRoomSignature.IsEmpty() && Signature != LastRoomSignature)
{
const AActor* Companion = GetObjectProperty<AActor>(GI, TEXT("Companion"));

View file

@ -5,10 +5,10 @@
// DummyPersonsInUse, SetActorHiddenInGame(true), deplacement) environ 2 s plus tard ; entre-temps ils restent
// visibles dans la nouvelle piece (releve ERR038_releve_20261002 : 4 personnages du fast-food 2 s dans la maison).
//
// Ce sous-systeme detecte le changement de piece (lieu courant ou echelle de la racine de Room) et cache aussitot
// Ce sous-systeme detecte le changement de piece (echelle de la racine de Room) et cache aussitot
// les personnages qui etaient actifs juste avant, sauf le compagnon et les personnes de la scene en cours. Il cesse
// de suivre un personnage des que le jeu le rend a la reserve ou le reaffiche lui-meme ; au-dela de 10 s sans l'un
// ni l'autre, il le reaffiche (on retombe alors sur le comportement d'origine). Aucun Blueprint n'est modifie.
// de suivre un personnage des que le jeu le rend a la reserve ou le reaffiche lui-meme ;
// au-dela de 3 s sans l'un ni l'autre, il le reaffiche (personnage de la nouvelle piece, peuplee avant d'etre construite). Aucun Blueprint n'est modifie.
#pragma once
@ -30,7 +30,7 @@ private:
bool Tick(float DeltaTime);
FTSTicker::FDelegateHandle TickHandle;
/** Signature de la piece au tick precedent (lieu courant + echelle de la racine de Room). */
/** Signature de la piece au tick precedent (echelle de la racine de Room). */
FString LastRoomSignature;
/** Personnages actifs au tick precedent. */
TArray<TWeakObjectPtr<AActor>> LastInUse;