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

SteamWorksは、ゲーム開発者向けのツールの開発と公開を提供するインターフェースです。 Steamクライアントとの統合、コミュニティとの統合、ゲームの実績の追加および編集などの機能を提供します。

現時点では、「ゲームスタジオ」であり、steamまたはSteam Greenlightサービスを介してアプリケーションを配布し、steamのパートナーになりたい場合は、SteamWorksにアクセスできます。 詳細はこちら 。 Open SteamWorksは、オープンソースのSteam API実装です(steamライブラリの逆アセンブルバージョンです)。

「彼らが何をしているのかを知っている人々のために設計されたオープンSteamWorks」-ライアン・ステッカー したがって、オープンバージョンの作成者は、追加のドキュメントの入手可能性に関する質問(私のものではない)に回答しました。入手可能なドキュメントはすべて、ソースコード内のコメントです。 Open SteamWorksの最新バージョンは、 サイトからダウンロードできます。

Visual Studioを使用します。mingwが手元にある場合は使用できます。 コンソールアプリケーションの作成を始めましょう(オープンなSteamworksのテストプラットフォームの例を使用できます)。
必要なヘッダーファイルが含まれています。

#include <SteamclientAPI.h> #include <SteamAPI.h> 

必要なライブラリを接続して、アプリケーションをコンパイルします。

 #pragma comment( lib, "../Resources/Libs/Win32/steamclient" ) #pragma comment( lib, "../Resources/Libs/Win32/steam" ) 

インターフェイスのバージョン12でSteamベースを取得します。
逆アセンブル形式では、これはレジストリへの検索としてSteamへのパスとその接続をコンパイルします。

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

私たちはグローバルユーザー(起動したSteam)に接続しています。

 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など)を使用するユーザー に注意してください 。これらのインターフェースはすべて、グローバルスチームアップデートの直後に動作を停止し、アプリケーションでエラーがスローされます。 IClientインターフェイスから取得します。これは時々発生しますが、アプリケーションの重要なDLLファイルをすべてコピーし(インポートテーブルで確認できます)、アプリケーションのフォルダーに保存します。

次に、インセンティブのステータスを変更する最も簡単なことを試みます。 (ステータスを変更するためのAPIは、インターフェイスの最初のバージョンで利用可能です)

 Friends->SetPersonaState(k_EPersonaStateSnooze); 

コンパイルして実行すると、インセンティブでスリープ状態になりました。

友達の数を取得します。

 int friendcount = Friends->GetFriendCount(); printf("%d",friendcount); 


あなたの名前を変える

 Friends->SetPersonaName("Big_balls"); 


友人を並べ替え、現在の友人のSteamID(64ビット)構造をインデックスで取得し、現在の友人のステータスを確認します。ステータスがオンラインで友人の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を使用すると、「設定されたレート」で多くの興味深いことをやり取りするためのトレードボットを簡単に作成できることを誰もが理解していると思います。

次のパートでは、IScreenshots、IUserstats(アチーブメント)、コールバックを使用することを検討します。ボットを作成することになるかもしれません。

Source: https://habr.com/ru/post/J157999/


All Articles