From d012a8c737def0cd0d4186c310d4df1e7f541d7c Mon Sep 17 00:00:00 2001 From: mordentral Date: Sat, 19 Jul 2025 23:57:47 -0400 Subject: [PATCH] fix a bug in the overlays --- .../Classes/AdvancedSteamFriendsLibrary.h | 4 ++-- .../Private/AdvancedSteamFriendsLibrary.cpp | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamFriendsLibrary.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamFriendsLibrary.h index 83de461..043dbcd 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamFriendsLibrary.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamFriendsLibrary.h @@ -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") - static bool OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType); + UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI", meta = (WorldContext = "WorldContextObject")) + static bool OpenSteamUserOverlay(UObject* WorldContextObject, 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") diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/AdvancedSteamFriendsLibrary.cpp b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/AdvancedSteamFriendsLibrary.cpp index 45e031f..ea38621 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/AdvancedSteamFriendsLibrary.cpp +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/AdvancedSteamFriendsLibrary.cpp @@ -1,6 +1,7 @@ // 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" @@ -237,7 +238,7 @@ bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId U } -bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType) +bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(UObject* WorldContextObject,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) @@ -248,13 +249,24 @@ bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId Uni if (SteamAPI_Init()) { - uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes()); if (DialogType == ESteamUserOverlayType::invitetolobby) { - SteamFriends()->ActivateGameOverlayInviteDialog(id); + 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); + } + } } else { + uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes()); FString DialogName = EnumToString("ESteamUserOverlayType", (uint8)DialogType); SteamFriends()->ActivateGameOverlayToUser(TCHAR_TO_ANSI(*DialogName), id); }