mirror of
https://github.com/mordentral/AdvancedSessionsPlugin.git
synced 2025-10-25 09:24:18 +00:00
Compare commits
3 Commits
master
...
5.3-Locked
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab0cf8574d | ||
|
|
935ac3e628 | ||
|
|
30570d3dc5 |
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"FriendlyName": "Advanced Sessions",
|
||||
"Version": 5.5,
|
||||
"VersionName": "5.5",
|
||||
"Version": 5.1,
|
||||
"VersionName": "5.1",
|
||||
"Description": "Adds new blueprint functions to handle more advanced session operations.",
|
||||
"Category": "Advanced Sessions Plugin",
|
||||
"CreatedBy": "Joshua Statzer",
|
||||
|
||||
@@ -5,9 +5,6 @@ public class AdvancedSessions : ModuleRules
|
||||
{
|
||||
public AdvancedSessions(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
DefaultBuildSettings = BuildSettingsVersion.Latest;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
|
||||
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
//bEnforceIWYU = true;
|
||||
|
||||
|
||||
@@ -44,11 +44,6 @@ public:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AdvancedVoiceInterface)
|
||||
bool bEnableTalkingStatusDelegate;
|
||||
|
||||
// If true we will auto travel to a game session when an invite is received.
|
||||
// This can get in the way of Beacon Sessions, you may want to disable it.
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AdvancedFriendsInterface)
|
||||
bool bAutoTravelOnAcceptedUserInviteReceived = true;
|
||||
|
||||
//virtual void PostLoad() override;
|
||||
virtual void Shutdown() override;
|
||||
virtual void Init() override;
|
||||
@@ -57,13 +52,6 @@ public:
|
||||
FOnSessionInviteReceivedDelegate SessionInviteReceivedDelegate;
|
||||
FDelegateHandle SessionInviteReceivedDelegateHandle;
|
||||
|
||||
// custom handle to join directly from steam ui "Join Game"
|
||||
FDelegateHandle OnJoinSessionCompleteDelegateHandle;
|
||||
// custom Steam UI Join User function #Self invite#
|
||||
void OnSessionUserInviteAccepted(const bool bWasSuccessful, const int32 ControllerId, FUniqueNetIdPtr UserId, const FOnlineSessionSearchResult& InviteResult);
|
||||
// custom Steam UI function to client travel #Self invite#
|
||||
void OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result);
|
||||
|
||||
//const FUniqueNetId& /*UserId*/, const FUniqueNetId& /*FromId*/, const FString& /*AppId*/, const FOnlineSessionSearchResult& /*InviteResult*/
|
||||
void OnSessionInviteReceivedMaster(const FUniqueNetId & PersonInvited, const FUniqueNetId & PersonInviting, const FString & AppId, const FOnlineSessionSearchResult& SessionToJoin);
|
||||
|
||||
|
||||
@@ -23,14 +23,14 @@ class UCreateSessionCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase
|
||||
* 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.
|
||||
* @param PublicConnections When doing a 'listen' server, this must be >=2 (ListenServer itself counts as a connection)
|
||||
* @param bUseLAN When you want to play LAN, the level to play on must be loaded with option 'bIsLanMatch'
|
||||
* @param bUsePresence Must be true for a 'listen' server (Map must be loaded with option 'listen'), false for a 'dedicated' server.
|
||||
* @param bUseLobbiesIfAvailable Used to flag the subsystem to use a lobby api instead of general hosting if the API supports it, generally true on steam for listen servers and false for dedicated
|
||||
* Must be true for a 'listen' server (Map must be loaded with option 'listen'), false for a 'dedicated' server.
|
||||
* @param bShouldAdvertise Set to true when the OnlineSubsystem should list your server when someone is searching for servers. Otherwise the server is hidden and only join via invite is possible.
|
||||
* @param bUseLobbiesVoiceChatIfAvailable Set to true to setup voice chat lobbies if the API supports it
|
||||
* @param bStartAfterCreate Set to true to start the session after it's created. If false you need to manually call StartSession when ready.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject",AutoCreateRefTerm="ExtraSettings"), Category = "Online|AdvancedSessions")
|
||||
static UCreateSessionCallbackProxyAdvanced* CreateAdvancedSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair>& ExtraSettings, class APlayerController* PlayerController = NULL, int32 PublicConnections = 100, int32 PrivateConnections = 0, bool bUseLAN = false, bool bAllowInvites = true, bool bIsDedicatedServer = false, /*bool bUsePresence = true,*/ bool bUseLobbiesIfAvailable = true, bool bAllowJoinViaPresence = true, bool bAllowJoinViaPresenceFriendsOnly = false, bool bAntiCheatProtected = false, bool bUsesStats = false, bool bShouldAdvertise = true, bool bUseLobbiesVoiceChatIfAvailable = false, bool bStartAfterCreate = true);
|
||||
static UCreateSessionCallbackProxyAdvanced* CreateAdvancedSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair>& ExtraSettings, class APlayerController* PlayerController = NULL, int32 PublicConnections = 100, int32 PrivateConnections = 0, bool bUseLAN = false, bool bAllowInvites = true, bool bIsDedicatedServer = false, bool bUsePresence = true, bool bUseLobbiesIfAvailable = true, bool bAllowJoinViaPresence = true, bool bAllowJoinViaPresenceFriendsOnly = false, bool bAntiCheatProtected = false, bool bUsesStats = false, bool bShouldAdvertise = true, bool bUseLobbiesVoiceChatIfAvailable = false, bool bStartAfterCreate = true);
|
||||
|
||||
// UOnlineBlueprintCallProxyBase interface
|
||||
virtual void Activate() override;
|
||||
|
||||
@@ -28,7 +28,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, EBPServerPresenceSearchType ServerTypeToSearch, const TArray<FSessionsSearchSetting> &Filters, bool bEmptyServersOnly = false, bool bNonEmptyServersOnly = false, bool bSecureServersOnly = false, /*bool bSearchLobbies = true,*/ int MinSlotsAvailable = 0);
|
||||
static UFindSessionsCallbackProxyAdvanced* FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int32 MaxResults, bool bUseLAN, EBPServerPresenceSearchType ServerTypeToSearch, const TArray<FSessionsSearchSetting> &Filters, bool bEmptyServersOnly = false, bool bNonEmptyServersOnly = false, bool bSecureServersOnly = false, bool bSearchLobbies = true, int MinSlotsAvailable = 0);
|
||||
|
||||
static bool CompareVariants(const FVariantData &A, const FVariantData &B, EOnlineComparisonOpRedux Comparator);
|
||||
|
||||
@@ -99,7 +99,7 @@ private:
|
||||
bool bSecureServersOnly;
|
||||
|
||||
// Search through lobbies
|
||||
//bool bSearchLobbies;
|
||||
bool bSearchLobbies;
|
||||
|
||||
// Min slots requires to search
|
||||
int MinSlotsAvailable;
|
||||
|
||||
@@ -21,7 +21,7 @@ class UUpdateSessionCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase
|
||||
|
||||
// Creates a session with the default online subsystem with advanced optional inputs, you MUST fill in all categories or it will pass in values that you didn't want as default values
|
||||
UFUNCTION(BlueprintCallable, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject",AutoCreateRefTerm="ExtraSettings"), Category = "Online|AdvancedSessions")
|
||||
static UUpdateSessionCallbackProxyAdvanced* UpdateSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair> &ExtraSettings, int32 PublicConnections = 100, int32 PrivateConnections = 0, bool bUseLAN = false, bool bAllowInvites = false, bool bAllowJoinInProgress = false, bool bRefreshOnlineData = true, bool bIsDedicatedServer = false, bool bShouldAdvertise = true, bool bAllowJoinViaPresence = true, bool bAllowJoinViaPresenceFriendsOnly = false);
|
||||
static UUpdateSessionCallbackProxyAdvanced* UpdateSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair> &ExtraSettings, int32 PublicConnections = 100, int32 PrivateConnections = 0, bool bUseLAN = false, bool bAllowInvites = false, bool bAllowJoinInProgress = false, bool bRefreshOnlineData = true, bool bIsDedicatedServer = false, bool bShouldAdvertise = true);
|
||||
|
||||
// UOnlineBlueprintCallProxyBase interface
|
||||
virtual void Activate() override;
|
||||
@@ -58,12 +58,6 @@ private:
|
||||
// Allow joining in progress
|
||||
bool bAllowJoinInProgress = true;
|
||||
|
||||
// Allow joining in progress
|
||||
bool bAllowJoinViaPresence = true;
|
||||
|
||||
// Allow joining in progress
|
||||
bool bAllowJoinViaPresenceFriendsOnly = false;
|
||||
|
||||
// Update whether this is a dedicated server or not
|
||||
bool bDedicatedServer = false;
|
||||
|
||||
|
||||
@@ -20,55 +20,6 @@ UAdvancedFriendsGameInstance::UAdvancedFriendsGameInstance(const FObjectInitiali
|
||||
{
|
||||
}
|
||||
|
||||
void UAdvancedFriendsGameInstance::OnSessionUserInviteAccepted(const bool bWasSuccessful, const int32 ControllerId, FUniqueNetIdPtr UserId, const FOnlineSessionSearchResult& InviteResult)
|
||||
{
|
||||
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(GetWorld());
|
||||
if (SessionInterface.IsValid())
|
||||
{
|
||||
SessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle);
|
||||
OnJoinSessionCompleteDelegateHandle = SessionInterface->AddOnJoinSessionCompleteDelegate_Handle(
|
||||
FOnJoinSessionCompleteDelegate::CreateUObject(this, &UAdvancedFriendsGameInstance::OnJoinSessionComplete));
|
||||
|
||||
// Temp for 5.5, they aren't filling in the struct correctly
|
||||
if (!InviteResult.Session.SessionSettings.bIsDedicated)
|
||||
{
|
||||
FOnlineSessionSearchResult ModResult = InviteResult;
|
||||
ModResult.Session.SessionSettings.bUsesPresence = true;
|
||||
ModResult.Session.SessionSettings.bUseLobbiesIfAvailable = true;
|
||||
SessionInterface->JoinSession(0, NAME_GameSession, ModResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
SessionInterface->JoinSession(0, NAME_GameSession, InviteResult);
|
||||
}
|
||||
}
|
||||
UE_LOG(AdvancedFriendsInterfaceLog, Log, TEXT("Called Join Session for Steam Friends List UI InviteResults: %s, UserId: %s"), *InviteResult.GetSessionIdStr(), *UserId->ToString());
|
||||
}
|
||||
|
||||
void UAdvancedFriendsGameInstance::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result)
|
||||
{
|
||||
|
||||
// If we don't want to auto travel to the session instance then exit out
|
||||
if (!bAutoTravelOnAcceptedUserInviteReceived)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(GetWorld());
|
||||
if (SessionInterface.IsValid())
|
||||
{
|
||||
FString ConnectInfo;
|
||||
if (SessionInterface->GetResolvedConnectString(NAME_GameSession, ConnectInfo))
|
||||
{
|
||||
APlayerController* PlayerController = GetFirstLocalPlayerController();
|
||||
if (PlayerController)
|
||||
{
|
||||
PlayerController->ClientTravel(ConnectInfo, ETravelType::TRAVEL_Absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UAdvancedFriendsGameInstance::Shutdown()
|
||||
{
|
||||
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(GetWorld());
|
||||
@@ -83,7 +34,6 @@ void UAdvancedFriendsGameInstance::Shutdown()
|
||||
// Clear all of the delegate handles here
|
||||
SessionInterface->ClearOnSessionUserInviteAcceptedDelegate_Handle(SessionInviteAcceptedDelegateHandle);
|
||||
SessionInterface->ClearOnSessionInviteReceivedDelegate_Handle(SessionInviteReceivedDelegateHandle);
|
||||
SessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle);
|
||||
}
|
||||
|
||||
|
||||
@@ -130,9 +80,6 @@ void UAdvancedFriendsGameInstance::Init()
|
||||
SessionInviteAcceptedDelegateHandle = SessionInterface->AddOnSessionUserInviteAcceptedDelegate_Handle(SessionInviteAcceptedDelegate);
|
||||
|
||||
SessionInviteReceivedDelegateHandle = SessionInterface->AddOnSessionInviteReceivedDelegate_Handle(SessionInviteReceivedDelegate);
|
||||
|
||||
// Custom steam join game delegate
|
||||
SessionInterface->OnSessionUserInviteAcceptedDelegates.AddUObject(this, &UAdvancedFriendsGameInstance::OnSessionUserInviteAccepted);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -324,13 +271,6 @@ void UAdvancedFriendsGameInstance::OnSessionInviteReceivedMaster(const FUniqueNe
|
||||
}
|
||||
}
|
||||
|
||||
// Temp for 5.5, they aren't filling in the struct correctly
|
||||
if (!BluePrintResult.OnlineResult.Session.SessionSettings.bIsDedicated)
|
||||
{
|
||||
BluePrintResult.OnlineResult.Session.SessionSettings.bUsesPresence = true;
|
||||
BluePrintResult.OnlineResult.Session.SessionSettings.bUseLobbiesIfAvailable = true;
|
||||
}
|
||||
|
||||
OnSessionInviteReceived(LocalPlayer, PInviting, AppId, BluePrintResult);
|
||||
|
||||
//IAdvancedFriendsInterface* TheInterface = NULL;
|
||||
@@ -367,13 +307,6 @@ void UAdvancedFriendsGameInstance::OnSessionInviteAcceptedMaster(const bool bWas
|
||||
FBPUniqueNetId PInvited;
|
||||
PInvited.SetUniqueNetId(PersonInvited);
|
||||
|
||||
// Temp for 5.5, they aren't filling in the struct correctly
|
||||
if (!BluePrintResult.OnlineResult.Session.SessionSettings.bIsDedicated)
|
||||
{
|
||||
BluePrintResult.OnlineResult.Session.SessionSettings.bUsesPresence = true;
|
||||
BluePrintResult.OnlineResult.Session.SessionSettings.bUseLobbiesIfAvailable = true;
|
||||
}
|
||||
|
||||
OnSessionInviteAccepted(LocalPlayer,PInvited, BluePrintResult);
|
||||
|
||||
APlayerController* Player = UGameplayStatics::GetPlayerController(GetWorld(), LocalPlayer);
|
||||
|
||||
@@ -138,7 +138,7 @@ void UAdvancedFriendsLibrary::GetFriend(APlayerController *PlayerController, con
|
||||
TSharedPtr<FOnlineFriend> fr = FriendsInterface->GetFriend(Player->GetControllerId(), *FriendUniqueNetId.GetUniqueNetId(), EFriendsLists::ToString(EFriendsLists::Default));
|
||||
if (fr.IsValid())
|
||||
{
|
||||
const FOnlineUserPresence& pres = fr->GetPresence();
|
||||
FOnlineUserPresence pres = fr->GetPresence();
|
||||
Friend.DisplayName = fr->GetDisplayName();
|
||||
Friend.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
Friend.RealName = fr->GetRealName();
|
||||
@@ -151,8 +151,7 @@ void UAdvancedFriendsLibrary::GetFriend(APlayerController *PlayerController, con
|
||||
Friend.PresenceInfo.bIsPlaying = pres.bIsPlaying;
|
||||
Friend.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
|
||||
Friend.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
// #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;
|
||||
Friend.PresenceInfo.StatusString = pres.Status.StatusStr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,34 +247,28 @@ void UAdvancedFriendsLibrary::GetStoredFriendsList(APlayerController *PlayerCont
|
||||
|
||||
|
||||
TArray< TSharedRef<FOnlineFriend> > FriendList;
|
||||
if (FriendsInterface->GetFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendList))
|
||||
FriendsInterface->GetFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendList);
|
||||
|
||||
for (int32 i = 0; i < FriendList.Num(); i++)
|
||||
{
|
||||
for (int32 i = 0; i < FriendList.Num(); i++)
|
||||
{
|
||||
FBPFriendInfo BPF;
|
||||
const FOnlineUserPresence& pres = FriendList[i]->GetPresence();
|
||||
TSharedRef<FOnlineFriend> Friend = FriendList[i];
|
||||
FBPFriendInfo BPF;
|
||||
FOnlineUserPresence pres = Friend->GetPresence();
|
||||
|
||||
BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
BPF.DisplayName = FriendList[i]->GetDisplayName();
|
||||
BPF.RealName = FriendList[i]->GetRealName();
|
||||
BPF.UniqueNetId.SetUniqueNetId(FriendList[i]->GetUserId());
|
||||
BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
|
||||
BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
BPF.DisplayName = Friend->GetDisplayName();
|
||||
BPF.RealName = Friend->GetRealName();
|
||||
BPF.UniqueNetId.SetUniqueNetId(Friend->GetUserId());
|
||||
BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
|
||||
|
||||
BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
|
||||
BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
|
||||
BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
|
||||
BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
// #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.StatusString = pres.Status.StatusStr;
|
||||
BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
|
||||
BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
|
||||
BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
|
||||
BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
|
||||
BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
|
||||
BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
BPF.PresenceInfo.StatusString = pres.Status.StatusStr;
|
||||
BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
|
||||
BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
|
||||
|
||||
FriendsList.Add(BPF);
|
||||
}
|
||||
|
||||
return;
|
||||
FriendsList.Add(BPF);
|
||||
}
|
||||
|
||||
UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriendsList Failed to get any friends!"));
|
||||
return;
|
||||
}
|
||||
@@ -83,8 +83,6 @@ void UAutoLoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSucce
|
||||
{
|
||||
OnFailure.Broadcast();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
OnFailure.Broadcast();
|
||||
|
||||
@@ -13,7 +13,7 @@ UCreateSessionCallbackProxyAdvanced::UCreateSessionCallbackProxyAdvanced(const F
|
||||
{
|
||||
}
|
||||
|
||||
UCreateSessionCallbackProxyAdvanced* UCreateSessionCallbackProxyAdvanced::CreateAdvancedSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair>& ExtraSettings, class APlayerController* PlayerController, int32 PublicConnections, int32 PrivateConnections, bool bUseLAN, bool bAllowInvites, bool bIsDedicatedServer, /*bool bUsePresence,*/ bool bUseLobbiesIfAvailable, bool bAllowJoinViaPresence, bool bAllowJoinViaPresenceFriendsOnly, bool bAntiCheatProtected, bool bUsesStats, bool bShouldAdvertise, bool bUseLobbiesVoiceChatIfAvailable, bool bStartAfterCreate)
|
||||
UCreateSessionCallbackProxyAdvanced* UCreateSessionCallbackProxyAdvanced::CreateAdvancedSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair>& ExtraSettings, class APlayerController* PlayerController, int32 PublicConnections, int32 PrivateConnections, bool bUseLAN, bool bAllowInvites, bool bIsDedicatedServer, bool bUsePresence, bool bUseLobbiesIfAvailable, bool bAllowJoinViaPresence, bool bAllowJoinViaPresenceFriendsOnly, bool bAntiCheatProtected, bool bUsesStats, bool bShouldAdvertise, bool bUseLobbiesVoiceChatIfAvailable, bool bStartAfterCreate)
|
||||
{
|
||||
UCreateSessionCallbackProxyAdvanced* Proxy = NewObject<UCreateSessionCallbackProxyAdvanced>();
|
||||
Proxy->PlayerControllerWeakPtr = PlayerController;
|
||||
@@ -24,7 +24,7 @@ UCreateSessionCallbackProxyAdvanced* UCreateSessionCallbackProxyAdvanced::Create
|
||||
Proxy->bAllowInvites = bAllowInvites;
|
||||
Proxy->ExtraSettings = ExtraSettings;
|
||||
Proxy->bDedicatedServer = bIsDedicatedServer;
|
||||
/*Proxy->bUsePresence = bUsePresence;*/
|
||||
Proxy->bUsePresence = bUsePresence;
|
||||
Proxy->bUseLobbiesIfAvailable = bUseLobbiesIfAvailable;
|
||||
Proxy->bAllowJoinViaPresence = bAllowJoinViaPresence;
|
||||
Proxy->bAllowJoinViaPresenceFriendsOnly = bAllowJoinViaPresenceFriendsOnly;
|
||||
@@ -61,13 +61,13 @@ void UCreateSessionCallbackProxyAdvanced::Activate()
|
||||
|
||||
if (bDedicatedServer)
|
||||
{
|
||||
Settings.bUseLobbiesIfAvailable = false;
|
||||
Settings.bUsesPresence = false;
|
||||
Settings.bUseLobbiesIfAvailable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Settings.bUsesPresence = bUsePresence;
|
||||
Settings.bUseLobbiesIfAvailable = bUseLobbiesIfAvailable;
|
||||
Settings.bUsesPresence = bUseLobbiesIfAvailable;
|
||||
}
|
||||
|
||||
Settings.bUseLobbiesVoiceChatIfAvailable = bUseLobbiesIfAvailable ? bUseLobbiesVoiceChatIfAvailable : false;
|
||||
|
||||
@@ -102,14 +102,6 @@ void UFindFriendSessionCallbackProxy::OnFindFriendSessionCompleted(int32 LocalPl
|
||||
{
|
||||
FBlueprintSessionResult BSesh;
|
||||
BSesh.OnlineResult = Sesh;
|
||||
|
||||
// Temp for 5.5, force the values if epic isn't setting them, lobbies should always have these true
|
||||
if (!BSesh.OnlineResult.Session.SessionSettings.bIsDedicated)
|
||||
{
|
||||
BSesh.OnlineResult.Session.SessionSettings.bUseLobbiesIfAvailable = true;
|
||||
BSesh.OnlineResult.Session.SessionSettings.bUsesPresence = true;
|
||||
}
|
||||
|
||||
Result.Add(BSesh);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ UFindSessionsCallbackProxyAdvanced::UFindSessionsCallbackProxyAdvanced(const FOb
|
||||
bIsOnSecondSearch = false;
|
||||
}
|
||||
|
||||
UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int MaxResults, bool bUseLAN, EBPServerPresenceSearchType ServerTypeToSearch, const TArray<FSessionsSearchSetting> &Filters, bool bEmptyServersOnly, bool bNonEmptyServersOnly, bool bSecureServersOnly, /*bool bSearchLobbies,*/ int MinSlotsAvailable)
|
||||
UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSessionsAdvanced(UObject* WorldContextObject, class APlayerController* PlayerController, int MaxResults, bool bUseLAN, EBPServerPresenceSearchType ServerTypeToSearch, const TArray<FSessionsSearchSetting> &Filters, bool bEmptyServersOnly, bool bNonEmptyServersOnly, bool bSecureServersOnly, bool bSearchLobbies, int MinSlotsAvailable)
|
||||
{
|
||||
UFindSessionsCallbackProxyAdvanced* Proxy = NewObject<UFindSessionsCallbackProxyAdvanced>();
|
||||
Proxy->PlayerControllerWeakPtr = PlayerController;
|
||||
@@ -28,7 +28,7 @@ UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSess
|
||||
Proxy->bEmptyServersOnly = bEmptyServersOnly,
|
||||
Proxy->bNonEmptyServersOnly = bNonEmptyServersOnly;
|
||||
Proxy->bSecureServersOnly = bSecureServersOnly;
|
||||
//Proxy->bSearchLobbies = bSearchLobbies;
|
||||
Proxy->bSearchLobbies = bSearchLobbies;
|
||||
Proxy->MinSlotsAvailable = MinSlotsAvailable;
|
||||
return Proxy;
|
||||
}
|
||||
@@ -86,6 +86,7 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
|
||||
/** #define SEARCH_SWITCH_SELECTION_METHOD FName(TEXT("SWITCHSELECTIONMETHOD"))*/
|
||||
/** Whether to use lobbies vs sessions */
|
||||
/** #define SEARCH_LOBBIES FName(TEXT("LOBBYSEARCH"))*/
|
||||
|
||||
if (bEmptyServersOnly)
|
||||
tem.Set(SEARCH_EMPTY_SERVERS_ONLY, true, EOnlineComparisonOp::Equals);
|
||||
|
||||
@@ -113,9 +114,9 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
|
||||
|
||||
case EBPServerPresenceSearchType::ClientServersOnly:
|
||||
{
|
||||
//tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
|
||||
tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
|
||||
|
||||
//if (bSearchLobbies)// && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
|
||||
if (bSearchLobbies && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
|
||||
tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
|
||||
}
|
||||
break;
|
||||
@@ -139,9 +140,9 @@ void UFindSessionsCallbackProxyAdvanced::Activate()
|
||||
|
||||
FOnlineSearchSettingsEx DedicatedOnly = tem;
|
||||
|
||||
//tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
|
||||
tem.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
|
||||
|
||||
//if (bSearchLobbies)// && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
|
||||
if (bSearchLobbies && !IOnlineSubsystem::DoesInstanceExist("STEAM"))
|
||||
tem.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
|
||||
|
||||
//DedicatedOnly.Set(SEARCH_DEDICATED_ONLY, true, EOnlineComparisonOp::Equals);
|
||||
@@ -224,14 +225,6 @@ void UFindSessionsCallbackProxyAdvanced::OnCompleted(bool bSuccess)
|
||||
|
||||
FBlueprintSessionResult BPResult;
|
||||
BPResult.OnlineResult = Result;
|
||||
|
||||
// Temp for 5.5, force the values if epic isn't setting them, lobbies should always have these true
|
||||
if (ServerSearchType != EBPServerPresenceSearchType::DedicatedServersOnly )
|
||||
{
|
||||
BPResult.OnlineResult.Session.SessionSettings.bUseLobbiesIfAvailable = true;
|
||||
BPResult.OnlineResult.Session.SessionSettings.bUsesPresence = true;
|
||||
}
|
||||
|
||||
SessionSearchResults.AddUnique(BPResult);
|
||||
}
|
||||
if (!bRunSecondSearch)
|
||||
|
||||
@@ -76,31 +76,29 @@ void UGetFriendsCallbackProxy::OnReadFriendsListCompleted(int32 LocalUserNum, bo
|
||||
|
||||
TArray<FBPFriendInfo> FriendsListOut;
|
||||
TArray< TSharedRef<FOnlineFriend> > FriendList;
|
||||
if (Friends->GetFriendsList(LocalUserNum, ListName, FriendList))
|
||||
Friends->GetFriendsList(LocalUserNum, ListName, FriendList);
|
||||
|
||||
for (int32 i = 0; i < FriendList.Num(); i++)
|
||||
{
|
||||
for (int32 i = 0; i < FriendList.Num(); i++)
|
||||
{
|
||||
FBPFriendInfo BPF;
|
||||
const FOnlineUserPresence& pres = FriendList[i]->GetPresence();
|
||||
BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
BPF.DisplayName = FriendList[i]->GetDisplayName();
|
||||
BPF.RealName = FriendList[i]->GetRealName();
|
||||
BPF.UniqueNetId.SetUniqueNetId(FriendList[i]->GetUserId());
|
||||
BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
|
||||
TSharedRef<FOnlineFriend> Friend = FriendList[i];
|
||||
FBPFriendInfo BPF;
|
||||
FOnlineUserPresence pres = Friend->GetPresence();
|
||||
BPF.OnlineState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
BPF.DisplayName = Friend->GetDisplayName();
|
||||
BPF.RealName = Friend->GetRealName();
|
||||
BPF.UniqueNetId.SetUniqueNetId(Friend->GetUserId());
|
||||
BPF.bIsPlayingSameGame = pres.bIsPlayingThisGame;
|
||||
|
||||
BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
|
||||
BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
|
||||
BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
|
||||
BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
|
||||
// #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.StatusString = pres.Status.StatusStr;
|
||||
BPF.PresenceInfo.bIsJoinable = pres.bIsJoinable;
|
||||
BPF.PresenceInfo.bIsPlayingThisGame = pres.bIsPlayingThisGame;
|
||||
BPF.PresenceInfo.bIsOnline = pres.bIsOnline;
|
||||
BPF.PresenceInfo.bHasVoiceSupport = pres.bHasVoiceSupport;
|
||||
BPF.PresenceInfo.bIsPlaying = pres.bIsPlaying;
|
||||
BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState)((int32)pres.Status.State));
|
||||
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);
|
||||
|
||||
@@ -12,7 +12,7 @@ UUpdateSessionCallbackProxyAdvanced::UUpdateSessionCallbackProxyAdvanced(const F
|
||||
{
|
||||
}
|
||||
|
||||
UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::UpdateSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair> &ExtraSettings, int32 PublicConnections, int32 PrivateConnections, bool bUseLAN, bool bAllowInvites, bool bAllowJoinInProgress, bool bRefreshOnlineData, bool bIsDedicatedServer, bool bShouldAdvertise, bool bAllowJoinViaPresence, bool bAllowJoinViaPresenceFriendsOnly)
|
||||
UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::UpdateSession(UObject* WorldContextObject, const TArray<FSessionPropertyKeyPair> &ExtraSettings, int32 PublicConnections, int32 PrivateConnections, bool bUseLAN, bool bAllowInvites, bool bAllowJoinInProgress, bool bRefreshOnlineData, bool bIsDedicatedServer, bool bShouldAdvertise)
|
||||
{
|
||||
UUpdateSessionCallbackProxyAdvanced* Proxy = NewObject<UUpdateSessionCallbackProxyAdvanced>();
|
||||
Proxy->NumPublicConnections = PublicConnections;
|
||||
@@ -25,8 +25,6 @@ UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::Update
|
||||
Proxy->bAllowJoinInProgress = bAllowJoinInProgress;
|
||||
Proxy->bDedicatedServer = bIsDedicatedServer;
|
||||
Proxy->bShouldAdvertise = bShouldAdvertise;
|
||||
Proxy->bAllowJoinViaPresence = bAllowJoinViaPresence;
|
||||
Proxy->bAllowJoinViaPresenceFriendsOnly = bAllowJoinViaPresenceFriendsOnly;
|
||||
return Proxy;
|
||||
}
|
||||
|
||||
@@ -67,14 +65,11 @@ void UUpdateSessionCallbackProxyAdvanced::Activate()
|
||||
Settings->bAllowJoinInProgress = bAllowJoinInProgress;
|
||||
Settings->bIsLANMatch = bUseLAN;
|
||||
//Settings->bUsesPresence = true;
|
||||
//Settings->bAllowJoinViaPresence = true;
|
||||
Settings->bAllowInvites = bAllowInvites;
|
||||
Settings->bAllowJoinInProgress = bAllowJoinInProgress;
|
||||
Settings->bIsDedicated = bDedicatedServer;
|
||||
|
||||
// Added in 5.6
|
||||
Settings->bAllowJoinViaPresence = bAllowJoinViaPresence;
|
||||
Settings->bAllowJoinViaPresenceFriendsOnly = bAllowJoinViaPresenceFriendsOnly;
|
||||
|
||||
FOnlineSessionSetting * fSetting = NULL;
|
||||
FOnlineSessionSetting ExtraSetting;
|
||||
for (int i = 0; i < ExtraSettings.Num(); i++)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"FileVersion" : 3,
|
||||
|
||||
"FriendlyName" : "Advanced Steam Sessions",
|
||||
"Version" : 5.4,
|
||||
"VersionName": "5.4",
|
||||
"Version" : 5.1,
|
||||
"VersionName": "5.1",
|
||||
"Description" : "Adds new blueprint functions to handle more advanced session operations in Steam. REQUIRES ADVANCED SESSIONS",
|
||||
"Category" : "Advanced Sessions Plugin",
|
||||
"CreatedBy" : "Joshua Statzer",
|
||||
@@ -14,7 +14,7 @@
|
||||
{
|
||||
"Name": "AdvancedSteamSessions",
|
||||
"Type": "RunTime",
|
||||
"LoadingPhase": "PostDefault"
|
||||
"LoadingPhase": "Default"
|
||||
}
|
||||
],
|
||||
"Plugins": [
|
||||
@@ -26,10 +26,6 @@
|
||||
"Name": "OnlineSubsystem",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemSteam",
|
||||
"Enabled": true
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemUtils",
|
||||
"Enabled": true
|
||||
|
||||
@@ -5,9 +5,6 @@ public class AdvancedSteamSessions : ModuleRules
|
||||
{
|
||||
public AdvancedSteamSessions(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
DefaultBuildSettings = BuildSettingsVersion.Latest;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
|
||||
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
//bEnforceIWYU = true;
|
||||
|
||||
@@ -18,8 +15,7 @@ public class AdvancedSteamSessions : ModuleRules
|
||||
|
||||
if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Linux) || (Target.Platform == UnrealTargetPlatform.Mac))
|
||||
{
|
||||
PublicDependencyModuleNames.AddRange(new string[] { "SteamShared", "Steamworks", "OnlineSubsystemSteam" });
|
||||
AddEngineThirdPartyPrivateStaticDependencies(Target, "Steamworks");
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,8 +337,8 @@ public:
|
||||
static bool RequestSteamFriendInfo(const FBPUniqueNetId UniqueNetId, bool bRequireNameOnly = false);
|
||||
|
||||
// Opens the steam overlay to go to the specified user dialog
|
||||
UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI", meta = (WorldContext = "WorldContextObject"))
|
||||
static bool OpenSteamUserOverlay(UObject* WorldContextObject, const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType);
|
||||
UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI")
|
||||
static bool OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType);
|
||||
|
||||
// Returns if the steam overlay is currently active (this can return false during initial overlay hooking)
|
||||
UFUNCTION(BlueprintPure, Category = "Online|AdvancedFriends|SteamAPI")
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
#include "AdvancedSteamFriendsLibrary.h"
|
||||
#include "OnlineSubSystemHeader.h"
|
||||
#include "OnlineSubsystemTypes.h"
|
||||
#include "Engine/Texture.h"
|
||||
#include "Engine/Texture2D.h"
|
||||
#include "TextureResource.h"
|
||||
#include "PixelFormat.h"
|
||||
|
||||
//General Log
|
||||
DEFINE_LOG_CATEGORY(AdvancedSteamFriendsLog);
|
||||
@@ -238,7 +233,7 @@ bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId U
|
||||
}
|
||||
|
||||
|
||||
bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(UObject* WorldContextObject,const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType)
|
||||
bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType)
|
||||
{
|
||||
#if (PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX) && STEAM_SDK_INSTALLED
|
||||
if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM)
|
||||
@@ -249,24 +244,13 @@ bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(UObject* WorldContextObj
|
||||
|
||||
if (SteamAPI_Init())
|
||||
{
|
||||
uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes());
|
||||
if (DialogType == ESteamUserOverlayType::invitetolobby)
|
||||
{
|
||||
UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
|
||||
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(World);
|
||||
if (SessionInterface.IsValid())
|
||||
{
|
||||
FNamedOnlineSession* CurrentSession = SessionInterface->GetNamedSession(NAME_GameSession);
|
||||
|
||||
if (CurrentSession && CurrentSession->SessionInfo->GetSessionId().IsValid())
|
||||
{
|
||||
uint64 id = *((uint64*)CurrentSession->SessionInfo->GetSessionId().GetBytes());
|
||||
SteamFriends()->ActivateGameOverlayInviteDialog(id);
|
||||
}
|
||||
}
|
||||
SteamFriends()->ActivateGameOverlayInviteDialog(id);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes());
|
||||
FString DialogName = EnumToString("ESteamUserOverlayType", (uint8)DialogType);
|
||||
SteamFriends()->ActivateGameOverlayToUser(TCHAR_TO_ANSI(*DialogName), id);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ void UAdvancedSteamWorkshopLibrary::GetNumSubscribedWorkshopItems(int32 & Number
|
||||
UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
|
||||
return;
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetNumSubscribedWorkshopItemCount : Called on an incompatible platform"));
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopItems(int32 & NumberOfItems)
|
||||
@@ -62,8 +62,8 @@ TArray<FBPSteamWorkshopID> UAdvancedSteamWorkshopLibrary::GetSubscribedWorkshopI
|
||||
UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : SteamAPI is not Inited!"));
|
||||
return outArray;
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
UE_LOG(AdvancedSteamWorkshopLog, Warning, TEXT("Error in GetSubscribedWorkshopItemCount : Called on an incompatible platform"));
|
||||
return outArray;
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user