diff --git a/Source/Private/GameFeatureAction_SpawnActors.cpp b/Source/Private/GameFeatureAction_SpawnActors.cpp index ec241a7..fb8018d 100644 --- a/Source/Private/GameFeatureAction_SpawnActors.cpp +++ b/Source/Private/GameFeatureAction_SpawnActors.cpp @@ -12,13 +12,14 @@ void UGameFeatureAction_SpawnActors::OnGameFeatureActivating(FGameFeatureActivat ResetExtension(); } - Super::OnGameFeatureActivating(Context); + WorldInitializedHandle = + FWorldDelegates::OnPostWorldInitialization. + AddUObject(this, &UGameFeatureAction_SpawnActors::OnWorldInitialized); } void UGameFeatureAction_SpawnActors::OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context) { - Super::OnGameFeatureDeactivating(Context); - + FWorldDelegates::OnStartGameInstance.Remove(WorldInitializedHandle); ResetExtension(); } @@ -27,12 +28,12 @@ void UGameFeatureAction_SpawnActors::ResetExtension() DestroyActors(); } -void UGameFeatureAction_SpawnActors::AddToWorld(const FWorldContext& WorldContext) +void UGameFeatureAction_SpawnActors::OnWorldInitialized(UWorld* World, + [[maybe_unused]] const UWorld::InitializationValues) { if (!TargetLevel.IsNull()) { - if (UWorld* World = WorldContext.World(); - World->IsGameWorld() + if (World->IsGameWorld() && World->GetNetMode() != NM_Client && World->GetName() == TargetLevel.LoadSynchronous()->GetName()) { diff --git a/Source/Public/GameFeatureAction_SpawnActors.h b/Source/Public/GameFeatureAction_SpawnActors.h index bd2d04f..b43871b 100644 --- a/Source/Public/GameFeatureAction_SpawnActors.h +++ b/Source/Public/GameFeatureAction_SpawnActors.h @@ -30,7 +30,7 @@ struct FActorSpawnSettings * */ UCLASS(MinimalAPI, meta = (DisplayName = "MF Extra Actions: Spawn Actors")) -class UGameFeatureAction_SpawnActors final : public UGameFeatureAction_WorldActionBase +class UGameFeatureAction_SpawnActors final : public UGameFeatureAction { GENERATED_BODY() @@ -46,7 +46,8 @@ class UGameFeatureAction_SpawnActors final : public UGameFeatureAction_WorldActi protected: virtual void OnGameFeatureActivating(FGameFeatureActivatingContext& Context) override; virtual void OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context) override; - virtual void AddToWorld(const FWorldContext& WorldContext) override; + + void OnWorldInitialized(UWorld* World, const UWorld::InitializationValues InitializationValues); private: void SpawnActors(UWorld* WorldReference); @@ -55,4 +56,5 @@ class UGameFeatureAction_SpawnActors final : public UGameFeatureAction_WorldActi void ResetExtension(); TArray> SpawnedActors; + FDelegateHandle WorldInitializedHandle; };