In UnregisterPlayer() I accidentally used the APlayer property of the (derived) APlayerController. The APlayer property is NOT replicated on the server. Instead the APlayerState property should have been used. Code will be updated when Part 2 is released. Leaving this issue open until then. Code is:
`void AEOSGameSession::UnregisterPlayer(const APlayerController* ExitingPlayer)
{
// Tutorial 3: Override base function to Unregister player in EOS Session
Super::UnregisterPlayer(ExitingPlayer);
// Only need to unregisted the player in the EOS Session on the Server
if (IsRunningDedicatedServer())
{
IOnlineSubsystem* Subsystem = Online::GetSubsystem(GetWorld());
IOnlineIdentityPtr Identity = Subsystem->GetIdentityInterface();
IOnlineSessionPtr Session = Subsystem->GetSessionInterface();
if (ExitingPlayer->PlayerState) // If the player leaves ungracefully this could be null
{
// Bind delegate to callback function
UnregisterPlayerDelegateHandle =
Session->AddOnUnregisterPlayersCompleteDelegate_Handle(FOnUnregisterPlayersCompleteDelegate::CreateUObject(
this,
&ThisClass::HandleUnregisterPlayerCompleted));
if (!Session->UnregisterPlayer(SessionName, *ExitingPlayer->PlayerState->UniqueId))
{
UE_LOG(LogTemp, Warning, TEXT("Failed to Unregister Player!"));
Session->ClearOnUnregisterPlayersCompleteDelegate_Handle(UnregisterPlayerDelegateHandle);
UnregisterPlayerDelegateHandle.Reset();
}
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to Unregister Player!"));
}
}
In UnregisterPlayer() I accidentally used the APlayer property of the (derived) APlayerController. The APlayer property is NOT replicated on the server. Instead the APlayerState property should have been used. Code will be updated when Part 2 is released. Leaving this issue open until then. Code is:
`void AEOSGameSession::UnregisterPlayer(const APlayerController* ExitingPlayer) { // Tutorial 3: Override base function to Unregister player in EOS Session Super::UnregisterPlayer(ExitingPlayer);
}`