Steamworks 文献库
ISteamApps 接口
为应用程序和可下载内容(DLC)暴露各类信息与操作。

成员函数

ISteamApp 的成员函数通过全局访问器函数 SteamApp() 调用。

BGetDLCDataByIndex

bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize );
名称类型描述
iDLCint获得 0 与 ISteamApps::GetDLCCount 之间的 DLC 索引。
pAppIDAppId_t *返回该 DLC 的 AppID。
pbAvailablebool *返回 DLC 当前是否在 Steam 商店中可用。 如果 DLC 没有可见的商店页面,则为 false。
pchNamechar *将 DLC 名称复制入此缓冲区后返回。
cchNameBufferSizeintpchName 的缓冲区长度。

按索引返回 DLC 元数据。

返回: bool
true 表明当前 AppID 关联有 DLC 且 iDLC 在 0 与 ISteamApps::GetDLCCount 的范围内,否则返回 false

示例:
int32 DLCCount = SteamApps()->GetDLCCount(); for ( int i = 0; i < DLCCount; ++i ) { AppId_t appId; bool available; char name[128]; bool success = SteamApps()->BGetDLCDataByIndex( i, &appId, &available, name, 128 ); if ( success ) { // 处理 DLC 数据 } }

BIsAppInstalled

bool BIsAppInstalled( AppId_t appID );
名称类型描述
appIDAppId_t要检查的应用程序的 AppID。

检查某特定应用是否已安装。

当前用户也许并不拥有此应用,只是通过免费周末等活动进行过安装。

此函数只对基础应用程序有效,对可下载内容(DLC) 无效。 针对 DLC 请使用 ISteamApps::BIsDlcInstalled

返回: bool
true 表明指定 AppID 已安装;否则返回 false

BIsCybercafe

bool BIsCybercafe();
检查当前 AppID 是否供网吧使用。

返回: bool
true 表明此许可用于网吧;否则返回 false
已弃用 - 不再使用。

BIsDlcInstalled

bool BIsDlcInstalled( AppId_t appID );
名称类型描述
appIDAppId_t要检查的 DLC 的 AppID。

检查用户是否拥有特定 DLC 且该 DLC 已安装。

返回: bool
true 表明该用户拥有 DLC 且已安装;否则返回 false

注意: 应只用于简单的客户端检查,不能用于授予游戏中物品。

BIsLowViolence

bool BIsLowViolence();
检查用户拥有的许可是否提供低暴力 depot。

在对内容有限制的国家,低暴力 depot 有利于游戏销售。

返回: bool
true 表明用户拥有的许可提供低暴力 depot;否则返回 false

另见: Depot 装载规则

BIsSubscribed

bool BIsSubscribed();
检查活跃用户是否订阅了当前 App ID。

注意: 如果您使用 Steam DRM 或调用 SteamAPI_RestartAppIfNecessary,此函数将始终返回 true

返回: bool
true 表明该活跃用户拥有当前 AppId;否则返回 false

BIsSubscribedApp

bool BIsSubscribedApp( AppId_t appID );
名称类型描述
appIDAppId_t要检查的 AppID。

检查活跃用户是否订阅了特定 AppId。

只有在需要检查与您游戏有关的另一个游戏(如试用版)的所有权时,才使用此函数。

返回: bool
true 表明该活跃用户订阅了特定 App ID;否则返回 false

BIsSubscribedFromFamilySharing

bool BIsSubscribedFromFamilySharing();

检查活跃用户是否正通过其他用户拥有的临时家庭共享许可访问当前 AppID。

如果需要确定该许可的永久所有者的 Steam ID,请使用GetAppOwner

返回: bool
true 表明该活跃用户正在通过家庭共享访问当前 appID,否则返回 false

BIsSubscribedFromFreeWeekend

bool BIsSubscribedFromFreeWeekend();

检查该用户是否通过免费周末订阅了当前 appID。

在使用此函数前请通过 Steamworks 讨论板联系 Valve 技术客户经理,来为免费周末活动制作相应程序包,确保活动能顺利开展。

返回: bool
true 表明该活跃用户通过免费周末订阅了当前 App Id;如果为其他任何类型的许可,则返回 false

BIsTimedTrial

bool BIsTimedTrial(uint32* punSecondsAllowed, uint32* punSecondsPlayed);
名称类型描述
punSecondsAlloweduint32 *返回限时试用将列出的秒数。
punSecondsPlayeduint32 *返回用户到目前为止游玩的秒数。

检查该用户是否通过限时试用订阅了当前 appID。 如果是,返回 true 并给出限时试用可以玩的总时间,以及用户当前共玩了多少时间。

返回: bool
true 表明该活跃用户通过限时试用订阅了当前 appID;如果为其他任何类型的许可,则返回 false

另见: ISteamApps::TimedTrialStatus_t

BIsVACBanned

bool BIsVACBanned();
检查用户帐户是否受到 VAC 封禁。

返回: bool
true 表明该用户帐户受到 VAC 封禁;否则返回 false

GetAppBuildId

int GetAppBuildId();
获取此应用的 buildid,可能根据游戏的后端更新而随时改变。

返回: int
此应用的当前 Build Id。如您未运行从 Steam 下载的生成版本,则默认为 0。

GetAppInstallDir

uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize );
名称类型描述
appIDAppId_t要获得安装目录的 AppID。
pchFolderchar *文件夹路径将被复制入的字符串缓冲区。
cchFolderBufferSizeuint32pchFolder 缓冲区的字节大小。

获取特定 AppID 的安装文件夹。

即使应用程序未安装,该函数仍可按游戏将在 Steam 库的默认安装位置进行调用。

返回: uint32
将安装目录路径作为字符串返回至 pchFolder 中提供的缓冲区,并返回复制入该缓冲区的字节数。

GetAppOwner

CSteamID GetAppOwner();
获取当前应用真正拥有者的 Steam ID。如当前用户是通过“家庭共享”访问的游戏,则与当前用户的不同。

返回: CSteamID
当前应用的原拥有者。

GetAvailableGameLanguages

const char * GetAvailableGameLanguages();
获取当前应用支持的语言列表,以逗号分隔。

参见本地化和语言,了解可能会返回的语言的完整列表。

返回: const char *
返回以逗号分隔的语言列表。

另见: ISteamApps::GetCurrentGameLanguage, ISteamUtils::GetSteamUILanguage

GetCurrentBetaName

bool GetCurrentBetaName( char *pchName, int cchNameBufferSize );
名称类型描述
pchNamechar *测试版名称要复制入的缓冲区。
cchNameBufferSizeintpchName 缓冲区的总大小。

检查用户是否从一个测试版分支运行。如是,获取测试版分支名称。

返回: bool
true 表示用户运行的是测试版分支;否则返回 false

GetNumBetas

int GetNumBetas( int *pnAvailable, int *pnPrivate );
名称类型描述
pnAvailableint*当前用户可用的测试版分支数量。
pnPrivate int*其中有多少是私密测试。

返回可用 GetBetaInfo() 遍历的已知应用分支的总数(包括默认的“public”分支)

返回: int
已知应用分支的数量

GetBetaInfo

bool GetBetaInfo( int iBetaIndex, uint32 *punFlags, uint32 *punBuildID, char *pchBetaName, int cchBetaName, char *pchDescription, int cchDescription );
名称类型描述
iBetaIndexint分支索引从 0 开始,而这始终是默认分支。
punFlagsuint32 *描述当前分支状态的标记集(EBetaBranchFlags)。
punBuildIDuint32 *已在此分支设置为上线的内容 BuildID。
pchBetaNamechar *测试版分支名称。
cchBetaNameint调用者提供的 pchBetaName 大小。
pchDescriptionchar *测试版分支描述。
cchDescriptionint调用者提供的 pchDescription 大小。

获取应用测试版分支的详情,例如名称、描述和状态等。

返回: bool
如果所传入的分支索引有效,为 true;否则为 false。

示例:
int32 betaCount = SteamApps()->GetNumBetas( nullptr, nullptr ); for ( int betaIndex = 0; betaIndex < betaCount; ++betaIndex ) { char name[128]; char description[1024]; uint32 flags = 0; // EBetaBranchFlags uint32 buildID = 0; SteamApps()->GetBetaInfo( betaIndex, &flags, &buildID, name, sizeof( name ), description, sizeof( description ) ); }

SetActiveBeta

bool SetActiveBeta( const char *pchBetaName );
名称类型描述
pchBetaName const char *游戏想要切换至的测试版名称。

为此应用选择一个测试版分支作为使用中的分支,也许需要游戏重启,以便 Steam 更新该分支的内容。

返回: bool

GetCurrentGameLanguage

const char * GetCurrentGameLanguage();
获取用户当前设置的语言。

如果用户未明确选择产品语言,则回退至 Steam UI 语言。

参见支持的语言,查看完整语言列表。

返回: const char *


另见: ISteamApps::GetAvailableGameLanguages, ISteamUtils::GetSteamUILanguage

GetDLCCount

int GetDLCCount();
获取当前应用的 DLC 数量。

此函数通常与 ISteamApps::BGetDLCDataByIndex 一起使用,在各 DLC 之间循环,获取各 DLC 的信息。

返回: int
当前应用的 DLC 数量。请注意,视用户有多少未拥有的 DLC 而定,可能仅显示最大值 64。 如果您的应用有大量的 DLC,您应当设置自己内部的已知 DLC 列表,以进行对比查看。

示例:
int32 DLCCount = SteamApps()->GetDLCCount(); for ( int i = 0; i < DLCCount; ++i ) { AppId_t appId; bool available; char name[128]; bool success = SteamApps()->BGetDLCDataByIndex( i, &appId, &available, name, 128 ); if ( success ) { // 处理 DLC 数据 } }

GetDlcDownloadProgress

bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal );
名称类型描述
nAppIDAppId_t要监控的 DLC 的 AppID。
punBytesDownloadeduint64 *返回已下载的字节数。
punBytesTotaluint64 *返回已下载的总字节大小。

获取可选 DLC 的下载进度。

返回: bool
true 表明指定 DLC 存在且当前正在下载;否则返回 false

GetEarliestPurchaseUnixTime

uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID );
名称类型描述
nAppIDAppId_t要获得其购买时间的 App ID。

获取指定应用的购买时间,以 Unix 时间戳(1970 年 1 月 1 日起的秒数)表示。

这可有助于根据用户的初始购买日期来奖励用户。

返回: uint32
最早购买时间,以 Unix 时间戳(1970 年 1 月 1 日起的秒数)表示。

GetFileDetails

SteamAPICall_t GetFileDetails( const char*pszFileName );
名称类型描述
pszFileNameconst char*文件的绝对路径及名称。

在 depot 清单中异步获取特定文件的元数据详情。

目前提供:
文件字节大小。
文件的 SHA1 哈希。
文件标志。

返回: SteamAPICall_t,与 FileDetailsResult_t 调用结果一起使用。

GetInstalledDepots

uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots );
名称类型描述
appIDAppId_t要为其列出 depot 的应用。
pvecDepotsDepotId_t *将填入 depot 列表的预分配数组。
cMaxDepotsuint32可获得的 depot 的最大数量,通常为 pvecDepot 的大小。

按装入顺序获取给定 AppID 所有已安装的 depot 列表。

返回: uint32
返回的 depot 数量。

GetLaunchCommandLine

int GetLaunchCommandLine( char *pszCommandLine, int cubCommandLine );
名称类型描述
pszCommandLinechar *命令行将被复制入的字符串缓冲区。
cubCommandLine intpszCommandLine 缓冲区的字节大小。

如果游戏通过 Steam URL 如 steam://run/<appid>//<command line>/ 启动,获取命令行。 此方法优于通过操作系统用命令行启动,后者可能存在安全隐患。 为了使丰富状态加入能使用此方式,而不被置于操作系统命令行,您必须在您应用的“安装”>“通用安装”页面上启用“使用启动命令行”。

返回: int
将命令行作为字符串返回至 pszCommandLine 提供的缓冲区,并返回复制入该缓冲区的字节数。

另见: ISteamApps::NewUrlLaunchParameters_t

GetLaunchQueryParam

const char * GetLaunchQueryParam( const char *pchKey );
名称类型描述
pchKeyconst char *要测试的启动序列号, 例:param1

如果游戏通过 steam://run/<appid>/?param1=value1;param2=value2;param3=value3 等运行,则获取关联的启动参数。

以“@”字符开始的参数名保留作内部使用,始终返回空字符串。
以下划线“_”开始的参数名保留供 Steam 功能使用,可由游戏查询,但建议您自己的功能的参数名不要以下划线开始。

返回: const char *
所提供的序列号关联的值。 若指定键并不存在,则返回空白字符串("")。

另见: ISteamApps::NewLaunchQueryParameters_t

InstallDLC

void InstallDLC( AppId_t nAppID );
名称类型描述
nAppIDAppId_t您要安装的 DLC。

允许您安装可选的 DLC。

返回: void

触发 DlcInstalled_t 回调。

MarkContentCorrupt

bool MarkContentCorrupt( bool bMissingFilesOnly );
名称类型描述
bMissingFilesOnlybool只扫描丢失文件,不验证每个文件的校验和。

允许您下次启动时强制验证游戏内容。

如果您检测到游戏已过期(比如客户端检测到与服务器版本不匹配),
您可以调用 MarkContentCorrupt 强制进行验证,向用户显示一条消息,然后退出。

返回: bool

RequestAllProofOfPurchaseKeys

void RequestAllProofOfPurchaseKeys();
已弃用。

RequestAppProofOfPurchaseKey

void RequestAppProofOfPurchaseKey( AppId_t nAppID );
名称类型描述
nAppIDAppId_t

已弃用。

UninstallDLC

void UninstallDLC( AppId_t nAppID );
名称类型描述
nAppIDAppId_t要卸载的 DLC。

允许您卸载可选的 DLC。

回调

以下是可以通过调用 SteamAPI_RunCallbacks 触发的回调。 其中许多将响应 ISteamApps 的成员函数直接触发。

AppProofOfPurchaseKeyResponse_t

只在 Steam 内部使用。

名称类型描述
m_eResultEResult
m_nAppIDuint32
m_cchKeyLengthuint32
m_rgchKeychar[k_cubAppProofOfPurchaseKeyMax

DlcInstalled_t

在当前用户获得 DLC 所有权且该 DLC 安装后触发。

名称类型描述
m_nAppIDAppId_t已安装的 DLC 的 App ID。

关联函数: ISteamApps::InstallDLC

FileDetailsResult_t

在请求指定文件的详情后调用。

名称类型说明
m_eResultEResult调用是否成功? 如果成功,为 k_EResultOK;否则,如果未找到文件,为 k_EResultFileNotFound。 如果调用不成功,就不会填入其他字段。
m_ulFileSizeuint64原始文件的字节大小。
m_FileSHAuint8[20]原始文件的 SHA1 哈希。
m_unFlagsuint32

关联函数: ISteamApps::GetFileDetails

NewUrlLaunchParameters_t

在用户于游戏已运行时使用命令行或查询参数(如 steam://run/<appid>//?param1=value1;param2=value2;param3=value3; )执行 Steam URL 后发布。 可使用 ISteamApps::GetLaunchCommandLineISteamApps::GetLaunchQueryParam 查询新的参数。

此回调无字段。

NewLaunchQueryParameters_t

在用户于游戏已运行时使用查询参数(如 steam://run/<appid>//?param1=value1;param2=value2;param3=value3; )执行 Steam URL 后发布。 可使用 ISteamApps::GetLaunchQueryParam 查询新的参数。

此回调无字段。

RegisterActivationCodeResponse_t

只在 Steam 内部使用。

名称类型描述
m_eResultERegisterActivationCodeResult
m_unPackageRegistereduint32

TimedTrialStatus_t

如果是通过限时试用拥有 appID 的,每分钟发送一次。

名称类型描述
m_unAppIDAppId_t限时试用中的 AppID。
m_bIsOfflinebool若为 true,表示用户当前离线。 允许/游玩的时间是指离线时间,而不是总时间。
m_unSecondsAlloweduint32应用程序总共可以玩多少秒。
m_unSecondsPlayeduint32应用程序已游玩了多少秒。

另见: ISteamApps::BIsTimedTrial

枚举

以下为定义来与 ISteamApps 一起使用的枚举。

ERegisterActivationCodeResult

只在 Steam 内部使用。

名称描述
k_ERegisterActivationCodeResultOK0
k_ERegisterActivationCodeResultFail1
k_ERegisterActivationCodeResultAlreadyRegistered2
k_ERegisterActivationCodeResultTimeout3
k_ERegisterActivationCodeAlreadyOwned4

常量

以下是定义来与 ISteamApps 一起使用的常量。

名称类型描述
k_cubAppProofOfPurchaseKeyMaxint240只在 Steam 内部使用。
STEAMAPPS_INTERFACE_VERSIONconst char *"STEAMAPPS_INTERFACE_VERSION008"
  翻译: