See: UAbilitySystemGlobals::HandlePreLoadMap
GAS features static variables that are modified by both server and client, thus result in issues in single process PIE where they access the same memory. Specifically, GlobalActiveGameplayEffectHandles in ActiveGameplayEffectHandles.cpp is cleared by the client on map switch via the callstack below, and it affects server execution.
This issue impacts GAS behavior when testing in single process PIE with late-joining clients. A user reported on UDN that when a PIE client joins the server (late), that client's PreLoadMap callback to reset GlobalActiveGameplayEffectHandles would clear the active handles for the server, who may be hosting a gameplay session that is long in progress.
UAbilitySystemGlobals is also the same object for server and client in single process PIE. While investigating this, please also do a pass to see whether there are variables in UAbilitySystemGlobals that are written to and investigate whether this can cause issues in PIE.
UAbilitySystemGlobals::HandlePreLoadMap(const FString &) AbilitySystemGlobals.cpp:613
[Inlined] Invoke(void (UAbilitySystemGlobals::*)(const FString &),UAbilitySystemGlobals *&,const FString &) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int> >::ApplyAfter(void (UAbilitySystemGlobals::*&)(const FString &),UAbilitySystemGlobals *&,const FString &) Tuple.h:327
TBaseUObjectMethodDelegateInstance<0,UAbilitySystemGlobals,void __cdecl(FString const &),FDefaultDelegateUserPolicy>::ExecuteIfSafe(const FString &) DelegateInstancesImpl.h:551
[Inlined] TMulticastDelegateBase<FDefaultDelegateUserPolicy>::Broadcast(const FString &) MulticastDelegateBase.h:190
[Inlined] TMulticastDelegate<void __cdecl(FString const &),FDefaultDelegateUserPolicy>::Broadcast(const FString &) DelegateSignatureImpl.inl:983
UEngine::LoadMap(FWorldContext &,FURL,UPendingNetGame *,FString &) UnrealEngine.cpp:14413
UEngine::TickWorldTravel(FWorldContext &,float) UnrealEngine.cpp:14341
UEditorEngine::Tick(float,bool) EditorEngine.cpp:1869
UUnrealEdEngine::Tick(float,bool) UnrealEdEngine.cpp:515
FEngineLoop::Tick() LaunchEngineLoop.cpp:5473
[Inlined] EngineTick() Launch.cpp:61
GuardedMain(const wchar_t *) Launch.cpp:190
LaunchWindowsStartup(HINSTANCE__ *,HINSTANCE__ *,char *,int,const wchar_t *) LaunchWindows.cpp:233
WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) LaunchWindows.cpp:282
[Inlined] invoke_main() 0x00007ff76613b1e6
__scrt_common_main_seh() 0x00007ff76613b1c5
<unknown> 0x00007ff843c07034
<unknown> 0x00007ff8443a26a1
How does TextureRenderTarget2D get TArray<uint8> type data?
Why does the REMOVE method of map container remove elements have memory leaks?
How do I set a material as a post-processing material?
What is the cause of the packaging error falling back to 'GameUserSettings' in ue5?
What is the difference between Camera and CineCamera?
How to delete some elements correctly when deleting an array loop?
What controls of umg have mouse wheel events in UE4.27?
How to implement springarm components to scale according to mouse position in spawn?
How to assign a value to a member of UMG's UMaterialInterface pointer type in C++?
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-170257 in the post.
0 |
Component | UE - Gameplay - Gameplay Ability System |
---|---|
Affects Versions | 5.0, 5.1, 5.2 |
Target Fix | 5.6 |
Created | Nov 16, 2022 |
---|---|
Updated | Sep 30, 2024 |