From 3e773bf28bfdc0a36279e63cb9d6da3c094c91e0 Mon Sep 17 00:00:00 2001 From: edujiro5972 <336072401+edujiro5972@users.noreply.github.com> Date: Wed, 7 Oct 2026 15:49:06 +0200 Subject: [PATCH] PawnGlobal : Room::addObject bloque le canal Pawn, commandlet LPFixPawnResponse Phase PawnGlobal (CHG-144). Co-Authored-By: Claude Opus 5.5 --- Content/BPs/Room.uasset | Bin 5713084 -> 5713081 bytes .../LPFixPawnResponseCommandlet.cpp | 165 ++++++++++++++++++ .../LPFixPawnResponseCommandlet.h | 22 +++ 3 files changed, 187 insertions(+) create mode 100644 Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.cpp create mode 100644 Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.h diff --git a/Content/BPs/Room.uasset b/Content/BPs/Room.uasset index 5c213228b13aa4e614a731d16acc1a4e6f2788ad..24fe49d35e1a4cf6e8174403bd62551d787ae0ee 100644 GIT binary patch delta 45157 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 diff --git a/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.cpp b/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.cpp new file mode 100644 index 0000000..47e5aa1 --- /dev/null +++ b/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.cpp @@ -0,0 +1,165 @@ +// Voir LPFixPawnResponseCommandlet.h + +#include "LPFixPawnResponseCommandlet.h" + +#include "EdGraph/EdGraph.h" +#include "EdGraphSchema_K2.h" +#include "Engine/Blueprint.h" +#include "Engine/SCS_Node.h" +#include "Engine/SimpleConstructionScript.h" +#include "K2Node_CallFunction.h" +#include "Kismet2/BlueprintEditorUtils.h" +#include "Kismet2/KismetEditorUtilities.h" +#include "Misc/PackageName.h" +#include "UObject/Package.h" +#include "UObject/SavePackage.h" + +DEFINE_LOG_CATEGORY_STATIC(LogLPFixPawn, Log, All); + +ULPFixPawnResponseCommandlet::ULPFixPawnResponseCommandlet() +{ + IsClient = false; + IsServer = false; + IsEditor = true; + LogToConsole = true; +} + +int32 ULPFixPawnResponseCommandlet::Main(const FString& Params) +{ + const bool bDryRun = Params.Contains(TEXT("DryRun"), ESearchCase::IgnoreCase); + UBlueprint* Room = LoadObject(nullptr, TEXT("/Game/BPs/Room.Room")); + if (!Room) + { + UE_LOG(LogLPFixPawn, Error, TEXT("Blueprint Room introuvable")); + return 1; + } + + UK2Node_CallFunction* PawnNode = nullptr; + UK2Node_CallFunction* TypeNode = nullptr; + UK2Node_CallFunction* ScaleNode = nullptr; + for (UEdGraph* Graph : Room->FunctionGraphs) + { + if (!Graph || Graph->GetName() != TEXT("addObject")) + { + continue; + } + for (UEdGraphNode* Node : Graph->Nodes) + { + UK2Node_CallFunction* Call = Cast(Node); + if (!Call) + { + continue; + } + const FName Function = Call->FunctionReference.GetMemberName(); + if (Function == TEXT("SetCollisionResponseToChannel")) + { + UEdGraphPin* Channel = Call->FindPin(TEXT("Channel")); + if (Channel && Channel->DefaultValue == TEXT("ECC_Pawn")) + { + PawnNode = Call; + } + } + else if (Function == TEXT("SetCollisionObjectType")) + { + TypeNode = Call; + } + else if (Function == TEXT("SetWorldScale3D")) + { + ScaleNode = Call; + } + } + } + if (!PawnNode || !TypeNode || !ScaleNode) + { + UE_LOG(LogLPFixPawn, Error, TEXT("noeuds addObject introuvables : Blueprint non sauvegarde")); + return 1; + } + + UEdGraphPin* Response = PawnNode->FindPin(TEXT("NewResponse")); + UEdGraphPin* TypeChannel = TypeNode->FindPin(TEXT("Channel")); + UEdGraphPin* PawnThen = PawnNode->FindPin(UEdGraphSchema_K2::PN_Then); + UEdGraphPin* TypeExec = TypeNode->FindPin(UEdGraphSchema_K2::PN_Execute); + UEdGraphPin* TypeThen = TypeNode->FindPin(UEdGraphSchema_K2::PN_Then); + UEdGraphPin* ScaleExec = ScaleNode->FindPin(UEdGraphSchema_K2::PN_Execute); + if (!Response || !TypeChannel || !PawnThen || !TypeExec || !TypeThen || !ScaleExec) + { + UE_LOG(LogLPFixPawn, Error, TEXT("broches introuvables : Blueprint non sauvegarde")); + return 1; + } + + UE_LOG(LogLPFixPawn, Warning, TEXT("Pawn %s, type %s"), *Response->DefaultValue, *TypeChannel->DefaultValue); + const bool bPawnDone = Response->DefaultValue == TEXT("ECR_Block"); + const bool bTypeDone = TypeChannel->DefaultValue == TEXT("ECC_WorldDynamic") && TypeExec->LinkedTo.Contains(PawnThen); + if (!bPawnDone && Response->DefaultValue != TEXT("ECR_Ignore")) + { + UE_LOG(LogLPFixPawn, Error, TEXT("reponse Pawn inattendue : Blueprint non sauvegarde")); + return 1; + } + + int32 Walls = 0; + const TCHAR* WallNames[] = { TEXT("Wall1"), TEXT("Wall2"), TEXT("Wall3"), TEXT("Wall4") }; + if (!bDryRun) + { + if (!bPawnDone) + { + Response->DefaultValue = TEXT("ECR_Block"); + } + if (!bTypeDone) + { + TypeChannel->DefaultValue = TEXT("ECC_WorldDynamic"); + PawnThen->BreakLinkTo(ScaleExec); + TypeExec->BreakAllPinLinks(); + TypeThen->BreakAllPinLinks(); + PawnThen->MakeLinkTo(TypeExec); + TypeThen->MakeLinkTo(ScaleExec); + } + if (Room->SimpleConstructionScript) + { + for (const TCHAR* Name : WallNames) + { + USCS_Node* Node = Room->SimpleConstructionScript->FindSCSNode(FName(Name)); + UPrimitiveComponent* Wall = Node ? Cast(Node->ComponentTemplate) : nullptr; + if (!Wall) + { + UE_LOG(LogLPFixPawn, Error, TEXT("mur %s introuvable"), Name); + return 1; + } + Wall->Modify(); + Wall->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); + Wall->SetCollisionObjectType(ECC_WorldDynamic); + Wall->SetCollisionResponseToChannel(ECC_Pawn, ECR_Block); + ++Walls; + } + } + } + + UE_LOG(LogLPFixPawn, Warning, TEXT("=== addObject Pawn Block, type WorldDynamic, %d murs%s ==="), + bDryRun ? 4 : Walls, bDryRun ? TEXT(" [DRY RUN]") : TEXT("")); + if (bDryRun) + { + return 0; + } + + FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(Room); + FKismetEditorUtilities::CompileBlueprint(Room); + UPackage* Package = Room->GetOutermost(); + FString Filename; + if (!FPackageName::TryConvertLongPackageNameToFilename(Package->GetName(), Filename, FPackageName::GetAssetPackageExtension())) + { + UE_LOG(LogLPFixPawn, Error, TEXT("chemin introuvable")); + return 1; + } + ResetLoaders(Package); + FSavePackageArgs SaveArgs; + SaveArgs.TopLevelFlags = RF_Public | RF_Standalone; + SaveArgs.SaveFlags = SAVE_None; + SaveArgs.bWarnOfLongFilename = true; + SaveArgs.Error = GWarn; + if (!UPackage::SavePackage(Package, nullptr, *Filename, SaveArgs)) + { + UE_LOG(LogLPFixPawn, Error, TEXT("sauvegarde echouee")); + return 1; + } + UE_LOG(LogLPFixPawn, Warning, TEXT("Room sauvegarde : meubles et murs en WorldDynamic, Pawn Block")); + return 0; +} diff --git a/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.h b/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.h new file mode 100644 index 0000000..cbc5782 --- /dev/null +++ b/Source/LifePlayEditorTools/LPFixPawnResponseCommandlet.h @@ -0,0 +1,22 @@ +// Room::addObject : Pawn Block, et le type d'objet du meuble devient WorldDynamic +// (la capsule Person ignore WorldStatic, donc Pawn Block seul ne l'arrete pas). +// Les quatre murs du Blueprint passent aussi en WorldDynamic et bloquent Pawn. +// Tout ecart : Blueprint non sauvegarde. +// +// Usage : +// UnrealEditor-Cmd.exe -run=LPFixPawnResponse [-DryRun] +#pragma once + +#include "CoreMinimal.h" +#include "Commandlets/Commandlet.h" +#include "LPFixPawnResponseCommandlet.generated.h" + +UCLASS() +class ULPFixPawnResponseCommandlet : public UCommandlet +{ + GENERATED_BODY() + +public: + ULPFixPawnResponseCommandlet(); + virtual int32 Main(const FString& Params) override; +};