- PVSM.RU - https://www.pvsm.ru -
SteamWorks это интерфейс, который обеспечивает разработку и публикацию инструментов для разработчиков игр. Он предоставляет возможность интеграции с клиентом Steam, интеграция с комьюнити, добавлять и редактировать достижения для игр и многое другое.
На данный момент доступ к SteamWorks можно получить если вы являетесь «гейм студией» и хотите распространять свое приложение в steam или через сервис Steam Greenlight, тем самым став партнером steam. Подробности здесь [1]. Open SteamWorks это открытая реализация Steam api (дизассемблированная версия библиотек steam.)
“Open SteamWorks designed for people who know, what they do” — Ryan Stecker. Так автор открытой версии ответил на вопрос (не мой) о наличии дополнительной документации, вся документация которая есть в наличии, является комментариями в исходных кодах. Загрузить последнюю версию Open SteamWorks можно с сайта [2].
Я буду использовать Visual Studio, если у вас есть под рукой mingw, можете использовать его. Приступим к созданию консольного приложения (вы можете использовать пример test platform из open steamworks).
Подключаем необходимые заголовочные файлы.
#include <SteamclientAPI.h>
#include <SteamAPI.h>
Подключаем необходимые библиотеки для компиляции нашего приложения.
#pragma comment( lib, "../Resources/Libs/Win32/steamclient" )
#pragma comment( lib, "../Resources/Libs/Win32/steam" )
Получаем базу Steam с 12 версией интерфейса.
В дизассемблированном виде это компилируется как поиск в реестре пути до стима и подключение к нему.
CSteamAPILoader loader;
auto *Client = (ISteamClient012 *)loader.GetSteam3Factory()(STEAMCLIENT_INTERFACE_VERSION_012, NULL);
Проверяем смогли ли мы получить базу.
if ( !Client )
{
printf("Unable to get ISteamClient.");
}
Создаем пайпу для взаимодействия.
HSteamPipe pipe = Client->CreateSteamPipe();
Проверяем пайпу.
if ( !pipe )
{
printf("Unable to get pipe");
}
Подключаемся к глобальному пользователю (запущенный стим).
HSteamUser user = Client->ConnectToGlobalUser( pipe );
Проверка подключения к глобальному пользователю.
if ( !user )
{
printf("Unable connect to global user");
}
Получаем доступ к api v 12 интерфейса пользователя.
auto *User = (ISteamUser012 *)Client->GetISteamUser( user, pipe, STEAMUSER_INTERFACE_VERSION_012);
Получаем доступ к api v.13 и v. 1 интерфейса друзей.
auto *Friends = (ISteamFriends001 *)Client->GetISteamFriends(user, pipe, STEAMFRIENDS_INTERFACE_VERSION_001);
auto *Friends13 = (ISteamFriends013 *)Client->GetISteamFriends(user, pipe, STEAMFRIENDS_INTERFACE_VERSION_013);
Предостерегаю тех, кто будет использовать интерфейсы IClient (IClientUtils, IClientFriends, и т. д.), все эти интерфейсы перестают работать сразу после глобального обновления steam, ваше приложение будет выдавать ошибки, используйте ISteam (стабильный) изложенный выше, если очень нужно использовать функции из IClient интерфейсов, а такое иногда случается, скопируйте все важные DLL файлы для вашего приложения (можно посмотреть в таблице импорта) и держите в папке с вашим приложением.
Теперь мы попробуем сделать самую простую вещь, поменять статус в стиме. (api для смены статуса доступна в первой версии интерфейса)
Friends->SetPersonaState(k_EPersonaStateSnooze);
Компилируем, запускаем и теперь мы имеем статус спит в стиме.
Получаем количество друзей.
int friendcount = Friends->GetFriendCount();
printf("%d",friendcount);
Меняем свое имя
Friends->SetPersonaName("Big_balls");
Перебираем наших друзей, получаем структуру SteamID(64bits) текущего друга по индексу, проверяем статус текущего друга, если равняется статусу онлайн и имя друга Crey, отсылаем ему сообщение.
for(int i = 1; i < friendcount + 1; i++)
{
CSteamID thisfriend = Friends->GetFriendByIndex(i);
if(Friends->GetFriendPersonaState(thisfriend) == k_EPersonaStateOnline && strstr(Friends- >GetFriendPersonaName(thisfriend),"Crey") != 0)
{
char myMsg[] = "My friend Crey is online.";
Friends->SendMsgToFriend(thisfriend, k_EChatEntryTypeEmote,myMsg,strlen(myMsg)+1);
}
Думаю теперь все понимают, что при помощи SteamWorks можно легко написать trade бота, для обмена вещей по «заданному курсу» и много чего интересного.
В следующих частях мы рассмотрим работу с IScreenshots, IUserstats(achievements), callbacks и возможно дело дойдет до написания бота.
Автор: Dinisoid
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/19623
Ссылки в тексте:
[1] здесь: http://www.steampowered.com/steamworks/FAQ.php
[2] сайта: http://hg.opensteamworks.org
[3] Источник: http://habrahabr.ru/post/157999/
Нажмите здесь для печати.