Advanced Sessions Plugin

[QUOTE=MADHOUSE;741204]
I could compile it when adding it to a c++ only project, after which it could be used with a BP only project, and seems to work as expected.
Not sure if that is by design or just an anomaly. Im pretty sure plugins used to compile when starting projects even if they are BP based.

Perhaps im just wrong and im remembering incorrectly, if so I apologize!

No plugins typically don’t compile when starting BP only projects, which is why I have to provide the pre-packaged binaries. Where you running a source build or the pre-packaged one?

Im running the source build from github, I might just have assumed wrongly that the plugin should compile on project load for a BP project as well.

edit: Thanks for helping out! <3

[QUOTE=MADHOUSE;741216]
Im running the source build from github, I might just have assumed wrongly that the plugin should compile on project load for a BP project as well.

Yeah, ok then, i’ll stop re-compiling the pre-packaged :stuck_out_tongue:

You need to compile from IDE for at least the first launch.

[QUOTE=JJGG117;741484]
I do mean GameInstance :stuck_out_tongue:
I’m a little confused though. Neither of my two GameInstances are C++, which I want to combine. If I create two GameInstances, one for AdvancedFriends and one for my other…well neither one of them can reparent because the parent class is already set to that gameinstance.

Also, what about Steam Overlay Friend Invites? Is it possible?
Thanks!

Oh, P.S.
The Interface being added to GameInstance allows for access to the nodes… O_O
So…why wouldn’t it work? I don’t see any of the AdvancedFriends checkboxes in the Details Panel though…!

The interface is used for the player controllers, the game isntance calls the interface function on the number player controller that received a session invite if it exists. The game instance has its own nodes and is used to bind to the subsystem delegates.

If neither of your gameinstances are c++ then you want “AdvancedFriendsGameInstance -> parent of -> 1st game instance -> parent of -> second game instance”.

Overlay Friend invites are not currently bound to anything, but they typically aren’t used in game anyway.

[QUOTE=JJGG117;741498]
Not sure why Interace in GameInstance and in the PlayerController wouldn’t work. GameInstance Interace will allow the Events to be called.\\just like in PlayerController? Or is it different?

I reparent and then I lose AdvancedFriends Details Panel checkboxes. It’s blank and the warning pops up saying Data Loss may happen.

I just want Steam Overlay Friend Invites to work because Steam Overlay is “in-game”

The game instance is what is CALLING the interface functions.

Also re-parenting should be fine as long as the very bottom game instance derives/is parented from the AdvancedFriendsGameInstance.

[QUOTE=JJGG117;741538]
My game instance is not just GameInstance so I don’t believe re-parenting twice does anything. It will remove AFGI as soon as I parent to something else. Do you have a step by step procedure I can follow?

Not re-parenting twice…

AdvancedFreindsGameInstance -> parent of -> Your other game instance -> parent of -> your final game instance

[QUOTE=mhnoni;739442]
Thanks for the quick response, Could you please elaborate more about password ? do you mean its possible via BP only ? if so then can you give me a clue on how ?

Thanks a lot btw for all the free stuff you shared with the community really appreciated .

To further elaborate on the answer to this, I didn’t like the “put the password in settings” option so I whipped up a cheap hack: Send ONLY a boolean indicating that the server is private. If it’s private, in your server browser, when trying to join, bring up a dialog box or something that requests a password, and save the password attempt in the GameInstance (so it persists client-side). Then just let the player join.

In the GameMode, in OnPostLogin, well if it’s not a private server I just give the new player their ball (it’s a golf game) and set them up. But if it’s private, then I call a custom event in their PlayerController that retrieves the password attempt from the GameInstance and sends it to the server. If it’s right, then the GameMode gives them a ball and sets them up - if it’s wrong, it kicks them. At no point does the client ever get sent the password.

Allowing the join and then kicking afterward is obviously suboptimal, so I think what I’m going to do is hash the password and send the hash in the session settings as well - this way the dialog box hashes the password attempt too and never tries to join if it’s wrong, but a hacked client (that bypassed the check) would still get kicked from the server by the GameMode.

All in all it’s probably a bit much for a golf game but ¯_(ツ)_/¯

(Also, if I manage to implement friend invites… no idea if they will even work given some of what I’ve read… I’ll have to find some way to bypass the password check. The invite will be sent by the host, so maybe set up a ‘whitelist’ of players - defined by Steam ID? - in the GameMode who won’t be queried for a password attempt. Whenever the host invites anyone, their ID gets added to the whitelist.)

But hopefully that solution should be both convenient (immediately tells the player that their password attempt was wrong) and secure.

[QUOTE=Shivan Hunter;743137]
To further elaborate on the answer to this, I didn’t like the “put the password in settings” option so I whipped up a cheap hack: Send ONLY a boolean indicating that the server is private. If it’s private, in your server browser, when trying to join, bring up a dialog box or something that requests a password, and save the password attempt in the GameInstance (so it persists client-side). Then just let the player join.

In the GameMode, in OnPostLogin, well if it’s not a private server I just give the new player their ball (it’s a golf game) and set them up. But if it’s private, then I call a custom event in their PlayerController that retrieves the password attempt from the GameInstance and sends it to the server. If it’s right, then the GameMode gives them a ball and sets them up - if it’s wrong, it kicks them. At no point does the client ever get sent the password.

Allowing the join and then kicking afterward is obviously suboptimal, so I think what I’m going to do is hash the password and send the hash in the session settings as well - this way the dialog box hashes the password attempt too and never tries to join if it’s wrong, but a hacked client (that bypassed the check) would still get kicked from the server by the GameMode.

All in all it’s probably a bit much for a golf game but ¯_(ツ)_/¯

(Also, if I manage to implement friend invites… no idea if they will even work given some of what I’ve read… I’ll have to find some way to bypass the password check. The invite will be sent by the host, so maybe set up a ‘whitelist’ of players - defined by Steam ID? - in the GameMode who won’t be queried for a password attempt. Whenever the host invites anyone, their ID gets added to the whitelist.)

But hopefully that solution should be both convenient (immediately tells the player that their password attempt was wrong) and secure.

Thanks a lot yes your method is good :smiley: , let me know if “implement friend invites” works as it should which make it a lot easier :slight_smile:

[QUOTE=JJGG117;743239]
I check DedicatedServer on the CreateAdvancedSession node but how do I set a Dedicated Server’s map and join it?

Dedicated servers still require a source build of the engine (and likely always will from what Epic has stated). The checkbox is there for people that want to keep blueprint nodes for the logic even when using dedicated servers.

[QUOTE=Shivan Hunter;743137]
Snip

I must have deleted it from my original response to him, but yes, a one way encryption / hash is best for checking the password, but as you stated a hacked client bypasses it, the problem with your method is that a hacked client STILL ignores the kick command as well.

Friend invites DO work btw, the engine doesn’t hook up the “received invite” event but it DOES implement the “Accepted Invite” event. So people getting invites through the overlay works.

Edit I have it on my TODO list to implement the game session kick methods for the plugin since true kicking (dropping connection) currently seems to requires c++.

[QUOTE=JJGG117;743988]
Is this tutorial all encompassing: A new, community-hosted Unreal Engine Wiki - Announcements - Epic Developer Community Forums ?

Can I put these source code files in my packaged shipping project for people to use and create a Dedicated Server?
People will have to join by IP Address, but will players be able to find those dedicated servers using FindAdvancedSession?

Maybe maybe not? Do you have a good dedicated link for me to check out and implement alongside Advanced Sessions if not?

That is the de-facto guide as far as I know currently.

The sessions system works with dedicated servers as well, but you have to actually forward the correct ports with a dedicated server.

You don’t need to distribute source, and in fact you CAN’T since it is part of the engine. It is a seperate .exe compilation that runs as a dedicated server.

For the sessions side nothing really changes except pinging works.

[QUOTE=JJGG117;744124]
So are most games using listen servers?

Also if anyone creates a listen Server and intends for others to join their steam game, no port forwarding is necessary?

How do I ping a steam listen Server?

And don’t dedicated servers run better? Hold more players and larger maps? Or is that myth surrounded around the extra player a listen Server generates, the local network associated with a listen Server…etc?

All UE4 servers are listen servers, just how they network to the server differs, default UE4 servers over steam use Steams NAT Punchthrough to connect to each other so there is no port forwarding required, Dedicated servers do not and require the ports to be open.

Dedicated servers run with many optimizations to the engine and features removed that aren’t required for a non client, they should generally have far less overhead, the reason they require a seperate compiled version of the engine is that packaging everything needed for them in a launcher version would cause it to be much larger and Epic wasn’t willing to bloat the download size that much.

I’m trying to create a server browser but for some reason it loads 4 servers when i just create 1…

Creation of server:
Finding servers:

[QUOTE=JJGG117;744159]
So AdvancedSessions uses NAT Punchthrough… Steam’s networking…so that clients can use whatever ports they have at their disposal to display the proper packets and establish connection?
Situation: I create a LAN listen server because I know my connection is bad and I don’t have ports forwarded (thus why I have 2 friends over connected to my internet) so we can play
HOWEVER
If I chose non-LAN and non-Dedicated then my server will be displayed to the world and my connection is just the limitation of myself to that server? UNLESS of course I close my program then the server dies along with everyone else on it. But their connections are not limited by my crappy connection, correct?

STEAM uses Nat punchthrough, Advanced Sessions does nothing network wise, it just interfaces to c++ functions for blueprint.

Non Lan and Non Dedicated the HOST is the HOST, so your connection totally effects things.

[QUOTE=JJGG117;744184]
Soo…does AdvancedSessions allow people all over the world to join anyone’s non-Dedicated (checkbox) non-LAN “listen” server without the creator’s ports to be open?

No…Steam lobbies allow for that, which is what you are hosting when you make a session that isn’t dedicated. Advanced sessions has nothing to do with it, this plugin is for opening up extra options for the sessions system.

That part works just fine with or without the plugin.

just wanted to say thanks

Hey @mordental
As we can’t seem to find documentation(or Epic’s wording on this), but do you think in the future you’re going to implement a way to do Host Migration?
Thanks, Austin

Hey, i get this one :
LINK : fatal error LNK1181: Cant open inputdata “ws2_32.lib”
And after try to rebuild in VS now my UE4Editor(Projectname).dll is incompatible or missing.
it was with a fresh Project and only the Advanced Sess plugin and the Defaultengine.ini config for steam.
Cant open the Project anymore. iam using 4.16.2 and VS 2017. Any ideas?

[QUOTE=JJGG117;744597]
So how do I ping a listen server and have it show up with a correct ping instead of 9999?

Manually in c++ for steam by sending ping packets and measuring return time, lobby servers do not ping back on steam, only dedicated servers do.

Have someone managed to make Steam work with eXi’s marketplace lobby system?