UE 4.27 & OnlineSubsystemSteam

Доброго времени суток.
Захотел узнать как использовать Steam для подключения по сети, вроде бы всё настроил правильно, по урокам, но есть одна проблема.
Я почему-то в поиске вижу то разных людей, то вообще никого не вижу, иногда вижу правильную сессию что бы подключиться.
Может быть так что я ничего не вижу из сессий, а друг видит кого-то.
Первый скрин мой, второй - друга.
Не понимаю в чём может быть проблема и что это зависит. Использую id игры 480 Spacewar бесплатный для разработчиков.

Вроде бы в коде ничего плохого не замечено

void AMP_UE4Character::CreateGameSession()
{
	if (!OnlineSessionInterface.IsValid())
	{
		return;
	}

     auto ExistingSession = OnlineSessionInterface->GetNamedSession(NAME_GameSession);
	if (ExistingSession != nullptr)
	{
		OnlineSessionInterface->DestroySession(NAME_GameSession);
	}

	OnlineSessionInterface->AddOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegate);

	TSharedPtr<FOnlineSessionSettings> SessionSettings = MakeShareable(new FOnlineSessionSettings());
	SessionSettings->bAllowInvites = true;
	SessionSettings->bIsLANMatch = false;
	SessionSettings->NumPublicConnections = 4;
	SessionSettings->bAllowJoinInProgress = true;
	SessionSettings->bAllowJoinViaPresence = true;
	SessionSettings->bShouldAdvertise = true;
	SessionSettings->bUsesPresence = true;
	SessionSettings->bUseLobbiesIfAvailable = true;
	SessionSettings->Set(FName("MatchType"), FString("FreeForAll"), EOnlineDataAdvertisementType::ViaOnlineServiceAndPing);
	const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController();
	OnlineSessionInterface->CreateSession(*LocalPlayer->GetPreferredUniqueNetId(), 
										   NAME_GameSession, 
										   *SessionSettings);
	
}
void AMP_UE4Character::JoinGameSession()
{
	if (!OnlineSessionInterface.IsValid())
	{
		return;
	}

	OnlineSessionInterface->AddOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegate);

	SessionSearch = MakeShareable(new FOnlineSessionSearch());
	SessionSearch->bIsLanQuery = false;
	SessionSearch->MaxSearchResults = 9'000'000;
	SessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
	const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController();
	OnlineSessionInterface->FindSessions(*LocalPlayer->GetPreferredUniqueNetId(), SessionSearch.ToSharedRef());
}
void AMP_UE4Character::OnCreateSessionComplete(FName NameSession, bool bWasSuccessful)
{
	if (bWasSuccessful)
	{
		if (GEngine)
		{
			GEngine->AddOnScreenDebugMessage(
				-1,
				15.f,
				FColor::Cyan,
				FString::Printf(TEXT("Create session: %s"),*NameSession.ToString()));
		}

		UWorld* World = GetWorld();
		if (World)
		{
			World->ServerTravel(FString("/Game/FirstPersonCPP/Maps/Lobby?listen"));
		}
	}
	else
	{
		if (GEngine)
		{
			GEngine->AddOnScreenDebugMessage(
				-1,
				15.f,
				FColor::Red,
				FString(TEXT("Failed create session")));
		}
	}
}
void AMP_UE4Character::OnFindSessionsComplete(bool bWasSuccessful)
{
	if (!OnlineSessionInterface.IsValid())
	{
		return;
	}

	for (auto Result : SessionSearch->SearchResults)
	{
		FString Id = Result.GetSessionIdStr();
		FString User = Result.Session.OwningUserName;
		FString MatchType;

		Result.Session.SessionSettings.Get(FName("MatchType"), MatchType);

		if (GEngine)
		{
			GEngine->AddOnScreenDebugMessage(
				-1,
				15.f,
				FColor::Emerald,
				FString::Printf(TEXT("Id: %s, User: %s"), *Id, *User));
		}

		if (MatchType == FString("FreeForAll"))
		{
			if (GEngine)
			{
				GEngine->AddOnScreenDebugMessage(
					-1,
					15.f,
					FColor::Emerald,
					FString::Printf(TEXT("Joing Match Type: %s"), *MatchType));
			}
			OnlineSessionInterface->AddOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegate);
			const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController();
			OnlineSessionInterface->JoinSession(*LocalPlayer->GetPreferredUniqueNetId(), NAME_GameSession, Result);
		}
	}
}
void AMP_UE4Character::OnJoinSessionsComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result)
{
	if (!OnlineSessionInterface.IsValid())
	{
		return;
	}

	FString Address;
	if (OnlineSessionInterface->GetResolvedConnectString(NAME_GameSession, Address))
	{
		if (GEngine)
		{
			GEngine->AddOnScreenDebugMessage(
				-1,
				15.f,
				FColor::Yellow,
				FString::Printf(TEXT("Connection string: %s"), *Address)
			);
		}
		APlayerController* PlayerController = GetGameInstance()->GetFirstLocalPlayerController();
		if (PlayerController)
		{
			PlayerController->ClientTravel(Address, ETravelType::TRAVEL_Absolute);
		}
	}
}

На данный момент удалось выяснить не много.
Из логов игры я обратил внимание на такую вещь что Steam почему-то ищет всегда по 50 лобби. Моя догадка строится на том, что скорее всего сеанс, созданный на другом компьютере не всегда входит в эти 50 лобби, от чего иногда есть возможность подключиться к своему лобби потому что он попадёт в 50 лобби.

В официальной документации SteamWorks смог найти следующее - ISteamMatchmaking::AddRequestLobbyListResultCountFilter устанавливает лимит на число возвращаемых лобби. Чем ниже число, тем быстрее загрузить результаты и информацию о лобби в клиент.

Но пока что не знаю как и где изменить это значение т.к. EG написали свою прослойку между разными интерфейсами разных площадок. Если кто-то знает как это победить, то дайте, пожалуйста, пищу для размышлений.
Я сильно начинающий и пока не всё знающий :slightly_smiling_face: