Updated to UE 5.4. as well as VRE and AdvancedSessions to latest
This commit is contained in:
		
							parent
							
								
									e3309931c5
								
							
						
					
					
						commit
						42ed1baf08
					
				
					 59 changed files with 671 additions and 337 deletions
				
			
		| 
						 | 
					@ -163,6 +163,7 @@ bSendAnonymousUsageDataToEpic=False
 | 
				
			||||||
+Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.")
 | 
					+Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.")
 | 
				
			||||||
+Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.")
 | 
					+Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.")
 | 
				
			||||||
+Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
 | 
					+Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
 | 
				
			||||||
 | 
					+Profiles=(Name="WaterBodyCollision",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="",CustomResponses=((Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="Default Water Collision Profile (Created by Water Plugin)")
 | 
				
			||||||
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False,Name="VRTraceChannel")
 | 
					+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False,Name="VRTraceChannel")
 | 
				
			||||||
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="FloorTrace")
 | 
					+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="FloorTrace")
 | 
				
			||||||
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,DefaultResponse=ECR_Ignore,bTraceType=False,bStaticObject=False,Name="PawnWalking")
 | 
					+DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,DefaultResponse=ECR_Ignore,bTraceType=False,bStaticObject=False,Name="PawnWalking")
 | 
				
			||||||
| 
						 | 
					@ -309,7 +310,7 @@ bEnableUniversalAPK=False
 | 
				
			||||||
bBundleABISplit=True
 | 
					bBundleABISplit=True
 | 
				
			||||||
bBundleLanguageSplit=True
 | 
					bBundleLanguageSplit=True
 | 
				
			||||||
bBundleDensitySplit=True
 | 
					bBundleDensitySplit=True
 | 
				
			||||||
ExtraApplicationSettings=<meta-data android:name="com.oculus.supportedDevices" android:value="quest|quest2|questpro" />
 | 
					ExtraApplicationSettings=<meta-data android:name="com.oculus.supportedDevices" android:value="quest|quest2|questpro|quest3" />
 | 
				
			||||||
ExtraActivitySettings=
 | 
					ExtraActivitySettings=
 | 
				
			||||||
bAndroidVoiceEnabled=False
 | 
					bAndroidVoiceEnabled=False
 | 
				
			||||||
bEnableMulticastSupport=False
 | 
					bEnableMulticastSupport=False
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/BP_Teleport_Controller.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/BP_Teleport_Controller.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/BP_VRCharacter.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/BP_VRCharacter.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/Mannequins/Meshes/BP_Cabinet_Manny.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/Mannequins/Meshes/BP_Cabinet_Manny.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/Mannequins/Rigs/PA_Mannequin.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/Character/Mannequins/Rigs/PA_Mannequin.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/GraspingHands/GraspingHandManny.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Core/GraspingHands/GraspingHandManny.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/ExampleMap/MotionControllerMap.umap
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/ExampleMap/MotionControllerMap.umap
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Grippables/Misc/Examples/Potion/PotionActor.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								VIRTUOS_ExpansionPluginTests/Content/VRE/Grippables/Misc/Examples/Potion/PotionActor.uasset
									 (Stored with Git LFS)
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"FileVersion": 3,
 | 
						"FileVersion": 3,
 | 
				
			||||||
	"FriendlyName": "Advanced Sessions",
 | 
						"FriendlyName": "Advanced Sessions",
 | 
				
			||||||
	"Version": 5.1,
 | 
						"Version": 5.4,
 | 
				
			||||||
	"VersionName": "5.1",
 | 
						"VersionName": "5.4",
 | 
				
			||||||
	"Description": "Adds new blueprint functions to handle more advanced session operations.",
 | 
						"Description": "Adds new blueprint functions to handle more advanced session operations.",
 | 
				
			||||||
	"Category": "Advanced Sessions Plugin",
 | 
						"Category": "Advanced Sessions Plugin",
 | 
				
			||||||
	"CreatedBy": "Joshua Statzer",
 | 
						"CreatedBy": "Joshua Statzer",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,32 +32,32 @@ public:
 | 
				
			||||||
	//********* External UI Functions *************//
 | 
						//********* External UI Functions *************//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that handles the Friends list
 | 
						// Show the UI that handles the Friends list
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowFriendsUI(APlayerController *PlayerController, EBlueprintResultSwitch &Result);
 | 
						static void ShowFriendsUI(UObject* WorldContextObject, APlayerController *PlayerController, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that handles inviting people to your game
 | 
						// Show the UI that handles inviting people to your game
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowInviteUI(APlayerController *PlayerController, EBlueprintResultSwitch &Result);
 | 
						static void ShowInviteUI(UObject* WorldContextObject, APlayerController *PlayerController, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that shows the leaderboard (doesn't work with steam)
 | 
						// Show the UI that shows the leaderboard (doesn't work with steam)
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowLeaderBoardUI(FString LeaderboardName, EBlueprintResultSwitch &Result);
 | 
						static void ShowLeaderBoardUI(UObject* WorldContextObject, FString LeaderboardName, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that shows a web URL
 | 
						// Show the UI that shows a web URL
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", AutoCreateRefTerm = "AllowedDomains"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", AutoCreateRefTerm = "AllowedDomains", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowWebURLUI(FString URLToShow, EBlueprintResultSwitch &Result, TArray<FString>& AllowedDomains, bool bEmbedded = false , bool bShowBackground = false, bool bShowCloseButton = false, int32 OffsetX = 0, int32 OffsetY = 0, int32 SizeX = 0, int32 SizeY = 0);
 | 
						static void ShowWebURLUI(UObject* WorldContextObject, FString URLToShow, EBlueprintResultSwitch &Result, TArray<FString>& AllowedDomains, bool bEmbedded = false , bool bShowBackground = false, bool bShowCloseButton = false, int32 OffsetX = 0, int32 OffsetY = 0, int32 SizeX = 0, int32 SizeY = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that shows a web URL
 | 
						// Show the UI that shows a web URL
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void CloseWebURLUI();
 | 
						static void CloseWebURLUI(UObject* WorldContextObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that shows the profile of a uniquenetid
 | 
						// Show the UI that shows the profile of a uniquenetid
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowProfileUI(const FBPUniqueNetId PlayerViewingProfile, const FBPUniqueNetId PlayerToViewProfileOf, EBlueprintResultSwitch &Result);
 | 
						static void ShowProfileUI(UObject* WorldContextObject, const FBPUniqueNetId PlayerViewingProfile, const FBPUniqueNetId PlayerToViewProfileOf, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Show the UI that shows the account upgrade UI (doesn't work with steam)
 | 
						// Show the UI that shows the account upgrade UI (doesn't work with steam)
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedExternalUI", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void ShowAccountUpgradeUI(const FBPUniqueNetId PlayerRequestingAccountUpgradeUI, EBlueprintResultSwitch &Result);
 | 
						static void ShowAccountUpgradeUI(UObject* WorldContextObject, const FBPUniqueNetId PlayerRequestingAccountUpgradeUI, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};	
 | 
					};	
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,26 +28,26 @@ public:
 | 
				
			||||||
	//********* Identity Functions *************//
 | 
						//********* Identity Functions *************//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get the login status of a local player
 | 
						// Get the login status of a local player
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetLoginStatus(const FBPUniqueNetId & UniqueNetID, EBPLoginStatus & LoginStatus, EBlueprintResultSwitch &Result);
 | 
						static void GetLoginStatus(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetID, EBPLoginStatus & LoginStatus, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get the auth token for a local player
 | 
						// Get the auth token for a local player
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetPlayerAuthToken(APlayerController * PlayerController, FString & AuthToken, EBlueprintResultSwitch &Result);
 | 
						static void GetPlayerAuthToken(UObject* WorldContextObject, APlayerController * PlayerController, FString & AuthToken, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get a players nickname
 | 
						// Get a players nickname
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedIdentity")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedIdentity", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetPlayerNickname(const FBPUniqueNetId & UniqueNetID, FString & PlayerNickname);
 | 
						static void GetPlayerNickname(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetID, FString & PlayerNickname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//********* User Account Functions *************//
 | 
						//********* User Account Functions *************//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get a users account
 | 
						// Get a users account
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity|UserAccount", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity|UserAccount", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetUserAccount(const FBPUniqueNetId & UniqueNetId, FBPUserOnlineAccount & AccountInfo, EBlueprintResultSwitch &Result);
 | 
						static void GetUserAccount(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetId, FBPUserOnlineAccount & AccountInfo, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get all known users accounts
 | 
						// Get all known users accounts
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity|UserAccount", meta = (ExpandEnumAsExecs = "Result"))
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedIdentity|UserAccount", meta = (ExpandEnumAsExecs = "Result", WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetAllUserAccounts(TArray<FBPUserOnlineAccount> & AccountInfos, EBlueprintResultSwitch &Result);
 | 
						static void GetAllUserAccounts(UObject* WorldContextObject, TArray<FBPUserOnlineAccount> & AccountInfos, EBlueprintResultSwitch &Result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get a user account access token
 | 
						// Get a user account access token
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedIdentity|UserAccount")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedIdentity|UserAccount")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -172,6 +172,10 @@ public:
 | 
				
			||||||
		UFUNCTION(BlueprintPure, meta = (DisplayName = "Equal Unique Net ID", CompactNodeTitle = "==", Keywords = "== equal"), Category = "Online|AdvancedSessions|PlayerInfo|PlayerID")
 | 
							UFUNCTION(BlueprintPure, meta = (DisplayName = "Equal Unique Net ID", CompactNodeTitle = "==", Keywords = "== equal"), Category = "Online|AdvancedSessions|PlayerInfo|PlayerID")
 | 
				
			||||||
		static bool EqualEqual_UNetIDUnetID(const FBPUniqueNetId &A, const FBPUniqueNetId &B);
 | 
							static bool EqualEqual_UNetIDUnetID(const FBPUniqueNetId &A, const FBPUniqueNetId &B);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Converts a FBPUniqueNetID into a FUniqueNetID_Repl */
 | 
				
			||||||
 | 
							UFUNCTION(BlueprintPure, meta = (DisplayName = "ToUniqueNetIDRepl (Unique Net ID)", CompactNodeTitle = "->", BlueprintAutocast), Category = "Online|AdvancedSessions|PlayerInfo|PlayerID")
 | 
				
			||||||
 | 
								static FUniqueNetIdRepl Conv_BPUniqueIDToUniqueNetIDRepl(const FBPUniqueNetId& InUniqueID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Check if a UniqueNetId is a friend
 | 
							// Check if a UniqueNetId is a friend
 | 
				
			||||||
		UFUNCTION(BlueprintPure, Category = "Online|AdvancedSessions|UniqueNetId")
 | 
							UFUNCTION(BlueprintPure, Category = "Online|AdvancedSessions|UniqueNetId")
 | 
				
			||||||
		static void UniqueNetIdToString(const FBPUniqueNetId &UniqueNetId, FString &String);
 | 
							static void UniqueNetIdToString(const FBPUniqueNetId &UniqueNetId, FString &String);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,68 +32,68 @@ public:
 | 
				
			||||||
	//********* Voice Library Functions *************//
 | 
						//********* Voice Library Functions *************//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get if a headset is present for the specified local user
 | 
						// Get if a headset is present for the specified local user
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void IsHeadsetPresent(bool & bHasHeadset, uint8 LocalPlayerNum = 0);
 | 
						static void IsHeadsetPresent(UObject* WorldContextObject, bool & bHasHeadset, uint8 LocalPlayerNum = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Starts networked voice, allows push to talk in coordination with StopNetworkedVoice
 | 
						// Starts networked voice, allows push to talk in coordination with StopNetworkedVoice
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void StartNetworkedVoice(uint8 LocalPlayerNum = 0);
 | 
						static void StartNetworkedVoice(UObject* WorldContextObject, uint8 LocalPlayerNum = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Stops networked voice, allows push to talk in coordination with StartNetworkedVoice
 | 
						// Stops networked voice, allows push to talk in coordination with StartNetworkedVoice
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void StopNetworkedVoice(uint8 LocalPlayerNum = 0);
 | 
						static void StopNetworkedVoice(UObject* WorldContextObject, uint8 LocalPlayerNum = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Registers a local player as someone interested in voice data
 | 
						// Registers a local player as someone interested in voice data
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool RegisterLocalTalker(uint8 LocalPlayerNum = 0);
 | 
						static bool RegisterLocalTalker(UObject* WorldContextObject, uint8 LocalPlayerNum = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Registers all signed in players as local talkers
 | 
						// Registers all signed in players as local talkers
 | 
				
			||||||
	// This is already done automatically, only do it manually if you unregistered someone
 | 
						// This is already done automatically, only do it manually if you unregistered someone
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void RegisterAllLocalTalkers();
 | 
						static void RegisterAllLocalTalkers(UObject* WorldContextObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UnRegisters local player as a local talker
 | 
						// UnRegisters local player as a local talker
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void UnRegisterLocalTalker(uint8 LocalPlayerNum = 0);
 | 
						static void UnRegisterLocalTalker(UObject* WorldContextObject, uint8 LocalPlayerNum = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UnRegisters all signed in players as local talkers
 | 
						// UnRegisters all signed in players as local talkers
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void UnRegisterAllLocalTalkers();
 | 
						static void UnRegisterAllLocalTalkers(UObject* WorldContextObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Registers a remote player as a talker
 | 
						// Registers a remote player as a talker
 | 
				
			||||||
	// This is already done automatically, only do it manually if you unregistered someone
 | 
						// This is already done automatically, only do it manually if you unregistered someone
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool RegisterRemoteTalker(const FBPUniqueNetId& UniqueNetId);
 | 
						static bool RegisterRemoteTalker(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UnRegisters a remote player as a talker
 | 
						// UnRegisters a remote player as a talker
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool UnRegisterRemoteTalker(const FBPUniqueNetId& UniqueNetId);
 | 
						static bool UnRegisterRemoteTalker(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UnRegisters all remote players as talkers
 | 
						// UnRegisters all remote players as talkers
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void RemoveAllRemoteTalkers();
 | 
						static void RemoveAllRemoteTalkers(UObject* WorldContextObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Returns whether a local player is currently talking
 | 
						// Returns whether a local player is currently talking
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool IsLocalPlayerTalking(uint8 LocalPlayerNum);
 | 
						static bool IsLocalPlayerTalking(UObject* WorldContextObject, uint8 LocalPlayerNum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Returns whether a remote player is currently talking
 | 
						// Returns whether a remote player is currently talking
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool IsRemotePlayerTalking(const FBPUniqueNetId& UniqueNetId);
 | 
						static bool IsRemotePlayerTalking(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Returns whether a player is muted for the specified local player
 | 
						// Returns whether a player is muted for the specified local player
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool IsPlayerMuted(uint8 LocalUserNumChecking, const FBPUniqueNetId& UniqueNetId);
 | 
						static bool IsPlayerMuted(UObject* WorldContextObject, uint8 LocalUserNumChecking, const FBPUniqueNetId& UniqueNetId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Mutes the player associated with the uniquenetid for the specified local player, if IsSystemWide is true then it will attempt to mute globally for the player
 | 
						// Mutes the player associated with the uniquenetid for the specified local player, if IsSystemWide is true then it will attempt to mute globally for the player
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool MuteRemoteTalker(uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide = false);
 | 
						static bool MuteRemoteTalker(UObject* WorldContextObject, uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide = false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UnMutes the player associated with the uniquenetid for the specified local player, if IsSystemWide is true then it will attempt to unmute globally for the player
 | 
						// UnMutes the player associated with the uniquenetid for the specified local player, if IsSystemWide is true then it will attempt to unmute globally for the player
 | 
				
			||||||
	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice")
 | 
						UFUNCTION(BlueprintCallable, Category = "Online|AdvancedVoice", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static bool UnMuteRemoteTalker(uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide = false);
 | 
						static bool UnMuteRemoteTalker(UObject* WorldContextObject, uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide = false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Gets the number of local talkers for this system
 | 
						// Gets the number of local talkers for this system
 | 
				
			||||||
	UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo")
 | 
						UFUNCTION(BlueprintPure, Category = "Online|AdvancedVoice|VoiceInfo", meta = (WorldContext = "WorldContextObject"))
 | 
				
			||||||
	static void GetNumLocalTalkers(int32 & NumLocalTalkers);
 | 
						static void GetNumLocalTalkers(UObject* WorldContextObject, int32 & NumLocalTalkers);
 | 
				
			||||||
};	
 | 
					};	
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,5 +51,5 @@ private:
 | 
				
			||||||
	FDelegateHandle DelegateHandle;
 | 
						FDelegateHandle DelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,5 +42,5 @@ private:
 | 
				
			||||||
	FDelegateHandle DelegateHandle;
 | 
						FDelegateHandle DelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,6 +102,6 @@ private:
 | 
				
			||||||
	TArray<FSessionPropertyKeyPair> ExtraSettings;
 | 
						TArray<FSessionPropertyKeyPair> ExtraSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,5 +45,5 @@ private:
 | 
				
			||||||
	FDelegateHandle DelegateHandle;
 | 
						FDelegateHandle DelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,6 +46,6 @@ private:
 | 
				
			||||||
	FDelegateHandle FindFriendSessionCompleteDelegateHandle;
 | 
						FDelegateHandle FindFriendSessionCompleteDelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -105,5 +105,5 @@ private:
 | 
				
			||||||
	int MinSlotsAvailable;
 | 
						int MinSlotsAvailable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,6 @@ private:
 | 
				
			||||||
	//EBPFriendsLists FriendListToGet;
 | 
						//EBPFriendsLists FriendListToGet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,6 @@ private:
 | 
				
			||||||
	FOnQueryRecentPlayersCompleteDelegate QueryRecentPlayersCompleteDelegate;
 | 
						FOnQueryRecentPlayersCompleteDelegate QueryRecentPlayersCompleteDelegate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,5 +41,5 @@ private:
 | 
				
			||||||
	EBPUserPrivileges UserPrivilege;
 | 
						EBPUserPrivileges UserPrivilege;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,5 +51,5 @@ private:
 | 
				
			||||||
	FDelegateHandle DelegateHandle;
 | 
						FDelegateHandle DelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,5 +43,5 @@ private:
 | 
				
			||||||
	FDelegateHandle DelegateHandle;
 | 
						FDelegateHandle DelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,6 @@ private:
 | 
				
			||||||
	FOnSendInviteComplete OnSendInviteCompleteDelegate;
 | 
						FOnSendInviteComplete OnSendInviteCompleteDelegate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ class UStartSessionCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase
 | 
				
			||||||
		, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject")
 | 
							, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject")
 | 
				
			||||||
		, Category = "Online|AdvancedSessions"
 | 
							, Category = "Online|AdvancedSessions"
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	static UStartSessionCallbackProxyAdvanced* StartAdvancedSession(const UObject* WorldContextObject);
 | 
						static UStartSessionCallbackProxyAdvanced* StartAdvancedSession(UObject* WorldContextObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UOnlineBlueprintCallProxyBase interface
 | 
						// UOnlineBlueprintCallProxyBase interface
 | 
				
			||||||
	virtual void Activate() override;
 | 
						virtual void Activate() override;
 | 
				
			||||||
| 
						 | 
					@ -42,5 +42,5 @@ private:
 | 
				
			||||||
	FDelegateHandle StartCompleteDelegateHandle;
 | 
						FDelegateHandle StartCompleteDelegateHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	const UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -64,6 +64,6 @@ private:
 | 
				
			||||||
	bool bShouldAdvertise = true;
 | 
						bool bShouldAdvertise = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The world context object in which this call is taking place
 | 
						// The world context object in which this call is taking place
 | 
				
			||||||
	UObject* WorldContextObject;
 | 
						TWeakObjectPtr<UObject> WorldContextObject;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,9 +6,17 @@
 | 
				
			||||||
//General Log
 | 
					//General Log
 | 
				
			||||||
DEFINE_LOG_CATEGORY(AdvancedExternalUILog);
 | 
					DEFINE_LOG_CATEGORY(AdvancedExternalUILog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowAccountUpgradeUI(const FBPUniqueNetId PlayerRequestingAccountUpgradeUI, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedExternalUILibrary::ShowAccountUpgradeUI(UObject* WorldContextObject, const FBPUniqueNetId PlayerRequestingAccountUpgradeUI, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -21,10 +29,17 @@ void UAdvancedExternalUILibrary::ShowAccountUpgradeUI(const FBPUniqueNetId Playe
 | 
				
			||||||
	Result = EBlueprintResultSwitch::OnSuccess;
 | 
						Result = EBlueprintResultSwitch::OnSuccess;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowProfileUI(const FBPUniqueNetId PlayerViewingProfile, const FBPUniqueNetId PlayerToViewProfileOf, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedExternalUILibrary::ShowProfileUI(UObject* WorldContextObject, const FBPUniqueNetId PlayerViewingProfile, const FBPUniqueNetId PlayerToViewProfileOf, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -39,9 +54,16 @@ void UAdvancedExternalUILibrary::ShowProfileUI(const FBPUniqueNetId PlayerViewin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowWebURLUI(FString URLToShow, EBlueprintResultSwitch &Result, TArray<FString>& AllowedDomains, bool bEmbedded, bool bShowBackground, bool bShowCloseButton, int32 OffsetX, int32 OffsetY, int32 SizeX, int32 SizeY)
 | 
					void UAdvancedExternalUILibrary::ShowWebURLUI(UObject* WorldContextObject, FString URLToShow, EBlueprintResultSwitch &Result, TArray<FString>& AllowedDomains, bool bEmbedded, bool bShowBackground, bool bShowCloseButton, int32 OffsetX, int32 OffsetY, int32 SizeX, int32 SizeY)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -67,9 +89,15 @@ void UAdvancedExternalUILibrary::ShowWebURLUI(FString URLToShow, EBlueprintResul
 | 
				
			||||||
	Result = EBlueprintResultSwitch::OnSuccess;
 | 
						Result = EBlueprintResultSwitch::OnSuccess;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::CloseWebURLUI()
 | 
					void UAdvancedExternalUILibrary::CloseWebURLUI(UObject* WorldContextObject)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -80,9 +108,16 @@ void UAdvancedExternalUILibrary::CloseWebURLUI()
 | 
				
			||||||
	ExternalUIInterface->CloseWebURL();
 | 
						ExternalUIInterface->CloseWebURL();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowLeaderBoardUI(FString LeaderboardName, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedExternalUILibrary::ShowLeaderBoardUI(UObject* WorldContextObject, FString LeaderboardName, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -97,7 +132,7 @@ void UAdvancedExternalUILibrary::ShowLeaderBoardUI(FString LeaderboardName, EBlu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowInviteUI(APlayerController *PlayerController, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedExternalUILibrary::ShowInviteUI(UObject* WorldContextObject, APlayerController *PlayerController, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!PlayerController)
 | 
						if (!PlayerController)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -106,7 +141,14 @@ void UAdvancedExternalUILibrary::ShowInviteUI(APlayerController *PlayerControlle
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -128,7 +170,7 @@ void UAdvancedExternalUILibrary::ShowInviteUI(APlayerController *PlayerControlle
 | 
				
			||||||
	Result = EBlueprintResultSwitch::OnSuccess;
 | 
						Result = EBlueprintResultSwitch::OnSuccess;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedExternalUILibrary::ShowFriendsUI(APlayerController *PlayerController, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedExternalUILibrary::ShowFriendsUI(UObject* WorldContextObject, APlayerController *PlayerController, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!PlayerController)
 | 
						if (!PlayerController)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -137,7 +179,14 @@ void UAdvancedExternalUILibrary::ShowFriendsUI(APlayerController *PlayerControll
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineExternalUIPtr ExternalUIInterface = Online::GetExternalUIInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ExternalUIInterface.IsValid())
 | 
						if (!ExternalUIInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -138,7 +138,7 @@ void UAdvancedFriendsLibrary::GetFriend(APlayerController *PlayerController, con
 | 
				
			||||||
	TSharedPtr<FOnlineFriend> fr = FriendsInterface->GetFriend(Player->GetControllerId(), *FriendUniqueNetId.GetUniqueNetId(), EFriendsLists::ToString(EFriendsLists::Default));
 | 
						TSharedPtr<FOnlineFriend> fr = FriendsInterface->GetFriend(Player->GetControllerId(), *FriendUniqueNetId.GetUniqueNetId(), EFriendsLists::ToString(EFriendsLists::Default));
 | 
				
			||||||
	if (fr.IsValid())
 | 
						if (fr.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		FOnlineUserPresence pres = fr->GetPresence();
 | 
							const FOnlineUserPresence& pres = fr->GetPresence();
 | 
				
			||||||
		Friend.DisplayName = fr->GetDisplayName();
 | 
							Friend.DisplayName = fr->GetDisplayName();
 | 
				
			||||||
		Friend.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
							Friend.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
		Friend.RealName = fr->GetRealName();
 | 
							Friend.RealName = fr->GetRealName();
 | 
				
			||||||
| 
						 | 
					@ -151,7 +151,8 @@ void UAdvancedFriendsLibrary::GetFriend(APlayerController *PlayerController, con
 | 
				
			||||||
		Friend.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
							Friend.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
				
			||||||
		Friend.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
							Friend.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
				
			||||||
		Friend.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
							Friend.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
		Friend.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
							// #TODO: Check back in on this in shipping, epic is missing the UTF8_TO_TCHAR call on converting this and its making an invalid string
 | 
				
			||||||
 | 
							//Friend.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -247,28 +248,34 @@ void UAdvancedFriendsLibrary::GetStoredFriendsList(APlayerController *PlayerCont
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TArray< TSharedRef<FOnlineFriend> > FriendList;
 | 
						TArray< TSharedRef<FOnlineFriend> > FriendList;
 | 
				
			||||||
	FriendsInterface->GetFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendList);
 | 
						if (FriendsInterface->GetFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendList))
 | 
				
			||||||
 | 
					 | 
				
			||||||
	for (int32 i = 0; i < FriendList.Num(); i++)
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		TSharedRef<FOnlineFriend> Friend = FriendList[i];
 | 
							for (int32 i = 0; i < FriendList.Num(); i++)
 | 
				
			||||||
		FBPFriendInfo BPF;
 | 
							{
 | 
				
			||||||
		FOnlineUserPresence pres = Friend->GetPresence();
 | 
								FBPFriendInfo BPF;
 | 
				
			||||||
 | 
								const FOnlineUserPresence& pres = FriendList[i]->GetPresence();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
								BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
		BPF.DisplayName = Friend->GetDisplayName();
 | 
								BPF.DisplayName = FriendList[i]->GetDisplayName();
 | 
				
			||||||
		BPF.RealName = Friend->GetRealName();
 | 
								BPF.RealName = FriendList[i]->GetRealName();
 | 
				
			||||||
		BPF.UniqueNetId.SetUniqueNetId(Friend->GetUserId());
 | 
								BPF.UniqueNetId.SetUniqueNetId(FriendList[i]->GetUserId());
 | 
				
			||||||
		BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
 | 
								BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
 | 
								BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
 | 
				
			||||||
		BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
 | 
								BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
 | 
				
			||||||
		BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
								BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
				
			||||||
		BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
								BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
		BPF.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
								// #TODO: Check back in on this in shipping, epic is missing the UTF8_TO_TCHAR call on converting this and its making an invalid string
 | 
				
			||||||
		BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
 | 
								//BPF.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
				
			||||||
		BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
								BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
 | 
				
			||||||
 | 
								BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FriendsList.Add(BPF);
 | 
								FriendsList.Add(BPF);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriendsList Failed to get any friends!"));
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
DEFINE_LOG_CATEGORY(AdvancedIdentityLog);
 | 
					DEFINE_LOG_CATEGORY(AdvancedIdentityLog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedIdentityLibrary::GetPlayerAuthToken(APlayerController * PlayerController, FString & AuthToken, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedIdentityLibrary::GetPlayerAuthToken(UObject* WorldContextObject, APlayerController * PlayerController, FString & AuthToken, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!PlayerController)
 | 
						if (!PlayerController)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,14 @@ void UAdvancedIdentityLibrary::GetPlayerAuthToken(APlayerController * PlayerCont
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!IdentityInterface.IsValid())
 | 
						if (!IdentityInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -36,15 +43,21 @@ void UAdvancedIdentityLibrary::GetPlayerAuthToken(APlayerController * PlayerCont
 | 
				
			||||||
	Result = EBlueprintResultSwitch::OnSuccess;
 | 
						Result = EBlueprintResultSwitch::OnSuccess;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedIdentityLibrary::GetPlayerNickname(const FBPUniqueNetId & UniqueNetID, FString & PlayerNickname)
 | 
					void UAdvancedIdentityLibrary::GetPlayerNickname(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetID, FString & PlayerNickname)
 | 
				
			||||||
{
 | 
					{ 
 | 
				
			||||||
	if (!UniqueNetID.IsValid())
 | 
						if (!UniqueNetID.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedIdentityLog, Warning, TEXT("GetPlayerNickname was passed a bad player uniquenetid!"));
 | 
							UE_LOG(AdvancedIdentityLog, Warning, TEXT("GetPlayerNickname was passed a bad player uniquenetid!"));
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!IdentityInterface.IsValid())
 | 
						if (!IdentityInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -55,7 +68,7 @@ void UAdvancedIdentityLibrary::GetPlayerNickname(const FBPUniqueNetId & UniqueNe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedIdentityLibrary::GetLoginStatus(const FBPUniqueNetId & UniqueNetID, EBPLoginStatus & LoginStatus, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedIdentityLibrary::GetLoginStatus(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetID, EBPLoginStatus & LoginStatus, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetID.IsValid())
 | 
						if (!UniqueNetID.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -64,7 +77,14 @@ void UAdvancedIdentityLibrary::GetLoginStatus(const FBPUniqueNetId & UniqueNetID
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!IdentityInterface.IsValid())
 | 
						if (!IdentityInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -78,9 +98,17 @@ void UAdvancedIdentityLibrary::GetLoginStatus(const FBPUniqueNetId & UniqueNetID
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedIdentityLibrary::GetAllUserAccounts(TArray<FBPUserOnlineAccount> & AccountInfos, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedIdentityLibrary::GetAllUserAccounts(UObject* WorldContextObject, TArray<FBPUserOnlineAccount> & AccountInfos, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!IdentityInterface.IsValid())
 | 
						if (!IdentityInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -99,9 +127,17 @@ void UAdvancedIdentityLibrary::GetAllUserAccounts(TArray<FBPUserOnlineAccount> &
 | 
				
			||||||
	Result = EBlueprintResultSwitch::OnSuccess;
 | 
						Result = EBlueprintResultSwitch::OnSuccess;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedIdentityLibrary::GetUserAccount(const FBPUniqueNetId & UniqueNetId, FBPUserOnlineAccount & AccountInfo, EBlueprintResultSwitch &Result)
 | 
					void UAdvancedIdentityLibrary::GetUserAccount(UObject* WorldContextObject, const FBPUniqueNetId & UniqueNetId, FBPUserOnlineAccount & AccountInfo, EBlueprintResultSwitch &Result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Result = EBlueprintResultSwitch::OnFailure;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!UniqueNetId.IsValid())
 | 
						if(!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -477,6 +477,11 @@ bool UAdvancedSessionsLibrary::EqualEqual_UNetIDUnetID(const FBPUniqueNetId &A,
 | 
				
			||||||
	return ((A.IsValid() && B.IsValid()) && (*A.GetUniqueNetId() == *B.GetUniqueNetId()));
 | 
						return ((A.IsValid() && B.IsValid()) && (*A.GetUniqueNetId() == *B.GetUniqueNetId()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FUniqueNetIdRepl UAdvancedSessionsLibrary::Conv_BPUniqueIDToUniqueNetIDRepl(const FBPUniqueNetId& InUniqueID)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return FUniqueNetIdRepl(InUniqueID.GetUniqueNetId()->AsShared());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedSessionsLibrary::SetPlayerName(APlayerController *PlayerController, FString PlayerName)
 | 
					void UAdvancedSessionsLibrary::SetPlayerName(APlayerController *PlayerController, FString PlayerName)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!PlayerController)
 | 
						if (!PlayerController)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,9 +5,16 @@
 | 
				
			||||||
//General Log
 | 
					//General Log
 | 
				
			||||||
DEFINE_LOG_CATEGORY(AdvancedVoiceLog);
 | 
					DEFINE_LOG_CATEGORY(AdvancedVoiceLog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::IsHeadsetPresent(bool & bHasHeadset, uint8 LocalPlayerNum)
 | 
					void UAdvancedVoiceLibrary::IsHeadsetPresent(UObject* WorldContextObject, bool & bHasHeadset, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -19,9 +26,16 @@ void UAdvancedVoiceLibrary::IsHeadsetPresent(bool & bHasHeadset, uint8 LocalPlay
 | 
				
			||||||
	bHasHeadset = VoiceInterface->IsHeadsetPresent(LocalPlayerNum);
 | 
						bHasHeadset = VoiceInterface->IsHeadsetPresent(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::StartNetworkedVoice(uint8 LocalPlayerNum)
 | 
					void UAdvancedVoiceLibrary::StartNetworkedVoice(UObject* WorldContextObject, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -32,9 +46,16 @@ void UAdvancedVoiceLibrary::StartNetworkedVoice(uint8 LocalPlayerNum)
 | 
				
			||||||
	VoiceInterface->StartNetworkedVoice(LocalPlayerNum);
 | 
						VoiceInterface->StartNetworkedVoice(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::StopNetworkedVoice(uint8 LocalPlayerNum)
 | 
					void UAdvancedVoiceLibrary::StopNetworkedVoice(UObject* WorldContextObject, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -45,9 +66,15 @@ void UAdvancedVoiceLibrary::StopNetworkedVoice(uint8 LocalPlayerNum)
 | 
				
			||||||
	VoiceInterface->StopNetworkedVoice(LocalPlayerNum);
 | 
						VoiceInterface->StopNetworkedVoice(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::RegisterLocalTalker(uint8 LocalPlayerNum)
 | 
					bool UAdvancedVoiceLibrary::RegisterLocalTalker(UObject* WorldContextObject, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -58,9 +85,16 @@ bool UAdvancedVoiceLibrary::RegisterLocalTalker(uint8 LocalPlayerNum)
 | 
				
			||||||
	return VoiceInterface->RegisterLocalTalker(LocalPlayerNum);
 | 
						return VoiceInterface->RegisterLocalTalker(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::RegisterAllLocalTalkers()
 | 
					void UAdvancedVoiceLibrary::RegisterAllLocalTalkers(UObject* WorldContextObject)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -72,9 +106,16 @@ void UAdvancedVoiceLibrary::RegisterAllLocalTalkers()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::UnRegisterLocalTalker(uint8 LocalPlayerNum)
 | 
					void UAdvancedVoiceLibrary::UnRegisterLocalTalker(UObject* WorldContextObject, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -85,9 +126,16 @@ void UAdvancedVoiceLibrary::UnRegisterLocalTalker(uint8 LocalPlayerNum)
 | 
				
			||||||
	VoiceInterface->UnregisterLocalTalker(LocalPlayerNum);
 | 
						VoiceInterface->UnregisterLocalTalker(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::UnRegisterAllLocalTalkers()
 | 
					void UAdvancedVoiceLibrary::UnRegisterAllLocalTalkers(UObject* WorldContextObject)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -98,7 +146,7 @@ void UAdvancedVoiceLibrary::UnRegisterAllLocalTalkers()
 | 
				
			||||||
	VoiceInterface->UnregisterLocalTalkers();
 | 
						VoiceInterface->UnregisterLocalTalkers();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::RegisterRemoteTalker(const FBPUniqueNetId& UniqueNetId)
 | 
					bool UAdvancedVoiceLibrary::RegisterRemoteTalker(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -106,7 +154,13 @@ bool UAdvancedVoiceLibrary::RegisterRemoteTalker(const FBPUniqueNetId& UniqueNet
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -117,7 +171,7 @@ bool UAdvancedVoiceLibrary::RegisterRemoteTalker(const FBPUniqueNetId& UniqueNet
 | 
				
			||||||
	return VoiceInterface->RegisterRemoteTalker(*UniqueNetId.GetUniqueNetId());
 | 
						return VoiceInterface->RegisterRemoteTalker(*UniqueNetId.GetUniqueNetId());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::UnRegisterRemoteTalker(const FBPUniqueNetId& UniqueNetId)
 | 
					bool UAdvancedVoiceLibrary::UnRegisterRemoteTalker(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -125,7 +179,13 @@ bool UAdvancedVoiceLibrary::UnRegisterRemoteTalker(const FBPUniqueNetId& UniqueN
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -136,9 +196,16 @@ bool UAdvancedVoiceLibrary::UnRegisterRemoteTalker(const FBPUniqueNetId& UniqueN
 | 
				
			||||||
	return VoiceInterface->UnregisterRemoteTalker(*UniqueNetId.GetUniqueNetId());
 | 
						return VoiceInterface->UnregisterRemoteTalker(*UniqueNetId.GetUniqueNetId());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::RemoveAllRemoteTalkers()
 | 
					void UAdvancedVoiceLibrary::RemoveAllRemoteTalkers(UObject* WorldContextObject)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -149,9 +216,16 @@ void UAdvancedVoiceLibrary::RemoveAllRemoteTalkers()
 | 
				
			||||||
	VoiceInterface->RemoveAllRemoteTalkers();
 | 
						VoiceInterface->RemoveAllRemoteTalkers();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::IsLocalPlayerTalking(uint8 LocalPlayerNum)
 | 
					bool UAdvancedVoiceLibrary::IsLocalPlayerTalking(UObject* WorldContextObject, uint8 LocalPlayerNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -162,7 +236,7 @@ bool UAdvancedVoiceLibrary::IsLocalPlayerTalking(uint8 LocalPlayerNum)
 | 
				
			||||||
	return VoiceInterface->IsLocalPlayerTalking(LocalPlayerNum);
 | 
						return VoiceInterface->IsLocalPlayerTalking(LocalPlayerNum);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::IsRemotePlayerTalking(const FBPUniqueNetId& UniqueNetId)
 | 
					bool UAdvancedVoiceLibrary::IsRemotePlayerTalking(UObject* WorldContextObject, const FBPUniqueNetId& UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -170,7 +244,13 @@ bool UAdvancedVoiceLibrary::IsRemotePlayerTalking(const FBPUniqueNetId& UniqueNe
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -181,7 +261,7 @@ bool UAdvancedVoiceLibrary::IsRemotePlayerTalking(const FBPUniqueNetId& UniqueNe
 | 
				
			||||||
	return VoiceInterface->IsRemotePlayerTalking(*UniqueNetId.GetUniqueNetId());
 | 
						return VoiceInterface->IsRemotePlayerTalking(*UniqueNetId.GetUniqueNetId());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::IsPlayerMuted(uint8 LocalUserNumChecking, const FBPUniqueNetId& UniqueNetId)
 | 
					bool UAdvancedVoiceLibrary::IsPlayerMuted(UObject* WorldContextObject, uint8 LocalUserNumChecking, const FBPUniqueNetId& UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -189,7 +269,13 @@ bool UAdvancedVoiceLibrary::IsPlayerMuted(uint8 LocalUserNumChecking, const FBPU
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -200,7 +286,7 @@ bool UAdvancedVoiceLibrary::IsPlayerMuted(uint8 LocalUserNumChecking, const FBPU
 | 
				
			||||||
	return VoiceInterface->IsMuted(LocalUserNumChecking, *UniqueNetId.GetUniqueNetId());
 | 
						return VoiceInterface->IsMuted(LocalUserNumChecking, *UniqueNetId.GetUniqueNetId());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::MuteRemoteTalker(uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide)
 | 
					bool UAdvancedVoiceLibrary::MuteRemoteTalker(UObject* WorldContextObject, uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -208,7 +294,13 @@ bool UAdvancedVoiceLibrary::MuteRemoteTalker(uint8 LocalUserNum, const FBPUnique
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -219,7 +311,7 @@ bool UAdvancedVoiceLibrary::MuteRemoteTalker(uint8 LocalUserNum, const FBPUnique
 | 
				
			||||||
	return VoiceInterface->MuteRemoteTalker(LocalUserNum, *UniqueNetId.GetUniqueNetId(), bIsSystemWide);
 | 
						return VoiceInterface->MuteRemoteTalker(LocalUserNum, *UniqueNetId.GetUniqueNetId(), bIsSystemWide);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedVoiceLibrary::UnMuteRemoteTalker(uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide)
 | 
					bool UAdvancedVoiceLibrary::UnMuteRemoteTalker(UObject* WorldContextObject, uint8 LocalUserNum, const FBPUniqueNetId& UniqueNetId, bool bIsSystemWide)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!UniqueNetId.IsValid())
 | 
						if (!UniqueNetId.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -227,7 +319,13 @@ bool UAdvancedVoiceLibrary::UnMuteRemoteTalker(uint8 LocalUserNum, const FBPUniq
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -239,9 +337,16 @@ bool UAdvancedVoiceLibrary::UnMuteRemoteTalker(uint8 LocalUserNum, const FBPUniq
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAdvancedVoiceLibrary::GetNumLocalTalkers(int32 & NumLocalTalkers)
 | 
					void UAdvancedVoiceLibrary::GetNumLocalTalkers(UObject* WorldContextObject, int32 & NumLocalTalkers)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
 | 
					
 | 
				
			||||||
 | 
						UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
 | 
				
			||||||
 | 
						if (!IsValid(World))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface(World);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!VoiceInterface.IsValid())
 | 
						if (!VoiceInterface.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,13 +24,19 @@ UAutoLoginUserCallbackProxy* UAutoLoginUserCallbackProxy::AutoLoginUser(UObject*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAutoLoginUserCallbackProxy::Activate()
 | 
					void UAutoLoginUserCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto Identity = Online::GetIdentityInterface();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Identity.IsValid())
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("AutoLoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DelegateHandle = Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNumber, Delegate);
 | 
							auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
		Identity->AutoLogin(LocalUserNumber);
 | 
					
 | 
				
			||||||
		return;
 | 
							if (Identity.IsValid())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								DelegateHandle = Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNumber, Delegate);
 | 
				
			||||||
 | 
								Identity->AutoLogin(LocalUserNumber);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Fail immediately
 | 
						// Fail immediately
 | 
				
			||||||
| 
						 | 
					@ -39,38 +45,45 @@ void UAutoLoginUserCallbackProxy::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UAutoLoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& ErrorVal)
 | 
					void UAutoLoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& ErrorVal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto Identity = Online::GetIdentityInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("AutoLoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if (Identity.IsValid())
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, DelegateHandle);
 | 
							auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(APlayerController* PController = UGameplayStatics::GetPlayerController(WorldContextObject->GetWorld(), LocalUserNum))
 | 
							if (Identity.IsValid())
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ULocalPlayer* Player = Cast<ULocalPlayer>(PController->Player);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		FUniqueNetIdRepl uniqueId(UserId.AsShared());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (Player)
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Player->SetCachedUniqueNetId(uniqueId);
 | 
								Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, DelegateHandle);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (APlayerState* State = PController->PlayerState)
 | 
							if (APlayerController* PController = UGameplayStatics::GetPlayerController(WorldContextObject->GetWorld(), LocalUserNum))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Update UniqueId. See also ShowLoginUICallbackProxy.cpp
 | 
								ULocalPlayer* Player = Cast<ULocalPlayer>(PController->Player);
 | 
				
			||||||
			State->SetUniqueId(uniqueId);
 | 
					
 | 
				
			||||||
 | 
								FUniqueNetIdRepl uniqueId(UserId.AsShared());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (Player)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									Player->SetCachedUniqueNetId(uniqueId);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (APlayerState* State = PController->PlayerState)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// Update UniqueId. See also ShowLoginUICallbackProxy.cpp
 | 
				
			||||||
 | 
									State->SetUniqueId(uniqueId);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (bWasSuccessful)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								OnSuccess.Broadcast();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								OnFailure.Broadcast();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						OnFailure.Broadcast();
 | 
				
			||||||
	if (bWasSuccessful)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		OnSuccess.Broadcast();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		OnFailure.Broadcast();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ UCancelFindSessionsCallbackProxy* UCancelFindSessionsCallbackProxy::CancelFindSe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UCancelFindSessionsCallbackProxy::Activate()
 | 
					void UCancelFindSessionsCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ void UCancelFindSessionsCallbackProxy::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UCancelFindSessionsCallbackProxy::OnCompleted(bool bWasSuccessful)
 | 
					void UCancelFindSessionsCallbackProxy::OnCompleted(bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ UCreateSessionCallbackProxyAdvanced* UCreateSessionCallbackProxyAdvanced::Create
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UCreateSessionCallbackProxyAdvanced::Activate()
 | 
					void UCreateSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (PlayerControllerWeakPtr.IsValid() )
 | 
						if (PlayerControllerWeakPtr.IsValid() )
 | 
				
			||||||
		Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
							Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ void UCreateSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UCreateSessionCallbackProxyAdvanced::OnCreateCompleted(FName SessionName, bool bWasSuccessful)
 | 
					void UCreateSessionCallbackProxyAdvanced::OnCreateCompleted(FName SessionName, bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	//Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						//Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ void UCreateSessionCallbackProxyAdvanced::OnCreateCompleted(FName SessionName, b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UCreateSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful)
 | 
					void UCreateSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	//Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						//Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ UEndSessionCallbackProxy* UEndSessionCallbackProxy::EndSession(UObject* WorldCon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UEndSessionCallbackProxy::Activate()
 | 
					void UEndSessionCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ void UEndSessionCallbackProxy::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UEndSessionCallbackProxy::OnCompleted(FName SessionName, bool bWasSuccessful)
 | 
					void UEndSessionCallbackProxy::OnCompleted(FName SessionName, bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,18 @@ void UFindFriendSessionCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld());
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.IsValid())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Fail immediately
 | 
				
			||||||
 | 
							TArray<FBlueprintSessionResult> EmptyResult;
 | 
				
			||||||
 | 
							OnFailure.Broadcast(EmptyResult);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineSessionPtr Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Sessions.IsValid())
 | 
						if (Sessions.IsValid())
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
| 
						 | 
					@ -71,31 +82,43 @@ void UFindFriendSessionCallbackProxy::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UFindFriendSessionCallbackProxy::OnFindFriendSessionCompleted(int32 LocalPlayer, bool bWasSuccessful, const TArray<FOnlineSessionSearchResult>& SessionInfo)
 | 
					void UFindFriendSessionCallbackProxy::OnFindFriendSessionCompleted(int32 LocalPlayer, bool bWasSuccessful, const TArray<FOnlineSessionSearchResult>& SessionInfo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld());
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Sessions.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
		Sessions->ClearOnFindFriendSessionCompleteDelegate_Handle(LocalPlayer, FindFriendSessionCompleteDelegateHandle);
 | 
						{
 | 
				
			||||||
 | 
							IOnlineSessionPtr Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ( bWasSuccessful )
 | 
							if (Sessions.IsValid())
 | 
				
			||||||
	{ 
 | 
								Sessions->ClearOnFindFriendSessionCompleteDelegate_Handle(LocalPlayer, FindFriendSessionCompleteDelegateHandle);
 | 
				
			||||||
		TArray<FBlueprintSessionResult> Result;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (auto& Sesh : SessionInfo)
 | 
							if (bWasSuccessful)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (Sesh.IsValid())
 | 
								TArray<FBlueprintSessionResult> Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (auto& Sesh : SessionInfo)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				FBlueprintSessionResult BSesh;
 | 
									if (Sesh.IsValid())
 | 
				
			||||||
				BSesh.OnlineResult = Sesh;
 | 
									{
 | 
				
			||||||
				Result.Add(BSesh);
 | 
										FBlueprintSessionResult BSesh;
 | 
				
			||||||
 | 
										BSesh.OnlineResult = Sesh;
 | 
				
			||||||
 | 
										Result.Add(BSesh);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (Result.Num() > 0)
 | 
				
			||||||
 | 
									OnSuccess.Broadcast(Result);
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed, returned an invalid session."));
 | 
				
			||||||
 | 
									OnFailure.Broadcast(Result);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if(Result.Num() > 0)
 | 
					 | 
				
			||||||
			OnSuccess.Broadcast(Result);
 | 
					 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed, returned an invalid session."));
 | 
								UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed"));
 | 
				
			||||||
			OnFailure.Broadcast(Result);
 | 
								TArray<FBlueprintSessionResult> EmptyResult;
 | 
				
			||||||
 | 
								OnFailure.Broadcast(EmptyResult);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@ UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UFindSessionsCallbackProxyAdvanced::Activate()
 | 
					void UFindSessionsCallbackProxyAdvanced::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.IsValid())
 | 
						if (Helper.IsValid())
 | 
				
			||||||
| 
						 | 
					@ -115,8 +115,8 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
 | 
				
			||||||
			case EBPServerPresenceSearchType::ClientServersOnly:
 | 
								case EBPServerPresenceSearchType::ClientServersOnly:
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
 | 
									tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
 | 
				
			||||||
 | 
									
 | 
				
			||||||
				if (bSearchLobbies)
 | 
									if (bSearchLobbies && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
 | 
				
			||||||
					tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
 | 
										tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
| 
						 | 
					@ -142,7 +142,7 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
 | 
									tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (bSearchLobbies)
 | 
									if (bSearchLobbies && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
 | 
				
			||||||
					tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
 | 
										tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//DedicatedOnly.Set(SEARCH_DEDICATED_ONLY, true, EOnlineComparisonOp::Equals);
 | 
									//DedicatedOnly.Set(SEARCH_DEDICATED_ONLY, true, EOnlineComparisonOp::Equals);
 | 
				
			||||||
| 
						 | 
					@ -172,9 +172,16 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UFindSessionsCallbackProxyAdvanced::OnCompleted(bool bSuccess)
 | 
					void UFindSessionsCallbackProxyAdvanced::OnCompleted(bool bSuccess)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.IsValid())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Fail immediately
 | 
				
			||||||
 | 
							OnFailure.Broadcast(SessionSearchResults);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!bRunSecondSearch && Helper.IsValid())
 | 
						if (!bRunSecondSearch && Helper.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		auto Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
							auto Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
#include "GetFriendsCallbackProxy.h"
 | 
					#include "GetFriendsCallbackProxy.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Online.h"
 | 
					#include "Online.h"
 | 
				
			||||||
 | 
					#include "Interfaces/OnlineFriendsInterface.h"
 | 
				
			||||||
#include "Interfaces/OnlinePresenceInterface.h"
 | 
					#include "Interfaces/OnlinePresenceInterface.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
| 
						 | 
					@ -33,18 +34,23 @@ void UGetFriendsCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineFriendsPtr Friends = Online::GetFriendsInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetFriends"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
	if (Friends.IsValid())
 | 
						Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
	{	
 | 
					 | 
				
			||||||
		ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Friends->ReadFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendListReadCompleteDelegate);
 | 
						if (Helper.IsValid())
 | 
				
			||||||
		return;
 | 
						{
 | 
				
			||||||
 | 
							IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface();
 | 
				
			||||||
 | 
							if (Friends.IsValid())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Friends->ReadFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendListReadCompleteDelegate);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Fail immediately
 | 
						// Fail immediately
 | 
				
			||||||
	TArray<FBPFriendInfo> EmptyArray;
 | 
						TArray<FBPFriendInfo> EmptyArray;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	OnFailure.Broadcast(EmptyArray);
 | 
						OnFailure.Broadcast(EmptyArray);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +58,17 @@ void UGetFriendsCallbackProxy::OnReadFriendsListCompleted(int32 LocalUserNum, bo
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (bWasSuccessful)
 | 
						if (bWasSuccessful)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		IOnlineFriendsPtr Friends = Online::GetFriendsInterface();
 | 
							FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetFriends"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
							Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!Helper.IsValid())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TArray<FBPFriendInfo> EmptyArray;
 | 
				
			||||||
 | 
								OnFailure.Broadcast(EmptyArray);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							auto Friends = Helper.OnlineSub->GetFriendsInterface();
 | 
				
			||||||
		if (Friends.IsValid())
 | 
							if (Friends.IsValid())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Not actually needed anymore, plus was not being validated and causing a crash
 | 
								// Not actually needed anymore, plus was not being validated and causing a crash
 | 
				
			||||||
| 
						 | 
					@ -60,29 +76,31 @@ void UGetFriendsCallbackProxy::OnReadFriendsListCompleted(int32 LocalUserNum, bo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			TArray<FBPFriendInfo> FriendsListOut;
 | 
								TArray<FBPFriendInfo> FriendsListOut;
 | 
				
			||||||
			TArray< TSharedRef<FOnlineFriend> > FriendList;
 | 
								TArray< TSharedRef<FOnlineFriend> > FriendList;
 | 
				
			||||||
			Friends->GetFriendsList(LocalUserNum, ListName, FriendList);
 | 
								if (Friends->GetFriendsList(LocalUserNum, ListName, FriendList))
 | 
				
			||||||
 | 
					 | 
				
			||||||
			for (int32 i = 0; i < FriendList.Num(); i++)
 | 
					 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				TSharedRef<FOnlineFriend> Friend = FriendList[i];
 | 
									for (int32 i = 0; i < FriendList.Num(); i++)
 | 
				
			||||||
				FBPFriendInfo BPF;
 | 
									{
 | 
				
			||||||
				FOnlineUserPresence pres = Friend->GetPresence();
 | 
										FBPFriendInfo BPF;
 | 
				
			||||||
				BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
										const FOnlineUserPresence& pres = FriendList[i]->GetPresence();
 | 
				
			||||||
				BPF.DisplayName = Friend->GetDisplayName();
 | 
										BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
				BPF.RealName = Friend->GetRealName();
 | 
										BPF.DisplayName = FriendList[i]->GetDisplayName();
 | 
				
			||||||
				BPF.UniqueNetId.SetUniqueNetId(Friend->GetUserId());
 | 
										BPF.RealName = FriendList[i]->GetRealName();
 | 
				
			||||||
				BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
 | 
										BPF.UniqueNetId.SetUniqueNetId(FriendList[i]->GetUserId());
 | 
				
			||||||
 | 
										BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
 | 
										BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
 | 
				
			||||||
				BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
 | 
										BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
 | 
				
			||||||
				BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
										BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
 | 
				
			||||||
				BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
										BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
 | 
				
			||||||
				BPF.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
										
 | 
				
			||||||
				BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
 | 
										// #TODO: Check back in on this in shipping, epic is missing the UTF8_TO_TCHAR call on converting this and its making an invalid string
 | 
				
			||||||
				BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
										//BPF.PresenceInfo.StatusString = pres.Status.StatusStr;
 | 
				
			||||||
 | 
										BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
 | 
				
			||||||
 | 
										BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				FriendsListOut.Add(BPF);
 | 
										FriendsListOut.Add(BPF);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			OnSuccess.Broadcast(FriendsListOut);
 | 
								OnSuccess.Broadcast(FriendsListOut);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,16 @@ void UGetRecentPlayersCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineFriendsPtr Friends = Online::GetFriendsInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetRecentPlayers"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TArray<FBPOnlineRecentPlayer> EmptyArray;
 | 
				
			||||||
 | 
							OnFailure.Broadcast(EmptyArray);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface();
 | 
				
			||||||
	if (Friends.IsValid())
 | 
						if (Friends.IsValid())
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
		DelegateHandle = Friends->AddOnQueryRecentPlayersCompleteDelegate_Handle(QueryRecentPlayersCompleteDelegate);
 | 
							DelegateHandle = Friends->AddOnQueryRecentPlayersCompleteDelegate_Handle(QueryRecentPlayersCompleteDelegate);
 | 
				
			||||||
| 
						 | 
					@ -49,7 +58,16 @@ void UGetRecentPlayersCallbackProxy::Activate()
 | 
				
			||||||
void UGetRecentPlayersCallbackProxy::OnQueryRecentPlayersCompleted(const FUniqueNetId &UserID, const FString &Namespace, bool bWasSuccessful, const FString& ErrorString)
 | 
					void UGetRecentPlayersCallbackProxy::OnQueryRecentPlayersCompleted(const FUniqueNetId &UserID, const FString &Namespace, bool bWasSuccessful, const FString& ErrorString)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	IOnlineFriendsPtr Friends = Online::GetFriendsInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetRecentPlayers"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							TArray<FBPOnlineRecentPlayer> EmptyArray;
 | 
				
			||||||
 | 
							OnFailure.Broadcast(EmptyArray);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface();
 | 
				
			||||||
	if (Friends.IsValid())
 | 
						if (Friends.IsValid())
 | 
				
			||||||
		Friends->ClearOnQueryRecentPlayersCompleteDelegate_Handle(DelegateHandle);
 | 
							Friends->ClearOnQueryRecentPlayersCompleteDelegate_Handle(DelegateHandle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,14 @@ UGetUserPrivilegeCallbackProxy* UGetUserPrivilegeCallbackProxy::GetUserPrivilege
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UGetUserPrivilegeCallbackProxy::Activate()
 | 
					void UGetUserPrivilegeCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto Identity = Online::GetIdentityInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetUserPrivilege"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							OnFailure.Broadcast();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Identity.IsValid())
 | 
						if (Identity.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,15 @@ void ULoginUserCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	auto Identity = Online::GetIdentityInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							OnFailure.Broadcast();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
	if (Identity.IsValid())
 | 
						if (Identity.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Fallback to default AuthType if nothing is specified
 | 
							// Fallback to default AuthType if nothing is specified
 | 
				
			||||||
| 
						 | 
					@ -70,8 +77,15 @@ void ULoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSuccessfu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (Player)
 | 
							if (Player)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			auto Identity = Online::GetIdentityInterface();
 | 
								FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetUserPrivilege"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									OnFailure.Broadcast();
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
			if (Identity.IsValid())
 | 
								if (Identity.IsValid())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Identity->ClearOnLoginCompleteDelegate_Handle(Player->GetControllerId(), DelegateHandle);
 | 
									Identity->ClearOnLoginCompleteDelegate_Handle(Player->GetControllerId(), DelegateHandle);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,6 @@ void ULogoutUserCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
	ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
						ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!Player)
 | 
						if (!Player)
 | 
				
			||||||
| 
						 | 
					@ -39,7 +38,14 @@ void ULogoutUserCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	auto Identity = Online::GetIdentityInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LogoutUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							OnFailure.Broadcast();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Identity.IsValid())
 | 
						if (Identity.IsValid())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -61,7 +67,14 @@ void ULogoutUserCallbackProxy::OnCompleted(int LocalUserNum, bool bWasSuccessful
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (Player)
 | 
							if (Player)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			auto Identity = Online::GetIdentityInterface();
 | 
								FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LogoutUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									OnFailure.Broadcast();
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								auto Identity = Helper.OnlineSub->GetIdentityInterface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (Identity.IsValid())
 | 
								if (Identity.IsValid())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,15 @@ void USendFriendInviteCallbackProxy::Activate()
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IOnlineFriendsPtr Friends = Online::GetFriendsInterface();
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("SendFriendInvite"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!Helper.OnlineSub)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							OnFailure.Broadcast();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						auto Friends = Helper.OnlineSub->GetFriendsInterface();
 | 
				
			||||||
	if (Friends.IsValid())
 | 
						if (Friends.IsValid())
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
		ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
							ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ UStartSessionCallbackProxyAdvanced::UStartSessionCallbackProxyAdvanced(const FOb
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
UStartSessionCallbackProxyAdvanced* UStartSessionCallbackProxyAdvanced::StartAdvancedSession(
 | 
					UStartSessionCallbackProxyAdvanced* UStartSessionCallbackProxyAdvanced::StartAdvancedSession(
 | 
				
			||||||
	const UObject* WorldContextObject)
 | 
						UObject* WorldContextObject)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	UStartSessionCallbackProxyAdvanced* Proxy = NewObject<UStartSessionCallbackProxyAdvanced>();
 | 
						UStartSessionCallbackProxyAdvanced* Proxy = NewObject<UStartSessionCallbackProxyAdvanced>();
 | 
				
			||||||
	Proxy->WorldContextObject = WorldContextObject;
 | 
						Proxy->WorldContextObject = WorldContextObject;
 | 
				
			||||||
| 
						 | 
					@ -16,9 +16,7 @@ UStartSessionCallbackProxyAdvanced* UStartSessionCallbackProxyAdvanced::StartAdv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UStartSessionCallbackProxyAdvanced::Activate()
 | 
					void UStartSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const FOnlineSubsystemBPCallHelperAdvanced Helper(
 | 
						const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
		TEXT("StartSession"),
 | 
					 | 
				
			||||||
		GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -38,13 +36,11 @@ void UStartSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UStartSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful)
 | 
					void UStartSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const FOnlineSubsystemBPCallHelperAdvanced Helper(
 | 
						FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
		TEXT("StartSessionCallback"),
 | 
					 | 
				
			||||||
		GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		const auto Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
							auto Sessions = Helper.OnlineSub->GetSessionInterface();
 | 
				
			||||||
		if (Sessions.IsValid())
 | 
							if (Sessions.IsValid())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Sessions->ClearOnStartSessionCompleteDelegate_Handle(StartCompleteDelegateHandle);
 | 
								Sessions->ClearOnStartSessionCompleteDelegate_Handle(StartCompleteDelegateHandle);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::Update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UUpdateSessionCallbackProxyAdvanced::Activate()
 | 
					void UUpdateSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -105,7 +105,7 @@ void UUpdateSessionCallbackProxyAdvanced::Activate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UUpdateSessionCallbackProxyAdvanced::OnUpdateCompleted(FName SessionName, bool bWasSuccessful)
 | 
					void UUpdateSessionCallbackProxyAdvanced::OnUpdateCompleted(FName SessionName, bool bWasSuccessful)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull));
 | 
						const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (Helper.OnlineSub != nullptr)
 | 
						if (Helper.OnlineSub != nullptr)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,8 @@
 | 
				
			||||||
    "FileVersion" : 3,
 | 
					    "FileVersion" : 3,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
    "FriendlyName" : "Advanced Steam Sessions",
 | 
					    "FriendlyName" : "Advanced Steam Sessions",
 | 
				
			||||||
    "Version" : 5.1,
 | 
					    "Version" : 5.4,
 | 
				
			||||||
    "VersionName": "5.1",
 | 
					    "VersionName": "5.4",
 | 
				
			||||||
    "Description" : "Adds new blueprint functions to handle more advanced session operations in Steam. REQUIRES ADVANCED SESSIONS",
 | 
					    "Description" : "Adds new blueprint functions to handle more advanced session operations in Steam. REQUIRES ADVANCED SESSIONS",
 | 
				
			||||||
    "Category" : "Advanced Sessions Plugin",
 | 
					    "Category" : "Advanced Sessions Plugin",
 | 
				
			||||||
    "CreatedBy" : "Joshua Statzer",
 | 
					    "CreatedBy" : "Joshua Statzer",
 | 
				
			||||||
| 
						 | 
					@ -11,11 +11,11 @@
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
    "Modules" :
 | 
					    "Modules" :
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        {
 | 
								{
 | 
				
			||||||
            "Name" : "AdvancedSteamSessions",
 | 
									"Name": "AdvancedSteamSessions",
 | 
				
			||||||
            "Type" : "RunTime",
 | 
									"Type": "RunTime",
 | 
				
			||||||
	    "LoadingPhase" : "PreDefault"
 | 
									"LoadingPhase": "Default"
 | 
				
			||||||
        } 
 | 
								} 
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
	"Plugins": [
 | 
						"Plugins": [
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,10 @@
 | 
				
			||||||
			"Name": "OnlineSubsystem",
 | 
								"Name": "OnlineSubsystem",
 | 
				
			||||||
			"Enabled": true
 | 
								"Enabled": true
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"Name": "OnlineSubsystemSteam",
 | 
				
			||||||
 | 
								"Enabled": true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"Name": "OnlineSubsystemUtils",
 | 
								"Name": "OnlineSubsystemUtils",
 | 
				
			||||||
			"Enabled": true
 | 
								"Enabled": true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ public class AdvancedSteamSessions : ModuleRules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Linux) || (Target.Platform == UnrealTargetPlatform.Mac))
 | 
					        if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Linux) || (Target.Platform == UnrealTargetPlatform.Mac))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            PublicDependencyModuleNames.AddRange(new string[] { "Steamworks"/*, "OnlineSubsystemSteam"*/ });
 | 
					            PublicDependencyModuleNames.AddRange(new string[] { "SteamShared", "Steamworks", "OnlineSubsystemSteam" });
 | 
				
			||||||
            //PublicIncludePaths.AddRange(new string[] { "../Plugins/Online/OnlineSubsystemSteam/Source/Private" });// This is dumb but it isn't very open
 | 
					            //PublicIncludePaths.AddRange(new string[] { "../Plugins/Online/OnlineSubsystemSteam/Source/Private" });// This is dumb but it isn't very open
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@
 | 
				
			||||||
#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
					#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma push_macro("ARRAY_COUNT")
 | 
					#pragma push_macro("ARRAY_COUNT")
 | 
				
			||||||
#undef ARRAY_COUNT
 | 
					#undef ARRAY_COUNT
 | 
				
			||||||
| 
						 | 
					@ -267,7 +267,9 @@ enum class ESteamUserOverlayType : uint8
 | 
				
			||||||
	/*Opens the overlay in minimal mode prompting the user to accept an incoming friend invite.*/
 | 
						/*Opens the overlay in minimal mode prompting the user to accept an incoming friend invite.*/
 | 
				
			||||||
	friendrequestaccept,
 | 
						friendrequestaccept,
 | 
				
			||||||
	/*Opens the overlay in minimal mode prompting the user to ignore an incoming friend invite.*/
 | 
						/*Opens the overlay in minimal mode prompting the user to ignore an incoming friend invite.*/
 | 
				
			||||||
	friendrequestignore
 | 
						friendrequestignore,
 | 
				
			||||||
 | 
						/*Opens the invite overlay, invitations sent from this dialog will be for the provided lobby*/
 | 
				
			||||||
 | 
						invitetolobby
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static FString EnumToString(const FString& enumName, uint8 value)
 | 
					static FString EnumToString(const FString& enumName, uint8 value)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
#include "Kismet/BlueprintFunctionLibrary.h"
 | 
					#include "Kismet/BlueprintFunctionLibrary.h"
 | 
				
			||||||
#include "Online.h"
 | 
					#include "Online.h"
 | 
				
			||||||
#include "OnlineSubsystem.h"
 | 
					#include "OnlineSubsystem.h"
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
#include "steam/isteamugc.h"
 | 
					#include "steam/isteamugc.h"
 | 
				
			||||||
#include "steam/isteamremotestorage.h"
 | 
					#include "steam/isteamremotestorage.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@
 | 
				
			||||||
#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
					#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma push_macro("ARRAY_COUNT")
 | 
					#pragma push_macro("ARRAY_COUNT")
 | 
				
			||||||
#undef ARRAY_COUNT
 | 
					#undef ARRAY_COUNT
 | 
				
			||||||
| 
						 | 
					@ -223,7 +223,7 @@ public:
 | 
				
			||||||
		bTagsTruncated = false;
 | 
							bTagsTruncated = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	FBPSteamWorkshopItemDetails(SteamUGCDetails_t &hUGCDetails)
 | 
						FBPSteamWorkshopItemDetails(SteamUGCDetails_t &hUGCDetails)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ResultOfRequest = (FBPSteamResult)hUGCDetails.m_eResult;
 | 
							ResultOfRequest = (FBPSteamResult)hUGCDetails.m_eResult;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,10 +5,7 @@
 | 
				
			||||||
#include "CoreMinimal.h"
 | 
					#include "CoreMinimal.h"
 | 
				
			||||||
#include "Subsystems/GameInstanceSubsystem.h"
 | 
					#include "Subsystems/GameInstanceSubsystem.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					 | 
				
			||||||
//#include "OnlineSubsystemSteam.h"
 | 
					 | 
				
			||||||
//#include "OnlineSubsystemSteamPrivate.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <steam/steam_api.h>
 | 
					#include <steam/steam_api.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +40,7 @@ public:
 | 
				
			||||||
			ParentSubsystem = MyParent;
 | 
								ParentSubsystem = MyParent;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
		cSteamEventsStore() :
 | 
							cSteamEventsStore() :
 | 
				
			||||||
		OnExternalUITriggeredCallback(this, &cSteamEventsStore::OnExternalUITriggered)
 | 
							OnExternalUITriggeredCallback(this, &cSteamEventsStore::OnExternalUITriggered)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -59,7 +56,7 @@ public:
 | 
				
			||||||
		//~cSteamEventsStore(){}
 | 
							//~cSteamEventsStore(){}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private:
 | 
						private:
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
		STEAM_CALLBACK(cSteamEventsStore, OnExternalUITriggered, GameOverlayActivated_t, OnExternalUITriggeredCallback);
 | 
							STEAM_CALLBACK(cSteamEventsStore, OnExternalUITriggered, GameOverlayActivated_t, OnExternalUITriggeredCallback);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					@ -79,7 +76,7 @@ public:
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
void USteamNotificationsSubsystem::cSteamEventsStore::OnExternalUITriggered(GameOverlayActivated_t* CallbackData)
 | 
					void USteamNotificationsSubsystem::cSteamEventsStore::OnExternalUITriggered(GameOverlayActivated_t* CallbackData)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (ParentSubsystem)
 | 
						if (ParentSubsystem)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@
 | 
				
			||||||
#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
					#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//#include "OnlineSubsystemSteam.h"
 | 
					//#include "OnlineSubsystemSteam.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,7 +87,7 @@ class USteamRequestGroupOfficersCallbackProxy : public UOnlineBlueprintCallProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	void OnRequestGroupOfficerDetails( ClanOfficerListResponse_t *pResult, bool bIOFailure);
 | 
						void OnRequestGroupOfficerDetails( ClanOfficerListResponse_t *pResult, bool bIOFailure);
 | 
				
			||||||
	CCallResult<USteamRequestGroupOfficersCallbackProxy, ClanOfficerListResponse_t> m_callResultGroupOfficerRequestDetails;
 | 
						CCallResult<USteamRequestGroupOfficersCallbackProxy, ClanOfficerListResponse_t> m_callResultGroupOfficerRequestDetails;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@
 | 
				
			||||||
#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
					#pragma warning(disable:4265) // SteamAPI CCallback< specifically, this warning is off by default but 4.17 turned it on....
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//#include "OnlineSubsystemSteam.h"
 | 
					//#include "OnlineSubsystemSteam.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,7 +72,7 @@ class USteamWSRequestUGCDetailsCallbackProxy : public UOnlineBlueprintCallProxyB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	// Internal callback when the operation completes, calls out to the public success/failure callbacks
 | 
						// Internal callback when the operation completes, calls out to the public success/failure callbacks
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	void OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure);
 | 
						void OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ DEFINE_LOG_CATEGORY(AdvancedSteamFriendsLog);
 | 
				
			||||||
/*int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId UniqueNetId)
 | 
					/*int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -59,7 +59,7 @@ DEFINE_LOG_CATEGORY(AdvancedSteamFriendsLog);
 | 
				
			||||||
void UAdvancedSteamFriendsLibrary::GetSteamGroups(TArray<FBPSteamGroupInfo> & SteamGroups)
 | 
					void UAdvancedSteamFriendsLibrary::GetSteamGroups(TArray<FBPSteamGroupInfo> & SteamGroups)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ void UAdvancedSteamFriendsLibrary::GetSteamGroups(TArray<FBPSteamGroupInfo> & St
 | 
				
			||||||
void UAdvancedSteamFriendsLibrary::GetSteamFriendGamePlayed(const FBPUniqueNetId UniqueNetId, EBlueprintResultSwitch &Result/*, FString & GameName*/, int32 & AppID)
 | 
					void UAdvancedSteamFriendsLibrary::GetSteamFriendGamePlayed(const FBPUniqueNetId UniqueNetId, EBlueprintResultSwitch &Result/*, FString & GameName*/, int32 & AppID)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendGamePlayed Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendGamePlayed Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@ void UAdvancedSteamFriendsLibrary::GetSteamFriendGamePlayed(const FBPUniqueNetId
 | 
				
			||||||
int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId UniqueNetId)
 | 
					int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -153,7 +153,7 @@ int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId Uni
 | 
				
			||||||
FString UAdvancedSteamFriendsLibrary::GetSteamPersonaName(const FBPUniqueNetId UniqueNetId)
 | 
					FString UAdvancedSteamFriendsLibrary::GetSteamPersonaName(const FBPUniqueNetId UniqueNetId)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamPersonaName Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamPersonaName Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -175,7 +175,7 @@ FBPUniqueNetId UAdvancedSteamFriendsLibrary::CreateSteamIDFromString(const FStri
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FBPUniqueNetId netId;
 | 
						FBPUniqueNetId netId;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!(SteamID64.Len() > 0))
 | 
						if (!(SteamID64.Len() > 0))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("CreateSteamIDFromString Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("CreateSteamIDFromString Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -200,7 +200,7 @@ FBPUniqueNetId UAdvancedSteamFriendsLibrary::GetLocalSteamIDFromSteam()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	FBPUniqueNetId netId;
 | 
						FBPUniqueNetId netId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		TSharedPtr<const FUniqueNetId> SteamID(new const FUniqueNetIdSteam2(SteamUser()->GetSteamID()));
 | 
							TSharedPtr<const FUniqueNetId> SteamID(new const FUniqueNetIdSteam2(SteamUser()->GetSteamID()));
 | 
				
			||||||
| 
						 | 
					@ -213,7 +213,7 @@ FBPUniqueNetId UAdvancedSteamFriendsLibrary::GetLocalSteamIDFromSteam()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId UniqueNetId, bool bRequireNameOnly)
 | 
					bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId UniqueNetId, bool bRequireNameOnly)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("RequestSteamFriendInfo Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("RequestSteamFriendInfo Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -235,7 +235,7 @@ bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId U
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType)
 | 
					bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("OpenSteamUserOverlay Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("OpenSteamUserOverlay Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -245,8 +245,15 @@ bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId Uni
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes());
 | 
							uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes());
 | 
				
			||||||
		FString DialogName = EnumToString("ESteamUserOverlayType", (uint8)DialogType);
 | 
							if (DialogType == ESteamUserOverlayType::invitetolobby)
 | 
				
			||||||
		SteamFriends()->ActivateGameOverlayToUser(TCHAR_TO_ANSI(*DialogName), id);
 | 
							{
 | 
				
			||||||
 | 
								SteamFriends()->ActivateGameOverlayInviteDialog(id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								FString DialogName = EnumToString("ESteamUserOverlayType", (uint8)DialogType);
 | 
				
			||||||
 | 
								SteamFriends()->ActivateGameOverlayToUser(TCHAR_TO_ANSI(*DialogName), id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -257,7 +264,7 @@ bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId Uni
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::IsOverlayEnabled()
 | 
					bool UAdvancedSteamFriendsLibrary::IsOverlayEnabled()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return SteamUtils()->IsOverlayEnabled();
 | 
							return SteamUtils()->IsOverlayEnabled();
 | 
				
			||||||
| 
						 | 
					@ -270,7 +277,7 @@ bool UAdvancedSteamFriendsLibrary::IsOverlayEnabled()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
UTexture2D * UAdvancedSteamFriendsLibrary::GetSteamFriendAvatar(const FBPUniqueNetId UniqueNetId, EBlueprintAsyncResultSwitch &Result, SteamAvatarSize AvatarSize)
 | 
					UTexture2D * UAdvancedSteamFriendsLibrary::GetSteamFriendAvatar(const FBPUniqueNetId UniqueNetId, EBlueprintAsyncResultSwitch &Result, SteamAvatarSize AvatarSize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
						if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendAvatar Had a bad UniqueNetId!"));
 | 
							UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendAvatar Had a bad UniqueNetId!"));
 | 
				
			||||||
| 
						 | 
					@ -339,16 +346,15 @@ UTexture2D * UAdvancedSteamFriendsLibrary::GetSteamFriendAvatar(const FBPUniqueN
 | 
				
			||||||
				FMemory::Memcpy(MipData, (void*)oAvatarRGBA, Height * Width * 4);
 | 
									FMemory::Memcpy(MipData, (void*)oAvatarRGBA, Height * Width * 4);
 | 
				
			||||||
				PlatformData->Mips[0].BulkData.Unlock();
 | 
									PlatformData->Mips[0].BulkData.Unlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Original implementation was missing this!!
 | 
					 | 
				
			||||||
				// the hell man......
 | 
					 | 
				
			||||||
				delete[] oAvatarRGBA;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				//Setting some Parameters for the Texture and finally returning it
 | 
									//Setting some Parameters for the Texture and finally returning it
 | 
				
			||||||
				PlatformData->SetNumSlices(1);
 | 
									PlatformData->SetNumSlices(1);
 | 
				
			||||||
				Avatar->NeverStream = true;
 | 
									Avatar->NeverStream = true;
 | 
				
			||||||
				//Avatar->CompressionSettings = TC_EditorIcon;
 | 
									//Avatar->CompressionSettings = TC_EditorIcon;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Free RGBA buffer regardless of whether it was used or not
 | 
				
			||||||
 | 
								delete[] oAvatarRGBA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Avatar->UpdateResource();
 | 
								Avatar->UpdateResource();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Result = EBlueprintAsyncResultSwitch::OnSuccess;
 | 
								Result = EBlueprintAsyncResultSwitch::OnSuccess;
 | 
				
			||||||
| 
						 | 
					@ -371,7 +377,7 @@ UTexture2D * UAdvancedSteamFriendsLibrary::GetSteamFriendAvatar(const FBPUniqueN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::InitTextFiltering()
 | 
					bool UAdvancedSteamFriendsLibrary::InitTextFiltering()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -385,7 +391,7 @@ bool UAdvancedSteamFriendsLibrary::InitTextFiltering()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::FilterText(FString TextToFilter, EBPTextFilteringContext Context, const FBPUniqueNetId TextSourceID, FString& FilteredText)
 | 
					bool UAdvancedSteamFriendsLibrary::FilterText(FString TextToFilter, EBPTextFilteringContext Context, const FBPUniqueNetId TextSourceID, FString& FilteredText)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -419,7 +425,7 @@ bool UAdvancedSteamFriendsLibrary::FilterText(FString TextToFilter, EBPTextFilte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool UAdvancedSteamFriendsLibrary::IsSteamInBigPictureMode()
 | 
					bool UAdvancedSteamFriendsLibrary::IsSteamInBigPictureMode()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ DEFINE_LOG_CATEGORY(AdvancedSteamWorkshopLog);
 | 
				
			||||||
void UAdvancedSteamWorkshopLibrary::GetNumSubscribedWorkshopItems(int32 & NumberOfItems)
 | 
					void UAdvancedSteamWorkshopLibrary::GetNumSubscribedWorkshopItems(int32 & NumberOfItems)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	NumberOfItems = 0;
 | 
						NumberOfItems = 0;
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -20,10 +20,10 @@ void UAdvancedSteamWorkshopLibrary::GetNumSubscribedWorkshopItems(int32 & Number
 | 
				
			||||||
		UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
 | 
							UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#else
 | 
				
			||||||
 | 
					 | 
				
			||||||
	UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : Called on an incompatible platform"));
 | 
						UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : Called on an incompatible platform"));
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopItems(int32 & NumberOfItems)
 | 
					TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopItems(int32 & NumberOfItems)
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopI
 | 
				
			||||||
	TArray<FBPSteamWorkshopID> outArray;
 | 
						TArray<FBPSteamWorkshopID> outArray;
 | 
				
			||||||
	NumberOfItems = 0;
 | 
						NumberOfItems = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -62,8 +62,8 @@ TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopI
 | 
				
			||||||
		UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
 | 
							UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
 | 
				
			||||||
		return outArray;
 | 
							return outArray;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#else
 | 
				
			||||||
 | 
					 | 
				
			||||||
	UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : Called on an incompatible platform"));
 | 
						UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : Called on an incompatible platform"));
 | 
				
			||||||
	return outArray;
 | 
						return outArray;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@
 | 
				
			||||||
#include "Online/CoreOnline.h"
 | 
					#include "Online/CoreOnline.h"
 | 
				
			||||||
#include "AdvancedSteamFriendsLibrary.h"
 | 
					#include "AdvancedSteamFriendsLibrary.h"
 | 
				
			||||||
#include "OnlineSubSystemHeader.h"
 | 
					#include "OnlineSubSystemHeader.h"
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
#include "steam/isteamfriends.h"
 | 
					#include "steam/isteamfriends.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
//#include "OnlineSubsystemSteamTypes.h"
 | 
					//#include "OnlineSubsystemSteamTypes.h"
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ USteamRequestGroupOfficersCallbackProxy* USteamRequestGroupOfficersCallbackProxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void USteamRequestGroupOfficersCallbackProxy::Activate()
 | 
					void USteamRequestGroupOfficersCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		uint64 id = *((uint64*)GroupUniqueID.UniqueNetId->GetBytes());
 | 
							uint64 id = *((uint64*)GroupUniqueID.UniqueNetId->GetBytes());
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ void USteamRequestGroupOfficersCallbackProxy::Activate()
 | 
				
			||||||
	OnFailure.Broadcast(EmptyArray);
 | 
						OnFailure.Broadcast(EmptyArray);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanOfficerListResponse_t *pResult, bool bIOFailure)
 | 
					void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanOfficerListResponse_t *pResult, bool bIOFailure)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	TArray<FBPSteamGroupOfficer> OfficerArray;
 | 
						TArray<FBPSteamGroupOfficer> OfficerArray;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "SteamWSRequestUGCDetailsCallbackProxy.h"
 | 
					#include "SteamWSRequestUGCDetailsCallbackProxy.h"
 | 
				
			||||||
#include "OnlineSubSystemHeader.h"
 | 
					#include "OnlineSubSystemHeader.h"
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
#include "steam/isteamugc.h"
 | 
					#include "steam/isteamugc.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ USteamWSRequestUGCDetailsCallbackProxy* USteamWSRequestUGCDetailsCallbackProxy::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void USteamWSRequestUGCDetailsCallbackProxy::Activate()
 | 
					void USteamWSRequestUGCDetailsCallbackProxy::Activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
	if (SteamAPI_Init())
 | 
						if (SteamAPI_Init())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// #TODO: Support arrays instead in the future?
 | 
							// #TODO: Support arrays instead in the future?
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ void USteamWSRequestUGCDetailsCallbackProxy::Activate()
 | 
				
			||||||
	OnFailure.Broadcast(FBPSteamWorkshopItemDetails());
 | 
						OnFailure.Broadcast(FBPSteamWorkshopItemDetails());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
 | 
					#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
 | 
				
			||||||
void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure)
 | 
					void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure)
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
	//FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM));
 | 
						//FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,8 @@
 | 
				
			||||||
			"SupportedTargetPlatforms": [
 | 
								"SupportedTargetPlatforms": [
 | 
				
			||||||
				"Win64",
 | 
									"Win64",
 | 
				
			||||||
				"Linux",
 | 
									"Linux",
 | 
				
			||||||
				"Android"
 | 
									"Android",
 | 
				
			||||||
 | 
									"VisionOS"
 | 
				
			||||||
			]
 | 
								]
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -61,7 +62,8 @@
 | 
				
			||||||
			"SupportedTargetPlatforms": [
 | 
								"SupportedTargetPlatforms": [
 | 
				
			||||||
				"Win64",
 | 
									"Win64",
 | 
				
			||||||
				"Linux",
 | 
									"Linux",
 | 
				
			||||||
				"Android"
 | 
									"Android",
 | 
				
			||||||
 | 
									"VisionOS"
 | 
				
			||||||
			]
 | 
								]
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
| 
						 | 
					@ -75,12 +77,11 @@
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"Name": "USDImporter",
 | 
								"Name": "USDImporter",
 | 
				
			||||||
			"Enabled": true,
 | 
								"Enabled": true
 | 
				
			||||||
			"SupportedTargetPlatforms": [
 | 
							},
 | 
				
			||||||
				"Win64",
 | 
							{
 | 
				
			||||||
				"Mac",
 | 
								"Name": "StudioTelemetry",
 | 
				
			||||||
				"Linux"
 | 
								"Enabled": false
 | 
				
			||||||
			]
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
	"TargetPlatforms": [
 | 
						"TargetPlatforms": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue