Advanced Sessions Plugin

[QUOTE=VytautasR;691573]
, did you have some time to test this?

not yet, will try to get to it, but there really isn’t something I can change on the plugin side to fix a bug with it.

Is there a way to create a session that requires a password? I’ve been implementing it myself with a bool and a string in extra settings, but in that case the validation is entirely client-side. I’m not too worried about hacked clients but I could see it being an issue for some games.

Thanks for the plugin, it’s awesome!

hi! sorry if this have been asked before but the plugin folder is 1.28GB… wich seem pretty overkill for just code. Is there any way of cutting down the size and only keep the strict minimum required to have the plugin working?

[QUOTE=JX53mb;692121]
hi! sorry if this have been asked before but the plugin folder is 1.28GB… wich seem pretty overkill for just code. Is there any way of cutting down the size and only keep the strict minimum required to have the plugin working?

Its not just code, it is all of the binaries as well, also the zipped download is 94mb and the repository (source only) is 120mb with history or 84kb with just the zip download.

Your folder being 1.28 gb is because Epic is creating all of the intermediate files, these aren’t packaged out to the executable when packaging and there isn’t anything I can do about them, they are generated locally by unreal engine during the build process and are used during development.

[QUOTE=;692124]
Its not just code, it is all of the binaries as well, also the zipped download is 94mb and the repository (source only) is 120mb with history or 84kb with just the zip download.

Your folder being 1.28 gb is because Epic is creating all of the intermediate files, these aren’t packaged out to the executable when packaging and there isn’t anything I can do about them, they are generated locally by unreal engine during the build process and are used during development.

Wow! thanks for the fast reply. The size was bothering me because I backup my project very often and the size of the backup just sky rocketed. Well if there is nothing to do about it… thanks again for the fast answer :slight_smile:

[QUOTE=VytautasR;691573]
, did you have some time to test this?

I can’t get is local player talking to work either currently in Lan or Steam. Sadly as part of the VoiceInterface there isn’t much I can do about it.

[QUOTE=;692294]
I can’t get is local player talking to work either currently in Lan or Steam. Sadly as part of the VoiceInterface there isn’t much I can do about it.


It’s always returning 0

GetMaxPlayers() works fine.

I think it needs to be return Result.OnlineResult.Session.NumOpenPublicConnections; Might want to change this?

[QUOTE=poke1103;692676]


It’s always returning 0

GetMaxPlayers() works fine.

I think it needs to be return Result.OnlineResult.Session.NumOpenPublicConnections; Might want to change this?

Num open public connections is the total slots available not the current number of players. And player counts aren’t correct from dedicated servers currently, they aren’t actually storing them.

That also isn’t my function, its epics.

NumPublic (total slots) - NumOpenSlots (slots available) == Num Slots used

[QUOTE=;692686]
Num open public connections is the total slots available not the current number of players. And player counts aren’t correct from dedicated servers currently, they aren’t actually storing them.

That also isn’t my function, its epics.

NumPublic (total slots) - NumOpenSlots (slots available) == Num Slots used

Ohh, so it’s a Epic problem? Is there an expected fix date? Because this is what the comments say:

[QUOTE=poke1103;692701]
Ohh, so it’s a Epic problem? Is there an expected fix date? Because this is what the comments say:

Yeah…that is how many are “AVAILABLE”, not filled, and with dedicated servers that is never correctly filled out.

AFAIK no known fix is planned, it has been brought up multiple times.

Edit You can use my plugin to pass the current player count out and update the session info every time someone joins or leaves though.

IE: Name: PC, Value: int/byte

[QUOTE=;692707]
Yeah…that is how many are “AVAILABLE”, not filled, and with dedicated servers that is never correctly filled out.

AFAIK no known fix is planned, it has been brought up multiple times.

Edit You can use my plugin to pass the current player count out and update the session info every time someone joins or leaves though.

IE: Name: PC, Value: int/byte

How would you be sending the data out? If the session has been created? Would you just use the PlayerArray inside of GameState and then get the number of elements in that array to represent the number of players? How would you feed this to the GetExtras() node of FindSession()?

Hello, I downloaded and unzipped the files into my project, I can see the files in Windows Exporer, but I can’t see them in the Editor. And I can’t use any of the functionality of the plugin.
The steps I did are:

  1. Download the zipped files
  2. Unzip into my project folder under /plugins
  3. Open my project

Anyone know what I did wrong?

[QUOTE=SolidRubrical;692885]
Hello, I downloaded and unzipped the files into my project, I can see the files in Windows Exporer, but I can’t see them in the Editor. And I can’t use any of the functionality of the plugin.
The steps I did are:

  1. Download the zipped files
  2. Unzip into my project folder under /plugins
  3. Open my project

Anyone know what I did wrong?

Did the plugin compile? Did you enable the plugin in the editor?
https://docs.unrealengine.com/latest/INT/Programming/Plugins/

[QUOTE=;692294]
I can’t get is local player talking to work either currently in Lan or Steam. Sadly as part of the VoiceInterface there isn’t much I can do about it.

Thanks, at least I feel a bit less insane now. :slight_smile:

[QUOTE=;692707]
Yeah…that is how many are “AVAILABLE”, not filled, and with dedicated servers that is never correctly filled out.

AFAIK no known fix is planned, it has been brought up multiple times.

Edit You can use my plugin to pass the current player count out and update the session info every time someone joins or leaves though.

IE: Name: PC, Value: int/byte

I still don’t get it lol

[QUOTE=poke1103;693371]
I still don’t get it lol

Extra Settings for create session, add a setting for “NP” and use UpdateSession to update that value over time.

When finding sessions you can retrieve the extra setting with the player count, like the example blueprint shows.

Hey, I so I am working on a OnlineSubsystem for PlayFab, and all has gone well. For interfacing with blueprints I have simply used your plugin, it’s great! My problem is that for Login, the PlayerState’s UniqueId variable needs to be set. The OnlineSubsystem can’t do this, it shouldn’t interface with the world. What I added personally for your LoginUserCallbackProxy is this:



if (PlayerControllerWeakPtr->PlayerState->UniqueId->ToString() != UserId.ToString())
{
	PlayerControllerWeakPtr->PlayerState->SetUniqueId(UserId.AsShared());
}


If you have a better option, I’d love to hear it!

[QUOTE=MaximusJobs;693506]
Hey, I so I am working on a OnlineSubsystem for PlayFab, and all has gone well. For interfacing with blueprints I have simply used your plugin, it’s great! My problem is that for Login, the PlayerState’s UniqueId variable needs to be set. The OnlineSubsystem can’t do this, it shouldn’t interface with the world. What I added personally for your LoginUserCallbackProxy is this:



if (PlayerControllerWeakPtr->PlayerState->UniqueId->ToString() != UserId.ToString())
{
	PlayerControllerWeakPtr->PlayerState->SetUniqueId(UserId.AsShared());
}


If you have a better option, I’d love to hear it!

Yeah, you also need to make an OnlineIdentityInterface for your subsystem, it handles all of the login / logout and subsystem identity information. Specifically the online engine interface sets the players uniquenetid from FOnlineIdentity::GetUniquePlayerId(int32 LocalUserNum) const.

There are also delegates called from the Login / AutoLogin functions in the identity interface that return a valid unique net ID.

That would be the correct way of setting it up.

Sorry, I was trying to correct myself afterwards but had to wait for moderator review :confused: So let me try this again real quick.
I have implemented the OnlineIdentityInterface, however, that doesn’t touch the PlayerState. I can’t directly set the PlayerState’s UniqueId.
As reference, here’s Unreal Tournament:
https://github.com/EpicGames/UnrealTournament/blob/clean-master/UnrealTournament/Source/UnrealTournament/Private/UTLocalPlayer.cpp#L1017
Lines 1017-1039
This is directly after a successful login with the IdentityInterface, they set the PlayerState.
If you have a better option, I’d love to hear it!

[QUOTE=MaximusJobs;693883]
Sorry, I was trying to correct myself afterwards but had to wait for moderator review :confused: So let me try this again real quick.
I have implemented the OnlineIdentityInterface, however, that doesn’t touch the PlayerState. I can’t directly set the PlayerState’s UniqueId.
As reference, here’s Unreal Tournament:
https://github.com/EpicGames/UnrealTournament/blob/clean-master/UnrealTournament/Source/UnrealTournament/Private/UTLocalPlayer.cpp#L1017
Lines 1017-1039
This is directly after a successful login with the IdentityInterface, they set the PlayerState.
If you have a better option, I’d love to hear it!

That looks like its just the callback for login that they implemented in their game code: IE: OnlineIdentity: TriggerOnLoginCompleteDelegates(LocalUserNum, true, *UniqueNetId, TEXT(“”));

If you want something like a delayed login UI then you’ll want to implement IOnlineExternalUI so that the ShowLoginUICallbackProxy node works.

It has this on the OnShowLoginUICompleted delegate:


	if (PlayerController != nullptr)
	{
		ULocalPlayer* LocalPlayer = PlayerController->GetLocalPlayer();
		if (LocalPlayer != nullptr)
		{
			LocalPlayer->SetCachedUniqueNetId(UniqueId);
		}
		
		if (PlayerController->PlayerState != nullptr)
		{
			PlayerController->PlayerState->SetUniqueId(UniqueId);
		}
	}

Edit If you don’t need a delayed login then on map load the local player gets the uniquenetid from the identity interface after it creates the player controller. That is how steam works, it taps into steam to get your current status so it already has a uniquenetid ready.