O2b : ModdingExtra liste les paquets depuis le registre d'assets en contenu compresse (villes de CityMenu)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
edujiro5972 2026-10-02 09:34:29 +02:00
parent 45a98d6c75
commit 60ddf96493
3 changed files with 44 additions and 0 deletions

View file

@ -911,3 +911,4 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol
| CHG-064 | 2026-10-02 | O2 | `Config/DefaultGame.ini` : `UsePakFile=True`, `bUseIoStore=True`, `bCompressed=True` (réglages par défaut du moteur : Oodle Kraken) ; `Modules` reste en fichiers nus | build Development 3 367 → 2 002 Mo (−40 %), 23 928 → 2 104 fichiers ; build `LifePlay_Build_5.5_O2` ; validé en jeu le 2026-10-02 (7 contrôles) | `Tools\Restore.ps1 -Lot O2` ou `git checkout O2-avant -- Config` |
| CHG-065 | 2026-10-02 | O4 | nouveau `Tools/FixTextureMips.py` ; 29 textures (`Clothes4` 27, route, trottoir) : `MipGenSettings` = groupe de texture, `NeverStream` = faux (diff : ces 2 propriétés + `LightingGuid` régénéré) | textures de couleur 3D sans mipmaps : scintillement à distance, pleine résolution toujours en mémoire ; exclus : cheveux et masques de transparence (29), interface et textures sans matériau (44), dimensions non puissance de 2 (733) ; build `LifePlay_Build_5.5_O4` | `Tools\Restore.ps1 -Lot O4` |
| CHG-066 | 2026-10-02 | O | build Shipping de distribution `LifePlay_Build_5.5_Shipping_V1.2` (O1, O2, O4, O9, O9b) | 3 246 → 1 494 Mo (−54 %), 24 249 → 2 084 fichiers ; validation en jeu en attente | — (build seulement) |
| CHG-067 | 2026-10-02 | O2b | `Plugins/ModdingExtra` : `GetAllFilesFromFolder` reconstruit la liste des `.uasset`/`.umap` depuis le registre d'assets quand le disque n'en renvoie aucun (contenu compressé IoStore) ; dépendance `AssetRegistry` | régression d'O2 constatée sur le build Shipping : aucune ville proposée (`UI/CityMenu` liste les fichiers `Heavy/StreetMap/*.uasset` du disque, `UI/City` vérifie chaque ville par suffixe `/<nom>.uasset`) ; seul appel concerné, les autres lisent des fichiers texte de `Modules` ; build `LifePlay_Build_5.5_Shipping_V1.2` reconstruit | `git checkout O2b-avant -- Plugins/ModdingExtra` |

View file

@ -33,6 +33,7 @@ public class ModdingExtra : ModuleRules
new string[]
{
"CoreUObject",
"AssetRegistry", // portage 5.5, lot O2b : enumeration des assets en conteneurs IoStore
"Engine",
"Slate",
"SlateCore",

View file

@ -2,7 +2,10 @@
#include "ModdingExtraBPLibrary.h"
#include "ModdingExtra.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "HAL/FileManager.h"
#include "Engine/World.h"
#include "Modules/ModuleManager.h"
#include "Misc/FileHelper.h"
#include "Misc/Paths.h"
@ -55,6 +58,45 @@ float UModdingExtraBPLibrary::ModdingExtraSampleFunction(float Param)
//FileManager.FindFiles(Files, *FinalPath, true, false);
FileManager.FindFilesRecursive(Files, *FinalPathWithoutExt, *Ext, true, false, false);
// Portage 5.5, lot O2b : dans un build au contenu compresse (IoStore), les paquets .uasset/.umap ne sont plus
// des fichiers du disque et la recherche ci-dessus ne renvoie rien (UI/CityMenu liste ainsi les villes de
// Heavy/StreetMap). On reconstruit alors la meme liste, chemins compris, depuis le registre d'assets.
// Avec des fichiers nus (editeur, build sans conteneurs), la liste du disque n'est pas vide : rien ne change.
const bool bPackageExt = Ext.Equals(TEXT("*.uasset"), ESearchCase::IgnoreCase) || Ext.Equals(TEXT("*.umap"), ESearchCase::IgnoreCase);
if (Files.Num() == 0 && bPackageExt)
{
FString Folder = RootFolderFullPath;
Folder.ReplaceInline(TEXT("\\"), TEXT("/"));
Folder.RemoveFromStart(TEXT("/"));
Folder.RemoveFromEnd(TEXT("/"));
const FString PackageRoot = TEXT("/Game/") + Folder;
const IAssetRegistry& Registry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")).Get();
TArray<FAssetData> Assets;
Registry.GetAssetsByPath(FName(*PackageRoot), Assets, /*bRecursive=*/true);
const bool bWantMaps = Ext.Equals(TEXT("*.umap"), ESearchCase::IgnoreCase);
TSet<FName> Seen;
for (const FAssetData& Asset : Assets)
{
bool bAlreadySeen = false;
Seen.Add(Asset.PackageName, &bAlreadySeen);
if (bAlreadySeen)
{
continue;
}
const bool bIsMap = Asset.AssetClassPath == UWorld::StaticClass()->GetClassPathName();
if (bIsMap != bWantMaps)
{
continue;
}
FString Relative = Asset.PackageName.ToString();
Relative.RemoveFromStart(TEXT("/Game/"));
Files.Add(FullPath + TEXT("/") + Relative + Ext.RightChop(1));
}
UE_LOG(LogModdingExtra, Log, TEXT("GetAllFilesFromFolder | '%s' : %d paquet(s) trouve(s) dans le registre d'assets (contenu compresse)"),
*RootFolderFullPath, Files.Num());
}
UE_LOG(LogModdingExtra, Verbose, TEXT("GetAllFilesFromFolder | '%s' ext='%s' -> %d fichier(s)"),
*RootFolderFullPath, *Ext, Files.Num());