diff --git a/Source/AdvancedSessions/Classes/BlueprintDataDefinitions.h b/Source/AdvancedSessions/Classes/BlueprintDataDefinitions.h index 9e89269..c86e199 100644 --- a/Source/AdvancedSessions/Classes/BlueprintDataDefinitions.h +++ b/Source/AdvancedSessions/Classes/BlueprintDataDefinitions.h @@ -44,6 +44,18 @@ namespace EBlueprintResultSwitch }; } +// This is to define server type searches +UENUM(BlueprintType) +namespace EBPServerPresenceSearchType +{ + enum Type + { + AllServers, + ClientServersOnly, + DedicatedServersOnly + }; +} + // Wanted this to be switchable in the editor UENUM(BlueprintType) diff --git a/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h b/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h index 3ccaf4b..2b1775c 100644 --- a/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h +++ b/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h @@ -18,7 +18,7 @@ class UCreateSessionCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase UPROPERTY(BlueprintAssignable) FEmptyOnlineDelegate OnFailure; - // Creates a session with the default online subsystem with advanced optional inputs + // Creates a session with the default online subsystem with advanced optional inputs, for dedicated servers leave UsePresence as false and set IsDedicatedServer to true. Dedicated servers don't use presence. UFUNCTION(BlueprintCallable, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject",AutoCreateRefTerm="ExtraSettings"), Category = "Online|AdvancedSessions") static UCreateSessionCallbackProxyAdvanced* CreateAdvancedSession(UObject* WorldContextObject, const TArray &ExtraSettings, class APlayerController* PlayerController = NULL, int32 PublicConnections = 100, int32 PrivateConnections = 0, bool bUseLAN = false, bool bAllowInvites = true, bool bIsDedicatedServer = false, bool bUsePresence = true, bool bAllowJoinViaPresence = true, bool bAllowJoinViaPresenceFriendsOnly = false, bool bAntiCheatProtected = false, bool bUsesStats = false, bool bShouldAdvertise = true); diff --git a/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h b/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h index 67317e3..cd167bc 100644 --- a/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h +++ b/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h @@ -21,7 +21,7 @@ class UFindSessionsCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase // Searches for advertised sessions with the default online subsystem and includes an array of filters UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", WorldContext = "WorldContextObject", AutoCreateRefTerm="Filters"), Category = "Online|AdvancedSessions") - static UFindSessionsCallbackProxyAdvanced* FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int32 MaxResults, bool bUseLAN, bool bSearchDedicated, const TArray &Filters); + static UFindSessionsCallbackProxyAdvanced* FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int32 MaxResults, bool bUseLAN, TEnumAsByte ServerTypeToSearch, const TArray &Filters); static bool CompareVariants(const FVariantData &A, const FVariantData &B, EOnlineComparisonOpRedux::Type Comparator); @@ -68,7 +68,7 @@ private: bool bUseLAN; // Whether or not to search for dedicated servers - bool bUseDedicated; + EBPServerPresenceSearchType::Type ServerSearchType; // Maximum number of results to return int MaxResults; diff --git a/Source/AdvancedSessions/Private/AdvancedFriendsLibrary.cpp b/Source/AdvancedSessions/Private/AdvancedFriendsLibrary.cpp index 7ed54fb..8eef83f 100644 --- a/Source/AdvancedSessions/Private/AdvancedFriendsLibrary.cpp +++ b/Source/AdvancedSessions/Private/AdvancedFriendsLibrary.cpp @@ -60,13 +60,13 @@ bool UAdvancedFriendsLibrary::RequestSteamFriendInfo(APlayerController *PlayerCo if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Had a bad Player Controller!")); - return nullptr; + return false; } if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!")); - return nullptr; + return false; } if (SteamAPI_Init()) diff --git a/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp b/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp index 3146e84..99aecb2 100644 --- a/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp +++ b/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp @@ -14,7 +14,7 @@ UFindSessionsCallbackProxyAdvanced::UFindSessionsCallbackProxyAdvanced(const FOb { } -UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int MaxResults, bool bUseLAN, const TArray &Filters) +UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int MaxResults, bool bUseLAN, TEnumAsByte ServerTypeToSearch, const TArray &Filters) { UFindSessionsCallbackProxyAdvanced* Proxy = NewObject(); Proxy->PlayerControllerWeakPtr = PlayerController; @@ -22,7 +22,7 @@ UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSess Proxy->MaxResults = MaxResults; Proxy->WorldContextObject = WorldContextObject; Proxy->SearchSettings = Filters; - Procy->bUseDedicated = bUseDedicated; + Proxy->ServerSearchType = ServerTypeToSearch; return Proxy; } @@ -46,9 +46,21 @@ void UFindSessionsCallbackProxyAdvanced::Activate() // Create temp filter variable, because I had to re-define a blueprint version of this, it is required. FOnlineSearchSettingsEx tem; - if (!bUseDedicated) + switch (ServerSearchType) { + + case EBPServerPresenceSearchType::ClientServersOnly: tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals); + break; + + case EBPServerPresenceSearchType::DedicatedServersOnly: + tem.Set(SEARCH_PRESENCE, false, EOnlineComparisonOp::Equals); + break; + + case EBPServerPresenceSearchType::AllServers: + default: + break; + } // Filter results