Миграция игр со Steam

Если ваша игра была издана в Steam, вы можете воспользоваться механизмом миграции. В ряде случаев он позволяет упростить подключение к инфраструктуре Mail.ru до простого копирования .dll файлов. Пошаговая инструкция по переносу проекта из Steam приведена ниже:

1. Проверьте, что при создании проекта в кабинете разработчика была проставлена галка "Режим эмуляции Steam".

2. Скачайте архив steam_api.dll (различных версий) от Игрового центра по ссылке  https://admin.dl.mail.ru/guptools/steam_api_dlls.zip . Извлеките из этого скачанного архива каталог с именем, которое совпадает с версией steam_api.dll, используемой в вашем клиенте игры.

3. Замените имеющуюся в вашем клиенте Steam_api.dll на dll от Игрового центра, полученную в п. 2.

4. Защитите игру при необходимости.

Если игра до этого была защищена и защита распространялась и на Steam dll, то необходимо защитить игру с учетом нового dll файла. Если игра не была защищена, должно быть достаточно простой замены файла на новый.

5. Соберите новый дистрибутив и загрузите его на сервер ИЦ. Сделать это можно с помощью соответствующей инструкции.

Клиентское API

Подразумевается что клиент игры уже имеет интеграцию со Steam SDK. В этом случае достаточно заменить steam_api.dll или steam_api64.dll в каталоге игры на версии библиотек от Mail.ru (ссылка на .dll). В данных библиотеках реализована небольшая часть API от Steam. Реализованы следующие методы:

  • SteamAPI_Init()
  • SteamAPI_Shutdown()
  • SteamAPI_IsSteamRunning()
  • SteamAPI_RegisterCallback()
  • SteamAPI_UnregisterCallback()
  • SteamAPI_RegisterCallResult()
  • SteamAPI_UnregisterCallResult()
  • SteamUser()
  • SteamUser()→GetAuthSessionTicket()
  • SteamUser()→GetSteamID()
  • SteamUser()→BLoggedOn()
  • SteamFriends()
  • SteamFriends()→GetPersonaName()
  • SteamFriends()→GetPersonaState()
  • SteamFriends()→ActivateGameOverlayToWebPage()
  • SteamFriends()→InviteUserToGame()
  • SteamFriends()→GetFriendCount()
  • SteamFriends()→GetFriendByIndex()
  • SteamFriends()→GetFriendPersonaState()
  • SteamFriends()→GetFriendPersonaName()
  • SteamFriends()→GetSmallFriendAvatar()
  • SteamFriends()→GetMediumFriendAvatar()
  • SteamFriends()→GetLargeFriendAvatar()
  • SteamFriends()→GetFriendRichPresence()
  • SteamRemoteStorage()
  • SteamRemoteStorage()→FileWrite()
  • SteamRemoteStorage()→FileRead()
  • SteamRemoteStorage()→FileExists()
  • SteamRemoteStorage()→GetFileSize()
  • SteamRemoteStorage()→FileDelete()
  • SteamRemoteStorage()→GetFileTimestamp()
  • SteamRemoteStorage()→GetFileCount()
  • SteamRemoteStorage()→GetFileNameAndSize()
  • SteamUtils()
  • SteamUtils()→GetAppID()
  • SteamUtils()→GetImageSize()
  • SteamUtils()→GetImageRGBA()
  • GetAuthSessionTicketResponse_t
  • MicroTxnAuthorizationResponse_t
  • GameRichPresenceJoinRequested_t

Для остальных методов реализованы заглушки (т.е. можно вызвать, но они ничего не делают). Если игра клиент серверная, авторизацию проверяют так:

  • на клиенте вызывают ISteamUser::GetAuthSessionTicket()
  • передают тикет на сервер игры
  • сервер игры вызывает ISteamUserAuth/AuthenticateUserTicket метод у games.mail.ru

Возвращаемый SteamId в результате проверки тикета должен быть равен значению возвращенному на клиенте вызовом SteamUser()->GetSteamID().

Дополнительные возможности

Если ваша игра использует большее число методов Steam SDK/API, чем указано в этом документе - напишите нам, мы постараемся помочь. Наша задача сделать подключение проектов максимально комфортным для разработчиков. Форма для связи находится здесь.