提供初始化和访问 Steamworks API 的核心基础框架。
这里列出的所有类型为全局定义,不与任何特定 API 相关联。
函数
以下是不需要设置接口的全局函数。 您可以在
Steamworks API 概览中,对这些函数了解更多。
SteamAPI_Init
S_API bool S_CALLTYPE SteamAPI_Init();
初始化 Steamworks API。
参见
初始化与关闭,了解更多信息。
返回: bool
true 表示所有所需接口均已获得且可访问。
false 表示存在下列情况之一:
- Steam 客户端未运行。 需要有运行的 Steam 客户端才能提供各种 Steamworks 接口的实现。
- Steam 客户端无法判定游戏的 App ID。 如果您直接通过可执行文件或调试器运行您的应用程序,那么您的游戏目录中的可执行文件旁,必须有一个
steam_appid.txt
,其中只记录了您的应用 ID,此外不含有任何其他内容。 Steam 将在当前工作目录中查找此文件。 如果您从不同的目录中运行可执行文件,您也许需要重新定位 steam_appid.txt
文件。
- 您的应用程序运行的 OS 用户上下文,与 Steam 客户端并不相同,比如用户或管理员访问权限级别不同。
- 确定您在当前活跃的 Steam 帐户中拥有该 App ID 的许可。 您的游戏必须显示在您的 Steam 库中。
- 您的 AppID 未完全设置,如
发行状态:不可用
,或缺失默认程序包。
示例:int main()
{
if ( SteamAPI_RestartAppIfNecessary( k_uAppIdInvalid ) ) // Replace with your App ID
{
return 1;
}
if ( !SteamAPI_Init() )
{
printf( "Fatal Error - Steam must be running to play this game (SteamAPI_Init() failed).\n" );
return 1;
}
return 0;
}
SteamAPI_ReleaseCurrentThreadMemory
S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
将与调用线程相关联的内部 Steamworks API 内存释放出。
多数 Steamworks API 函数分配少量的线程本地内存,供存储参数。调用此函数将手动释放这些存储。 此函数由
SteamAPI_RunCallbacks 自动调用,因此始终只通过单线程访问 Steamworks API 的程序完全不需要显式调用此函数。
SteamAPI_RestartAppIfNecessary
S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
名称 | 类型 | 描述 |
unOwnAppID | uint32 | 此产品的 App ID。 |
检查您的可执行文件是否通过 Steam 启动,如果不是,则通过 Steam 重新启动。
参见
初始化与关闭,了解更多信息。
返回: bool
如果返回
true,则在必须时启动 Steam 客户端,然后通过客户端再次启动您的游戏,而您应尽快退出进程。 此举将有效地运行
steam://run/<AppId>
,可能不会重启调用此函数的确切可执行文件,因为它将始终重启您 Steam 库文件夹中安装的版本。
而如果返回
false,则您的游戏是由 Steam 客户端启动,无需进行任何操作。 一个例外是,如果存在
steam_appid.txt
文件,则无论何种情况都会返回
false。 这让您不必通过 Steam 客户端启动您的游戏,便能进行开发与测试。 将游戏上传至您的 Steam depot 时,务必删除
steam_appid.txt
!
示例:int main()
{
if ( SteamAPI_RestartAppIfNecessary( k_uAppIdInvalid ) ) // Replace with your App ID
{
return 1;
}
if ( !SteamAPI_Init() )
{
printf( "Fatal Error - Steam must be running to play this game (SteamAPI_Init() failed).\n" );
return 1;
}
return 0;
}
SteamAPI_RunCallbacks
S_API void S_CALLTYPE SteamAPI_RunCallbacks();
调度回调,并调用结果至所有注册侦听器。
最好以 >10Hz 的频率调用此函数,调用间隔时间超长,从 Steamworks API 接收事件或结果越可能有延迟。 多数游戏在每个渲染帧调用此函数。 所有注册侦听器函数将在此项调用期间,在调用方线程上下文中调用。
SteamAPI_RunCallbacks 可同时从多线程安全调用,但是如果您选择这样做,回调代码可以在任何线程上执行。 一种替代方案是只在主线程调用 SteamGameServer_RunCallbacks,并在其他线程上定期调用
SteamAPI_ReleaseCurrentThreadMemory。
SteamAPI_SetMiniDumpComment
S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
名称 | 类型 | 描述 |
pchMsg | const char * | 附于 minidump 上的消息, 必须以 null 结尾。 |
附上任意评论,嵌入 minidump。
比如,您也许会想要附上这样一些内容:玩家在玩哪个关卡,服务器上有多少玩家,有多少可用内存等。
此函数必须在调用
SteamAPI_WriteMiniDump 之前调用。
注意:仅在 32bit 的 Windows 上可用!
SteamAPI_Shutdown
S_API void S_CALLTYPE SteamAPI_Shutdown();
关闭 Steamworks API,释放指针和内存。
若可能,您应该在进程关闭时调用此函数。
由于无法保证您的渲染 API 已使用完毕,这将不会从您的游戏取消
Steam 界面 的挂钩。
SteamAPI_WriteMiniDump
S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
名称 | 类型 | 描述 |
uStructuredExceptionCode | uint32 | 结构化异常代码。 |
pvExceptionInfo | void* | 含有具体的异常信息的 EXCEPTION_POINTERS。 |
uBuildID | uint32 | 记录提交此 minidump 的应用版本的 Build ID。 这与 Steam build ID 不同,仅用于报告故障。 |
写入并上传 minidump 以报告故障。
参见
Steam 错误报告,了解更多信息。
您可以在调用此函数前,调用
SteamAPI_SetMiniDumpComment 添加可选用的注释。
示例:#ifdef _WIN32
#include <Windows.h>
void MiniDumpFunction( unsigned int nExceptionCode, EXCEPTION_POINTERS *pException )
{
// 您可以生成并设置任意注释,嵌入这里的 minidump。
// 也许您想要纳入玩家在玩的关卡、服务器上的玩家数、
// 有多少可用内存等……
SteamAPI_SetMiniDumpComment( "Minidump comment: SteamworksExample.exe/n" );
// 这里的 0 是 生成版本 ID,而非由我们设置。
SteamAPI_WriteMiniDump( nExceptionCode, pException, 0 );
}
int RealMain( HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow )
{
__debugbreak();
return 0;
}
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// 我们在这里所做的就是在设置好我们的 SE 转换器后,调用真正的主函数。
// 这让我们捕获异常并将错误报告给 Steam。
//
//注意您必须正确设置您的编译器标记,以启用结构化异常处理,
// 以保证此特定设置方法有效。
if ( IsDebuggerPresent() )
{
// 我们不想在调试时屏蔽异常(或将异常报告给 Steam!)。
// 如果您想要调试异常处理器的内部,
// 不带调试器运行游戏后再添加调试器。
return RealMain( lpCmdLine, hInstance, nCmdShow );
}
_set_se_translator( MiniDumpFunction );
try // 此试块允许 SE 转换器工作。
{
return RealMain( hInstance, lpCmdLine, nCmdShow );
}
catch( ... )
{
return -1;
}
}
#endif
结构
这些是 steam_api 中的函数可能返回和/或与之交互的结构。
CGameID
Steam 游戏在全局中的唯一标识符。
CSteamID
所有 Steam 帐户、Steam 组、大厅和聊天室的全局唯一标识符。
请参见
EAccountType 和
EUniverse。
枚举
以下是经过定义来与 steam_api 一起使用的枚举。
EAccountType
Steam 帐户类型, 在
CSteamID 内部使用。
名称 | 值 | 描述 |
k_EAccountTypeInvalid | 0 | 用于无效 Steam ID。 |
k_EAccountTypeIndividual | 1 | 普通用户帐户。 |
k_EAccountTypeMultiseat | 2 | 多座位(如网吧)帐户。 |
k_EAccountTypeGameServer | 3 | 持久(非匿名)游戏服务器帐户。 |
k_EAccountTypeAnonGameServer | 4 | 匿名游戏服务器帐户。 |
k_EAccountTypePending | 5 | 待处理。 |
k_EAccountTypeContentServer | 6 | Valve 内部内容服务器帐户。 |
k_EAccountTypeClan | 7 | Steam 组(群组)。 |
k_EAccountTypeChat | 8 | Steam 组聊天或大厅。 |
k_EAccountTypeConsoleUser | 9 | 虚假 Steam ID,用于 PS3 本地 PSN 帐户或 360 Live 帐户等。 |
k_EAccountTypeAnonUser | 10 | 匿名用户帐户 (用来创建帐户或重置密码)。 |
k_EAccountTypeMax | 11 | 此字段最多 16 项。 |
EAppOwnershipFlags
表示 App ID 的所有权信息的标记 (仅供 Steam 内部使用)。
名称 | 值 | 描述 |
k_EAppOwnershipFlags_None | 0x0000 | 未知。 |
k_EAppOwnershipFlags_OwnsLicense | 0x0001 | 拥有此应用的许可。 |
k_EAppOwnershipFlags_FreeLicense | 0x0002 | 用户尚未为应用付费。 |
k_EAppOwnershipFlags_RegionRestricted | 0x0004 | 拥有应用,但不可在当前地区运行。 |
k_EAppOwnershipFlags_LowViolence | 0x0008 | 仅拥有低暴力版本。 |
k_EAppOwnershipFlags_InvalidPlatform | 0x0010 | 应用不支持当前平台。 |
k_EAppOwnershipFlags_SharedLicense | 0x0020 | 许可由授权设备通过 Steam 家庭共享获得。 |
k_EAppOwnershipFlags_FreeWeekend | 0x0040 | 因免费周末许可而拥有。 |
k_EAppOwnershipFlags_RetailLicense | 0x0080 | 有游戏的零售许可(序列号等)(已弃用)。 |
k_EAppOwnershipFlags_LicenseLocked | 0x0100 | 共享的许可被其他用户锁定(在使用中)。 |
k_EAppOwnershipFlags_LicensePending | 0x0200 | 拥有应用,但交易仍在处理中。 尚不能安装或运行。 |
k_EAppOwnershipFlags_LicenseExpired | 0x0400 | 由于许可过期,已不再拥有应用。 |
k_EAppOwnershipFlags_LicensePermanent | 0x0800 | 永久许可,而不是共享、玩家通行证、或免费周末许可等。 |
k_EAppOwnershipFlags_LicenseRecurring | 0x1000 | 定期许可,向用户定期收费。 |
k_EAppOwnershipFlags_LicenseCanceled | 0x2000 | 标记为取消,但若为循环许可,也许仍有效。 |
k_EAppOwnershipFlags_AutoGrant | 0x4000 | 所有权基于任一类型的自动授予许可。 |
k_EAppOwnershipFlags_PendingGift | 0x8000 | 用户有礼物待兑换。 |
k_EAppOwnershipFlags_RentalNotActivated | 0x10000 | 租赁尚未激活。 |
k_EAppOwnershipFlags_Rental | 0x20000 | 通过租赁获得。 |
k_EAppOwnershipFlags_SiteLicense | 0x40000 | 来自站点许可。 |
EAppReleaseState
一个 App ID 的发行状态。 (仅供 Steam 内部使用)。
名称 | 值 | 描述 |
k_EAppReleaseState_Unknown | 0 | 未知。不能获得应用程序信息,或者许可信息遗失。 |
k_EAppReleaseState_Unavailable | 1 | 即使用户拥有许可,也完全不能看到游戏。 |
k_EAppReleaseState_Prerelease | 2 | 可购买并在游戏列表中可见,仅此而已。 |
k_EAppReleaseState_PreloadOnly | 3 | 所有者可以预载应用,但不能游玩。 |
k_EAppReleaseState_Released | 4 | 所有者可以下载并运行应用。 |
EAppType
App ID 类型,更多信息参见
应用程序的类型(仅供 Steam 内部使用)。
名称 | 值 | 描述 |
k_EAppType_Invalid | 0x000 | 未知/无效。 |
k_EAppType_Game | 0x001 | 可玩的游戏。默认类型。 |
k_EAppType_Application | 0x002 | 软件应用程序。 |
k_EAppType_Tool | 0x004 | SDK、编辑器和专用服务器。 |
k_EAppType_Demo | 0x008 | 游戏试用版。 |
k_EAppType_Media_DEPRECATED | 0x010 | 遗留程序,过去用于游戏宣传片。这些宣传片现在仅为网上的视频。 |
k_EAppType_DLC | 0x020 | 可下载内容。 |
k_EAppType_Guide | 0x040 | 游戏指南、PDF 等。 |
k_EAppType_Driver | 0x080 | 硬件驱动程序更新程序(ATI、Razor 等)。 |
k_EAppType_Config | 0x100 | 隐藏应用,用于配置 Steam 功能(背包、特卖等)。 |
k_EAppType_Hardware | 0x200 | Steam 硬件设备(Steam 主机、Steam 控制器、Steam 流式盒等)。 |
k_EAppType_Franchise | 0x400 | 如电影、剧集、游戏等多个应用集合的中心。 |
k_EAppType_Video | 0x800 | 电影或剧集的视频部分(可能是电影正片、剧集内容、预览、花絮等)。 |
k_EAppType_Plugin | 0x1000 | 其他应用的插件类型。 |
k_EAppType_Music | 0x2000 | 音乐文件。 |
k_EAppType_Series | 0x4000 | 视频系列的容器应用。 |
k_EAppType_Shortcut | 0x40000000 | 只是快捷方式,仅用于客户端。 |
k_EAppType_DepotOnly | 0x80000000 | 由于 depot 和应用共享相同的命名空间,此为占位之用。 |
EAuthSessionResponse
ValidateAuthTicketResponse_t 回调的返回值,作为对
ISteamUser::BeginAuthSession 和
ISteamGameServer::BeginAuthSession 的响应进行发送。
名称 | 值 | 描述 |
k_EAuthSessionResponseOK | 0 | Steam 已验证用户在线,票证有效且尚未重复使用。 |
k_EAuthSessionResponseUserNotConnectedToSteam | 1 | 所提及的用户未连接至 Steam。 |
k_EAuthSessionResponseNoLicenseOrExpired | 2 | 用户无此 App ID 的许可或票证已过期。 |
k_EAuthSessionResponseVACBanned | 3 | 用户受到此游戏的 VAC 封禁。 |
k_EAuthSessionResponseLoggedInElseWhere | 4 | 用户帐户在他处登录,带有游戏实例的会话已断开连接。 |
k_EAuthSessionResponseVACCheckTimedOut | 5 | VAC 无法对此用户执行反作弊检查。 |
k_EAuthSessionResponseAuthTicketCanceled | 6 | 票证发行方已取消票证。 |
k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed | 7 | 此票证已使用过,不再有效。 |
k_EAuthSessionResponseAuthTicketInvalid | 8 | 此票证并非来自于当前连接到 Steam 的用户实例。 |
k_EAuthSessionResponsePublisherIssuedBan | 9 | 此用户受到此游戏的封禁。 是通过 web api 封禁,而非 VAC 封禁。 |
EBeginAuthSessionResult
ISteamUser::BeginAuthSession 与
ISteamGameServer::BeginAuthSession 返回的结果。
名称 | 值 | 描述 |
k_EBeginAuthSessionResultOK | 0 | 票证对此游戏和此 Steam ID 有效。 |
k_EBeginAuthSessionResultInvalidTicket | 1 | 票证无效。 |
k_EBeginAuthSessionResultDuplicateRequest | 2 | 已为此 Steam ID 提交了一个票证。 |
k_EBeginAuthSessionResultInvalidVersion | 3 | 票证来自不兼容接口版本。 |
k_EBeginAuthSessionResultGameMismatch | 4 | 不是此游戏的票证。 |
k_EBeginAuthSessionResultExpiredTicket | 5 | 票证已过期。 |
EBroadcastUploadResult
BroadcastUploadStop_t 的直播上传结果。
名称 | 值 | 描述 |
k_EBroadcastUploadResultNone | 0 | 直播状态未知。 |
k_EBroadcastUploadResultOK | 1 | 直播良好无故障。 |
k_EBroadcastUploadResultInitFailed | 2 | 直播初始化失败。 |
k_EBroadcastUploadResultFrameFailed | 3 | 直播帧上传失败。 |
k_EBroadcastUploadResultTimeout | 4 | 直播上传超时。 |
k_EBroadcastUploadResultBandwidthExceeded | 5 | 直播发送过多数据。 |
k_EBroadcastUploadResultLowFPS | 6 | 直播 FPS 过低。 |
k_EBroadcastUploadResultMissingKeyFrames | 7 | 直播发送关键帧不足。 |
k_EBroadcastUploadResultNoConnection | 8 | 直播客户端未能成功连接至中继。 |
k_EBroadcastUploadResultRelayFailed | 9 | 中继丢失上传内容。 |
k_EBroadcastUploadResultSettingsChanged | 10 | 客户端更改了直播设置。 |
k_EBroadcastUploadResultMissingAudio | 11 | 客户端发送音频数据失败。 |
k_EBroadcastUploadResultTooFarBehind | 12 | 客户端上传过慢。 |
k_EBroadcastUploadResultTranscodeBehind | 13 | 服务器未能跟上转码。 |
EChatEntryType
聊天条目类型。
由
ISteamFriends::GetFriendMessage、
ISteamFriends::GetClanChatMessage 和
ISteamMatchmaking::GetLobbyChatEntry 返回。
名称 | 值 | 描述 |
k_EChatEntryTypeInvalid | 0 | 无效。 |
k_EChatEntryTypeChatMsg | 1 | 来自其他用户的普通文本消息。 |
k_EChatEntryTypeTyping | 2 | 另一用户正在输入,不用于多用户群聊。 |
k_EChatEntryTypeInviteGame | 3 | 其他用户邀请进入当前进行的游戏。 |
k_EChatEntryTypeEmote | 4 | 文本表情包(已弃用,应视作 ChatMsg 处理)。 |
k_EChatEntryTypeLeftConversation | 6 | 一名用户离开了对话(关闭了对话窗口)。 |
k_EChatEntryTypeEntered | 7 | 用户加入聊天,用于多用户群聊与组聊天。 |
k_EChatEntryTypeWasKicked | 8 | 用户被踢出(数据:执行踢出操作的用户的 Steam ID)。 |
k_EChatEntryTypeWasBanned | 9 | 用户被封(数据:执行封禁操作的用户的 Steam ID)。 |
k_EChatEntryTypeDisconnected | 10 | 用户掉线。 |
k_EChatEntryTypeHistoricalChat | 11 | 来自用户的聊天历史记录的聊天消息或离线消息。 |
k_EChatEntryTypeLinkBlocked | 14 | 聊天过滤器移除了一个链接。 |
EChatRoomEnterResponse
聊天室进入响应。
名称 | 值 | 描述 |
k_EChatRoomEnterResponseSuccess | 1 | 成功。 |
k_EChatRoomEnterResponseDoesntExist | 2 | 聊天室不存在(可能已关闭)。 |
k_EChatRoomEnterResponseNotAllowed | 3 | 一般性拒绝:您没有加入该聊天的权限。 |
k_EChatRoomEnterResponseFull | 4 | 聊天室已达到最大规模。 |
k_EChatRoomEnterResponseError | 5 | 意外错误。 |
k_EChatRoomEnterResponseBanned | 6 | 您被此聊天室封禁,不能加入。 |
k_EChatRoomEnterResponseLimited | 7 | 您是受限用户(帐户无值),不能加入此聊天。 |
k_EChatRoomEnterResponseClanDisabled | 8 | 在组锁定或禁用时试图加入组聊天。 |
k_EChatRoomEnterResponseMemberBlockedYou | 10 | 加入失败。此聊天室中的一个用户阻止了您的加入。 |
k_EChatRoomEnterResponseYouBlockedMember | 11 | 加入失败。您阻止了一个已经加入聊天的用户。 |
k_EChatRoomEnterResponseRatelimitExceeded | 15 | 加入失败——在短时间内尝试加入的次数过多。 |
EChatSteamIDInstanceFlags
聊天帐户的特殊标记,为 Steam ID“实例”的前 8 位,12 位的空间留给实际实例。
名称 | 值 | 描述 |
k_EChatAccountInstanceMask | 0x00000FFF | 前 8 位为标记。 |
k_EChatInstanceFlagClan | ( k_unSteamAccountInstanceMask + 1 ) >> 1 | 此 Steam ID 是一个 Steam 组的 ID。 |
k_EChatInstanceFlagLobby | ( k_unSteamAccountInstanceMask + 1 ) >> 2 | 此 Steam ID 是一个大厅的 ID。 |
k_EChatInstanceFlagMMSLobby | ( k_unSteamAccountInstanceMask + 1 ) >> 3 | 此 Steam ID 为一个 MMS 大厅的 ID。 |
EDenyReason
当一个客户端加入失败或被踢出游戏服务器时的结果值。 通过
GSClientDeny_t 和
GSClientKick_t 获得。
名称 | 值 | 描述 |
k_EDenyInvalid | 0 | 未知。 |
k_EDenyInvalidVersion | 1 | 客户端和服务器并非同一版本。 |
k_EDenyGeneric | 2 | 通用。 |
k_EDenyNotLoggedOn | 3 | 客户端未登录。 |
k_EDenyNoLicense | 4 | 客户端无运行此游戏的许可。 |
k_EDenyCheater | 5 | 客户端受到 VAC 封禁。 |
k_EDenyLoggedInElseWhere | 6 | 客户端在别处登录。 |
k_EDenyUnknownText | 7 | |
k_EDenyIncompatibleAnticheat | 8 | |
k_EDenyMemoryCorruption | 9 | |
k_EDenyIncompatibleSoftware | 10 | |
k_EDenySteamConnectionLost | 11 | 服务器失去与 Steam 的连接。 |
k_EDenySteamConnectionError | 12 | 服务器与 Steam 的连接出现一般错误。 |
k_EDenySteamResponseTimedOut | 13 | 服务器与 Steam 的连接超时。 |
k_EDenySteamValidationStalled | 14 | 服务器尚未被 Steam 验证。 |
k_EDenySteamOwnerLeftGuestUser | 15 | 此共享游戏的所有者已离开。为游戏所有者的各个访客调用。 |
EGameIDType
用于描述
CGameID 的类型。
名称 | 值 | 描述 |
k_EGameIDTypeApp | 0 | Game ID 为普通 Steam 应用。 |
k_EGameIDTypeGameMod | 1 | Game ID 为模组。 |
k_EGameIDTypeShortcut | 2 | Game ID 为快捷方式。 |
k_EGameIDTypeP2P | 3 | Game ID 为 P2P 文件。 |
ELaunchOptionType
定义好的启动方式的代码,与
通用安装设置页面中的应用程序启动选项的“启动类型”对应。
我们提供一种特别的函数 BIsVRLaunchOptionType,用于检查是否为 VR 启动选项。
名称 | 值 | 描述 |
k_ELaunchOptionType_None | 0 | 未指定。 |
k_ELaunchOptionType_Default | 1 | 在默认模式下运行应用。 |
k_ELaunchOptionType_SafeMode | 2 | 在安全模式下运行应用。 |
k_ELaunchOptionType_Multiplayer | 3 | 在多人模式下运行游戏。 |
k_ELaunchOptionType_Config | 4 | 为此游戏运行配置工具。 |
k_ELaunchOptionType_OpenVR | 5 | 使用 OpenVR 在 VR 模式下运行游戏。 |
k_ELaunchOptionType_Server | 6 | 为此游戏运行专用服务器。 |
k_ELaunchOptionType_Editor | 7 | 运行游戏编辑器。 |
k_ELaunchOptionType_Manual | 8 | 显示游戏手册。 |
k_ELaunchOptionType_Benchmark | 9 | 运行游戏基准测试。 |
k_ELaunchOptionType_Option1 | 10 | 通用运行选项,为游戏名称使用描述字段。 |
k_ELaunchOptionType_Option2 | 11 | 通用运行选项,为游戏名称使用描述字段。 |
k_ELaunchOptionType_Option3 | 12 | 通用运行选项,为游戏名称使用描述字段。 |
k_ELaunchOptionType_OculusVR | 13 | 使用 Oculus SDK 在 VR 模式下运行游戏。 |
k_ELaunchOptionType_OpenVROverlay | 14 | 运行 OpenVR 主面板界面。 |
k_ELaunchOptionType_OSVR | 15 | 使用 OSVR SDK 在 VR 模式下运行游戏。 |
k_ELaunchOptionType_Dialog | 1000 | 显示启动选项对话框。 |
EMarketingMessageFlags
Steam 内部市场营销消息标记,提示客户端应如何处理。
名称 | 值 | 描述 |
k_EMarketingMessageFlagsNone | 0 | |
k_EMarketingMessageFlagsHighPriority | 1 << 0 | |
k_EMarketingMessageFlagsPlatformWindows | 1 << 1 | |
k_EMarketingMessageFlagsPlatformMac | 1 << 2 | |
k_EMarketingMessageFlagsPlatformLinux | 1 << 3 | |
k_EMarketingMessageFlagsPlatformRestrictions | = | 聚合标记。 |
ENotificationPosition
界面显示通知的可能位置。 和
ISteamUtils::SetOverlayNotificationPosition 一起使用。
名称 | 值 | 描述 |
k_EPositionTopLeft | 0 | 左上角。 |
k_EPositionTopRight | 1 | 右上角。 |
k_EPositionBottomLeft | 2 | 左下角。 |
k_EPositionBottomRight | 3 | 右下角。 |
EResult
Steam 错误结果代码。
以下代码经常由 Steamworks API 和 Web API 的函数、回调、调用结果返回。 API 可以返回任意 EResult 代码。参见相应 API 函数或回调相关文档,了解可能会返回些什么,以及其在该 API 调用上下文中表示什么。
这与 Win32 HRESULT 类型或 POSIX errno 相似。
名称 | 值 | 描述 |
k_EResultOK | 1 | 成功。 |
k_EResultFail | 2 | 一般失败。 |
k_EResultNoConnection | 3 | 您的 Steam 客户端没有连接后端。 |
k_EResultInvalidPassword | 5 | 密码/票证无效。 |
k_EResultLoggedInElsewhere | 6 | 用户在别处登录。 |
k_EResultInvalidProtocolVer | 7 | 协议版本错误。 |
k_EResultInvalidParam | 8 | 参数不正确。 |
k_EResultFileNotFound | 9 | 未找到文件。 |
k_EResultBusy | 10 | 调用的方法繁忙,未进行操作。 |
k_EResultInvalidState | 11 | 调用的对象处于无效状态。 |
k_EResultInvalidName | 12 | 名称无效。 |
k_EResultInvalidEmail | 13 | 电子邮件无效。 |
k_EResultDuplicateName | 14 | 名称不是唯一的。 |
k_EResultAccessDenied | 15 | 访问被拒绝。 |
k_EResultTimeout | 16 | 操作超时。 |
k_EResultBanned | 17 | 用户受到 VAC 封禁。 |
k_EResultAccountNotFound | 18 | 未找到帐户。 |
k_EResultInvalidSteamID | 19 | Steam ID 无效。 |
k_EResultServiceUnavailable | 20 | 请求的服务当前不可用。 |
k_EResultNotLoggedOn | 21 | 用户未登录。 |
k_EResultPending | 22 | 请求正待处理,可能已在进程中或在等待第三方。 |
k_EResultEncryptionFailure | 23 | 加密或解密失败。 |
k_EResultInsufficientPrivilege | 24 | 权限不足。 |
k_EResultLimitExceeded | 25 | 过量。 |
k_EResultRevoked | 26 | 访问已被撤销(用于被撤销的玩家通行证)。 |
k_EResultExpired | 27 | 用户尝试访问的许可/玩家通行证已失效。 |
k_EResultAlreadyRedeemed | 28 | 玩家通行证已被帐户兑换,不能再次使用。 |
k_EResultDuplicateRequest | 29 | 重复请求,操作已进行,忽略此请求。 |
k_EResultAlreadyOwned | 30 | 用户已拥有此玩家通行证兑换请求中的所有游戏。 |
k_EResultIPNotFound | 31 | 未找到 IP 地址。 |
k_EResultPersistFailed | 32 | 将更改写入数据存储失败。 |
k_EResultLockingFailed | 33 | 为此操作获取访问锁定失败。 |
k_EResultLogonSessionReplaced | 34 | 登录会话已被替换。 |
k_EResultConnectFailed | 35 | 连接失败。 |
k_EResultHandshakeFailed | 36 | 验证握手失败。 |
k_EResultIOFailure | 37 | 出现一般 IO 失败。 |
k_EResultRemoteDisconnect | 38 | 远程服务器已断开连接。 |
k_EResultShoppingCartNotFound | 39 | 未找到请求的购物车。 |
k_EResultBlocked | 40 | 一个用户阻止了操作。 |
k_EResultIgnored | 41 | 目标忽略发送方。 |
k_EResultNoMatch | 42 | 未找到与请求匹配的信息。 |
k_EResultAccountDisabled | 43 | 帐户被禁用。 |
k_EResultServiceReadOnly | 44 | 此服务目前不接受内容更改。 |
k_EResultAccountNotFeatured | 45 | 帐户未充值,此功能不可用。 |
k_EResultAdministratorOK | 46 | 只有在管理员发出请求时才允许采用此操作。 |
k_EResultContentVersion | 47 | 在 Steam 协议中传输的内容版本不匹配。 |
k_EResultTryAnotherCM | 48 | 当前 CM 不能服务发出请求的用户。用户应重试。 |
k_EResultPasswordRequiredToKickSession | 49 | 您已经在别处登录,此缓存的凭据登录已失效。 |
k_EResultAlreadyLoggedInElsewhere | 50 | 用户在别处登录。 (应换用 k_EResultLoggedInElsewhere!) |
k_EResultSuspended | 51 | 长时间运行的操作已中止/暂停。 (如 内容下载。) |
k_EResultCancelled | 52 | 操作被取消,通常是被用户取消。 (如 内容下载。) |
k_EResultDataCorruption | 53 | 因数据状况欠佳或不可恢复而取消操作。 |
k_EResultDiskFull | 54 | 磁盘空间不足,取消操作。 |
k_EResultRemoteCallFailed | 55 | 远程或 IPC 调用失败。 |
k_EResultPasswordUnset | 56 | 密码在服务器端未设置,无法验证。 |
k_EResultExternalAccountUnlinked | 57 | 外部帐户(PSN、Facebook 等)未链接至 Steam 帐户。 |
k_EResultPSNTicketInvalid | 58 | PSN 票证无效。 |
k_EResultExternalAccountAlreadyLinked | 59 | 外部帐户(PSN、Facebook 等)已链接至其他帐户,必须先显式请求替代/删除此链接。 |
k_EResultRemoteFileConflict | 60 | 由于本地与远程文件冲突,同步无法继续。 |
k_EResultIllegalPassword | 61 | 请求的新密码不被接受。 |
k_EResultSameAsPreviousValue | 62 | 新值与旧值相同。 用于安全问题及其答案。 |
k_EResultAccountLogonDenied | 63 | 由于第二步验证失败,帐户登录被拒绝。 |
k_EResultCannotUseOldPassword | 64 | 请求的新密码不受认可。 |
k_EResultInvalidLoginAuthCode | 65 | 由于验证码无效,帐户登录被拒。 |
k_EResultAccountLogonDeniedNoMail | 66 | 由于第二步验证失败,帐户登录被拒,且未发送邮件。 |
k_EResultHardwareNotCapableOfIPT | 67 | 用户硬件不支持英特尔身份保护技术(IPT)。 |
k_EResultIPTInitError | 68 | 英特尔身份保护技术(IPT)初始化失败。 |
k_EResultParentalControlRestricted | 69 | 由于当前用户受家长控制限制,操作失败。 |
k_EResultFacebookQueryError | 70 | Facebook 查询返回错误。 |
k_EResultExpiredLoginAuthCode | 71 | 由于验证码失效,帐户登录被拒。 |
k_EResultIPLoginRestrictionFailed | 72 | 由于 IP 限制,登录失败。 |
k_EResultAccountLockedDown | 73 | 当前用户帐户目前被锁定,无法使用。 通常是因为帐户劫持和待处理的所有权验证。 |
k_EResultAccountLogonDeniedVerifiedEmailRequired | 74 | 由于帐户电子邮件未能验证,登录失败。 |
k_EResultNoMatchingURL | 75 | 无与提供的值匹配的 URL。 |
k_EResultBadResponse | 76 | 由于分析失败、字段遗失等导致错误响应。 |
k_EResultRequirePasswordReEntry | 77 | 用户不能完成操作,直到重新输入密码为止。 |
k_EResultValueOutOfRange | 78 | 输入的值在可接收范围之外。 |
k_EResultUnexpectedError | 79 | 发生了完全不曾预料的情况。 |
k_EResultDisabled | 80 | 请求的服务已配置为不可用。 |
k_EResultInvalidCEGSubmission | 81 | 提交至 CEG 服务器的文件无效。 |
k_EResultRestrictedDevice | 82 | 使用的设备未获执行此操作的许可。 |
k_EResultRegionLocked | 83 | 由于地区限制,操作不能完成。 |
k_EResultRateLimitExceeded | 84 | 超出暂时性速率极限,稍后再试,与可能为永久性的 k_EResultLimitExceeded 不同。 |
k_EResultAccountLoginDeniedNeedTwoFactor | 85 | 需要双重验证码登录。 |
k_EResultItemDeleted | 86 | 我们尝试访问的物品已被删除。 |
k_EResultAccountLoginDeniedThrottle | 87 | 尝试登录失败,尝试阻止对可能的攻击者响应。 |
k_EResultTwoFactorCodeMismatch | 88 | 双重验证(Steam 令牌)码不正确。 |
k_EResultTwoFactorActivationCodeMismatch | 89 | 双因素验证(Steam 令牌)激活码不匹配。 |
k_EResultAccountAssociatedToMultiplePartners | 90 | 当前帐户已与多个合作伙伴相关联。 |
k_EResultNotModified | 91 | 数据尚未修改。 |
k_EResultNoMobileDevice | 92 | 帐户无相关联的移动设备。 |
k_EResultTimeNotSynced | 93 | 提供的时间在范围或容差之外。 |
k_EResultSmsCodeFailed | 94 | 短信代码失败:无匹配、无一待处理等。 |
k_EResultAccountLimitExceeded | 95 | 访问此资源的帐户过多。 |
k_EResultAccountActivityLimitExceeded | 96 | 此帐户的更改过多。 |
k_EResultPhoneActivityLimitExceeded | 97 | 此手机号码的更改过多。 |
k_EResultRefundToWallet | 98 | 无法退款至原支付手段,必须使用 Steam 钱包。 |
k_EResultEmailSendFailure | 99 | 无法发送电子邮件。 |
k_EResultNotSettled | 100 | 在支付确认前无法执行操作。 |
k_EResultNeedCaptcha | 101 | 用户需提供有效的 captcha。 |
k_EResultGSLTDenied | 102 | 此令牌所有者拥有的一个游戏服务器登录令牌已被封禁。 |
k_EResultGSOwnerDenied | 103 | 游戏服务器所有者因其他原因被拒,如帐户锁定、社区封禁、VAC 封禁、遗失手机等。 |
k_EResultInvalidItemType | 104 | 我们收到请求进行操作的物品类型无效。 |
k_EResultIPBanned | 105 | IP 地址被禁止采取此操作。 |
k_EResultGSLTExpired | 106 | 此游戏服务器登录令牌(GSLT)的停用已到期,可以重置再用。 |
k_EResultInsufficientFunds | 107 | 用户无足够钱包资金完成操作。 |
k_EResultTooManyPending | 108 | 已有过多待处理物品。 |
ESteamUserStatType
内部用于存储用户统计的字段。
名称 | 值 | 描述 |
k_ESteamUserStatTypeINVALID | 0 | 无效。 |
k_ESteamUserStatTypeINT | 1 | 统计为 32 位整数。 |
k_ESteamUserStatTypeFLOAT | 2 | 统计为 32 位浮点数。 |
k_ESteamUserStatTypeAVGRATE | 3 | 作为浮点数读取,用计数/会话长度设置。 |
k_ESteamUserStatTypeACHIEVEMENTS | 4 | 标准用户成就。 |
k_ESteamUserStatTypeGROUPACHIEVEMENTS | 5 | 已弃用。 |
k_ESteamUserStatTypeMAX | 6 | 用户统计类型的总数量,用于完整性检查。 |
ETextFilteringContext
ISteamUtils::FilterText 的参数。
名称 | 值 | 描述 |
k_ETextFilteringContextUnknown | 0 | 上下文未知。 |
k_ETextFilteringContextGameContent | 1 | 游戏内容,仅执行法律所要求的过滤。 |
k_ETextFilteringContextChat | 2 | 来自另一玩家的聊天。 |
k_ETextFilteringContextName | 3 | 角色或物品名称。 |
EUniverse
Steam 世界。 每个世界是一个自成一体的 Steam 实例。
名称 | 值 | 描述 |
k_EUniverseInvalid | 0 | 无效。 |
k_EUniversePublic | 1 | 标准公开世界。 |
k_EUniverseBeta | 2 | Valve 内使用的测试世界。 |
k_EUniverseInternal | 3 | Valve 内使用的内部世界。 |
k_EUniverseDev | 4 | Valve 内使用的开发者世界。 |
k_EUniverseMax | 5 | Universe 的总数量,用于完整性检查。 |
EUserHasLicenseForAppResult
ISteamUser::UserHasLicenseForApp 的结果。
名称 | 值 | 描述 |
k_EUserHasLicenseResultHasLicense | 0 | 用户有指定应用的许可。 |
k_EUserHasLicenseResultDoesNotHaveLicense | 1 | 用户无指定应用的许可。 |
k_EUserHasLicenseResultNoAuth | 2 | 用户尚未被验证。 |
EVoiceResult
这些结果与
Steam 语音 函数一起使用。
名称 | 值 | 描述 |
k_EVoiceResultOK | 0 | 此调用已成功完成。 |
k_EVoiceResultNotInitialized | 1 | Steam 语音界面尚未初始化。 |
k_EVoiceResultNotRecording | 2 | Steam 语音当前不在录音。 |
k_EVoiceResultNoData | 3 | 无语音数据。 |
k_EVoiceResultBufferTooSmall | 4 | 提供的缓冲区太小,无法接收数据。 |
k_EVoiceResultDataCorrupted | 5 | 语音数据毁坏。 |
k_EVoiceResultRestricted | 6 | 用户受到聊天限制。 |
k_EVoiceResultUnsupportedCodec | 7 | 已弃用。 |
k_EVoiceResultReceiverOutOfDate | 8 | 已弃用。 |
k_EVoiceResultReceiverDidNotAnswer | 9 | 已弃用。 |
EVRHMDType
VR HMD 厂商与型号的码位。 使用特殊函数 BIsOculusHMD 与 BIsViveHMD 查看特定品牌。
名称 | 值 | 描述 |
k_eEVRHMDType_None | -1 | 未知厂商与型号。 |
k_eEVRHMDType_Unknown | 0 | 未知厂商与型号。 |
k_eEVRHMDType_HTC_Dev | 1 | 初代 HTC 开发套件。 |
k_eEVRHMDType_HTC_VivePre | 2 | HTC Vive Pre 开发套件。 |
k_eEVRHMDType_HTC_Vive | 3 | HTC Vive 消费者版。 |
k_eEVRHMDType_HTC_Unknown | 20 | 未知 HTC HMD。 |
k_eEVRHMDType_Oculus_DK1 | 21 | Oculus Rift 开发套件 1。 |
k_eEVRHMDType_Oculus_DK2 | 22 | Oculus Rift 开发套件 2。 |
k_eEVRHMDType_Oculus_Rift | 23 | Oculus Rift 消费者版 1。 |
k_eEVRHMDType_Oculus_Unknown | 40 | 未知 Oculus 头显。 |
Typedefs
以下是定义来与 steam_api 一起使用的 typedef。
名称 | 基础类型 | 描述 |
AccountID_t | uint32 | 在 CSteamID 内部使用,代表特定用户帐户,而无所谓其在哪个 Steam 世界。 |
AppId_t | uint32 | 某应用的唯一标识符。参见 应用程序 文档,了解更多信息。 |
AssetClassId_t | uint64 | 只在 Steam 内部使用。 |
BREAKPAD_HANDLE | void * | 供内部 Steam 异常处理器界面使用,以参考安装的特定异常处理器。 |
BundleId_t | uint32 | 捆绑包的唯一标识符。 (只在 Steam 内部使用)。 |
CellID_t | uint32 | 只在 Steam 内部使用。 |
DepotId_t | uint32 | Depot 的唯一标识符。 |
GID_t | uint64 | 只在 Steam 内部使用。 |
HAuthTicket | uint32 | 用户验证票证的句柄。 返回 ISteamUser::GetAuthSessionTicket 类型。 |
int16 | short | Steam 版本的 16 位整数,等同于 int16_t。 |
int32 | int | Steam 版本的 32 位整数,等同于 int32_t。 |
int64 | long long | Steam 版本的 64 位整数,等同于 int64_t。 |
int8 | signed char | Steam 版本的 8 位整数,等同于 int8_t。 |
intp | int/long long | Steam 版本的有符号类型,用来容纳一个指针,等同于 intptr_t (只在 Steam 内部使用)。 |
JobID_t | uint64 | 只在 Steam 内部使用。 |
lint64 | long int | 只在 Steam 内部使用。 |
ManifestId_t | uint64 | 只在 Steam 内部使用。 |
PackageId_t | uint32 | 只在 Steam 内部使用。 |
PartnerId_t | uint32 | 只在 Steam 内部使用。 |
PhysicalItemId_t | uint32 | 只在 Steam 内部使用。 |
RTime32 | uint32 | Unix epoch 时间的 Steam 版。 精度为 1 秒,从 1970-01-01 00:00:00 +0000(UTC)起。 |
SteamAPICall_t | uint64 | 指向一个 Steam API 调用的唯一句柄。 如果有函数返回其中之一,您必须使用调用结果系统记录其状态。 |
TxnID_t | GID_t | 只在 Steam 内部使用。 |
uint16 | unsigned short | Steam 版本的 16 位无符号整数,等同于 uint16_t。 |
uint32 | unsigned int | Steam 版本的 32 位无符号整数,等同于 uint32_t。 |
uint64 | unsigned long long | Steam 版本的 64 位无符号整数,等同于 uint64_t。 |
uint8 | unsigned char | Steam 版本的 8 位无符号整数,等同于 uint8_t。 |
uintp | unsigned int/unsigned long long | Steam 版本的未签名类型,用来装一个指针,等同于 uintptr_t (只在 Steam 内部使用)。 |
ulint64 | unsigned long int | 只在 Steam 内部使用。 |
常量
以下是定义来与 steam_api 一起使用的常量。
名称 | 类型 | 值 | 描述 |
BREAKPAD_INVALID_HANDLE | int | (BREAKPAD_HANDLE)0 | |
k_cubSaltSize | int | 8 | 只在 Steam 内部使用。 |
k_GIDNil | GID_t | 0xffffffffffffffffull | 只在 Steam 内部使用。 |
k_HAuthTicketInvalid | HAuthTicket | 0 | 无效用户验证票证。 |
k_JobIDNil | JobID_t | 0xffffffffffffffffull | 只在 Steam 内部使用。 |
k_steamIDLanModeGS | int | CSteamID( | 此 Steam ID 来自连至 sv_lan GS 的用户游戏连接。 |
k_steamIDNil | int | CSteamID() | 通用无效 CSteamID。 |
k_steamIDNonSteamGS | int | CSteamID( | 此 Steam ID 可以来自用户游戏与游戏服务器的连接,该游戏服务器不使用 Steam 验证系统,但仍 希望支持好友列表中的“加入游戏”选项。 |
k_steamIDNotInitYetGS | int | CSteamID( | 此 Steam ID 可以来自用户游戏与游戏服务器的连接,该游戏服务器刚启动但尚未初始化 其 steam3 组件以开始登录。 |
k_steamIDOutofDateGS | int | CSteamID( | 此 Steam ID 来自连至过期游戏服务器的用户游戏连接,该游戏服务器尚未执行协议以提供其 Steam ID。 |
k_TxnIDNil | GID_t | k_GIDNil | 只在 Steam 内部使用。 |
k_TxnIDUnknown | GID_t | 0 | 只在 Steam 内部使用。 |
k_uAPICallInvalid | SteamAPICall_t | 0x0 | 无效 Steam API 调用句柄。 |
k_uAppIdInvalid | AppId_t | 0x0 | 无效 App ID。 |
k_uBundleIdInvalid | BundleId_t | 0 | 只在 Steam 内部使用。 |
k_uCellIDInvalid | CellID_t | 0xFFFFFFFF | 只在 Steam 内部使用。 |
k_uDepotIdInvalid | DepotId_t | 0x0 | 无效 Depot ID。 |
k_ulAssetClassIdInvalid | AssetClassId_t | 0x0 | 只在 Steam 内部使用。 |
k_uManifestIdInvalid | ManifestId_t | 0 | 只在 Steam 内部使用。 |
k_unSteamAccountIDMask | unsigned int | 0xFFFFFFFF | 用于在 CSteamID 中掩盖 AccountID_t。 |
k_unSteamAccountInstanceMask | unsigned int | 0x000FFFFF | 用于在 CSteamID 中掩盖帐户实例。 |
k_unSteamUserConsoleInstance | unsigned int | 2 | 供 CSteamID 用于标识从游戏主机登录的用户。 |
k_unSteamUserDesktopInstance | unsigned int | 1 | 供 CSteamID 用于标识从桌面客户端登录的用户。 |
k_unSteamUserWebInstance | unsigned int | 4 | 由 CSteamID 用于标识从网页登录的用户。 |
k_uPackageIdFreeSub | PackageId_t | 0x0 | 只在 Steam 内部使用。 |
k_uPackageIdInvalid | PackageId_t | 0xFFFFFFFF | 只在 Steam 内部使用。 |
k_uPartnerIdInvalid | PartnerId_t | 0 | 只在 Steam 内部使用。 |
k_uPhysicalItemIdInvalid | PhysicalItemId_t | 0x0 | 只在 Steam 内部使用。 |
QUERY_PORT_ERROR | int | 0xFFFE | 我们无法为此服务器获得查询端口。 |
QUERY_PORT_NOT_INITIALIZED | int | 0xFFFF | ----------------------------------------------------------------------------- 用于查询端口的常量。 ----------------------------------------------------------------------------- 我们尚未要求游戏服务器提供此查询端口的实际值。 |