Advanced Sessions Plugin

, I upload two project files. One in 4.14 and one in 4.15, everything exactly identical with 4.14 working and 4.15 not working. Both engines are completely untouched with no plugins. I used the appropriate AS plugin version for each project. Only two blueprints are added a gameMode and a pawnBP. The pawn contains all code, press C to create a sessions, and press J to find sessions.

In the config files both add the following to the “DefaultEngine.ini” file

[QUOTE]
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName=“GameNetDriver”,DriverClassName=“/Script/OnlineSubsystemSteam.SteamNetDriver”,DriverClassNameFallback=“/Script/OnlineSubsystemUtils.IpNetDriver”)

[OnlineSubsystem]
DefaultPlatformService=Steam
PollingIntervalInMs=20

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
GameServerQueryPort=27015
bRelaunchInSteam=false
GameVersion=1.0.0.0
bVACEnabled=1
bAllowP2PPacketRelay=true
P2PConnectionTimeout=90

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName=“/Script/OnlineSubsystemSteam.SteamNetConnection”

Both have the following in the Build.cs

[QUOTE]
PublicDependencyModuleNames.AddRange(new string] { “Core”, “CoreUObject”, “Engine”, “InputCore”, “OnlineSubsystem”, “OnlineSubsystemUtils” });

and this is also in the Build.cs

[QUOTE]
DynamicallyLoadedModuleNames.Add(“OnlineSubsystemSteam”);

Both have the following added to the Target.cs

[QUOTE]
bUsesSteam = true;

Here is the 4.14.3 project (this works)
Here is the 4.15.0 project (this does not work)

1 Like

[QUOTE=JLBXB3;671439]
,

Thats not how you set up steam anymore, its a plugin, you might have gotten it to work in 4.14 but it def won’t in 4.15.

Enable the steam plugin and remove the inclusions from your target files (edit and build.cs files), if you didn’t notice I removed the references to the modules from the sessions plugin when they made this change.

This is from the 4.15 project you uploaded


Edit Also be warned that I had migration fail on a project moving over to plugin steam instead fo direct reference. Something was funky about when this switched over.

1 Like

It looks like, if I’m reading the tool tips correctly, that I need to call “Get Friends” first? I assume that’s the Get and Store Friends List and if so, what is the World Context Object for that? Is there more documentation on these somewhere? Here is what I have. If I can get this all figured out, Ill do a tutorial on it!

EDIT: It current returns as empty for the listen server. The controller is passed through from the Event Login.

1 Like

[QUOTE=PDubulous;671449]
It looks like, if I’m reading the tool tips correctly, that I need to call “Get Friends” first? I assume that’s the Get and Store Friends List and if so, what is the World Context Object for that? Is there more documentation on these somewhere? Here is what I have. If I can get this all figured out, Ill do a tutorial on it!

You’ll want to keep that node you had before, the RequestFriendInfo one, it applies to players that aren’t actually your friend. Get friends list only loads everyone on your friends list.

Just call the RequestFriendInfo every so often until it returns true, you can fall back to a delay node if you wish and loop it on false with a counter or timer to stop after a set time period for that widget.

I would have made it an actual async node except the callback triggers globally for each and every inquiry so it would have been messy to incorporate into blueprint.

1 Like

[QUOTE=;671447]
Thats not how you set up steam anymore, its a plugin, you might have gotten it to work in 4.14 but it def won’t in 4.15.

Enable the steam plugin and remove the inclusions from your target files (edit and build.cs files), if you didn’t notice I removed the references to the modules from the sessions plugin when they made this change.

This is from the 4.15 project you uploaded

Edit Also be warned that I had migration fail on a project moving over to plugin steam instead fo direct reference. Something was funky about when this switched over.

It still doesn’t work… it still finds zero sessions. Does it work for you?

Edit: Sorry , I don’t think this is a problem with your plugin, seems it is an engine bug in 4.15. I’m not sure if it is happening to everyone or not though. I tried it on several computers, connections, you name it. I think it might have something to do with this, “BugFix: Fixed OSSNull server/session filtering to better match Session Settings and online OSS. Made MCP, Steam, and Null LAN queries more consistent.”

1 Like

[QUOTE=JLBXB3;671465]
It still doesn’t work… it still finds zero sessions. Does it work for you?

Edit: Sorry , I don’t think this is a problem with your plugin, seems it is an engine bug in 4.15. I’m not sure if it is happening to everyone or not though. I tried it on several computers, connections, you name it. I think it might have something to do with this, “BugFix: Fixed OSSNull server/session filtering to better match Session Settings and online OSS. Made MCP, Steam, and Null LAN queries more consistent.”

Mmmm…I don’t know.

Your project really does refuse to find sessions with my nodes (but finds them with default ones), but I have multiple projects on 4.15 currently that work just fine.

I’ll look into it more tomorrow, I didn’t go into the source and make sure that you were using the right sessions version, but the front end hosting code didn’t change at all for 4.15, if something on the backend changes that I am unaware of i’ll need to look through it.

Edit

Ah no, they changed how they handle the UsePresence flag, change the find sessions node to search for either clients only or dedicated servers only instead of AllServers.
Tomorrow i’ll default the AllServers enum to flag PRESENCE search to true, I think before unless specifically stated otherwise they always flagged that as true. Your test project works with FindAdvancedSessions searching ClientsOnly.

That must have been their “bugfix” was to actually have it follow that flag correctly. Before when I set it AllServers enum couldn’t find Dedicated Servers at all.

Also explains why I didn’t have the problem, none of my projects are on AllServers search since they only have client side hosts and that is the default search mode.

1 Like

[QUOTE=;671451]
You’ll want to keep that node you had before, the RequestFriendInfo one, it applies to players that aren’t actually your friend. Get friends list only loads everyone on your friends list.

Just call the RequestFriendInfo every so often until it returns true, you can fall back to a delay node if you wish and loop it on false with a counter or timer to stop after a set time period for that widget.

I would have made it an actual async node except the callback triggers globally for each and every inquiry so it would have been messy to incorporate into blueprint.

SO CLOSE! We are getting all of the pertinent information, but the Display Name always comes back blank. Played a game over the web and the print strings have confirmed two different UniqueNetIDs and success at getting the Steam Info. The print string for the display name always comes back blank for the server and the client and obviously the text block in the widget does too. Here is my total set up:

  1. After Login in the GMODE, I fire a multicast event in, and pass the incoming player controller to, the GSTATE:

  1. The GSTATE adds the player controller to an array of the other player controllers (This being the “server versions” of all of the controllers. and then I fire the unreplicated custom event in WIDG_LobbyPlayers which is really just a horizontal box to fill up with the player cards and I pass the array through.

  1. The WIDG_LobbyPlayers clears the children and then, for each loop, gets the built-in PlayerArray from the GSTATE and then gets the corresponding UniqueNetID. It also grabs the corresponding controller reference and passes all of that through to a newly created WIDG_PlayerCard.

  1. My guess is this is where the issue is: The newly created player card populates the information with the exposed variables. PrintStrings to confirm.

1 Like

[QUOTE=PDubulous;671493]
SO CLOSE! We are getting all of the pertinent information, but the Display Name always comes back blank. Played a game over the web and the print strings have confirmed two different UniqueNetIDs and success at getting the Steam Info. The print string for the display name always comes back blank for the server and the client and obviously the text block in the widget does too. Here is my total set up:

  1. After Login in the GMODE, I fire a multicast event in, and pass the incoming player controller to, the GSTATE:

  2. The GSTATE adds the player controller to an array of the other player controllers (This being the “server versions” of all of the controllers. and then I fire the unreplicated custom event in WIDG_LobbyPlayers which is really just a horizontal

  3. The WIDG_LobbyPlayers clears the children and then, for each loop, gets the built-in PlayerArray from the GSTATE and then gets the corresponding UniqueNetID. It also grabs the corresponding controller reference and passes all of that through to a newly created WIDG_PlayerCard.

I’ll get around to looking at that later

1 Like

Ok so in news regarding JLBXB3’s issues with the plugin.

I went in and checked for the AllServers functionality in the SteamSubsystem and it has a hard switch for searching either Client servers only, or Dedicated servers only. Originally I was going to just remove the AllServers option and have users search twice, but I realized that there is only one search allowed at a time. So rather than have users have to stagger the searches I am just having the plugin itself search twice and combine the two lists together.

I should have it committed some time later today with an at least mostly functional SteamWorkshopLibrary as well.

His main issues were unrelated and due to project setup, but it did let me find this bug and fix it, so thats good.

1 Like

[QUOTE=PDubulous;671493]
SO CLOSE!

Didn’t notice that you were going for a remote name, generally people have been replicating that over.

However in the new update I am uploading today I added a “GetSteamPersonaName” node that directly obtains that information.

1 Like

Pushed a new commit to the repository - Building the files right now to upload new binaries

Don’t download 4.15 binaries until I edit this post saying that they are uploaded.
Edit Uploaded

Changes:



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.


New Workshop Nodes

Example of getting a remote (non friend) users Name and Avatar on steam (should have loop count limit).

1 Like

Hey man would there be a reason why I’m getting two of the same Sessions from the results array? also after i package the my project its not coming up with the server details and clients read as zero and i’m unable to join it i think its mite be related to 4.15. thanks

1 Like

[QUOTE=OverRated_AU;671957]

Hey man would there be a reason why I’m getting two of the same Sessions from the results array? also after i package the my project its not coming up with the server details and clients read as zero and i’m unable to join it i think its mite be related to 4.15. thanks

What subsystem are you on? There are several potential issues with the change I made yesterday that I intended to fully debug over the weekend, specifically that I think the Steam subsystem behaves differently than all other subsystems when searching for sessions.

1 Like

[QUOTE=;672143]
What subsystem are you on? There are several potential issues with the change I made yesterday that I intended to fully debug over the weekend, specifically that I think the Steam subsystem behaves differently than all other subsystems when searching for sessions.

I have all 3 enabled in my plugins but it should be setup for steams, its seems its finding a sessions for each both listen and dedicated which is why its getting double, i don’t have dedicated selected when creating the session i do have the UseLAN ticked though. Thanks

1 Like

[QUOTE=OverRated_AU;672195]
I have all 3 enabled in my plugins but it should be setup for steams, its seems its finding a sessions for each both listen and dedicated which is why its getting double, i don’t have dedicated selected when creating the session i do have the UseLAN ticked though. Thanks

Yeah I found the bug, was a stupid error on my part (was adding the same results array in the second time around…).

will have a fix up shortly.

Its kind of annoying because only Steam does searches separately (the Presence flag is ignored for all other subsystems). So when using steam I have to allow for two searches and when using every other subsystem it is just one and there isn’t a difference between the servers to search enums.

1 Like

[QUOTE=;672211]
Yeah I found the bug, was a stupid error on my part (was adding the same results array in the second time around…).

will have a fix up shortly.

Its kind of annoying because only Steam does searches separately (the Presence flag is ignored for all other subsystems). So when using steam I have to allow for two searches and when using every other subsystem it is just one and there isn’t a difference between the servers to search enums.

Ah yeah that does sound annoying, glad you found the issue :slight_smile: and thanks for the reply i will test it out once its up thanks.

1 Like

[QUOTE=OverRated_AU;672226]
Ah yeah that does sound annoying, glad you found the issue :slight_smile: and thanks for the reply i will test it out once its up thanks.

Its uploaded

1 Like

[QUOTE=;672227]
Its uploaded

Thanks for the speedy update seems to be all working correctly now :).

About the Voice Interface this doesn’t support Attenuation’s does it ? was hopping to be able to use it in a similar way to how survival games do, so if a client is within Attenuation of another they can hear there chat.

[QUOTE=OverRated_AU;672247]
Thanks for the speedy update seems to be all working correctly now :).

About the Voice Interface this doesn’t support Attenuation’s does it ? was hopping to be able to use it in a similar way to how survival games do, so if a client is within Attenuation of another they can hear there chat.

Sadly plugins can’t really mess with the default implementation of sound components for voice currently, hopefully with the total audio engine re-design in 4.16 that can be amended. With how it is currently it is just on/off which you can control by distance if you want.

That being said its pretty simple to achieve in an engine build.

Also there was a game studio talking about releasing their custom VOIP solution as a plugin that includes distance based volume and more control, you should hop on over to their marketplace section thread and vote it up, even if 4.16’s sound engine and VOIP is amazing it always helps to have alternatives.

[QUOTE=;672281]
Sadly plugins can’t really mess with the default implementation of sound components for voice currently, hopefully with the total audio engine re-design in 4.16 that can be amended. With how it is currently it is just on/off which you can control by distance if you want.

That being said its pretty simple to achieve in an engine build.

Also there was a game studio talking about releasing their custom VOIP solution as a plugin that includes distance based volume and more control, you should hop on over to their marketplace section thread and vote it up, even if 4.16’s sound engine and VOIP is amazing it always helps to have alternatives.

Thanks for the info, i did post on that thread about that plugin but i don’t have high hopes it will get released, so the default sound capture how would i set that up to use distance thanks.