Для активации дебаг режима в steam нужно добавить параметры запуска:
-dev -console
Для вывода отладочной информации с нашего приложения переходим в появившуюся консоль и пишем:
log_ipc verbose <имя нашего приложения.exe>
Подключим заголовочный файл #include <windows.h> для использования необходимых функций.
Используя наше тестовое приложение из первой части, добавим подключение необходимых интерфейсов.
auto *Utils = (ISteamUtils001 *)Client->GetISteamUtils(pipe,STEAMUTILS_INTERFACE_VERSION_001); auto *Apps = (ISteamApps004 *)Client->GetISteamApps(user,pipe,STEAMAPPS_INTERFACE_VERSION_004);
Попробуем получить время покупки игры на моем steam аккаунте c заданным ID, объявим AppId_t,
который имеет тип uint32, поместим в него значение 500 (Left 4 Dead).
AppId_t l4d(500);
Получаем время покупки и серверное время в формате unix timestamp.
int PurchaseTime = Apps->GetEarliestPurchaseUnixTime(l4d); int time = Utils->GetServerRealTime();
Конвертируем unix timestamp в удобный вид для человека.
time_t rawtime = time; time_t Ptime = PurchaseTime; struct tm timeinfo; char timebuf[32]; localtime_s( &timeinfo,&rawtime ); asctime_s (timebuf,32,&timeinfo); printf( "%s \n", timebuf ); localtime_s( &timeinfo,&Ptime); asctime_s (timebuf,32,&timeinfo); printf( "%s \n", timebuf);
На выходе получаю 1 — реальное время сервера, 2 — время когда я приобрел игру.
Sat Nov 10 09:51:15 2012 Sat Nov 22 17:03:45 2008
Теперь попробуем получить список друзей и уникальную (не изменяющуюся ссылку) на их профиль.
CSteamID curID; int friendcount = Friends->GetFriendCount(); for(int i = 0; i < friendcount; i++) { curID = Friends13->GetFriendByIndex(i, k_EFriendFlagAll); printf("%s - %llu\n", Friends->GetFriendPersonaName(curID), curID.ConvertToUint64()); } system("pause");
Получаем такой вывод:
:REC: FabZen - 765611979787897xx DrLuke - 765611979853980xx [EM] Cooler_sk - 765611979862334xx Maryus - 765611979878419xx vorram - 765611979915317xx 0nb0ard - 765611979922297xx ..........
я закрыл последние две цифры символом <х>, теперь данный id можно подставить в steamcommunity.com/profiles/[id]
Приступим к работе с callbacks, все callbacks перечислены в файле FriendsCommon.h в папке OpenSteamWorks.
Пока не нажмем клавишу Escape получаем callback, сравниваем его с структурой FriendChatMsg_t, если условие верное, выделяем память под строку сообщения, получаем сообщение, если тип сообщения равняется обычному или написанному через /me — сравниваем полученную строку с «hello», если идентичны — посылаю в ответ приветствие, очищаю последний callback и выхожу из программы.
CallbackMsg_t callBack; while (!GetAsyncKeyState(VK_ESCAPE)) { Sleep(1); if ( Steam_BGetCallback( pipe, &callBack ) ) { if(callBack.m_iCallback == FriendChatMsg_t::k_iCallback) { FriendChatMsg_t *pFriendMessageInfo = (FriendChatMsg_t *)callBack.m_pubParam; EChatEntryType eMsgType; char szData[k_cchFriendChatMsgMax]; memset(szData, 0, k_cchFriendChatMsgMax); Friends->GetChatMessage(pFriendMessageInfo>m_ulSenderID,pFriendMessageInfo>m_iChatID, szData,sizeof(szData),&eMsgType); if (eMsgType == k_EChatEntryTypeChatMsg || k_EChatEntryTypeEmote) { if (strcmp(szData, "hello") == 0 && (pFriendMessageInfo->m_ulSenderID != User->GetSteamID())){ Friends->SendMsgToFriend(pFriendMessageInfo->m_ulFriendID,k_EChatEntryTypeChatMsg,"hello my friend",22); Steam_FreeLastCallback(pipe); ExitProcess(0); } } } Steam_FreeLastCallback(pipe); } }
Пример callback-a на Trade Response (запрос обмена вещей).
if (callbackMsg.m_iCallback == TradeInviteReceived_t::k_iCallback) { TradeInviteReceived_t* pTradeInviteReceived = (TradeInviteReceived_t*) callbackMsg.m_pubParam; printf("Trade from %s, ID %u\n", pTradeInviteReceived->m_steamIDPartner.SteamRender(), pTradeInviteReceived->m_unTradeRequestID); //Ваш код ответа на Trade запрос. }
В следующей статье будет показана работа с пользовательскими достижениями (ISteamUserStats) и интерфейс (ISteamScreenshots).
ссылка на оригинал статьи http://habrahabr.ru/post/158119/
Добавить комментарий