无所属单位

主页 文献与帮助
API overview

你一旦在这里注册并登录您的帐户,便可以获得更多链接与信息

新文档

此页面的新版本在https://partner.steamgames.com/doc/sdk,但可能尚未翻译成您的语言。
 Steamworks 为您的游戏提供了众多功能和解决方案。以下概述将重点介绍每个核心功能以及相应实现方法。注册并登录 Steamworks ,获取更多详细信息。

统计与成就

标头:ISteamUserStats.h

通过 Steam 统计与成就 API,您可以方便地让游戏为用户提供持久、可漫游的成就和统计信息跟踪。

请参阅Steam 统计与成就的文档页面。


用户身份验证和所有权

标头:steam_gameserver.h,ISteamGameServer.h,ISteamUser.h

Steamworks 提供多种方法,可以在游戏客户端、游戏服务器和网站之间验证 Steam 用户身份。

请参阅用户身份验证和所有权文档页面。


比赛安排

标头:ISteamMatchmaking.h,ISteamGameServer.h, ISteamMasterServerUpdater.h

通过比赛安排,用户可以通过服务器列表查找现有的游戏,或通过游戏大厅与群组发起新游戏。有关使用大厅比赛安排的更多信息,请参阅对等比赛安排

有游戏服务器和游戏客户端两种比赛安排组件。游戏服务器(可以是用于接受到其他用户连接的专属服务器或任意客户端)可以将自身的信息发布到 Steam 服务器(称为主服务器)中。它可以共享各种详细信息 - 服务器名称、玩家人数、地图/场景名称和 IP 地址。ISteamMasterServerUpdater 界面有详细说明。然后,游戏客户端使用 ISteamMatchmakingServers 界面,获取这些游戏服务器的原始列表和详细信息。首先,它会通过 SteamMatchmakingServers()->Request*() 上的一个函数,从主服务器请求所需来源的基础列表。

可以检索下列几组不同的服务器:
  • Internet server list - 托管在公共网络并且可通过公关网络访问的游戏服务器
  • LAN server list - 通过 UDP 广播在本地 C 类网络上找到的服务器
  • Friends server list - 当前正在游戏的好友所处的游戏服务器
  • Favorites server list - 当前用户已明确标记为收藏的游戏服务器
  • History server list - 当前用户最近游戏所处的游戏服务器
  • Spectator server list - 在特殊“观看”模式下被标记的游戏服务器。这些服务器实际上是代理,允许用户通过转播观察其他多人游戏。
结果是(可能很大的)游戏服务器列表。收到列表时,游戏客户端将收到回调。初始结果是响应查询的简单 IP 地址列表,基本上是按照游戏服务器与请求的客户端的远近程度返回。

然后,客户端可以请求每个服务器的更多信息,获得更详细的服务器信息以及和对游戏服务器的 ping 值。向服务器查询信息可能需要一段时间(通常每秒可以查询 50-100 个服务器),因此大多数游戏选择在信息到达时即时显示。

Steam 客户端的内置服务器浏览器将显示游戏服务器的基本信息,并且为用户提供加入选项,但它显示的信息非常有限,应视为加入游戏的辅助方式。您应当将自己的游戏内服务器浏览器作为主要加入方式。

注意:
  • 当用户尝试通过 Steam 客户端的服务器浏览器或好友列表加入游戏时,Steam 将使用以下参数启动游戏:"+connect <ip:port>"
  • 如果游戏服务器被标记为需要密码,则会在命令行中加入“+password <password>”。
  • 如果您的游戏正在运行,Steam 将会向游戏发送回调信号 GameServerChangeRequested_t,其中包含 IP 地址和端口(如有必要)。


社区

标头:ISteamFriends.h,ISteamUtils.h

Steam 社区 API 是一组函数集,用于访问系统中其他玩家的详细信息。您可以查询用户的以下数据:
  • SteamID - 用户在系统中的唯一识别符
  • Persona name - 用户昵称/显示名称/玩家名称
  • Persona state - 在线或离线
  • Avatar - 与此用户相关的图像
  • Game info - 用户正在运行的游戏,以及所连接的游戏服务器(若有)
  • Clan memberships - 用户所属的群组
API 仅具有本地用户与之联系的其他用户的信息。用户始终可以看到所有好友的状态、同一大厅中的用户以及所属群组中的用户。如果游戏服务器已连接到 Steam 并且使用了多人验证 API,则用户还可查看游戏服务器上其他用户的详细信息。每个实体(用户、游戏服务器、大厅和公会)都可以通过 SteamID 引用。您可以通过调用 CSteamID::GetAccountType() 了解实体类型。

要在各个组之间迭代用户,请使用函数 SteamFriends()->GetFriendCountFromSource() / SteamFriends()->GetFriendFromSourceByIndex()。所引用的“源”是指游戏服务器、大厅或所要获得成员列表的公会的 SteamID。例如,要迭代大厅中的所有其他用户:

CSteamID steamIDLobby = steamIDLobbyWeHaveGottenPreviously;
int cLobbyMembers = SteamFriends()->GetFriendCountFromSource( steamIDLobby );
for ( int i = 0; i < cLobbyMembers; i++ )
{
  CSteamID steamIDLobbyMember = SteamFriends()->GetFriendFromSourceByIndex( steamIDLobby, i );
  const char *pchName = SteamFriends()->GetPersonaName( steamIDLobbyMember );
  ...
}

该方法还可以用来查看游戏服务器上的所有用户或公会成员。

要迭代本地用户的好友,请使用 GetFriendCount()GetFriendByIndex()。要快速查看其他用户是否为好友(例如,特别是在计分板中标记好友时),请使用 SteamFriends()->HasFriend()。所有这三个函数构成了好友标记集,即在 ISteamFriends.h 顶部定义的枚举,这可以用来控制要返回的用户集。

所有用户名称均以 UTF-8 返回。在代码库中,如果本地化文本使用了宽字符 (UTF-16),则请使用 MultiByteToWideChar(),并使用 CP_UTF8 代码页进行转换。

用户头像作为唯一的纹理 ID - int 返回。函数 SteamUtils()->GetImageSize() / SteamUtils()->GetImageRGBA() 将获取此纹理 ID 并将其作为 RGBA 流返回纹理数据。

社区 API 最常发布的回调是 PersonaStateChanged_t。当收到有关现有用户或新用户的新信息时,将触发此命令。通常情况下,这会是更改名称、头像或在线状态的本地用户的好友;但在有些情况下,是在加入大厅或游戏服务器时。在此情况下,将按以下顺序出现:
  • 本地用户加入大厅
  • 本地用户收到大厅其他成员的 SteamID 列表
  • 起初,本地用户对其他用户一无所知,因此必须向服务器询问
  • 当本地用户收到此信息(通常先是名称)时,将向游戏发布 PersonaStateChanged_t,并且用标记表明这是名称更改。
  • 此时也会下载头像信息,由于文件有点大,可能需要几秒钟时间。完成后,将发布其他 PersonaStateChanged_t 回调,表明头像已更改。
用户还可能随时更改名称或头像,因此您的 UI 需要处理这些更新。典型模式是,对于显示用户信息的每个 UI 小组件,都要注册 PersonaStateChanged_t 回调并对任何更改进行更新。

这里还出现了一些其他有用、但未与社区直接相关的函数。

如果您的游戏具有一键通语音功能,当按下并释放一键通按键时,您应调用 SteamFriends()->SetInGameVoiceSpeaking()。这可告知 Steam 客户端,应该抑制通过好友系统进行的任何语音聊天,这样用户就不会向两个来源发送语音。

如果您希望在 Steam 功能面板中激活对话,请使用函数 SteamFriends()->ActivateGameOverlay()。它会获取要打开对话的名称,或者在未指定任何内容时激活功能面板。请参阅 ISteamFriends.h 了解更多详细信息。


对等网络

标头:ISteamNetworking.h

Steam 网络 API 是一组简单函数集,可以用来在两个 Steam 用户之间直接发送数据。要通过家用 NAT 进行连接,可使用 libjingle NAT 连接库;如果未能进行直接连接,还可通过 Steam 中继服务器连接。
请参阅 Steam 对等网络的文档页面。

Steam 云

标头:ISteamRemoteStorage.h

通过 Steam 云 API,游戏(也就是玩家)可以在玩家更换电脑时访问存储的文件。您可以将游戏设置、游戏存档和其他用户特定信息复制到 Steam 云,为玩家提供持续和轻松无忧的体验。

Steam 云使用起来非常简单,只需使用 API 读写所述的文件即可。
请参阅 Steam 云远程文件存储的文档页面。

Valve 反作弊系统 (VAC)

请参阅多人游戏身份验证标头:steam_gameserver.h,ISteamGameServer.h,ISteamUser.h

集成 VAC Steamworks C++ API 的工作非常简单,因为最繁重的工作已交给 Steam 处理。其中一个优势是,您的游戏客户端不会直接处理作弊检测。您的游戏唯一需要执行的操作是,使用 API 查找指定的用户是否被 VAC 封禁。

VAC 是 Steamworks 和 Steam 客户端的一个组件,在游戏运行时将扫描用户系统是否存在作弊行为。它的工作方式与病毒扫描程序类似,而且还会检测一个已知作弊数据库。

语音


Steamworks 为游戏内集成语音通讯提供了解决方案,其中包括在在 NAT 设备间直接连接对等机技术。这为玩家提供了可靠的通讯框架。

此外,Steam 社区还提供语音聊天功能,可让玩家在玩游戏时聊天。

数字版权管理 (DRM)


Steamworks Digital Rights Management(数字版权管理)内封装了游戏已编译的可执行文件,并且通过检查来确保游戏在 Steam 验证的实例下运行。此 DRM 解决方案与《半条命 2 》和《反恐精英:起源》等游戏的保护方案相同。Steamworks DRM 已经过大量实践检测,易于使用。

除了 DRM 解决方案外,Steamworks 通过在向全球各地的商店发送加密媒体(日发行版),来保护您的游戏。不用担心您的游戏会从早期的生产途径泄露,因为游戏在发布那一刻之前一直保持加密。只需将完成的部分或最终版本交给我们,我们即可将此保护技术添加到您的游戏中。

 

Valve 保密

本页含有 Valve 的机密信息,设有访问限制。您必须与 Valve 签订涵盖机密信息条款的保密协议和/或许可协议,方能使用和访问本页面。