Не находится/создается сессия Online Subsystem Steam Unreal Engine 4/5

Законектить свою игру к Steam к стим достаточно интересный опыт, гайдов в открытом доступе предостаточно как на Blueprints (Advanced Session Plugin) так и на C++, но, к сожалению, на огромное количество гайдов приходится огромное количество тех, у кого ничего не получается, не смотря на то, что делали те же действия.

Не находится/создается сессия Online Subsystem Steam Unreal Engine 4/5

У меня вышла похожая ситуация, за исключением того, что это всё-таки работало то раз в 100 попыток, то каждый тест, то вообще нет. Достаточно интересно получается, что создать сессию получается, а найти её не возможно.

Создание сессий в логах
Создание сессий в логах

Теперь к сути, так вышло, что спустя 3 дня беготни от одного пк к другому, собирая каждый раз билд, читая логи, читая форумы и так далее до меня вот что дошло.

480 AppID (Spacewar) - айди предназначенный специально для разработчиков-тестировщиков своих игр. Теперь информацию, которую почему-то никто и негде(по крайней мере я не нашел) не сообщает: 480 AppID поддерживает только 50 активных публичных сессий(лоби) и так удивительно вышло, практически все эти сессии заняли пираты, которые не то что там зашли поиграть с друзьями на вечерок или что-то в этом духе, они просто хостят там сервера, вы сами можете в этом спокойно убедиться, если хотя бы раз в пару дней будете смотреть активные сессии.

Сервачок на 480 AppID для хойки
Сервачок на 480 AppID для хойки

Это основная причина почему вы не можете найти созданную вами сессию, да есть ещё моменты, когда вы могли что-то действительно не так сделать, упустить.

Как убедиться, что вашей вины нет?

Есть два варианта(быстрый и более долгий и немного муторный):

  • Собирать проект(муторный):
Необходимо собрать проект в конфигурации разработчика
Необходимо собрать проект в конфигурации разработчика

В папке где вы собирали проект по пути "название игры"/Saved/Logs будут хранится логи вашей игры после того, как вы закрыли игру.

  • Запустить игру в Standalone режиме с лайв логами(быстрый, представляете, не обязательно билдить проект):
Для этого необходимо указать дополнительные параметры запуска "-log"
Для этого необходимо указать дополнительные параметры запуска "-log"

Теперь, если запустить игру на одном из устройств и начать поиск сессий информацию о количестве занятых сессий - LogOnlineSession: STEAM: Found 50 lobbies, finalizing the search, в моём случае. Если вам повезло и найденных сессий хотя бы на 1 меньше, вы можете спокойно пытаться, желательно поскорее, создавать своё.

Как решить данную проблему?

  1. Заплатить габену 100$ и получить свой AppID, если вы планируете выпускать игру в стим, вам в любом случае придется это делать. Если ваша игра будет успешной вам вернут 100$ (если не ошибаюсь)
  2. Создать спамер: не знаю на сколько это правильно и не отвалится ваш SteamID или IP в таком случае, так что тут на свой страх и риск, я не несу ответственности за ваши действия. Но логика такая, вы будете искать сессии с определенным таймером, пока сессий будет меньше 50, стало меньше 50? Создаете своё.

Если кому надо, то при таких настройках сессия можно создать и найти:

DefaultEngine.ini

[/Script/Engine.GameEngine] +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") [OnlineSubsystem] DefaultPlatformService=Steam [OnlineSubsystemSteam] bEnabled=true SteamDevAppId=480 bInitServerOnClient=true [/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

Настройки создания сессии и поиска:

if (OnlineSessionPtr.IsValid()) { FOnlineSessionSettings SessionSettings = FOnlineSessionSettings(); SessionSettings.bIsLANMatch = false; SessionSettings.NumPublicConnections = 2; SessionSettings.bShouldAdvertise = true; SessionSettings.bUsesPresence = true; SessionSettings.bUseLobbiesIfAvailable = true; OnlineSessionPtr->CreateSession(0, NAME_GameSession, SessionSettings); } OnlineSessionSearch = MakeShareable(new FOnlineSessionSearch); OnlineSessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals); OnlineSessionSearch->bIsLanQuery = false; OnlineSessionSearch->MaxSearchResults = 100;

Как-то вот так.

3
3 комментария