EpicGames / EOS-Getting-Started

MIT License
110 stars 62 forks source link

UnregisterPlayer() has a bug in it #14

Closed SebBergy closed 1 year ago

SebBergy commented 1 year ago

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!"));
    }

}

}`

iamalexrouse commented 1 year ago

Any Update on this?

SebBergy commented 1 year ago

This issue is fixed! Sorry I completely forgot to close this issue when I published part 2 of the course.