SteamWorksと連携しています。 パート2

今日は、Apps、Utilsの各インターフェイスを使用し、アプリケーションにコールバックを実装する方法についても学びます。 2番目に進む前に、 パート1をよく理解することをお勧めします。





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);
      
      





特定のIDのSteamアカウントでゲームの購入時間を取得して、AppId_tを宣言し、

タイプuint32の場合、値500(左4デッド)を入力します。



 AppId_t l4d(500);
      
      





UNIXタイムスタンプ形式で購入時間とサーバー時間を取得します。



 int PurchaseTime = Apps->GetEarliestPurchaseUnixTime(l4d); int time = Utils->GetServerRealTime();
      
      





UNIXタイムスタンプをヒューマンビューに変換します。



 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 ..........
      
      





最後の2桁を記号<x>で閉じました。このidは、steamcommunity.com / profiles / [id]で置き換えることができます



コールバックを始めましょう。すべてのコールバックは、OpenSteamWorksフォルダーのFriendsCommon.hファイルにリストされています。



Escapeキーを押すまで、コールバックを取得し、FriendChatMsg_t構造体と比較し、条件がtrueの場合、メッセージ行にメモリを割り当て、メッセージタイプが通常のものと等しいか、/ meを介して書き込まれる場合、メッセージを受信します-受信した行を「hello」と比較し、送信します挨拶に応じて、最後のコールバックをクリアし、プログラムを終了します。



 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); } }
      
      







トレードレスポンスのコールバックの例。



 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)を操作する方法を示します。



All Articles