void ARoundManager_SeemlessLevelTravel::InternalRestartRound_Implementation() { UWorld *world = GetWorld(); if (world != nullptr) { world->SeamlessTravel(GetOriginalMapName()); } }
void AGameModeBase::ProcessServerTravel(const FString& URL, bool bAbsolute) { #if WITH_SERVER_CODE StartToLeaveMap(); // Force an old style load screen if the server has been up for a long time so that TimeSeconds doesn't overflow and break everything bool bSeamless = (bUseSeamlessTravel && GetWorld()->TimeSeconds < 172800.0f); // 172800 seconds == 48 hours FString NextMap; if (URL.ToUpper().Contains(TEXT("?RESTART"))) { NextMap = UWorld::RemovePIEPrefix(GetOutermost()->GetName()); } else { int32 OptionStart = URL.Find(TEXT("?")); if (OptionStart == INDEX_NONE) { NextMap = URL; } else { NextMap = URL.Left(OptionStart); } } FGuid NextMapGuid = UEngine::GetPackageGuid(FName(*NextMap), GetWorld()->IsPlayInEditor()); // Notify clients we're switching level and give them time to receive. FString URLMod = URL; APlayerController* LocalPlayer = ProcessClientTravel(URLMod, NextMapGuid, bSeamless, bAbsolute); UE_LOG(LogGameMode, Log, TEXT("ProcessServerTravel: %s"), *URL); UWorld* World = GetWorld(); check(World); World->NextURL = URL; ENetMode NetMode = GetNetMode(); if (bSeamless) { World->SeamlessTravel(World->NextURL, bAbsolute); World->NextURL = TEXT(""); } // Switch immediately if not networking. else if (NetMode != NM_DedicatedServer && NetMode != NM_ListenServer) { World->NextSwitchCountdown = 0.0f; } #endif // WITH_SERVER_CODE }