Steam appid что это
Простая работа со Steamworks
Unity, C#, Steamworks.NET и Facepunch.Steamworks
Введение
Как и большинству разработчиков игр, мне очень хочется выложить мою игру в Steam.
Как и большинству инди-разработчиков игр, мне не хватает доступа к ресурсам/знаниям, которые дали бы мне чётко понять, что же действительно значит «быть в Steam».
Сложно заполнить этот пробел в знаниях, потому что, несмотря на подробную документацию возможностей Steam, трудно понять, с чего начать в этом огромном хранилище документов и как связаны между собой его отдельные части. Кроме того, основные обсуждения платформы Steam проходят в закрытом форуме, доступном только для подтверждённых платформой через Steam Direct или реферальную ссылку Valve разработчиков. То есть для начинающих поиск ответов на простые вопросы может оказаться сложной задачей.
Поэтому я решил написать высокоуровневый обзор для людей, которые только начинают разбираться в том, как заставить Steam работать с их играми. В частности, я подробно рассмотрю Steamworks SDK, программную библиотеку Valve, предоставляющую доступ к таким аспектам, как мастерская (Workshop), таблицы лидеров (Leaderboards), достижения (Achievements) и так далее.
Steamworks хорошо задокументирована компанией Valve, но документация написана с точки зрения человека, использующего нативную библиотеку C++ и уже имеющего представление о том, как все эти функции пересекаются. Если это не ваш случай, то так даже лучше! Ниже представлено объяснение для другого человека, который пишет игру на языке более высокого уровня и просто хочет обеспечить простую интеграцию со Steamworks (а это возможно, я гарантирую!). Конкретнее, этот пост предназначен для людей, использующих в той или иной форме C#, а в идеале — работающих в игровом движке Unity.
Steamworks
Steamworks состоит из двух частей. Во-первых, это портал для разработчиков, предназначенный для управления всем, что связано с существованием игры в Steam, от изменения баннеров игры до управления продажами и списка поддерживаемых контроллеров. Во-вторых, это SDK, предоставляемый Valve для того, чтобы разработчик мог взаимодействовать со всем остальным в Steam, в том числе с мастерской, таблицами лидеров, серверами, достижениями и т.д. Не забывайте об этой системе! SDK «обязателен только для загрузки контента в Steam». Это означает, что можно полностью воздержаться от возни со всеми вышеперечисленными возможностями SDK и сосредоточиться только на том, как загрузить игру в Steam. Однако SDK предоставляет множество других полезных функций, так что давайте настроим его и заставим работать!
Если вы пишете на C++, то можете просто добавить библиотеку к вашей игре, следуя этим инструкциям.
Steamworks.NET обеспечивает взаимно однозначное преобразование функций Steamworks в функции C#, но это значит, что для работы вам потребуется полное понимание Steamworks как библиотеки. Для новичков, желающих отделаться простой работой, этого может оказаться слишком много. Если вы хотите сделать что-то посложнее, для Steamworks.NET придётся написать собственную обёртку поверх её обёртки, что лишает смысла саму идею обёртывания.
Facepunch.Steamworks
Из-за этих ограничений и по другим причинам, Facepunch Studios (известная по играм Rust и Garry’s Mod) захотела написать более удобную библиотеку Steamworks для C#/Unity.
Она избавляет от необходимости писать кучу кода для реализации простых (и сложных) задач в Steamworks, позволяя сосредоточиться на самой «работе» со Steam. Библиотека используется в Rust, то есть её работа тестируется на игре с одним из самых больших сообществ игроков в Steam. Сложные задачи абстрагируются в простые вызовы функций, сама библиотека состоит всего из трёх файлов, то есть не особо раздувает проект. Не могу выразить, насколько она полезна для новичков, это настоящая находка. Создатель Steamworks.NET даже сказал, что Facepunch.Steamworks — это «именно то, что во что я хотел превратить Steamworks.NET дальше» и что «для большинства разработчиков она должна стать выбором по умолчанию». Steamworks.NET по-прежнему доступна для тех, кто хочет реализовать собственную версию Facepunch.Steamworks, но, по-моему, что хорошо для Rust, то достаточно хорошо и для меня. Как же работает библиотека и что в ней особенного? Давайте начнём разбираться.
Начало работы
Во-первых, можно подумать, что для начала работы с Steamworks нужно быть подтверждённым разработчиком Steamworks, но на самом деле, использовать SDK можно сразу, не проходя процесс регистрации. Valve предоставила разработчикам тестовый «AppID» 480, для которого можно программировать.
AppID
AppID — это уникальный идентификатор игры в Steam (и в Steamworks). Его вы получаете в сразу после регистрации игры. Он «занимает» вам место в Steam/Steamworks и позволяет полностью распоряжаться всем, связанным с этим AppID. AppID 480 соответствует «SpaceWar», демонстрационной игре, созданной Valve. Она имеет открытые исходники и показывает некоторые из возможностей Steamworks (обязательно изучите её!).
Уникальный AppID — это удобно и очевидно необходимо для вашей игры на определённом этапе, тестовый же AppID (480) позволяет вам работать со службами Steam как будто ваша игра уже готова. Когда вы получите реальный AppID, то подставьте его, а пока вполне подойдёт 480. То есть не стоит создавать сервер с названием «Сервер с названием моей игры, ожидающей регистрации в качестве торговой марки».
Скачивание и импорт Facepunch.Steamworks
Unity
Скопировав все файлы библиотеки в соответствующие каталоги, вы практически закончили настройку! Единственное, что нам нужно — написать немного кода, чтобы всё интегрировать. Я скопирую тестовый файл из тестового проекта и просто сокращу его для понятности.
И… на этом всё! Если прикрепить этот скрипт к «GameObject» в сцене и перейти в игровой режим, то вы увидите, что в Steam вы играете в «Spacewar», а в консоли выводится базовая информация Steam о вас (если не получилось, проверьте, выполнен ли вход в Steam).
Жизнь с Facepunch.Steamworks
Возможности
После настройки доступ к более глубоким функциям Steam становится довольно простым, потому что библиотека FP обрабатывает и обёртывает почти все части стандартного Steamworks SDK. Однако по-прежнему стоит вопрос: какие же это части? Вот небольшой список с описаниями того, с чем можно работать (в библиотеке FP):
1. Серверы — создание серверов с помощью клиента игрока или запуск «безголового» сервера в любом другом месте. Используется для чувствительных к пингу игр, имеющих высокие требования к сети (таких как Dota 2, Overwatch и т.д.)
2. Лобби — это «места встреч» игроков, используемые для обмена SteamID или другой информацией пользователей.
3. Друзья — вы и ваши друзья-игроки в Steam.
4. Мастерская — загрузка/скачивание контента в мастерскую Steam Workshop и из неё.
5. Таблицы лидеров — создание и хранение глобальных таблиц лидеров для игры.
6. Достижения — создание и выдача достижений.
7. Сеть — отправка P2P-данных клиентам.
8. Steam Cloud — сохранение данных в облако Steam Cloud! Очень полезно для сохранений игр.
9. Голос — взаимодействие с голосовым API Steam для внутриигрового чата.
10. Статистика — задание статистики на стороне Steam для заданного игрока.
Наилучший способ научиться использованию нужных функций — посмотреть, есть ли её рабочий пример в тестовом проекте Facepunch.Steamworks (ПРИМЕЧАНИЕ: это не тестовый проект Unity), и смоделировать её реализацию в своей игре.
Большинство из возможностей задокументировано в wiki библиотеки FP, но на самом деле достаточное описание есть у нескольких классов. Если вы не можете найти пример, изучите код библиотеки и посмотрите, реализована ли функция вообще. Если нет, то посмотрите, насколько далеко вы можете зайти в её реализации со своей стороны или просто отправьте сообщение об ошибке в библиотеку. Обычно разработчики Facepunch очень отзывчивы, они могут вам рассказать, работают ли они над чем-то или нет, и даже могут посодействовать вам в помощи сообществу, если вы решите реализовать что-то самостоятельно.
Подписчики и обратные вызовы
Если вам нужно получить список всех лобби в игре с помощью библиотеки FP, то вы напишете следующее:
Заметьте, что здесь не выполняется возврат или присваивание. Но в таком случае как нам получить то, что мы запрашиваем? После вызова функции в Steamworks бэкенд Steam подготавливает всё необходимое, а затем отправляет вам данные через «обратный вызов» (callback). Steam почти буквально «вызывает вас», чтобы сообщить: «Эй, твои данные готовы!».
Для получения вызова нам нужно «поднять трубку», или, как это обычно называется, «подписаться» на обратный вызов. Это реализуется определением функции, получаемой передаваемые обратным вызовом данные. Иногда он не передаёт данных, тогда обратный вызов используется в основном как «обработчик» или как способ сообщить, что можно продолжать. Когда вы находитесь внутри обработчика обратного вызова, можно безопасно продолжать работу. Вот пример:
Понимание этого паттерна будет очень полезно при использовании библиотеки. Также очень полезно разобраться в том, что же в действительности делает Steamworks, так что стоит изучить его документацию. Если вы хотите более подробно изучить принцип работы, рекомендую прочитать документацию Valve по этой теме, а также некоторые разделы веб-сайта Steamworks.NET.
Двигаемся дальше
С этого момента вы можете делать всё, что угодно! Valve не ставит никаких требований, но если уж вы попали на платформу, то очевидно, что вам в первую очередь интересно связаться с ней и с её сообществом теми способами, которые предоставила Valve. После регистрации в Steam Direct вам достаточно просто заменить AppID и перенести все функции Steam, которые вы реализовали для тестового AppID.
Немного о Steam Web Api
Сервис цифровой дистрибуции Steam от компании Valve становится всё более популярным среди игроков. По состоянию на январь 2013, через Steam распространяется более трёх тысяч товаров, на которые действуют ежедневные, срединедельные и скидки на выходные дни, а количество зарегистрированных аккаунтов превысило 60 миллионов.
В настоящее время, в рунете очень мало информации об использовании Steam Api (или же Steam Web Api). В данном топике я расскажу о том, как получать нужную вам информацию из сообщества Steam для интеграции её в свои сайты, блоги или же просто получить информацию о пользователе, не заходя в Steam.
Начнем с главного. После несложных действий, я создал одну php страницу, которая, по запросу имени пользователя, либо SteamID или SteamcommunityID, выводит множество подробной информации о профиле Steam. Информации там намного больше, чем предоставляют аналогичные англоязычные сервисы.
Посмотреть работу страницы можно здесь. При желании, можно существенно доработать сервис, например добавить возможность определить, какие игры есть на аккаунте конкретного пользователя, и сколько они стоят (как когда-то делал steamcalculator).
Кому интересен исходный код моей страницы, алгоритм определения типа вводимых данных или алгоритм перебора одинаковых xml параметров, можете написать мне тут, или в контактной информации на той странице.
Открываем капот Steam
Информацию о пользователе Steam можно получить несколькими способами. Наиболее популярные из них, это:
— использовать именно Steam Web Api, который предлагают они нам сами (но предоставленной информации там увы не много)
— получать и обрабатывать данные сообщества напрямую, в формате xml.
— получать и обрабатывать данные сообщества напрямую, в формате json.
Первый способ мне не особо интересен, я пользовался сразу двумя оставшимися.
XML
Получить информацию о пользователе довольно просто. Достаточно лишь ввести в адресную строку браузера запрос в виде:
steamcommunity.com/profiles*SteamID*/?xml=1
Например:
steamcommunity.com/profiles/76561198036370701/?xml=1
(к слову, если пользователь имеет CustomURL, то адрес ссылки изменится с «. /profiles/*SteamID*/. » на «. /id/*CustomURL*/. «)
Эту страницу можно ловить и обрабатывать при помощи cURL или (что для меня проще) функции simplexml_load_file();, например:
$slf = «http://steamcommunity.com/profiles/76561198036370701/?xml=1»;
$url = simplexml_load_file($slf);
JSON
Прежде всего вам понадобится apikey. Зарегистрировать его можно здесь.
Получать и обрабатывать эти данные можно командой file_get_contents, а в последствии сконвертировать всё в массив примерно вот таким способом:
$urljson = file_get_contents(«http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=*apikey*&steamids=*steamid*»);
$data = (array) json_decode($urljson)->response->players[0];
Например:
$urljson = file_get_contents(«http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=38A3BEAE3EFA726E4438207D08CB0EC7&steamids=76561198036370701»);
$data = (array) json_decode($urljson)->response->players[0];
А выводить, например содержимое блока profileurl строчкой кода:
Подводим итог
Методы получения информации о пользователе Steam не ограничиваются теми, что я привел. Те ссылки, которыми я получал данные используются только для получения суммарной (общей) информации. Отдельно можно получать список игр пользователя, список друзей, список групп, предметов инвентаря и мастерской и многое другое.
На основе полученных данных можно также сделать сервис генерации баннеров, юзербаров, профайлов для форумов и блогов, по аналогии с сервисом steamprofile.
Из недостатков работы сервиса можно выделить то, что в пик нагруженности серверов Steam, для получения информации о пользователе время запроса данных может колебаться от 0,1 до 12 секунд, а также часто втречается ошибка 503 (сервис недоступен), приходится отправлять запрос заново. Как вариант решения проблемы — не отправлять запрос чаще, чем раз в 10 секунд. Если у вас есть другие способы решения проблемы, пишите.
Steam appid что это
Введение
В Steam встроен основанный на HTTP веб-API, который может использоваться для доступа ко многим функциям Steamworks. Этот API содержит публичные методы, доступ к которым может получить любое приложение, способное отправить HTTP-запрос: к примеру, игровой клиент или сервер. Он также содержит защищённые методы, которые требуют аутентификации, и доступ к ним могут получить доверенные бэкенд-приложения.
Формат запроса
Как и API Steamworks на С++, веб-API разделён на множество интерфейсов, содержащих связанные методы. Формат URI для запроса к API таков:
Большинство методов поддерживают несколько обязательных и необязательных параметров. В зависимости от метода эти параметры необходимо отправлять в запросе как параметр GET или POST.
Аутентификация
Массивы параметров
Служебные интерфейсы
Обратите внимание, что JSON должен быть закодирован в виде URL. Поля key и format по-прежнему передаются как отдельные параметры. Запросы POST также поддерживаются.
Определить, является ли метод служебным, можно по названию: если в окончании названия есть «Service» ( к примеру IPlayerService), то метод поддерживает дополнительный способ передачи параметров. Параметры некоторых служебных методов имеют более сложную структуру, и для них обязателен этот дополнительный способ.
Пример запроса
В следующем примере запрос возвращает 3 последние новости о Team Fortress 2.
Запрос уточняет, что ответ должен быть в формате JSON, и включает в себя обязательный параметр appid (AppID Team Fortress 2 равен 440) и необязательный параметр — число возвращаемых результатов.
Дополнительная информация об этом вызове доступна здесь: ISteamNews/GetNewsForApp
Получение Steam ID пользователя
Соображения об адресах узлов веб-API и брандмауэрах
Публичный веб-API ( api.steampowered.com ) находится за пограничным сервером кэширования Akamai, так что IP-адреса, которые вы увидите, будут разниться в зависимости от того, где вы находитесь, а также от других факторов. IP-адреса могут часто меняться, так что если вы выполняете запросы из-за брандмауэра, ограничивающего исходящие запросы, продолжайте читать.
Список разрешений для IP-адресов
Мы позволяем добавлять в список разрешений IP-адреса для вызовов веб-API. Это дополнительный слой защиты на случай того, если ваш ключ веб-API попадёт в чужие руки. Он делает так, что принимаются только вызовы веб-API с разрешённых IP-адресов. Когда в список разрешений будет добавлен любой IP-адрес, запросы с остальных адресов будут блокироваться и возвращать ответ 403 (доступ запрещён).
Добавлять IP-адреса в список разрешений просто. На любой странице группы, у которой есть ключ веб-API, нажмите на кнопку «Управление ключом веб-API» и следуйте дальнейшим инструкциям.
У каждого ключа веб-API свой список разрешений, и добавлять в него что-либо необязательно.
Обратите внимание: добавление в список разрешений не гарантирует защиту ключа веб-API. Защищайте свой ключ и никому его не сообщайте, а если он попал в чужие руки — немедленно смените его.
How do I find the ID for a game on Steam?
How do I find this ID for a specific game on Steam?
9 Answers 9
Another reliable way is to search for the program on steamdb, which will show you the info for games removed from the store as well. The appid is clearly labelled in the search results.
Many of the methods above work but I am going to show you an offline version. I am using Windows and uncertain if it works with other systems. If you head into your Steam directory and open SteamApps, and then open common. There you will find a list of games. Open your chosen folder and find «steam_appid». Open it, and it will show the ID in a text document.
A list of all your installed steam apps and their appID’s can be obtained easily with one line of BASH offline using grep, sed and awk to look at the appmanifest files in Steam/steamapps/(on Linux/Unix)
your path to /steamapps/ may vary if you install your games to a non default place.
Breakdown of what that one line of bash does:
There is an answer for this in the Steam Support, however, it requires you to be running both Steam and Windows.
This process can also be used for Demos, Media, and other products on Steam:
This answer is another solution that works on Linux (Ubuntu in this case) inspired by the answer by @Slobeck above.
Substitute the path to your steamapps directory as appropriate, if you don’t know where it is you can run this command to find it:
I would be interested to know if this would work on Windows 10 with Windows Subsystem for Linux.
While 3ventic’s answer is the easiest way, there is a way to do it which is fully offline and more garunteed than Waddling Pig’s answer (as not all games have that steam_appid file) however this will only work for games you have downloaded as this method has you look in the steamapps folder.
in the steamapps folder you’ll see a bunch of appmanifest_######.acf files, the # are the app id for the game, but also other information such as where the game’s directory is and it’s name. using Notepad++
[Info] Подмена AppId и подключение DLC
Не нужно запускать игру через Cтим как стороннюю! Таким образом сетевая игра не будет работать!
Совместно с этим также можно использовать один из wrapper’ов для подключения DLC и возможности сохранений:
Этот Wrapper весьма полезен, когда дело доходит до пиратских многопользовательских игр, которые используют Steam Matchmaking для подключения. С правильной конфигурацией можно открыть любой идентификатор приложения почти для любой Steam-игры. Это означает, что Вы можете правильно запускать игры с открытыми DLC без использования GreenLuma-ы и, при этом все равно будет доступ к многопользовательским сетевым режимам. При использовании этого Wrapper-а сохранения будут храниться прямо в папке игры (в папке save) и, прогресс будет сохраняться, даже если Вы используете идентификатор, который не дает такой возможности. Также существует возможность при помощи этого Wrapper-а заставить игру запуститься с определенным языком, если присутствуют нужные языковые файлы.
Использование:
1. Установите игру.
2. Переименуйте оригинальный steam_api.dll в _steam_api.dll.
3. Извлеките Wrapper от Brucie в ту же папку, где находиться оригинальный steam_api.dll (теперь _steam_api.dll).
4. Откройте steam_api.ini при помощи Блокнота.
5. В строке RealAppId= введите настоящий идентификатор Вашей игры после знака равенства.
6. Измените язык в последней строке (введите: english или russian) и сохраните файл.
7. Хорошая идея также разблокировать другие возможные идентификаторы. Обычно это дополнительные идентификаторы от DLC интегрированные в игру, но иногда это часть защиты игры.
8. Запустите игру согласно способу смены идентификатора приложения. Не забудьте перед этим запустить Steam.
Этот обновленный wrapper основан на wrapper-е от Brucie и разработан Maamoun-ом.
o Преимущества:
— Автоматическое открытие DLC;
— Совместимость с определенными играми, которые несовместимы с wrapper-ом от Brucie;
— Совместимость с 64-х разрядными играми.
— Наличие исходников что позволяет обновить его до актуальной версии SteamApi
o Недостатки:
— Отсутствие каких либо плюшек (даже смены языка)
Использование:
1. Установите игру.
2. Переименуйте оригинальный steam_api.dll в _steam_api.dll.
3. Извлеките Wrapper от Maamoun в ту же папку, где находиться оригинальный steam_api.dll (теперь _steam_api.dll).
Этот обновленный wrapper основан на wrapper-е от Brucie и разработан tapek-ом из группы REVOLT.