Документация Steamworks
Руководство по Мастерской Steam

Введение

Мастерская Steam — это система внутреннего хранилища и внешних веб-страниц, которая облегчает хранение, организацию, сортировку, оценку и загрузку контента для вашей игры или приложения.

Эта страница содержит подробную техническую информацию об интеграции Мастерской Steam с вашей игрой. Дополнительная информация, определения интеграции различных доступных видов Мастерской, а также способы использования инструментов Steam описаны в разделе Мастерская Steam.

Для создания модификаций или нового контента пользователи вашей игры, как правило, могут воспользоваться инструментами, предоставляемыми вместе с покупкой игры. Затем авторы контента могут отправить его вам на подтверждение, используя механизм, встроенный в инструментарий Мастерской. Другие пользователи затем смогут просмотреть, отсортировать, оценить и подписаться на предметы, которые они хотели бы добавить в игру, перейдя в Мастерскую в сообществе Steam. Эти предметы затем можно скачать из Steam. Если вы получаете обратный вызов ISteamUGC::ItemInstalled_t в игре, вы можете вызвать ISteamUGC::GetItemInstallInfo, чтобы получить информацию о месте папки установки и прочитать данные напрямую из неё. Новый контент будет соответствующим образом распознан игрой и создан.

Типы Мастерской Steam, монетизация и рекомендации

Чтобы получить дальнейшую информацию и определения интеграции различных видов Мастерской, а также извлечь наибольшую пользу из инструментов Steam, ознакомьтесь с разделом документации Мастерская Steam.

Управление показами Мастерской Steam

Мастерская Steam — веб-сайт на сервере Steam, который организует общий контент и позволяет пользователям комментировать и голосовать за контент, доступный в сообществе. По умолчанию приложения не будут видны пользователям в Мастерской. Это скрывает контент, не предназначенный для общего просмотра на сайте Мастерской Steam, если она не является общедоступной.
Инструкции по настройке видимости Мастерской представлены ниже:
  1. Перейдите на главную страницу приложения на сайте Steamworks;
  2. Нажмите «Изменить настройки приложения»;
  3. Во вкладке «Мастерская» выберите «Общие»;
  4. Справа на странице найдите раздел «Состояние видимости»;
  5. Выберите один из желаемых уровней видимости, включающих «Только разработчики», «Разработчики и тестировщики», «Пользователи и разработчики» и «Видимое для всех»;
  6. Во вкладке «Опубликовать» нажмите кнопку «Подготовка к публикации»;
  7. Нажмите «Опубликовать в Steam».
Обратите внимание: чтобы изменить статус приложения на «Видимое для всех», контрольный список Мастерской должен быть заполнен, включая пункты с фирменными изображениями, названием, описанием, а также хотя бы одним предметом, доступным для просмотра всем пользователям.

Технический обзор

Чтобы добавлять и использовать контент, созданный сообществом, необходимо использовать API ISteamUGC, который можно найти в разделе SDK Steamworks. Представленные методы дадут возможность добавлять контент, который пользователи затем смогут увидеть в Мастерской Steam или внутри приложения.

Вход в API Мастерской необходимо произвести через указатель, возвращённый SteamUGC().

Пример:
SteamAPICall_t hSteamAPICall = SteamUGC()->CreateItem( SteamUtils()->GetAppID(), k_EWorkshopFileTypeMicrotransaction );

Активация ISteamUGC в игре или приложении

Перед тем, как предметы Мастерской можно будет загрузить на внутренний сервер Steamworks, необходимо настроить квоты Steam Cloud и активировать API ISteamUGC.

Steam Cloud используется для хранения изображений, используемых при предпросмотре предметов Мастерской. Квоты Steam Cloud можно настроить следующим образом:
  1. Перейдите на страницу настройки функции Cloud в разделе управления приложением;
  2. Установите соответствующие значения для настроек «Квота байтов на пользователя» и «Квота файлов на пользователя» для сохранения изображений для предпросмотра;
  3. Нажмите «Сохранить»
  4. Во вкладке «Опубликовать» нажмите кнопку «Подготовка к публикации»;
  5. Нажмите «Опубликовать в Steam».

API ISteamUGC можно активировать следующим образом:
  1. Перейдите на страницу конфигурации Мастерской Steam в разделе управления приложением.
  2. Найдите раздел «Расширенные настройки».
  3. Пометьте галочкой опцию «Активировать ISteamUGC для передачи файлов».
  4. Нажмите «Сохранить».
  5. Во вкладке «Опубликовать» нажмите кнопку «Подготовка к публикации».
  6. Нажмите «Опубликовать в Steam».
Когда настройки будут готовы, контент Мастерской можно будет загрузить через API.

Создание и загрузка контента

Процесс создания и загрузки контента Мастерской – это простой и воспроизводимый процесс, отражённый в графике ниже.

ISteamUGCFlow-CreateUpload-Web2.png

Создание предмета Мастерской

  1. Создание всех предметов Мастерской начинается с вызова функции ISteamUGC::CreateItem
    • Переменная nConsumerAppId должна содержать AppID игры или приложения. Не передавайте AppID инструмента создания предмета Мастерской, если это отдельно использующийся номер.
    • EWorkshopFileType – это перечисляемый тип, определяющий, каким образом сообществу будет предоставлен доступ к добавленному файлу. Допустимые значения:
      • k_EWorkshopFileTypeCommunity - этот тип файла используется для описания файлов, загружаемых пользователями и доступных для скачивания всеми участниками сообщества. Обычно используется для обеспечения доступа к созданным пользователями модификациям.
      • k_EWorkshopFileTypeMicrotransaction - этот тип файла используется для описания файлов, загружаемых пользователями, но предназначенных только для добавления в игру в качестве официального контента. Эти файлы не будут скачиваться пользователями через Мастерскую, однако будут доступны для просмотра сообществом, чтобы за них проголосовать.
        Примером подобного внедрения служит игра Team Fortress 2.
  2. Создайте обработчик результата вызова для CreateItemResult_t
  3. Сначала проверьте функцию m_eResult, чтобы убедиться в успешном создании предмета.
  4. После выполнения обработчика результата вызова прочтите значение m_nPublishedFileId и сохраните его для последующих обновлений предмета Мастерской (например, в файле проекта, связанного с инструментом создания).
  5. Переменную m_bUserNeedsToAcceptWorkshopLegalAgreement также следует проверить, и если её значение true, пользователь должен быть перенаправлен на страницу соглашения Мастерской, чтобы его принять. Ознакомьтесь с разделом «Соглашение Мастерской Steam» для дополнительной информации.

Отправка предмета Мастерской

  1. Когда предмет будет создан и значение PublishedFileId_t возвращено, содержание предмета Мастерской может быть заполнено и отправлено в Мастерскую Steam.
  2. Обновление предмета начинается с вызова функции ISteamUGC::StartItemUpdate
  3. Используя UGCUpdateHandle_t, возвращённый ISteamUGC::StartItemUpdate, можно отправить вызовы для обновления названия, описания, видимости, меток, содержания предмета и изображения предпросмотра предмета с помощью различных методов ISteamUGC::SetItem[...].
    • ISteamUGC::SetItemTitle задаёт новое название предмета.
    • ISteamUGC::SetItemDescription задаёт новое описание предмета.
    • ISteamUGC::SetItemUpdateLanguage задаёт язык названия и описания, который будет установлен в этом обновлении предмета.
    • ISteamUGC::SetItemMetadata задаёт произвольные метаданные предмета. Эти метаданные могут быть возвращены с запросов без необходимости скачивать и устанавливать сам контент.
    • ISteamUGC::SetItemVisibility задаёт видимость предмета.
    • ISteamUGC::SetItemTags задаёт произвольные метки предмета, указанные разработчиком.
    • ISteamUGC::AddItemKeyValueTag добавляет метку пары ключ-значение к предмету. Ключи могут соотноситься со множеством различных значений (отношение «один-ко-многим»).
    • ISteamUGC::RemoveItemKeyValueTags удаляет метку пары ключ-значение с предмета.
    • ISteamUGC::SetItemContent задаёт папку, которая будет содержать контент для предмета.
    • ISteamUGC::SetItemPreview задаёт основное изображение для предпросмотра предмета.
  4. После завершения вызовов обновления вызов ISteamUGC::SubmitItemUpdate инициирует загрузку в Мастерскую Steam.
    • Создайте обработчик результата вызова для SubmitItemUpdateResult_t
    • После выполнения обработчика результата вызова проверьте m_eResult, чтобы подтвердить успешное завершение загрузки.
    • Обратите внимание: после вызова обновления и загрузки предмета его невозможно отменить.
  5. При желании прогресс загрузки можно отслеживать с помощью ISteamUGC::GetItemUpdateProgress
    • EItemUpdateStatus определяет прогресс загрузки и обновления.
    • punBytesProcessed и punBytesTotal могут использоваться, чтобы предоставить исходные данные для управления пользовательским интерфейсом, к примеру: индикатор для указания прогресса загрузки.
    • punBytesTotal может обновиться во время загрузки в зависимости от того, на какой стадии обновления находится предмет.
  6. Как и при создании предмета Мастерской, подтвердите, что пользователь принял условия соглашения Мастерской Steam. Это необходимо в случае, если пользователь не создавал нового предмета, но редактирует уже существующий.

Примечания:

  • Ранее предметы Мастерской обозначались как отдельные файлы. С использованием ISteamUGC предмет Мастерской представляется в виде папки файлов.
  • Если предмету Мастерской необходимы дополнительные метаданные, затребованные использующим его приложением, вы можете прикрепить метаданные к предмету с помощью вызова ISteamUGC::SetItemMetadata. Эти метаданные могут быть возвращены в запросах без необходимости скачивать и устанавливать контент предмета.
    Ранее мы рекомендовали сохранять эти метаданные в файле внутри папки предмета Мастерской, что вы по-прежнему можете делать.

Использование контента

Использование контента делится на две категории: подписка на предмет и установка предмета.

Подписка на предмет

Большинство подписок на предметы Мастерской будет происходить на сайте Мастерской Steam. Это знакомое место, общее для всех игр и приложений, поэтому наиболее вероятно, что пользователи будут регулярно находить и подписываться на предметы на сайте Мастерской.

ISteamUGC предоставляет два программных способа совершать подписку на предметы Мастерской или отменять её, чтобы поддерживать управление подпиской на внутриигровые предметы.
  • ISteamUGC::SubscribeItem. Подписаться на предмет Мастерской. Скачивание и установка предмета произойдёт в максимально короткие сроки.
  • ISteamUGC::UnsubscribeItem. Отменить подписку на предмет Мастерской. Это приведёт к удалению предмета при выходе из игры.

Существует два дополнительных способа подсчёта предметов, на которые подписан пользователь.
  • ISteamUGC::GetNumSubscribedItems подсчитывает общее число предметов, на которые подписан пользователь, в игре или приложении.
  • ISteamUGC::GetNumSubscribedItems подсчитывает общее число предметов в текущей игре, на которые подписан пользователь.

Получение уведомлений о внешних действиях подписки

Получение уведомлений в игре возможно, если пользователь подписался или отменил подписку на файл посредством какого-либо механизма (например, с помощью ISteamUGC или на сайте Мастерской Steam):
  • Создайте обработчик обратного вызова для RemoteStoragePublishedFileSubscribed_t и RemoteStoragePublishedFileUnsubscribed_t.
  • Структуры будут заполнены функцией ISteamRemoteStorage::PublishedFileId_t, которую затем можно использовать для доступа к информации о предмете Мастерской.
  • Структуры также содержат номер приложения (m_unAppID), связанного с предметом Мастерской. Его нужно сравнить с номером запущенного приложения, поскольку обработчик будет вызван для всех подписок на предметы независимо от приложения, запущенного в тот момент.

Установка предмета

После получения информации о подписке на предмет можно применить оставшиеся методы использования предмета. Данные методы возвращают информацию о прогрессе скачивания и установке предмета обратно в игру. Скачивание предметов Мастерской выполняется через клиент Steam и происходит автоматически, следуя правилам ниже:
  1. Когда клиент Steam укажет на готовое к запуску приложение, все обновлённые хранилища приложения будут скачаны и установлены.
  2. Все уже установленные предметы Мастерской обновятся при необходимости.
  3. Затем произойдёт запуск игры или приложения.
  4. Ещё не скачанные предметы Мастерской новой подписки закачаются и будут установлены в фоновом режиме.
    • Файлы подписки будут загружены в клиент в том же порядке, в котором произошла подписка.
    • На странице загрузки Steam появятся скачиваемые предметы Мастерской с особым обозначением для указания совершения процесса скачивания.
Обратите внимание: функция «Проверка целостности файлов игры» в клиенте Steam также инициирует скачивание предметов Мастерской.

Поскольку игра начнётся до скачивания и установки предметов новой подписки, оставшиеся методы использования помогут в управлении процессом их установки. Их также можно использовать, когда подписка на предметы осуществляется в игре, чтобы отобразить процесс установки в реальном времени.

Статус предмета Мастерской

  • ISteamUGC::GetItemState выдаёт текущее состояние предмета Мастерской в клиенте.

Состояние загрузки предмета Мастерской

Инициация или увеличение приоритета выполнения загрузки предмета Мастерской

  • ISteamUGC::DownloadItem
    • Задайте значение bHighPriority как true, чтобы приостановить все текущие процессы загрузки и немедленно начать загружать данный предмет Мастерской.
    • Если возвращаемое значение — true, зарегистрируйтесь и дождитесь обратного вызова ISteamUGC::DownloadItemResult_t перед отправкой вызова ISteamUGC::GetItemInstallInfo или получения доступа к предмету Мастерской на диске.
    • Если у пользователя нет подписки на предмет (к примеру, используется анонимный вход на игровой сервер), предмет Мастерской будет загружен и временно кэширован.
    • Если состояние предмета Мастерской ISteamUGC::EItemState равноk_EItemStateNeedsUpdate, можно вызвать ISteamUGC::DownloadItem, чтобы инициировать обновление. Не пытайтесь получить доступ к предмету Мастерской на диске, пока не будет отправлен обратный вызов ISteamUGC::DownloadItemResult_t.
    • Данный метод действует только для предметов Мастерской, созданных с помощью ISteamUGC. С предметами Мастерской, созданными с помощью устаревшей функции ISteamRemoteStorage, он не сработает.
    • Структура обратного вызова ISteamUGC::DownloadItemResult_t содержит номер приложения (m_unAppID), связанный с предметом Мастерской. Его нужно сравнить с номером запущенного приложения, поскольку обработчик будет вызван для всех загрузок предметов независимо от приложения, запущенного в тот момент.

Получение информации о локальной копии предмета Мастерской

Уведомление при установке или обновлении предмета Мастерской

Запрос контента

Интерфейс ISteamUGC представляет собой гибкий способ организации различных видов пользовательского контента в Steam (например, предметы Мастерской, скриншоты, видео и пр.).

ISteamUGCFlows-QueryingContent-web2.png

  1. Создайте обработчик результата вызова для SteamUGCQueryCompleted_t.
  2. Существует несколько методов для создания запроса в зависимости от требуемого сценария: запрос по контенту, связанному с пользователем, запрос всего контента или запрос деталей контента, идентификаторы которых у вас есть.
    • ISteamUGC::CreateQueryUserUGCRequest. Запрос контента, связанного с пользователем. Его также можно использовать для перечисления пользовательского контента, на который подписан пользователь.
    • ISteamUGC::CreateQueryAllUGCRequest. Запрос всего соответствующего пользовательского контента. Его можно использовать для перечисления всего доступного пользовательского контента для вашего приложения.
    • ISteamUGC::CreateQueryUGCDetailsRequest. Запрос информации об определённых предметах Мастерской.
  3. Задайте настройки запроса соответствующим образом, вызвав методы установок параметров:
    • Запрос информации о пользовательском контенте, которым обладает пользователь:
      • ISteamUGC::SetCloudFileNameFilter возвращает только предметы с определённым названием файла в обрабатываемом запросе пользовательского контента.
    • Запрос информации обо всём пользовательском контенте:
      • ISteamUGC::SetMatchAnyTag определяет, возвращать ли предметы при наличии одной или более соответствующих меток, а также должны ли все метки в обрабатываемом запросе пользовательского контента совпадать.
      • ISteamUGC::SetSearchText определяет строку, с которой должны совпадать название или описание предмета в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetRankedByTrendDays определяет, будет ли обновлена очерёдность результатов в зависимости от предпочтения рейтинга предмета над сроком его пребывания в обрабатываемом запросе пользовательского контента.
    • При запросе любого из типов пользовательского контента
      • ISteamUGC::AddRequiredTag добавляет требуемую метку к обрабатываемому запросу пользовательского контента. Послужит лишь возврату пользовательского контента с определённой меткой.
      • ISteamUGC::AddExcludedTag добавляет исключённую метку к обрабатываемому запросу пользовательского контента. Послужит лишь возврату пользовательского контента без определённой метки.
      • ISteamUGC::AddRequiredKeyValueTag добавляет требуемую метку ключ-значение к обрабатываемому запросу пользовательского контента. Будут возвращены лишь предметы Мастерской с ключом = [param]pKey[/param] и значением = [param]pValue[/param].
      • ISteamUGC::SetReturnOnlyIDs определяет возвращение только идентификаторов вместо подробной информации по обрабатываемому запросу пользовательского контента. Может пригодиться, когда не требуется вся информация (например, если вам нужны лишь идентификаторы предметов в списке желаемого пользователя).
      • ISteamUGC::SetReturnKeyValueTags определяет возвращение меток ключ-значение для предметов в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetReturnLongDescription определяет возвращение полного описания для предметов в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetReturnLongDescription определяет возвращение указанных разработчиком метаданных для предметов в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetReturnLongDescription определяет возвращение идентификаторов для дочерних элементов предметов в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetReturnKeyValueTags определяет возвращение дополнительных изображений или видео, привязанных к предметам в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetReturnTotalOnly определяет, что будет возвращено лишь общее число совпадающих предметов в обрабатываемом запросе пользовательского контента. — При вызове ISteamUGC::SteamUGCQueryCompleted_t сами предметы возвращаться не будут.
      • ISteamUGC::SetLanguage определяет язык возвращения названия и описания для предметов в обрабатываемом запросе пользовательского контента.
      • ISteamUGC::SetAllowCachedResponse определяет возвращение из кэша результатов обрабатываемого запроса пользовательского контента на определённое время.
  4. Отправьте запрос в Steam с помощью ISteamUGC::SendQueryUGCRequest, который вызовет обработчик результата вызова ISteamUGC::SteamUGCQueryCompleted_t, созданный в пункте 1 пошаговых инструкций.
  5. В обработчике результата вызова для ISteamUGC::SteamUGCQueryCompleted_t вызовите ISteamUGC::GetQueryUGCResult, чтобы получить информацию для каждого возвращённого предмета.

  6. Эти функции также можно использовать для получения дополнительной информации о каждом предмете (некоторые данные не возвращаются по умолчанию, поэтому вам необходимо соответствующим образом настроить ваш запрос):
    • ISteamUGC::GetQueryUGCPreviewURL находит ссылку на изображение для предпросмотра для отдельного предмета Мастерской после получения результата вызова запроса информации о пользовательском контенте.
    • ISteamUGC::GetQueryUGCMetadata находит установленные разработчиком метаданные отдельного предмета Мастерской после получения результата вызова запроса информации о пользовательском контенте.
    • ISteamUGC::GetQueryUGCChildren находит идентификаторы дочерних элементов отдельного предмета Мастерской после получения результата вызова запроса информации о пользовательском контенте.
    • ISteamUGC::GetQueryUGCMetadata находит различные данные статистики отдельного предмета Мастерской после получения результата вызова запроса информации о пользовательском контенте.
    • ISteamUGC::GetQueryUGCNumAdditionalPreviews и ISteamUGC::GetQueryUGCAdditionalPreview находят информацию о дополнительном предпросмотре, связанном с отдельным предметом Мастерской, после получения результата вызова запроса информации о пользовательском контенте.
    • ISteamUGC::GetQueryUGCNumAdditionalPreviews и ISteamUGC::GetQueryUGCAdditionalPreview находят информацию о метке ключ-значение, связанной с отдельным предметом Мастерской, после получения результата вызова запроса информации о пользовательском контенте.
  7. Вызовите функцию ISteamUGC::ReleaseQueryUGCRequest, чтобы освободить память, выделенную во время запроса или поиска результатов.

Просмотр результатов

Каждый запрос может возвратить до 50 результатов. Постраничного просмотра большего количества результатов можно добиться посредством создания запроса, увеличивающего параметр unPage, который должен начинаться с 1.

Отслеживание времени в игре

Чтобы отслеживать время в игре предметов Мастерской, вызовите функциюISteamUGC::StartPlaytimeTracking с идентификаторами предметов, которые хотите отслеживать. Когда предметы будут удалены из игры, вызовите функцию ISteamUGC::StopPlaytimeTracking с идентификаторами предметов, отслеживание которых хотите прекратить, или функцию ISteamUGC::StopPlaytimeTrackingForAllItems, чтобы прекратить отслеживание времени в игре для всех предметов одновременно.
Отслеживание времени в игре автоматически прекратится, когда закроется ваше приложение.

Вы также сможете сортировать предметы, используя различные показатели в запросах ISteamUGC::CreateQueryAllUGCRequest. Можно использовать следующие типы запросов, основанных на времени в игре:

Удаление контента Мастерской

Чтобы удалить предмет Мастерской, вызовите ISteamUGC::DeleteItem. Пожалуйста, помните, предмет удаляется, не спрашивая пользователя, и это действие нельзя отменить.

Пример интеграции игры SpaceWar в Steamworks

Приложение Приложение-образец с API Steamworks (SpaceWar), сопровождаемое SDK Steamworks, демонстрирует подмножество API ISteamUGC.
  • CSpaceWarClient::LoadWorkshopItem демонстрирует проверку информации о том, загружен ли предмет Мастерской и установлен ли он на диске, а также запрос данных о предмете с помощью ISteamRemoteStorage::PublishedFileId_t
  • CSpaceWarClient::LoadWorkshopItems демонстрирует получение списка предметов Мастерской, на которые подписан текущий пользователь приложения SpaceWar
  • CSpaceWarClient::OnWorkshopItemInstalled демонстрирует обработчик обратного вызова для ISteamUGC::ItemInstalled_t

Правовая информация о Мастерской

Предметы Мастерской скрыты по умолчанию до тех пор, пока автор не примет условия соглашения Мастерской Steam. Чтобы автор легко смог сделать предмет общедоступным, следуйте следующим инструкциям.
  1. Добавьте текст рядом с кнопкой, нажатие которой отправляет предмет в Мастерскую для публикации. Пример текста: «Отправляя предмет в Мастерскую, вы принимаете условия использования Мастерской Steam» (с приложенной ссылкой)
  2. После того, как автор отправит свой предмет, откройте окно браузера на странице этого предмета в Мастерской Steam, вызвав функцию ISteamFriends::ActivateGameOverlayToWebPage с pchURL, установленным на steam://url/CommunityFilePage/<PublishedFileId_t>, заменив <PublishedFileId_t> на ID предмета Мастерской.
Таким образом, вы направите автора на страницу созданного им предмета в Мастерской, чтобы он смог увидеть свой продукт, добавить настройки по необходимости и облегчить задачу пользователя по ознакомлению и принятию условий соглашения Мастерской Steam.

Веб-API

Вдобавок к вышеуказанным методам существует набор интерфейсов веб-API, который обеспечивает сходную функциональность вместе с представленными в сообществе фильтрами API для создания списка всего общего контента. Пожалуйста, ознакомьтесь с разделом документации по интерфейсу ISteamRemoteStorage в списке веб-API.

Выделенные игровые серверы

Игровые серверы также можно использовать для скачивания и установки предметов.
  • Игровому серверу понадобится информация дескриптора PublishedFileId_t, чтобы запросить предмет Мастерской. Данные могут быть предоставлены клиентами игры или установлены администраторами серверов. Затем потребуется вызвать функцию ISteamUGC::DownloadItem, чтобы получить временную копию предмета Мастерской.
  • Далее можно сделать вызов ISteamUGC::GetItemInstallInfo для получения информации о местоположении и использовании предмета Мастерской.
  • Ознакомьтесь с разделом Установка предмета выше, чтобы узнать больше об этих методах API.

Интеграция SteamCmd

Наряду с API ISteamUGC инструмент командной строки steamcmd.exe можно использовать для создания и обновления предметов Мастерской в целях тестирования. Его необходимо использовать только для тестирования, поскольку от пользователя потребуется ввести свои данные аккаунта Steam (чего мы пытаемся избежать).

Чтобы создать новый предмет Мастерской Steam с использованием steamcmd.exe, необходимо открыть новый файл в формате .vdf. .vdf-файл — это обычный текстовый файл, содержащий следующие ключи.
"workshopitem" { "appid" "480" "publishedfileid" "5674" "contentfolder" "D:\\Content\\workshopitem" "previewfile" "D:\\Content\\preview.jpg" "visibility" "0" "title" "Team Fortress Green Hat" "description" "A green hat for Team Fortress" "changenote" "Version 1.2" }

Примечания:
  • Ключи соотносятся с различными методами ISteamUGC::SetItem[...]. Подробная информация об этом процессе представлена в разделе выше.
  • Показанные значения предоставлены только в качестве примеров и должны быть изменены соответствующим образом.
  • Для создания нового предмета appid должен быть установлен, а publishedfileid должен быть либо не установлен, либо установлен на 0.
  • Чтобы обновить существующий предмет, необходимо установить как appid, так и publishedfileid.
  • Оставшиеся пары ключ-значение должны входить в .vdf-файл, если ключ нужно обновить.
После создания .vdf-файла можно запустить steamcmd.exe с параметром файла workshop_build_item <build config filename>. Пример:
steamcmd.exe +login myLoginName myPassword +workshop_build_item workshop_green_hat.vdf +quit
Если команда выполнена успешно, значение publishedfileid в .vdf-файле будет автоматически обновлено, чтобы содержать идентификатор предмета Мастерской. Таким образом, последующие вызовы с помощью steamcmd.exe того же .vdf-файла будут способствовать не созданию, а обновлению предмета.

Ошибки и ведение журнала

Большинство методов ISteamUGC возвращают логические значения. Узнать больше об определённых ошибках можно здесь:
  • Steam\logs\Workshop_log.txt — журнал всех передач, происходящих во время скачивания
    и установки предмета Мастерской.
  • Steam\workshopbuilds\depot_build_<appid>.log — журнал всех действий во время загрузки и обновления предмета Мастерской.
  • ISteamUGC::SteamUGCQueryCompleted_t, ISteamUGC::CreateItemResult_t и ISteamUGC::SubmitItemUpdateResult_t содержат переменные EResult, которые можно проверить.

Частые вопросы

В: Может ли отдельное приложение опубликовать контент в Мастерской моей игры?

Да. Отдельное приложение с инструментами редактирования или публикации можно настроить таким образом, чтобы Мастерская основного приложения принимала контент редактирующего приложения.

Для этого перейдите в самый конец страницы конфигурации Мастерской основного приложения. Введите ID отдельного приложения в поле под разделом «Разрешения для приложения на опубликование в Мастерской» и нажмите «Добавить».

После опубликования настроек приложения редактирующее приложение сможет опубликовать контент в Мастерской основного приложения.