Advanced Sessions Plugin

Advanced Sessions Plugin

Updated 08/19/2021

Plugin now has two modules, one is AdvancedSessions and one is AdvancedSteamSessions, this will allow me to tie more Steam specific functions in without forcing the steam subsystem to be packaged out with projects that don’t want it.

New
/Metahusk has made a menu example project that also shows the general usage of the plugin, you can view it here:
http://community.metahusk.com/topic/…and-discussion

Brief
A Blueprint Library Plugin that exposes additional Networking/Session/OnlineSubsystem/Friends/Voice features to Blueprints that were missing.

Overview
I took it upon myself to make an all blueprint game just so that I would get a better grasp of the system and not get in the habit of ignoring such a powerful tool. During this mini project I discovered that the Online Subsystem and Sessions interfaces are really lacking with how much of them are currently exposed to Blueprints.

Since I had to go in and expose more of the session backend to Blueprints anyway I packaged it as a blueprint library plugin for future projects and thought that I would share it here for anyone else that needed it. I saw a lot of “I want custom server names with blueprints”, “How can I get network client player names in blueprints” in the answer hub.

I fully expect it to expand significantly as I require new functions for my own use, and I am willing to add to it if anyone has requests as well.

4.13.1 And beyond Sessions have been stable for awhile now, opening up the repository.
Repository: GitHub - mordentral/AdvancedSessionsPlugin: Advanced Sessions Plugin for UE4

Automatically Generated Documentation (Kantan Doc Gen)

https://www.vreue4.com/GeneratedDocs/AdvancedSessions/

https://www.vreue4.com/GeneratedDocs…SteamSessions/

**Plugin .Zip File Download - Extract the file inside to ProjectFolder/Plugins/AdvancedSessions (create /Plugins/AdvancedSessions if you have to)

https://vreue4.com/advanced-sessions-binaries

Version Log

**08/19/2021**

Added IsSteamOverlayEnabled function to the SteamSessionsPlugin

Added InitTextFiltering Function to the SteamSessionsPlugin

Added FilterTest Function to the SteamSessionsPlugin

**06/26/2017**

Added SteamRequestGroupOfficers function to the sessions plugin.

Added GetSteamGroups to the sessions plugin.

Added GetSteamFriendGamePlayed function to the sessions plugin.

**06/06/2017**

Added in some more missing ULocalPlayer header includes to 4.15 and 4.16 versions.

**05/27/2017**

Added back in missing ampersand to FindFriendSessions Delegate

**05/23/2017**

Fixed where several variables in the OnPlayerLoginStatusChanged event were set to be inputs instead of outputs.

Updated to 4.15.3 for download

**04/20/2017**

Fixed some missing safety checks in the voice library

**03/23/2017**
Updated 4.15 to fix a missing validity check in GetFriendsCallbackProxy (fixes a very rare crash)

**03/21/2017**
Updated 4.15 to 4.15.1

**03/02/2017**
Split plugin into two modules

One is for the general AdvancedSessions (Advanced Sessions Plugin)

The second is for Steam specific implementations (Advanced Steam Sessions Plugin)

This makes it easier to package without steam included, as the default setup always packaged steam out on PC platforms.

Unchecking the AdvancedSteamSessions plugin should allow for totally removing any steam reliance from the plugin.

You would also have to remove steam specific nodes from your blueprints as well however as they will no longer exist, just having them as dummies doesn't work with this.

You can still package and run on another platform that isn't steam without doing this, this just gives the option of not having steam included in packaging / compilation at all.

**02/27/2017**

Marking EndSession as deprecated

It is not only not really useful in blueprints, but people have also been using it wrong.

It isn't useful to Steam Subsystem and isn't really useful in blueprints to begin with as its use is vauge, would rather enforce the actual
total destruction of the session instead by making users call DestroySession as is intended.

I feel like that node suffers from overexposing the back end to blueprints.

**02/25/2017**

Fixed a bug where the new AllServers secondary search was adding in the first results a second time instead of adding in the second results.

Also made the secondary search Steam subsystem exclusive, as it is the only one that uses two seperate server lists.

**02/24/2017**

Added "bRequireNameOnly" to the RequestSteamFriendInfo node, significantly reduces time to return
a result as the cost of not downloading the avatar for that user.

Made FindSessions AllServers option search twice, once for client servers, once for dedicated, and merge the results.
(This fixes a bug and also ensures that steam works correctly, if you want to avoid the longer search time before showing results you could
search one first, fill in results, and then search the second and add them in when it is complete instead).

**Added the following additional nodes**

**AdvancedFreinds**
GetSteamPersonaName - To retrieve the name of a non friend from steam (requires RequestSteamFreindInfo to have sucessfully completed for that ID already)

Make UniqueNetID from SteamID String - Makes a uniquenetid from a 64bit steam ID string (mostly for testing, can use IDs that are not your friends).
Could also be used for storing the string representation of a UniqueNetID and later converting back to retrieve information about them.

**Advanced Steam Workshop**

Get Num Subscribed Workshop Items - Returns how many workshop items the user is subscribed to for this AppID

Get Subscribed Workshop Items - Returns how many items and an array of workshop item IDs for workshop item the user is subscribed to.

Get Workshop Item Details - Takes a workshop item ID, returns a structure with details about that workshop item.

**02/15/2017**

Rebuilt and uploaded for 4.15 release 1

**01/30/2017**-

Merged in CriErr's equality check node for Unique Net IDs

Added execution paths to GetSteamFreindAvatar to make using the node easier.

Recompiled 4.14.3 and added 4.15 preview 1 downloads.

**01/20/2017**- Recompiled and uploaded for 4.14.3 again, might have had a bad upload?

**11/20/2016**- Recompiled and uploaded for 4.14 release 0 again, might have had a bad upload?

**10/31/2016**- Recompiled and uploaded for 4.14 release 0

**11/04/2016**- Fixed a missing assignment in Identity interface, re-uploaded for 4.13 and committed to repository.

**10/31/2016**- Recompiled and uploaded for 4.14 preview 1

**10/26/2016**- General

Added GetPlayerAuthToken function to advanced identity

Now forcing not passing in a player controller if hosting dedicated.

**10/24/2016**- Added Advanced Identity Library to the plugin

This part of the plugin probably won't be of much use to most people, it was a special request.

**10/19/2016**- Opened up repository to the public, now that subsystems have been fairly stable

Added additional options to the FindSessionsAdvanced node (All Servers search, full only, empty only, secure only, minimum number of users).

Made CreateSessionAdvanced ignore "UsePresence" setting if bIsDedicated is ticked and force presence off (to help avoid misuse).


**09/01/2016**- Recompiled and uploaded build for 4.13.0

**08/29/2016**- Fixed where both friends instance callbacks were the same name in editor, added an MIT license to the plugin so people are free to do what they want.

**07/11/2016**- Recompiled binaries for .5

**06/21/2016**- Revised how "GetFriendSession" Throws OnSuccess and OnFailure, will now throw failure if the steam call succeeded but returned an invalid session (player is in game but not in a session yet).

**06/21/2016**- Fixed the GetFriend Node as it wasn't fully filling the Presence information.

**06/17/2016**- Added platform checks to exclude the steam specific features from platforms that aren't Mac/Windows/Linux *Edit* and then revised to fix an issue with UFunctions inside of preprocessor ifs

**06/16/2016**- Rebuilt under .3 and uploaded

**05/27/2016**- Rebuilt 4.11 adding additional output variables to "GetSessionSettings"

**04/19/2016**- Rebuilt 4.11 with a fix for searching for dedicated servers and for the 4.11.2 hotfix.

**03/31/2016**- Recompiled and uploaded a 4.11 download, had to change the ShowWebURL node a bit because of new formatting. In this build and onward it now takes serveral optional parameters.

**03/28/2016**- Corrected a file inclusion issue with the folder layout so that c++ derived game instances will work again.

**03/04/2016**- Re-uploaded 4.10.4 with a fix for bIsInSameGame, also added more presence related information and exposed missing ExternalUIInterface functions to BP with the AdvancedExternalUI blueprint node set. As a side note, set the default values for the UpdateSession node to sane numbers. Also exposed the NumPrivateConnections variable to both the create and update session nodes. Last thing to note is that I updated the example blueprint to have all of the missing and new nodes and to fix a few areas that have changed over the versions.

**02/24/2016** - Uploaded a new version of 4.10 with some linux specific fixes.

**02/22/2016** - Rebuilt 4.10 to 4.10.3 hotfix *And then 4.10.4*

**01/20/2016** - Rebuilt 4.10 with an additional node to correct the difficulty of retrieving players UniqueNetIds from the client side (GetUniqueNetIDFromPlayerState) and added some warning comment text to the STEAM specific nodes.

**01/16/2016** - Rebuilt 4.10  to the 4.10.2 hotfix, corrected a bug with UniqueNetID::ToString node, and sped up the "GetSteamAvatar" node.

**01/14/2016** - Rebuilt 4.10 version with two additional nodes - GetSteamFriendAvatar(in a sub category for advanced friends) and EventSessionInviteReceived (for the game instance and player controller interfaces)

**01/11/2016** - Rebuilt 4.10 version with a fix for the Add/Modify session node.

**12/21/2015** - Rebuilt 4.10.1 with every setting exposed for the CreateAdvancedSession Node, if you don't know what one does leave it at default for now (anti cheat just flags the server, it doesn't actually enable an anticheat).

**12/17/2015**- Rebuilt 4.10 to the new 4.10.1 hotfix and fixed some GCC compiler specific issues to hopefully fix the plugin with linux.

**11/23/2015**- Revised the Update Sessions node once more to pass entire original structure in first before modifying. This should have been how it was written to begin with, oops.

**11/11/2015**- Added 4.10 download, compilation with 4.10 still seems rough with visual studio 2015

**09/15/2015**- Updated 4.9 download with a better check with the "End Session node" for if a session is currently live, will not call End Session if it is not. Updated to 4.9.2


**09/15/2015**- Updated 4.9 download to 4.9.1 hotfix and fixed some structs and enums not being able to be made into blueprint variables. 4.8.3 will receive this update tomorrow. *Edit* 4.8.3 version uploaded

**09/14/2015**- Updated 4.8 download as it was requested.

**09/03/2015**- Updated the 4.9 download, this version fixes the UpdateSession BP Node - 4.8 not updated, will be updated if requested only.

**08/31/2015**- Updated the 4.9 download to a version compiled under full release.

**08/27/2015**- Updated both 4.8 and 4.9 Plugins, adds several new nodes for sessions and the first release of the Advanced Voice Interface Nodes.
[Post with more detailed notes](https://forums.unrealengine.com/showthread.php?69901-Advanced-Sessions-Plugin&p=366049&viewfull=1#post366049)

**08/19/2015 **- 4.9 Preview 4 compatible build is uploaded for testing, 4.8 Build has been re-compiled in latest hotfix version 4.8.3 and re-uploaded (double checked folders this time)

**08/18/2015**- Re-uploaded the plugin for 4.8 to move the files into a sub folder to fix a packaging error. Last release did not have the files in a sub folder already (whoops) and was causing packaging problems.

**08/04/2015**- Updated to change how ExtraSettings work to support retrieving the current active sessions ExtraSettings. Effects GetSessionProperty nodes and the GetSessionSettings node. [Detailed info in this post](https://forums.unrealengine.com/showthread.php?69901-Advanced-Sessions-Plugin&p=348224&viewfull=1#post348224)

**08/03/2015**- Re-uploaded to fix an error introduced in the last revision

**07/31/2015 **- Re-uploaded the 4.8 build with a revised CreateSession that allows to not pass in a player controller and has the "Dedicated Server" boolean. Not passing in a player controller WILL NOT WORK with client steam builds as it needs the UniqueNetID to create the session. This was added in for dedicated server builds that don't initialize the SteamAPI and don't have a valid player controller UniqueNetID. #TODO in the future would be to also add in a "JoinViaPresence" boolean to control if a session is invite only or not. Would probably add this in if someone requests it.

The 4.7 build will stay at the last version as 4.7 was less stable overall and 4.9 will be out soon.

**06/26/2015 **- Re-uploaded the zips without an extra UAsset file in the examples folder, it was crashing someones editor for some reason and wasn't supposed to be there anyway.

**06/16/2015 **- Updated the 4.8 download to support blueprint only projects now that it can be done

**06/08/2015**- Added the UpdateSessions function

**05/28/2015 **- Final version of sessions functions (hopefully no more signature changes), added many new friends related functions, added a few new session functions, zip now includes a blueprint with the functions labeled and laid out with use cases in it.
[Post with more detailed notes](https://forums.unrealengine.com/showthread.php?69901-Advanced-Sessions-Plugin&p=300877&viewfull=1#post300877)

**05/20/2015 **- Cleaned up the sessions functions more, added a separate session results filter, added the baseline of a Friends Function library and interface/game instance
[Post with more detailed notes](https://forums.unrealengine.com/showthread.php?69901-Advanced-Sessions-Plugin&p=295983&viewfull=1#post295983)

**05/18/2015 **- Added Advanced Session Find

**05/15/2015 **- Added Source


New Steam Defines - 4.22

As of the 4.22 patch, the steam subsystem has a few useful definitions that you can set in Target.cs for dedicated servers to prevent having to manually edit source files. I have listed them below for convenience sake.

These definitions would have to be set in the Target.cs of your project file (IE: a source and not BP project).

[QUOTE]
Online

  • New: Projects targeting Steam releases no longer require source code edits to properly register their dedicated servers on Steam. This change also enables setting the application ID for shipping projects without further modifications to source as well. The following macros have been added and should be defined in the project’s Target.cs file:

  • For projects that use dedicated servers, these must be defined for your servers:

[LIST]

  • UE4_PROJECT_STEAMPRODUCTNAME

  • UE4_PROJECT_STEAMGAMEDESC

  • UE4_PROJECT_STEAMGAMEDIR

  • Clients for dedicated server projects must have the following defined:

  • UE4_PROJECT_STEAMGAMEDIR

  • All Steam-based projects must have the following defined:

  • UE4_PROJECT_STEAMSHIPPINGID

[/LIST] Please refer to the Steam project documentation regarding setting these flags and their appropriate values.

Setup Info

  1. Extract the file inside the zip to ProjectFolder/Plugins/AdvancedSessions (create /Plugins/AdvancedSessions if you have to) Note that post 4.20 you shouldn’t be installing it in the engine directory anymore due to some changes epic made that are hard to work around with me having multiple modules.
  2. If installed at the project level you need to Create a C++ blank file in the editor to allow it to package out the plugin - If installed at the engine level you do not need to do anything else.
    NOTE If packaging for a platform other than windows you may need to have the plugin installed at the project level, as I can only package out for windows and not Mac / Mobile.
  3. Copy the example blueprint file into your content folder if you want to look at the examples.
  4. To get the ability to join a session invite when it has been accepted through the online subsystem (IE: Steam freind game invite) you will need to derive your GameInstance from AdvancedFriendsGameInstance so that it will bind the Delegate, you can also use the added event in the graph. This game instance also enables accessing the “PlayerTalkingStateChanged Delegate”. 01/14/16 Also added an OnSessionInviteReceived Delegate that triggers if you have been invited to a game, you can accept in game by joining the session it gives you Not yet implemented by Epic, do not use this event yet!!.
A tutorial on how to set this up is in this post: [Setting Up Interface and Game Session Tutorial](https://forums.unrealengine.com/showthread.php?69901-Advanced-Sessions-Plugin&p=374431&viewfull=1#post374431)
  1. If you want the AcceptedSessionInvite event to be called in the owning player controller you also need to add the AdvancedFriendsInterface to the blueprint for your player controller.
  2. To use Push To Talk, bind a key to “Stop Networked voice / Start networked voice” for a local player.
  3. To enable voice in your build copy the following settings (From Epic Answerhub).

[QUOTE]
DefaultEngine.ini

[Voice]
bEnabled=true

[OnlineSubsystem]
bHasVoiceEnabled=true

[QUOTE]
In DefaultGame.ini

[/Script/Engine.GameSession]
bRequiresPushToTalk=**false/true**

Note If you are updating a session I highly advise that you fill ALL of the Update session parameters with your values as otherwise it chooses default ones that might not work for you.

Current Added BP Functions ( Updated 08/27/2015 With Voice functions):

New Session Related Blueprint Functions - They all have info text on hover in editor to explain them briefly
(Image is missing: “CancelSessionSearch”, “EndSession”, “ModifyOrAddSessionSetting”, “GetUniqueNetIDFromPlayerState”, “IsValidSession” Nodes)

http://i.imgur.com/uuqkqVZ.png

New Friends Related Blueprint Functions - They all have info text on hover in editor to explain them briefly
(Image is missing: “GetSteamFriendAvatar”, “GetSteamLevel”, “RetrieveSteamInfo” Nodes)

http://i.imgur.com/9lT28Nm.png

New Voice Interface Related Blueprint Functions - They all have info text on hover in editor to explain them briefly

http://i.imgur.com/1PiA48W.png

New External UI Interface Related Blueprint Functions - They all have info text on hover, two are not steam compatible and the info text states this

http://i.imgur.com/Dx0kFsO.png

New Steam Workshop Related Blueprint Functions

https://imgur.com/V1Ehlvo.png

Example of hosting a session with additional parameters (Slightly different now but basics stay the same)

http://i.imgur.com/k2C0gtW.png

33 Likes

This looks pretty incredible! Thanks!

Yes! that’s exactly how it should have been in the first place :stuck_out_tongue: that’s just perfect :slight_smile: thanks a ton man.

I’ll be definitely using it to add custom search filters (such as game mode, map type etc)… I will let you know if there are any problems, although it’s looking perfect so far.

(Maybe make a pull request for this?)

If you are looking for ideas to expand it, you could expose the steam friend list and invites functionality :slight_smile:

Edit:
Umm… may I request for the full source code? :stuck_out_tongue: I have some custom engine build where I might need to use this (also would be great learning source).

2 Likes

Wow great work! Since I haven’t gotten into c++ yet this looks like it’s gonna improve the quality of online play on my project by a lot! I’m gonna check it out, thanks again for doing something like this!

2 Likes

Nice! Though i won’t use this. Still waiting for Epic to release this for BPs themself. Can’t put a project on the Market with a Plugin in it. :confused:

[QUOTE=eXi;291694]
Nice! Though i won’t use this. Still waiting for Epic to release this for BPs themself. Can’t put a project on the Market with a Plugin in it. :confused:

Yeah it is a temp solution mostly, I assume that they will fill in this section of blueprints themselves at some point. The real fix would be to expose these same functions directly in engine where they are, however it would be impossible for me to finish my fun all BP game in the meantime with them missing and I noticed that I wasn’t the only one looking for an answer. I held off making anything until I got to check out 4.8 and they were still not exposed before I made myself the library.

I wouldn’t have bothered except I was seeing dozens of BP only devs asking how to do these things through BP.

[QUOTE=;291389]

(Maybe make a pull request for this?)

If you are looking for ideas to expand it, you could expose the steam friend list and invites functionality :slight_smile:

Edit:
Umm… may I request for the full source code? :stuck_out_tongue: I have some custom engine build where I might need to use this (also would be great learning source).

I am not following Epics syntax for blueprints very closely, also I am getting these externally and not directly in the classes that they naturally reside in (so it works as a plugin and not an engine source change).
I would have to remake them in their proper locations and change a decent amount of things to get them into a pull request, I am also 100% sure that my key-pair temporary solution isn’t set up how they would want to handle it either. They have TPair already and FVariantData that could be set up to be accessible and assignable directly through blueprints without the third party struct.

If you have a build of the engine that you are working off of directly then I would suggest that you go into the OnlineSubsystem interface and start adding in blueprint function accessibility directly.

[QUOTE=;291730]

If you have a build of the engine that you are working off of directly then I would suggest that you go into the OnlineSubsystem interface and start adding in blueprint function accessibility directly.

I have tried before but my C++ knowledge didn’t get me very far sadly.
I’m using some of the nvidia branches (with VXGI, Flex etc.) so I was hoping I could use the plugin there eventually (since Epic isn’t going to add this any time soon, obviously… sigh) but if you don’t want to share source, that’s fine :stuck_out_tongue: I thought I should ask anyway.

[QUOTE=;291907]
I have tried before but my C++ knowledge didn’t get me very far sadly.
I’m using some of the nvidia branches (with VXGI, Flex etc.) so I was hoping I could use the plugin there eventually (since Epic isn’t going to add this any time soon, obviously… sigh) but if you don’t want to share source, that’s fine :stuck_out_tongue: I thought I should ask anyway.

I can give the source to it, but I was warning you that if you are working off of a source build that there are better ways to do it and that I would avoid replicating the plugin implementation in a source build.

[QUOTE=;291936]
I can give the source to it

I would greatly appreciate that!

[QUOTE=;291936]
but I was warning you that if you are working off of a source build that there are better ways to do it and that I would avoid replicating the plugin implementation in a source build.

Yes I see, but the problem is that you need to re-compile the plugin if you are using a custom engine version (which you can’t do without the plugin sources currently :p), that’s the main reason I’m asking.
I’m not planning in replicating the plugin implementation into engine source :slight_smile:
Although it would be a good learning source for me to see your implementation.

I’m adding / changing a few things today (got my work done for the week, its UE4 dev day), i’ll upload a version with the source afterwards.

Is it ok if i mention your Plugin in my Marketplace release description? Like telling that they can add more functionality to the Session Nodes with your
plugin? I won’t add this to the Marketplace, it is just for giving the users an idea where they can expand the system.

Yeah that is fine, i’m including the source after this upload anyway and i’m not trying sell it or anything.

I would wait until this upload goes live later today though, I re-factored the functions to use that newer Enum Break for Execution pins that Epic added, it makes things way more intuitive to use and cleaner.

Ok nice, the Marketplace pack will take some days/weeks. So i’m not in a hurry. Just asking (:

New version with source is uploaded, using the key/value pairs is a lot cleaner now.

Awesome! thank you for the source version :wink:

Oh, love it… could have used this 2 days ago :slight_smile:
Great tool for those not able to get their hands dirty in C++.
Well done sir.

Awesome job man! Something like this should be on Github.

Added a “Find Sessions Advanced” that accepts an array of search parameters to filter the results by. Have been trying to mostly re-use Epics structures and enums so some things end up a little more complicated then they could be otherwise. Going to include a seperate filtering system for full result array’s later and probably clean it up more.

can you or i can make a tutorial on it ? there’s no tutorial from scratch how to make an OSS using only Blueprint,the twitch streams were just showcasing it xD

Uploaded a newer version today.

Advanced Sessions

  • Cleaned up the sessions functions more
  • Added a seperate SessionResults Filter function (can keep full session results array’s and get filtered copies as needed instead of searching all over again).

Started implementing AdvancedFriends support

  • Added a GameInstance base class that can be derived from in blueprints, adds support for joining through friend invites. (Will do more in the future)

  • Added a BlueprintInterface library that can be referenced by playercontroller blueprints and will call the new “OnSessionInviteAccepted” event in the player controller when the GameInstance gets one for that player controller. (Will also do more in the future, checking for compatible playercontrollers can be turned off with a boolean in the base GameInstance).

  • Added a GetAndStoreFriendsList blueprint function that retrieves the friends list from the onlinesubsystem. (I was going to just link to DJLectr0’s implementation but it appears to be abandoned and outdated so I remade it.

  • Added a GetStoredFriendsList blueprint function that retrieves the list that was already stored (don’t have to query the OnlineSubsystem for it).

[QUOTE=;294741]
can you or i can make a tutorial on it ? there’s no tutorial from scratch how to make an OSS using only Blueprint,the twitch streams were just showcasing it xD

Honestly I’m probably going to end up having to make tutorial videos or something on how to use the library, it’s starting to get complicated. Not really my type of thing to handle but writing up text documentation isn’t likely to cut it at this point for something based on visual programming.

That being said, Epic had a good overview of the base Blueprint session interface in a networking stream. It is up on their youtube somewhere and goes over creating / joining sessions.

1 Like