Dokumentacja Steamworks
Przesyłanie do Steam
Poniżej znajduje się poradnik korzystania ze SteamPipe, narzędzia Valve do dostarczania zawartości do Steam. Aby dowiedzieć się więcej o najlepszych praktykach związanych z aktualizacją twojej gry, przejdź do artykułu o aktualizowaniu twojej gry.

Wprowadzenie do systemu zawartości SteamPipe

SteamPipe to system zawartości gier/aplikacji, na którym opiera się Steam. Zawiera on następujące funkcje:
  • Szybkie i wydajne dostarczanie zawartości.
  • Public and private "beta" branches, allowing multiple builds to be tested.
  • Proste zarządzanie kompilacjami z poziomu sieci – wydaj nową kompilację lub cofnij do poprzedniej wersji za pomocą kilku kliknięć.
  • Możliwość sprawdzenia rozmiaru aktualizacji kompilacji przed opublikowaniem jej.
  • Możliwość współdzielenia zawartości między wieloma aplikacjami.
  • Możliwość stworzenia płyt instalacyjnych na podstawie zawartości beta lub tej publicznie dostępnej.
  • Gry i aplikacje są dostępne offline, nawet jeśli rozpoczęto pobieranie aktualizacji.
  • Cała zawartość jest zawsze szyfrowana, a nieaktywne wersje nie są widoczne dla klientów.
  • Lokalny serwer zawartości, którego można użyć podczas prac rozwojowych.
UWAGA: istnieje kilka zamysłów integralnych z działaniem SteamPipe. Przed rozpoczęciem prac polecamy zapoznać się z wszystkimi z nich wymienionymi w tym artykule dokumentacji. Posiadanie chociaż podstawowej wiedzy na temat tego, jak te elementy łączą się ze sobą, okaże się niezwykle użyteczne podczas przesyłania twojego produktu na Steam.

Samouczek wideo Steamworks – kompilowanie twojej gry w ramach SteamPipe

Niniejszy samouczek wprowadza system SteamPipe i przedstawia kroki, jakie należy wykonać z użyciem narzędzi Steamworks, by stworzyć kompilację przykładowej aplikacji.
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Samouczek wideo Steamworks – dodawanie nowych platform i języków

Ten samouczek wideo dostarczy ci informacji na temat sposobu dodawania nowych platform i języków do gry poprzez umieszczenie dodatkowych magazynów zawartości do twojej aplikacji.
https://www.youtube.com/watch?v=PShS32hcing

Szczegóły techniczne SteamPipe

SteamPipe korzysta z protokołu HTTP, by dostarczać zawartość. Z racji tego, iż pobieranie jest zwykłym ruchem sieciowym, obecność dowolnej zewnętrznej pamięci podręcznej HTTP między klientem a serwerami Steam spowoduje zwiększenie szybkości pobierania. Zawartość może być hostowana przez zewnętrznych dostawców sieci dystrybucji zawartości (CDN), których można łatwo dodać do naszej sieci z zawartością. Większość zapór przeznaczonych dla konsumentów zezwala na ruch HTTP i nie będzie blokować pobierania.

System SteamPipe posiada wydajny algorytm wydawania łatek oparty na deltach binarnych, zmieniając tylko zmodyfikowane części istniejących plików zawartości. Kiedy ta zawartość jest aktualizowana, tylko te delty muszą zostać przesłane – oznacza to, że transfery są mniejsze i szybsze zarówno po stronie producenta, jak i użytkownika. Większość partnerów zauważy, że korzystanie z lokalnego serwera zawartości nie jest konieczne, ponieważ mogą oni sprawnie wydawać łatki kompilacji na prywatnych gałęziach.

Konto kompilacji Steam

Zanim będziesz w stanie tworzyć jakiekolwiek kompilacje na Steam, musisz posiadać konto Steam w ramach konta Steamworks, które będzie posiadało uprawnienia „Edycja metadanych aplikacji” oraz „Publikacja zmian dla aplikacji na Steam”. Ze względów bezpieczeństwa zaleca się posiadanie odrębnego konta do zarządzania kompilacjami posiadającego tylko te dwa uprawnienia. Możesz utworzyć takie konto pod adresem https://store.steampowered.com/join.

Dowolny administrator konta Steamworks może dodać twoje konto Steam i nadać mu odpowiednie uprawnienia. Więcej informacji na temat tego procesu znajduje się w dziale dokumentacji poświęconemu zarządzaniu użytkownikami. Takie konto może wyglądać w następujący sposób:

create_build_account.png

Wstępna konfiguracja dla nowych aplikacji SteamPipe

Wykonaj poniższe kroki, by skonfigurować nowe aplikacje SteamPipe:
  1. Znajdź ID twojej aplikacji (np. wybierając ją z poziomu strony głównej Steamworks).
  2. Przejdź do strony ustawień ogólnych instalacji dla twojej aplikacji.
  3. Określ przynajmniej jedną opcję uruchamiania (ścieżkę oraz ewentualne argumenty wymagane do uruchomienia twojej gry). Hover over the (?) to learn more about each field.

    The example below shows 5 launch options, 2 for Windows, 2 for macOS and 1 for Linux.
    Launch option 3 will only be shown on Windows if the user also owns the DLC specified.

    updatedlaunchoptions_3.png
  4. Przejdź do strony magazynów zawartości i dodaj wymagane magazyny dla tej aplikacji. Domyślnie może już istnieć skonfigurowany magazyn dla twojej aplikacji.
    1. Kliknij na domyślny magazyn zawartości i zmień jego nazwę na właściwą i rozpoznawalną, np. „Zawartość bazowa” lub „Zawartość dla systemu Windows”).
    2. Pozostaw język magazynu jako [Wszystkie języki], chyba że jest to magazyn przeznaczony dla konkretnego języka.
    3. Pozostaw system operacyjny na [Wszystkie systemy operacyjne] (jeżeli aplikacja wspiera wszystkie lub jest przeznaczona tylko na PC lub tylko na maki, tę opcję również należy zostawić). Określaj system operacyjny tylko dla magazynów zawartości dedykowanych temu systemowi.
    4. Kliknij Dodaj nowy magazyn zawartości, by stworzyć dodatkowe magazyny.
    5. Kliknij Zapisz zmiany, by zapisać wszelkie dokonane zmiany.
  5. Po zakończeniu określania swoich magazynów zawartości opublikuj wprowadzone zmiany, korzystając ze strony Publikacja.
  6. Twoje nowo określone magazyny zawartości będą musiały zostać zawarte w pakiecie, aby móc ci przyznać stan posiadania ich. Każda gra na Steam powinna zawierać pakiet egzemplarza producenta, który będzie automatycznie przyznawany kontom będącym w twojej grupie wydawcy.
    Możesz dodać nowe magazyny do tego pakietu (i/lub inne pakiety, które powinny zawierać te magazyny) na stronie Powiązane pakiety i DLC.
Note: If your executable is in a sub-folder of the main installation folder, add the sub-folder name in the Executable field. Nie używaj ukośników w prawo ani kropek.
Platform Note: As shown above, macOS applications may be launched by specifying either an app bundle (Game.app) or a script/binary (Game.app/Contents/MacOS/Game). In general the app bundle format should be preferred if possible as it allows macOS to more correctly determine launch parameters in the manner it would if launched manually outside of Steam.

One instance of this to note is that currently applications that are launched through an app bundle on Apple Silicon devices will launch the best architecture available in the application whereas direct binary launches will use the same architecture as the Steam process (currently x86_64).

Konfigurowanie SDK dla plików przesyłanych do SteamPipe

Download and unzip the latest version of the Steamworks SDK on the machine you will be uploading builds on.

The SteamPipe tools can be found within the SDK in the tools folder which contains 2 relevant sub-directories.

The ContentBuilder directory is where your game content and SteamPipe build tools will live. This directory contains the following sub-directories:
  • builder – ten katalog na początku zawiera tylko plik steamcmd.exe, który jest wersją Steam w stylu wiersza polecenia.
  • builder_linux – wersja steamcmd dla systemu Linux.
  • builder_osx – wersja steamcmd dla systemu macOS.
  • content – ten katalog zawiera wszystkie pliki gry, które zostaną skompilowane do magazynów zawartości.
  • output – ten katalog będzie miejscem na dzienniki kompilacji, pamięć podręczną porcji programu oraz pośredni zapis danych. UWAGA: ten folder może zostać usunięty lub opróżniony w dowolnym momencie, ale po jego usunięciu czas kolejnego przesłania wydłuży się.
  • scripts – ten katalog będzie miejscem na umieszczenie wszystkich twoich skryptów kompilacji używanych do kompilowania magazynów zawartości.
steampipebuilddir.png

It's recommended that you run steamcmd.exe directly in the builder folder for your platform once to bootstrap your build system. This should populate your builder directory with all the files it needs to build depots.

The ContentServer directory contains the tools for running your own Lokalny serwer zawartości SteamPipe if you choose to do so.

SteamCmd na systemie macOS

To enable SteamCmd on macOS you must complete the following steps:
  1. Z poziomu terminala przejdź do folderu tools\ContentBuilder\builder_osx\osx32.
  2. Uruchom chmod +x steamcmd.
  3. Przejdź do folderu wyżej (tools\ContentBuilder\builder_osx).
  4. Wpisz „bash ./steamcmd.sh”.
  5. SteamCmd zostanie uruchomiony i zaktualizowany do najnowszej kompilacji, a następnie otworzy się jego okno.
  6. Wpisz „exit” i wciśnij Enter, by wyjść z okna.
You can then follow the rest of this documentation (substituting paths as appropriate) to create depot and app config files for uploading your content to Steam.

Tworzenie plików konfiguracyjnych kompilacji SteamPipe

To upload files for your app with SteamPipe, you must create scripts which describe your build and each depot that will be included in it. The example scripts shown here are in the Tools\ContentBuilder\scripts folder in the Steamworks SDK.

Narzędzie z interfejsem graficznym SteamPipe

If you're running on Windows and would prefer a GUI tool to help create these config files and upload your builds you can use the SteamPipeGUI which is available in the tools folder of the Steamworks SDK. Included in the zip are additional instructions to get you started.

If you choose to use the GUI tool then reading the following sections is still recommended to help you become more familiar with how the SteamPipe system works.

Prosty skrypt kompilacyjny


Let's start with the most basic build script possible. In our example we have a game (AppID 1000) that has one depot (DepotID 1001) and want to upload all files from a content folder and it's subfolders. We just need a single build script for that, take a look at "simple_app_build.vdf" included in the SDK :

"AppBuild" { "AppID" "1000" // twoje ID aplikacji "Desc" "This is a simple build script" // wewnętrzny opis dla tej kompilacji "ContentRoot" "..\content\" // zawartość folderu root w odniesieniu do lokalizacji tego pliku "BuildOutput" "..\output\" // folder wyjściowy kompilacji dla rejestru kompilacji i plików cache kompilacji "Depots" { "1001" // twoje ID magazynu zawartości { "FileMapping" { "LocalPath" "*" // wszystkie pliki z folderu contentroot "DepotPath" "." // zmapowane do roota magazynu zawartości "recursive" "1" // zawierają wszystkie podfoldery } } } }

Adjust the AppID and DepotID for your game as needed. To kick off a build you need to run steamcmd and pass a couple of parameters :
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

UWAGA: Your first attempt at running a build may fail due to Steam Guard. If the login fails due to Steam Guard, check your email for the Steam Guard code, and run steamcmd as: steamcmd.exe "set_steam_guard_code <code>", and try again. After logging in with Steam Guard once, a sentry file is used to verify the login is genuine.

If you are using steamcmd from a machine or VM that gets re-imaged frequently, you should include the sentry and config file in your image so you won't be prompted for a Steam Guard every time. The sentry file is located in <Steam>\ssfn<hashOfNumbers>, and the config file is located in <Steam>\config\config.vdf.

The following steps occur during a SteamPipe build:
  1. Steamcmd.exe zaktualizuje się do najnowszej wersji.
  2. Steamcmd.exe loguje się do back-endu Steam, korzystając z podanego konta Steam wykorzystywanego do tworzenia kompilacji.
  3. Rozpoczęcie kompilacji aplikacji jest rejestrowane na głównym serwerze magazynów zawartości (Master Depot Server, MDS), co pozwala upewnić się, że użytkownik ma właściwe uprawnienia do modyfikowania tej aplikacji.
  4. Dla każdego magazynu zawartości dołączonego do kompilacji aplikacji zostaje wygenerowana lista plików na podstawie plików w folderze zawartości oraz zasad filtra określonych w pliku konfiguracyjnym kompilacji magazynu.
  5. Każdy plik zostaje przeskanowany i podzielony na małe porcje ważące około 1 MB. Jeżeli magazyn zawartości został wcześniej utworzony, to to partycjonowanie zachowa tak wiele niezmienionych porcji jak to możliwe.
  6. Nowe porcje plików są kompresowane, szyfrowane i przesyłane do MDS.
  7. Ostateczny manifest jest generowany dla tej wersji magazynu zawartości. Każdy manifest jest identyfikowany poprzez unikalne 64-bitowe ID manifestu.
  8. Po przetworzeniu wszystkich magazynów zawartości MDS kończy tę kompilację aplikacji i przyznaje jej globalne ID kompilacji (BuildID).
  9. Po zakończeniu kompilacji w folderze rezultatu kompilacji mogą znajdować się pliki *.csm oraz *.csd. Są one tymczasowe i mogą zostać usunięte, jednak przyspieszają one czasy tworzenia przyszłych kompilacji.


Once the build is complete you can see it on your app builds page, in this case it would be https://partner.steamgames.com/apps/builds/1000. There you can set that build live for the default branch or any beta branch and users will be able to download this update with a couple of minutes.

Zaawansowane skrypty kompilacyjne


If your app has a lot of depots with complex file mapping rules, you can create a depot build script for each depot which will be referenced by the app build script. First let's take a look at available parameters in the app build script:

  • AppID – ID aplikacji twojej gry. Przesyłające konto partnerskie Steam musi posiadać uprawnienia do edycji metadanych aplikacji.
  • Desc – opis jest widoczny tylko dla ciebie w sekcji „Twoje kompilacje” w panelu administratora aplikacji. Można to zmienić w dowolnej chwili po przesłaniu kompilacji na stronie „Twoje kompilacje”.
  • ContentRoot – folder root twoich plików gry, może być ścieżką bezwzględną lub względną do pliku skryptu kompilacyjnego.
  • BuildOutput – ten katalog będzie miejscem na dzienniki kompilacji, manifesty magazynów zawartości, pamięci podręczne porcji programu oraz pośredni zapis danych. Dla najlepszych rezultatów użyj oddzielnego dysku dla twojego rezultatu kompilacji. Rozdziela to pracę wejścia/wyjścia, pozwalając twojemu dyskowi z rootem zawartości na zajęcie się żądaniami odczytu, a twojemu dyskowi z rezultatem zająć się żądaniami zapisu.
  • Preview – ten typ kompilacji tworzy na wyjściu tylko dzienniki i plik manifestu do folderu wyjściowego kompilacji. Tworzenie kompilacji podglądu jest dobrym sposobem na iterowanie twoich skryptów przesyłania i upewnienie się, że twoje mapowania plików, filtry i właściwości działają jak należy.
  • Local – ustaw to na ścieżkę htdocs swojego lokalnego serwera zawartości (Local Content Server – w skrócie LCS). Kompilacje LCS umieszczają zawartość tylko na twoim własnym serwerze HTTP i umożliwiają ci przetestowania instalacji twojej gry z wykorzystaniem klienta Steam.
  • SetLive – nazwa gałęzi beta do automatycznego ustawienia jako aktywnej po pomyślnej kompilacji. Żadna, gdy puste. Pamiętaj, że nie można ustawić „domyślnej” gałęzi jako aktywnej automatycznie – należy to zrobić poprzez panel administratora aplikacji.
  • Depots – ta sekcja zawiera wszelkie mapowania plików, filtry i właściwości plików dla każdego magazynu lub odnosi się do oddzielnego skryptu kompilacyjnego dla każdego magazynu zawartości.

Example app build script "app_build_1000.vdf" is using all options:
"AppBuild" { "AppID" "1000" // twoje ID aplikacji "Desc" "Your build description here" // wewnętrzny opis dla tej kompilacji "Preview" "1" // uczyń to tylko kompilacją poglądową, nic nie jest przesyłane "Local" "..\..\ContentServer\htdocs" // umieść zawartość na lokalnym serwerze zawartości zamiast przesyłać na Steam "SetLive" "AlphaTest" // ustaw tę kompilację jako aktywną na gałęzi beta "ContentRoot" "..\content\" // folder root zawartości w odniesieniu do tego pliku skryptu "BuildOutput" "D:\build_output\" // umieść pamięć podręczną kompilacji i pliki dzienników na innym dysku dla lepszej wydajności "Depots" { // instrukcje mapowania plików dla każdego magazynu zawartości są w oddzielnych plikach skryptów "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

This app build script references two depot build script files that specify all file mappings and file properties. The following instructions are available in a depot build script ( and also if the section is included directly into the app build script).

  • DepotID – ID magazynu zawartości dla tej sekcji.
  • ContentRoot – umożliwia ci opcjonalne obejście folderu ContentRoot ze skryptu kompilacyjnego aplikacji dla każdego magazynu oddzielnie.
  • FileMapping – mapuje to pojedynczy plik lub zbiór plików z lokalnego roota zawartości do twojego magazynu. Może istnieć wiele mapowań plików, które dodają pliki do magazynu zawartości. Parametr LocalPath jest ścieżką względną do folderu roota zawartości i może zawierać wieloznaczniki takie jak „?” lub „*”. Zostanie również zastosowany do pasujących plików w podfolderach, jeżeli Recursive jest włączone. Parametr DepotPath określa, gdzie wybrane pliki powinny się pojawić w magazynie (użyj samej kropki dla braku specjalnego mapowania).
  • FileExclusion – ponownie wykluczy zmapowane pliki i może również zawierać wieloznaczniki takie jak „?” lub „*”.
  • InstallScript – oznaczy plik jako skrypty instalacyjne i podpisze plik podczas procesu kompilacji. Klient Steam wie, by uruchamiać je dla dowolnej aplikacji, która ładuje ten magazyn zawartości.
  • FileProperties – oznaczy plik specjalnymi flagami:
    • userconfig – ten plik jest modyfikowany przez użytkownika lub grę. Nie może on zostać nadpisany przez aktualizację i nie wywoła on błędu weryfikacji, jeśli jest inny od swojej poprzedniej wersji.
    • versionedconfig – podobny do userconfig, jednak jeżeli plik zostanie zaktualizowany w magazynie zawartości, to zostanie nadpisany lokalnie, kiedy gra użytkownika zostanie zaktualizowana. Aktualizuj plik w magazynie zawartości tylko wtedy, gdy istnieje potrzeba zmiany formatu lub poprawienia błędu.

Example depot build script depot_build_1002.vdf showing use of all options:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // obejdź ContentRoot ze skryptu kompilacyjnego aplikacji "FileMapping" { // wszystkie pliki źródłowe i foldery w ".\bin" będą zmapowane do folderu ".\executables" w magazynie "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // zawuera wszystkie podfoldery } "FileMapping" { // nadpisz pliki audio w \\audio niemieckimi wersjami "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // skopiuj skrypt instalacyjny dla wersji niemieckiej do folderu roota magazynu "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // wyklucz ten plik "FileExclusion" "*.pdb" // wyklucz wszystkie pliki .PDB wszędzie "FileExclusion" "bin\tools*" // wyklucz wszystkie pliki w bin\tools\ "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // ten plik zostanie zmodyfikowany podczas działania programu } }

UWAGA: You can name these scripts what ever you want, but we use the names app_build_<AppID> and depot_build_<DepotID> for consistency. If you know that you'll be building apps on this machine, it might be a good idea to create sub-directories in your scripts directory for each application, to help organize each application's build scripts.

Zarządzanie aktualizacjami

After your app releases to customers, your customers will be receiving the build marked as the Default build. When uploading a new build it's always a good idea to test it before shipping it to your customers, for more information on how to successfully do this see Testowanie na Steam.

Debugowanie problemów z kompilacją

If your build wasn't successful, you should look in your output directory for error information, not the console where the build script was run. Most error information can be found in the *.log files.
You can use these Steam client commands and client-side files to debug issues:
  • "app_status [ID aplikacji]" – pokazuje obecny stan aplikacji na tym kliencie.
  • "app_info_print [ID aplikacji]" – pokazuje obecną konfigurację Steamworks dla tej gry (magazyny, opcje uruchamiania itp.).
  • "app_config_print [ID aplikacji]" – pokazuje obecną konfigurację użytkownika dla tej gry (obecny język, ścieżka instalacyjna itp.).
  • file "logs\content_log.txt" – wylistowuje wszystkie zapisane operacje oraz błędy SteamPipe.
  • file "steamapps\appmanifest_[ID aplikacji].acf" – pokazuje obecny stan instalacji tej aplikacji (wartości klucza).

Kompilowanie wydajnych magazynów zawartości dla SteamPipe

The old Steam content system would patch updates on a file level, which meant that if a single byte in a file changed, the entire new file would be downloaded by all users. This was especially inefficient if the game used pack files, which are collections of game content files in a single big file. Pack files can easily exceed 1 GB, so updates often led to unnecessarily large downloads. A common way to avoid these large downloads was to add new pack files that overrode content of already shipped pack files. That worked for updates, but it hurt new users long-term, since they ended up downloading unused, already-patched content.

The new content system fixes this problem by splitting each file into roughly 1-MB chunks. Each chunk is then compressed and encrypted before being distributed by the Steam content system. If the game content has large redundant parts, these chunks are reused and the user only has to download each repeated chunk once. However, the real strength of this system is building efficient update patches. While the system is building a patch, the new content is scanned for already known chunks. If it finds them, it reuses them. This means if you change or inject a few bytes in a big file, the user only has to download the changes.

This works well in most cases, but there are still a few pitfalls that need to be avoided when designing the content layout of a game. You may not want to compress or encrypt your game data. This is already done for in-flight downloads and retail discs by the Steam content system. If you do it too, it can reduce the effectiveness of delta patching. Compression and encryption are only advised if each individual asset within a package file is separately compressed and/or encrypted. Otherwise, a change to one asset will always require downloading several other potentially unchanged assets.

If you package multiple assets in a pack file, make sure that with each re-packaging, no unnecessary changes are made. One problematic practice is including the full name of the original source files on disk, because the names may change, depending on the build machine. Another bad pattern is including build time stamps for each file. If possible, always add new content to the end of your pack files and keep the order of existing files. Also, keep your pack file’s metadata (offset and sizes to individual assets) in one place and don’t intersperse it with the asset data. Use a binary difference tool like BeyondCompare to look at two builds of your pack files to make sure that hundreds of unwanted changes don’t show up.

Using pack files is especially useful to package lots of small files (<1 MB) into a single larger file. This will improve download speed and disk IO performance. But you might also want to avoid to put all your assets in a single huge pack file since Steam needs to copy & patch the whole file even if only a small subset of it changed. A good start would be to bundle resources of the same type together in pack files smaller than 4GB each.

If you follow these rules you will minimize patch sizes and only new content will need to be downloaded. Your customers will thank you for that and you will be able to increase the quality of your product by shipping more updates.

If you suspect that your game packaging is not interacting well with the SteamPipe update process, please contact your Valve representative and we can look into enabling advanced features to help with this.

Tworzenie płyt instalacyjnych oferowanych w sprzedaży detalicznej

To build retail install disc for SteamPipe games, you must first setup a build project file.
In this example, the SKU file is called "sku_goldmaster.txt":
"sku" { "name" "Testowy instalator gry" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Some tips to keep in mind:
  • Utwórz nowy folder w miejscu zapisu obrazów płyty, np. „D:\retail_disks”. Tylko magazyny zawartości wymienione w sekcjach included_depots zostaną dodane; sekcja wykluczania już nie istnieje.
  • Do stworzenia kompilacji obrazów instalacji możesz wykorzystać zarówno Steam.exe (z parametrami wiersza polecenia -dev i -console), jak i steamcmd.exe. W obydwu przypadkach użyj komendy „build_installer”.
  • Zaloguj się na konto Steam posiadające grę oraz wszystkie magazyny zawartości, jakie chcesz umieścić na płycie instalacyjnej. Poza tym nie są wymagane żadne specjalne uprawnienia, więc każdy może tworzyć takie kompilacje.
  • Jeżeli korzystasz ze Steam.exe, przerwij wszelkie inne pobierania.
  • Przejdź do strony konsoli i uruchom komendę „build_installer”:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    Kompilacja może zająć trochę czasu, ponieważ za pierwszym razem wszystkie magazyny zawartości są pobierane ponownie.
  • Jeżeli tworzysz gold mastera z użyciem lokalnego serwera zawartości, to uruchom:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    Rezultat odwołuje się do „Backup”, ponieważ „Retail install Disk” oraz lokalne kopie zapasowe gry są w zasadzie tym samym.
  • Po tym, jak zobaczysz komunikat „Backup finished for AppID...” („Zakończono tworzenie kopii zapasowej dla ID aplikacji...”), obrazy płyty instalacyjnej będą gotowe. Więcej szczegółów odnośnie kompilacji kopii zapasowej znajdują się w pliku logs\backup_log.txt.
  • Pod ścieżką „D:\retail_disks” pojawiły się nowe foldery (Disk_1, Disk_2 itd.) o wadze nieprzekraczającej 640 MB, tak jak podano to w linijce „disk_size_mb”. Każdy folder płyty zawiera plik „sku.sis” oraz pliki .csd i .csm dla każdego magazynu zawartości. Większe magazyny zawartości są rozdzielone między wieloma płytami. Cała zawartość płyty jest zawsze szyfrowana (w przeciwieństwie do lokalnych plików kopii zapasowej). Skopiuj pliki konfiguracyjne SDK dla gold mastera (setup.exe, setup.ini itd.) do folderu twojej pierwszej płyty. Płyta instalacyjna jest gotowa.
  • Podczas tworzenia gold mastera dla systemu macOS upewnij się, by na Macu otworzyć obraz goldmaster/disk_assets/SteamRetailInstaller.dmg. Następnie znajdującą się w nim aplikację skopiuj do roota twoich mediów. Prawdopodobnie będziesz chciał zmienić nazwę aplikacji instalacyjnej, dodać markę do ikony oraz ozdobić okno tak, by pokazywało tylko instalator.
  • Podczas tworzenia wielopłytowych gold masterów na system macOS upewnij się, że nazwa woluminu jest prawidłowa dla każdej płyty. Nazwa woluminu staje się częścią ścieżki montowania, więc jeśli nazwy nie są zgodne, to instalator nie będzie w stanie znaleźć kolejnego dysku.

Opcjonalna kompilacja instalatora do sprzedaży detalicznej z gałęzi beta

The process above will create a retail installer based on the default branch. If you need to create an installer based on a beta branch, you must first create a beta branch named "baseline". Then use the following command to build from the baseline branch:
build_installer <nazwa projektu> <folder docelowy> <klucz bety> <hasło bety> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login nazwa_użytkownika hasło +build_installer "..\Build\GameDataSku.txt" c:\lokalizacja klucz_bety hasło_bety +exit

Instalacja DLC z poziomu instalatora do sprzedaży detalicznej

In some circumstances, you may wish to create a retail installer that includes your DLC packages. In such cases, the process to create the installer requires only a few changes.
In "sku_goldmaster.txt", include the DLC AppIDs under the "included_depots" section. Once you have run the "build_installer" process, find the generated sku.sis file for the installer and open it with a text editor.
Add the DLC AppID in the "apps" section. For example, if I had a game with AppID 1000 and DLC AppID 1010, I would adjust the "apps" section as follows:
"apps" { "0" "1000" "1" "1010" }
This will ensure that Steam checks for ownership of the DLC and prompt the user for a key if the DLC is not owned by the account that they are logging into on Steam.

Tworzenie instalatora do sprzedaży detalicznej z wielu ID aplikacji na pojedynczej płycie lub pakiecie instalacyjnym

To build a GM containing multiple Steam Pipe apps. Build each app installer one by one but point them all to the same output folder. Each build will merge itself with the already existing install image.

Dostosowywanie płyty instalacyjnej do sprzedaży detalicznej

See Customizing a gold master for more details on customizing your retail install disk.

Pobieranie wstępne gier przed wydaniem

By default, all content is always encrypted, on all retail discs and on all content servers. Switching a game to preload mode means owners can download the content, but it stays encrypted on the users' disk and can't be played. Once the game becomes officially released, Steam will decrypt the preloaded content and the user can play the game.

Switching a game to preload mode is recommended in these cases:
  • Wysyłka płyt w sprzedaży detalicznej wraz z kluczami produktu przed faktyczną dostępnością gry (natychmiastowe piractwo).
  • Gry znajdujące się w przedsprzedaży i jednocześnie zajmujące więcej niż 20 GB miejsca na dysku.

Please submit a ticket to Steam Publishing if you believe your game requires preloading.

Tworzenie DLC

DLC is built as a depot of the base game. See the Zawartość do pobrania (DLC) documentation for more information.

Rozwiązywanie problemów ze SteamPipe

„Login Failure: Account Login Denied Failed” podczas logowania przez steamcmd

Cause: Probably SteamGuard is preventing login. Resolution:
  • Sprawdź adres e-mail powiązany z kontem, na które próbujesz się zalogować, i znajdź e-maila od Pomocy technicznej Steam. Skopiuj kod z tego e-maila.
  • Uruchom następującą komendę w steamcmd: set_steam_guard_code <code>.
  • Ponów próbę logowania przez steamcmd: Steam>login <konto używane do kompilacji> <hasło>.

Ogólne rozwiązywanie problemów z pobieraniem

  • Uruchom ponownie swój komputer, modem, router itp.
  • Sprawdź ustawienia zapory sieciowej. Nowy system wymaga dostępności portu 80 (HTTP) oraz wszelkich innych portów używanych przez Steam wymienionych tutaj.
  • Tymczasowo wyłącz lokalne programy antywirusowe i antyspamowe.
  • Sprawdź region pobierania Steam w Ustawieniach->Pobieranie. Powinien on zgadzać się z twoją lokalizacją.
  • Przerwij pobieranie, odinstaluj grę, a następnie zainstaluj ją ponownie (wyczyść pamięci podręczne manifestów).
  • Wyjdź ze Steam i usuń foldery appcache oraz depotcache w swoim folderze instalacyjnym Steam.
  • Spróbuj ustawić region pobierania Steam na taki, który jest bardzo odległy. Może to zadziałać, jeśli pobliski serwer zawartości przesyła ci złe dane.

Moje kompilacje na systemy macOS i Linux nie instalują żadnych plików. Dlaczego?

If you're testing via Steam the installation of your game or application across multiple platforms, you may run into a situation where the build deploys on Windows but doesn't deploy any files on Mac or Linux despite your SteamPipe process being setup to upload Mac and/or Linux depots. There is a step that is easily missed which involves adding your alternate Depots to the Package being deployed. You can check what depots are included in a package via the following steps:
  1. Przejdź do strony administratora aplikacji.
  2. Z poziomu sekcji „Pokaż powiązane produkty” kliknij na Wszystkie powiązane pakiety, DLC, dema i narzędzia.
  3. Kliknij na tytuł pakietu, który próbujesz pobrać.
  4. Sprawdź sekcję załączone magazyny zawartości.
  5. Użyj przycisku Dodaj/usuń magazyny, by upewnić się, że właściwy zbiór magazynów został przydzielony danemu pakietowi.
There are a number of discussion threads about this that may also assist:

Uruchomienie steamcmd.exe skutkuje następującym błędem: „SteamUpdater: Błąd: Aplikacja Steam musi być w trybie online, by można ją było zaktualizować. Sprawdź połączenie z siecią i spróbuj ponownie”.

Resolution: Go to Internet Options->Connections->Lan Settings and check Automatically detect settings.

Uruchomienie kompilacji aplikacji skutkuje następującym błędem: „ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6”.

Possible Causes:
  • Konto nie posiada uprawnień do aplikacji.
    • Sprawdź, czy ID aplikacji jest poprawne w pliku app_build.vdf.
    • Sprawdź, czy konto używane do kompilacji ma odpowiednie uprawnienia dla danego ID aplikacji.
  • Steamcmd nie może znaleźć zawartości magazynów.
    • Sprawdź, czy wartość „contentroot” w skrypcie app_build jest właściwą ścieżką względną do lokalizacji pliku skryptu.
    • Sprawdź, czy wartość „LocalPath” w skrypcie depot_build jest właściwą ścieżką względną do ścieżki w skrypcie app_build, po czym sprawdź, czy ścieżka posiada faktyczną zawartość.

Uruchomienie kompilacji aplikacji skutkuje następującym błędem: „ERROR! Failed to get application info for app NNNNN (check login and subscription)”.

This means that Steam can't retrieve information about the app, either because it doesn't exist or the user doesn't have access to the app.
  • Sprawdź, czy NNNNN jest ID aplikacji, które zostało ci dla niej przydzielone.
  • Sprawdź, czy ID aplikacji jest poprawne w pliku app_build.vdf.
  • Jeżeli jest to nowe ID aplikacji, sprawdź, czy konfiguracja w panelu administratora aplikacji Steamworks została opublikowana. Nowe aplikacje powinny zawierać folder instalacyjny SteamPipe w zakładce konfiguracji, magazyn zawartości w zakładce magazynów zawartości oraz wszystkie opublikowane zmiany w zakładce publikacji.
  • Jeżeli wszystko wygląda prawidłowo, upewnij się, że twoje konto posiada to ID aplikacji.

„An error occurred while installing [nazwa aplikacji] (Invalid content configuration)” podczas uruchamiania

Possible Causes:
  • Nie opublikowano kompilacji na gałęzi, z której próbujesz dokonać instalacji.
    Rozwiązanie: Opublikuj swoją gałąź, przechodząc na stronę https://partner.steamgames.com/apps/builds/<YourGameAppId> i wybierając tę gałąź w kliencie Steam (tak jak to opisano tutaj).
  • Nieprawidłowe opcje uruchamiania gry.
    Rozwiązanie: zweryfikuj opcje uruchamiania w zakładce „Instalacja” na stronie administratora aplikacji dla twojej gry https://partner.steamgames.com/apps/config/<ID aplikacji twojej gry>.
  • Nie posiadasz ID magazynów zawartości, które składają się na grę.
    Rozwiązanie: upewnij się, że potrzebne magazyny zawartości zostały dodane do subskrypcji rozwojowej (sprawdź artykuł o edytowaniu pakietów, by dowiedzieć się więcej).

„Error code 15” podczas uruchamiania

This is the CEG servers rejecting the request to CEG the exe. Check the release state on the game page. If it is not 'playable', you will need to request Steam keys that override the release state.

„Serwery Steam są w tej chwili zbyt zajęte, by obsłużyć twoje żądanie dla [nazwa gry]. Kod błędu (2).” podczas uruchamiania

This is the CEG servers failing to find a matching CEG exe. Double check that you have a working CEG executable on the CEG tab of your app admin. Click the 'status' button to make sure that it's propped.

Nie pamiętam tej jednej komendy steamcmd lub jak ona działała

Use the 'find' command in steamcmd to search for any steamcmd command. It will do partial matching on the command name and it will list out the command syntax.
Steam>find build_installer ConVars: Commands: build_installer : <nazwa projektu> <folder docelowy> <klucz bety> <hasło bety>