ISteamUGC 回调、结构体和枚举速查
ISteamUGC 回调和数据类型决定了 Steam 创意工坊异步操作如何交付结果。本页面向需要检查结果字段与状态的开发者,归纳官方文档中的回调、项目详情、枚举及句柄常量;具体定义应以项目使用的 SDK 为准。
创建、更新与下载回调
CreateItemResult_t:包含m_eResult、新项目m_nPublishedFileId和m_bUserNeedsToAcceptWorkshopLegalAgreement。成功后保存 ID,并在需要时引导用户处理协议。SubmitItemUpdateResult_t:包含结果和协议标志。失败可能涉及应用配置、许可证、文件路径、预览图大小、云空间或锁定;按实际EResult排查。DeleteItemResult_t:删除操作的结果及项目标识。DownloadItemResult_t:包含应用 ID、项目 ID 和结果;下载完成后核对三个字段再访问内容。ItemInstalled_t:项目安装或更新时通知,包含应用 ID 和项目 ID,需过滤其他应用的通知。
查询和依赖回调
SteamUGCQueryCompleted_t:m_handle是查询句柄;m_eResult是结果;m_unNumResultsReturned和m_unTotalMatchingResults分别是本次返回及总匹配数量;m_bCachedData标识缓存。SteamUGCRequestUGCDetailsResult_t:旧详情查询结果,已弃用;改用详情查询及完成回调。AddUGCDependencyResult_t和RemoveUGCDependencyResult_t:提供操作结果、父项目和子项目 ID。AddAppDependencyResult_t和RemoveAppDependencyResult_t:提供操作结果、项目 ID 和应用或 DLC ID。GetAppDependenciesResult_t:返回应用依赖的结果及数据;注意官方页面对相应方法的返回类型存在矛盾。
用户操作回调
GetUserItemVoteResult_t包含项目、结果及赞、踩和跳过状态;SetUserItemVoteResult_t包含项目、结果和赞踩方向。UserFavoriteItemsListChanged_t包含项目、结果与添加或移除标志;UserSubscribedItemsListChanged_t标识订阅发生变化的应用 ID。RemoteStorageSubscribePublishedFileResult_t和RemoteStorageUnsubscribePublishedFileResult_t分别表示订阅和取消订阅的调用结果,包含m_eResult和m_nPublishedFileId。StartPlaytimeTrackingResult_t和StopPlaytimeTrackingResult_t提供游戏时间跟踪操作结果。WorkshopEULAStatus_t包含结果、App ID、协议版本、签署时间、是否接受以及是否需要新操作。旧版本已接受时m_bAccepted仍可能为真。
项目详情结构体
SteamUGCDetails_t 由 GetQueryUGCResult 填充;每项应先检查 m_eResult。标题、描述、标签、文件名和 URL 在官方页面的类型列显示的是容量常量,下表按字符串缓冲区列示;精确声明和长度以所用 SDK 头文件为准。
| 字段 | 类型 | 含义 |
|---|---|---|
m_nPublishedFileId |
PublishedFileId_t |
已发布项目的唯一 ID。 |
m_eResult |
EResult |
这条详情的结果;先确认成功,再使用其他数据。 |
m_eFileType |
EWorkshopFileType |
项目所属的文件类型。 |
m_nCreatorAppID |
AppId_t |
创建项目所用的应用 ID。 |
m_nConsumerAppID |
AppId_t |
使用该内容的应用 ID。 |
m_rgchTitle |
char[k_cchPublishedDocumentTitleMax] |
项目标题字符串。 |
m_rgchDescription |
char[k_cchPublishedDocumentDescriptionMax] |
项目描述字符串。 |
m_ulSteamIDOwner |
uint64 |
内容所有者的 Steam ID。 |
m_rtimeCreated |
uint32 |
创建时间,Unix 时间戳,单位秒。 |
m_rtimeUpdated |
uint32 |
最后更新时间,Unix 时间戳,单位秒。 |
m_rtimeAddedToUserList |
uint32 |
加入用户列表的 Unix 时间戳,单位秒;并非所有场景适用。 |
m_eVisibility |
ERemoteStoragePublishedFileVisibility |
项目的可见性。 |
m_bBanned |
bool |
项目是否被封禁。 |
m_bAcceptedForUse |
bool |
应用开发者是否将该项目标记为已采纳。 |
m_bTagsTruncated |
bool |
返回的标签列表是否因缓冲区长度被截断。 |
m_rgchTags |
char[k_cchTagListMax] |
逗号分隔的标签列表。 |
m_hFile |
UGCHandle_t |
主文件句柄。 |
m_hPreviewFile |
UGCHandle_t |
预览文件句柄。 |
m_pchFileName |
char[k_cchFilenameMax] |
主文件在 Steam 云中的文件名。 |
m_nFileSize |
int32 |
主文件大小,单位字节。 |
m_nPreviewFileSize |
int32 |
预览文件大小,单位字节。 |
m_rgchURL |
char[k_cchPublishedFileURLMax] |
项目关联的 URL,例如视频或网页地址。 |
m_unVotesUp |
uint32 |
赞成票数。 |
m_unVotesDown |
uint32 |
反对票数。 |
m_flScore |
float |
赞成票占比的贝叶斯平均评分,范围 0 到 1。 |
m_unNumChildren |
uint32 |
合集成员数或此项目的依赖项目数。 |
EItemState:项目状态位
GetItemState 返回可组合的位标志;安装与需要更新可以同时成立。使用位运算检查状态,而非只比较一个数值。
| 成员 | 值 | 用途 |
|---|---|---|
k_EItemStateNone |
0 | 客户端未跟踪该项目。 |
k_EItemStateSubscribed |
1 | 当前用户已订阅,不只是缓存。 |
k_EItemStateLegacyItem |
2 | 由旧版 RemoteStorage 工坊接口创建。 |
k_EItemStateInstalled |
4 | 内容已安装,但可能已经过期。 |
k_EItemStateNeedsUpdate |
8 | 尚未安装或作者更新内容,需要更新。 |
k_EItemStateDownloading |
16 | 更新正在下载。 |
k_EItemStateDownloadPending |
32 | 下载已请求,等待下载完成通知后才能访问内容。 |
EItemUpdateStatus:上传阶段
GetItemUpdateProgress 返回当前阶段;最终结果仍由提交更新的调用结果确定。
| 成员 | 值 | 用途 |
|---|---|---|
k_EItemUpdateStatusInvalid |
0 | 更新句柄无效;操作可能已完成,检查提交结果。 |
k_EItemUpdateStatusPreparingConfig |
1 | 正在处理配置数据。 |
k_EItemUpdateStatusPreparingContent |
2 | 正在读取和处理内容文件。 |
k_EItemUpdateStatusUploadingContent |
3 | 正在上传内容更改。 |
k_EItemUpdateStatusUploadingPreviewFile |
4 | 正在上传新预览图。 |
k_EItemUpdateStatusCommittingChanges |
5 | 正在提交更改。 |
EItemPreviewType:预览类型
AddItemPreviewFile 不支持直接传入 YouTubeVideo 或 Sketchfab;YouTube 应使用视频预览接口。环境图支持 PNG、JPG、GIF。
| 成员 | 值 | 用途 |
|---|---|---|
k_EItemPreviewType_Image |
0 | 网页可显示的普通图片,支持 PNG、JPG、GIF。 |
k_EItemPreviewType_YouTubeVideo |
1 | YouTube 视频 ID;使用视频预览接口添加。 |
k_EItemPreviewType_Sketchfab |
2 | Sketchfab 模型 ID。 |
k_EItemPreviewType_EnvironmentMap_HorizontalCross |
3 | 水平十字布局的环境图;当前不用于网页视图。 |
k_EItemPreviewType_EnvironmentMap_LatLong |
4 | 经纬布局的环境图;当前不用于网页视图。 |
k_EItemPreviewType_ReservedMax |
255 | 保留值;官方允许在此值以上定义自有类型。 |
句柄与常量
UGCQueryHandle_t 和 UGCUpdateHandle_t 均为 uint64,分别标识查询与更新;查询使用完要释放。官方页面的 k_UGCQueryHandleInvalid 与 k_UGCUpdateHandleInvalid 均为 0xffffffffffffffffull;kNumUGCResultsPerPage 为 50,k_cchDeveloperMetadataMax 为 5000 字节。文档列出的接口版本字符串为 STEAMUGC_INTERFACE_VERSION015,使用不同 SDK 时应以其头文件为准。
查询类型完整枚举
以下为 SDK 的 EUGCMatchingUGCType,Web API 的文件类型枚举使用另一套数值。
| 成员 | 值 | 含义 |
|---|---|---|
k_EUGCMatchingUGCType_Items |
0 | 鉴选型及即用型物品。 |
k_EUGCMatchingUGCType_Items_Mtx |
1 | 鉴选型物品。 |
k_EUGCMatchingUGCType_Items_ReadyToUse |
2 | 即用型物品。 |
k_EUGCMatchingUGCType_Collections |
3 | 合集。 |
k_EUGCMatchingUGCType_Artwork |
4 | 艺术作品。 |
k_EUGCMatchingUGCType_Videos |
5 | 视频。 |
k_EUGCMatchingUGCType_Screenshots |
6 | 截图。 |
k_EUGCMatchingUGCType_AllGuides |
7 | 所有指南。 |
k_EUGCMatchingUGCType_WebGuides |
8 | 网页指南。 |
k_EUGCMatchingUGCType_IntegratedGuides |
9 | 游戏内集成指南。 |
k_EUGCMatchingUGCType_UsableInGame |
10 | 即用物品及集成指南。 |
k_EUGCMatchingUGCType_ControllerBindings |
11 | 控制器绑定。 |
k_EUGCMatchingUGCType_GameManagedItems |
12 | 游戏管理项目。 |
k_EUGCMatchingUGCType_All |
~0 |
所有类型。 |
EUGCQuery 指定全局查询排序;趋势期通过 SetRankedByTrendDays 设置。
| 成员 | 值 | 含义 |
|---|---|---|
k_EUGCQuery_RankedByVote |
0 | 按历史投票热度。 |
k_EUGCQuery_RankedByPublicationDate |
1 | 按发布日期降序。 |
k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate |
2 | 已采纳物品按采纳日期。 |
k_EUGCQuery_RankedByTrend |
3 | 按趋势期投票热度。 |
k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate |
4 | 好友收藏,按发布日期。 |
k_EUGCQuery_CreatedByFriendsRankedByPublicationDate |
5 | 好友创建,按发布日期。 |
k_EUGCQuery_RankedByNumTimesReported |
6 | 按举报权重降序。 |
k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate |
7 | 关注用户创建,按发布日期。 |
k_EUGCQuery_NotYetRated |
8 | 当前用户的投票队列。 |
k_EUGCQuery_RankedByTotalVotesAsc |
9 | 总票数升序。 |
k_EUGCQuery_RankedByVotesUp |
10 | 赞数降序,可使用趋势期。 |
k_EUGCQuery_RankedByTextSearch |
11 | 文本搜索相关度。 |
k_EUGCQuery_RankedByTotalUniqueSubscriptions |
12 | 历史去重订阅数降序。 |
k_EUGCQuery_RankedByPlaytimeTrend |
13 | 趋势期总游戏时间。 |
k_EUGCQuery_RankedByTotalPlaytime |
14 | 累计游戏时间。 |
k_EUGCQuery_RankedByAveragePlaytimeTrend |
15 | 趋势期平均游戏时间。 |
k_EUGCQuery_RankedByLifetimeAveragePlaytime |
16 | 历史平均游戏时间。 |
k_EUGCQuery_RankedByPlaytimeSessionsTrend |
17 | 趋势期会话数。 |
k_EUGCQuery_RankedByLifetimePlaytimeSessions |
18 | 累计会话数。 |
k_EUGCQuery_RankedByLastUpdatedDate |
19 | 最近更新时间。 |
k_EUGCQuery_RankedByNumParentItems |
20 | 依赖该项目的项目数量。 |
k_EUGCRankedByNumParentCollections |
21 | 包含该项目的合集数量。 |
最后一项符号按官方页面原样列出;SDK 版本可能有差异,编译时以头文件为准。
用户列表和排序枚举
EUserUGCList 指定用户项目列表。投票和订阅等部分列表限当前用户;WillVoteLater 已弃用。
| 成员 | 值 | 含义 |
|---|---|---|
k_EUserUGCList_Published |
0 | 已发布项目。 |
k_EUserUGCList_VotedOn |
1 | 已投票项目。 |
k_EUserUGCList_VotedUp |
2 | 已赞项目。 |
k_EUserUGCList_VotedDown |
3 | 已踩项目。 |
k_EUserUGCList_WillVoteLater |
4 | 已弃用。 |
k_EUserUGCList_Favorited |
5 | 收藏项目。 |
k_EUserUGCList_Subscribed |
6 | 订阅项目。 |
k_EUserUGCList_UsedOrPlayed |
7 | 使用或玩过的项目。 |
k_EUserUGCList_Followed |
8 | 关注更新的项目。 |
EUserUGCListSortOrder 控制用户列表顺序。
| 成员 | 值 | 含义 |
|---|---|---|
k_EUserUGCListSortOrder_CreationOrderDesc |
0 | 创建时间降序。 |
k_EUserUGCListSortOrder_CreationOrderAsc |
1 | 创建时间升序。 |
k_EUserUGCListSortOrder_TitleAsc |
2 | 标题升序。 |
k_EUserUGCListSortOrder_LastUpdatedDesc |
3 | 最近更新优先。 |
k_EUserUGCListSortOrder_SubscriptionDateDesc |
4 | 最近订阅优先。 |
k_EUserUGCListSortOrder_VoteScoreDesc |
5 | 评分排序。 |
k_EUserUGCListSortOrder_ForModeration |
6 | 返回待审核举报项目。 |
项目统计枚举
EItemStatistic 传给 GetQueryUGCStatistic。
| 成员 | 值 | 含义 |
|---|---|---|
k_EItemStatistic_NumSubscriptions |
0 | 订阅数。 |
k_EItemStatistic_NumFavorites |
1 | 收藏数。 |
k_EItemStatistic_NumFollowers |
2 | 关注数。 |
k_EItemStatistic_NumUniqueSubscriptions |
3 | 去重订阅数。 |
k_EItemStatistic_NumUniqueFavorites |
4 | 去重收藏数。 |
k_EItemStatistic_NumUniqueFollowers |
5 | 去重关注数。 |
k_EItemStatistic_NumUniqueWebsiteViews |
6 | 项目页面去重浏览量。 |
k_EItemStatistic_ReportScore |
7 | 举报次数。 |
k_EItemStatistic_NumSecondsPlayed |
8 | 累计游戏秒数。 |
k_EItemStatistic_NumPlaytimeSessions |
9 | 累计游戏会话数。 |
k_EItemStatistic_NumComments |
10 | 评论数。 |
k_EItemStatistic_NumSecondsPlayedDuringTimePeriod |
11 | 指定时间段游戏秒数。 |
k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod |
12 | 指定时间段游戏会话数。 |
EUGCContentDescriptorID:内容描述词
这些值用于标记项目并配合 Steam 的用户内容筛选;选择值时应准确反映项目内容。读取使用 GetQueryUGCContentDescriptors,更改使用 AddContentDescriptor 和 RemoveContentDescriptor。
| 成员 | 值 | 用途 |
|---|---|---|
k_EUGCContentDescriptor_NudityOrSexualContent |
1 | 内容分类标记 1。 |
k_EUGCContentDescriptor_FrequentViolenceOrGore |
2 | 内容分类标记 2。 |
k_EUGCContentDescriptor_AdultOnlySexualContent |
3 | 内容分类标记 3;查看时有年龄确认要求。 |
k_EUGCContentDescriptor_GratuitousSexualContent |
4 | 内容分类标记 4;查看时有年龄确认要求。 |
k_EUGCContentDescriptor_AnyMatureContent |
5 | 内容分类标记 5。 |
项目类型和可见性
EWorkshopFileType 定义共享文件类型,创建工坊项目时应选择适用类型。
| 成员 | 值 | 含义 |
|---|---|---|
k_EWorkshopFileTypeFirst |
0 | 枚举起点。 |
k_EWorkshopFileTypeCommunity |
0 | 可订阅的普通工坊项目。 |
k_EWorkshopFileTypeMicrotransaction |
1 | 用于鉴选的物品。 |
k_EWorkshopFileTypeCollection |
2 | 合集。 |
k_EWorkshopFileTypeArt |
3 | 艺术作品。 |
k_EWorkshopFileTypeVideo |
4 | 外部视频。 |
k_EWorkshopFileTypeScreenshot |
5 | 截图。 |
k_EWorkshopFileTypeGame |
6 | 未使用的历史游戏类型。 |
k_EWorkshopFileTypeSoftware |
7 | 未使用的历史软件类型。 |
k_EWorkshopFileTypeConcept |
8 | 未使用的历史概念类型。 |
k_EWorkshopFileTypeWebGuide |
9 | 网页指南。 |
k_EWorkshopFileTypeIntegratedGuide |
10 | 应用内集成指南。 |
k_EWorkshopFileTypeMerch |
11 | 需投票选择的商品。 |
k_EWorkshopFileTypeControllerBinding |
12 | 控制器绑定。 |
k_EWorkshopFileTypeSteamworksAccessInvite |
13 | Steam 内部使用。 |
k_EWorkshopFileTypeSteamVideo |
14 | Steam 视频。 |
k_EWorkshopFileTypeGameManagedItem |
15 | 游戏管理且不在网页显示的项目。 |
k_EWorkshopFileTypeMax |
16 | 枚举边界。 |
ERemoteStoragePublishedFileVisibility 可用于 SetItemVisibility。
| 成员 | 值 | 含义 |
|---|---|---|
k_ERemoteStoragePublishedFileVisibilityPublic |
0 | 所有人可见。 |
k_ERemoteStoragePublishedFileVisibilityFriendsOnly |
1 | 好友可见。 |
k_ERemoteStoragePublishedFileVisibilityPrivate |
2 | 仅作者可见。 |
k_ERemoteStoragePublishedFileVisibilityUnlisted |
3 | 可见但不出现在全局查询;用户列表有作者和订阅者例外。 |
RemoteStorage 相关类型和长度常量
PublishedFileId_t 是 uint64 项目唯一标识;k_PublishedFileIdInvalid 为 0。SteamParamStringArray_t 包含 m_ppStrings 字符串指针数组和 m_nNumStrings 数量,用于传入标签等字符串集合。
| 常量 | 官方值 | 用途 |
|---|---|---|
k_cchPublishedDocumentTitleMax |
128 + 1 |
项目标题长度上限,单位字节。 |
k_cchPublishedDocumentDescriptionMax |
8000 |
项目描述长度上限,单位字节。 |
k_cchPublishedFileURLMax |
256 |
项目 URL 长度上限,单位字节。 |
k_cchTagListMax |
1024 + 1 |
逗号分隔的标签列表长度上限,单位字节。 |
k_cchFilenameMax |
260 |
Steam 云文件路径长度上限。 |
这些是 SDK 常量而非界面字符数;多字节文本应按字节处理,并以所用 SDK 版本的定义为准。
提交更新的常见结果
SubmitItemUpdateResult_t 中的 m_eResult 用于区分成功与错误;先处理异步传输失败,再检查该字段。
| 结果 | 官方列出的常见原因或排查方向 |
|---|---|
k_EResultOK |
提交成功;仍需检查是否要求用户接受协议。 |
k_EResultFail |
一般性失败,结合日志和操作阶段排查。 |
k_EResultInvalidParam |
App ID 无效或不匹配、未启用 ISteamUGC,或预览文件小于 16 字节。 |
k_EResultAccessDenied |
用户没有所提供 App ID 的许可证。 |
k_EResultFileNotFound |
工坊项目信息、预览文件或内容目录无法找到或读取。 |
k_EResultLockingFailed |
无法取得 UGC 锁。 |
k_EResultLimitExceeded |
预览图过大,或用户 Steam 云空间不足;官方要求预览图小于 1 MB。 |
回调结构的逐字段说明见站内回调参考。