Steamworks dokumentáció
Feltöltés a Steamre
Az alábbi egy ismertető a SteamPipe használatához, amely a Valve eszköze a tartalom Steamre juttatásához. További információkért játékod frissítésének bevált módszereiről nézd meg a Játékod frissítése – Bevált módszerek dokumentációt.

A SteamPipe tartalomrendszer bemutatása

A SteamPipe a Steamet meghajtó játék- és alkalmazástartalom-rendszer. A SteamPipe a következő jellemzőkkel rendelkezik:
  • Hatékony és gyors tartalomtovábbítás.
  • Több build tesztelését lehetővé tevő nyilvános és privát „béta” ágak.
  • A buildek egyszerű kezelése webes felületen; új build kiadása vagy visszatérés egy korábbihoz csupán néhány kattintással.
  • Élőre állítás előtt látható a build frissítési mérete.
  • Tartalom megosztásának lehetősége több alkalmazás között.
  • Lehetőség telepítőlemezek készítésére nyilvános vagy béta tartalomból.
  • A játékok, illetve alkalmazások offline elérhetők maradnak még frissítésletöltés megkezdése után is.
  • Mindig minden tartalom titkosított, és a nem aktív verziók a vásárlóknak nem láthatók.
  • SteamPipe helyi tartalomszerver, ami a fejlesztés során használható.
MEGJEGYZÉS: Van néhány olyan fogalom, amelyek a SteamPipe szerves részét képezik. Mielőtt belekezdesz, érdemes megismerkedni az Alkalmazások dokumentációban ismertetett összes fogalommal. Annak akár csak alapvető ismerete is, hogy ezek az elemek hogyan kapcsolódnak össze, nagyon hasznos lesz terméked feltöltésekor a Steamre.

Játéktartalom-szerkezet – Bevált módszerek


A SteamPipe-ot úgy terveztük, hogy az első telepítéskori letöltés és a frissítések telepítése egyaránt hatékony legyen. Általánosságban jól működik játéktartalom-struktúrák széles választékával. Azonban néhány fontos dolgot ismerni kell az optimalizálás, és az alacsony hatékonyságot okozó helyzetek elkerülése terén.

Megjegyzés: ha a játékod Unreal Engine-t használ, kérjük, nézd meg az ezekre a csomagfájlokra vonatkozó megjegyzéseket e szakasz végén.

A SteamPipe először minden fájlt nagyjából egy megabájtos (MB) darabokra (chunk) bont. Ezután minden darabot tömörít és titkosít, mielőtt azok felöltésre kerülnek a Steam tartalomtovábbító rendszerébe. Tömörítve és titkosítva maradnak, amíg az egyes kliensek le nem töltik azokat, ahol megtörténik a visszafejtésük, kibontásuk és elhelyezésük a szükséges fájlhely(ek)en.

Amikor a SteamPipe egy már létező játékhoz dolgoz fel frissítést, megkeresi e darabok közül azokat, amelyek megegyeznek a játék korábbi buildjéével. Ily módon ideális esetben csak a fájlok új vagy módosított részeit alakítja „új” darabokká, és ezek az új darabok az egyetlenek, amelyeket a kliensnek le kell töltenie a játéka frissítéséhez.

Sok játékmotor használ „csomagfájlokat” a játéktartalom-elemek egyesítésére, így javítva a betöltési időket a hatékonyabb lemezhozzáférés lehetővé tételével. Általánosságban ez jól együttműködik a SteamPipe-pal. Egyes csomagfájl-rendszerek azonban használnak vagy lehetővé tesznek olyan viselkedéseket, amelyek problémákat okozhatnak. Az ilyen problémák hatása szinte mindig az, hogy a frissítések a szükségesnél sokkal nagyobbak lesznek. Eredményezhetnek gyors letöltést, de lassú frissítési folyamatot is, mivel nagy mennyiségű helyi lemezműveletre lesz szükség.

Ha a játékod csomagfájlokat használ, itt van néhány általános útmutatás:

  • Gondoskodj róla, hogy az elemváltozások a csomagfájlon belül a lehető legközelebb legyenek egymáshoz.
  • Csomagfájl esetén kerüld az elemsorrend megkeverését.
  • Korlátozd a csomagfájl méretét.
  • Csoportosítsd az elemeket pálya/terület/funkció alapján saját csomagfájlokba, és vedd fontolóra a frissítésekhez új csomagfájlok hozzáadását, létezők módosítása helyett.
  • Ne vedd bele az egyes elemekbe az eredeti fájlneveket vagy fájl-/build-időkódokat.

A fentiek közül az első pont arra vonatkozik, mely bájtok változnak egy fájlon belül, amikor egyetlen elem van módosítva. Az az ideális, ha annak az elemnek az adatai változnak, illetve nagyobb vagy kisebb helyet foglalnak el ugyanazon a helyen a csomagfájlon belül. A SteamPipe csak a fájlnak az elemadatokat tartalmazó részeihez fog új darabokat készíteni. Azonban minden csomagfájlban lennie kell valamiféle tartalomjegyzéknek (Table of Contents, TOC) is, hogy a motor meg tudja találni az elemadatokat. E TOC szerkezetének nagy hatása lehet a StamPipe-os frissítés hatékonyságára. Ideális esetben a fájl eleje vagy vége közelében van egy TOC vagy TOC-fa. Mivel más elemeknek eltolódhat a bájtpozíciója a fájlon belül, a TOC-bejegyzéseik is meg fognak változni. Ebben az esetben a SteamPipe új darabokat fog készíteni a módosult elemadatokhoz és a TOC módosult részeihez is.

Azonban egyes játékmotoroknál azt láttuk, hogy a TOC-adatok el vannak osztva a fájl egészében. És ami még rosszabb; abszolút bájteltolási értékeket használnak. Így ha egy elem mérete a 3450. bájton 8 bájttal nő, akkor a fájlban ez után található összes elem eltolási értéke megváltozik. Annak ellenére, hogy az egyes eltolási értékek csak 4 vagy 8 bájtosak, egy 8 bájtos szám megváltozása azt eredményezi, hogy a SteamPipe létrehoz egy új 1 MB-os darabot. Ez azzal a katasztrofális hatással járhat, hogy egy csomagfájlban akár néhány kis elem megváltoztatása miatt a kliensnek a teljes fájl több mint felét le kell töltenie a frissítéshez. Ha tudod, vagy gyanítod, hogy a te csomagfájl-struktúrád ilyen problémát okoz, kérjük, a lehető leghamarabb vedd fel a kapcsolatot a Valve-kapcsolattartóddal. Van egy alternatív build-algoritmusunk, ami segíthet enyhíteni ezt a problémát, de kompromisszumokkal jár.

Továbbá, a SteamPipe nem tudja, hol vannak az elemhatárok egy csomagfájlon belül. Ha megabájtnál kisebb elemek vannak átrendezve, valószínűleg nem fogja tudni észlelni ezt az átrendezést, mivel a korábban megállapított 1 MB-os darabok már nem lesznek jelen a csomagfájlon belül. Ezért, ha egy frissítés létrehozási folyamata során optimalizálni akarod a betöltési időket az elemek átrendezésével a csomagfájlban, légy tudatában annak, hogy ez nagyon nagy letöltést eredményezhet ahhoz a frissítéshez. Csak akkor javasoljuk ezt, ha jelentős a teljesítményjavulás.

A következő dolog, hogy a csomagfájl frissítéséhez a kliens eszközén a SteamPipe a régi változat mellett építi fel abból az új változatot. Amikor minden új fájl felépült, „alkalmazza” a frissítést, törölve a régi fájlokat és bemozgatva az újakat. Ez azt jelenti, hogy egy 25 GB-os csomagfájl frissítéséhez a SteamPipe mindig építeni fog egy új 25 GB-os fájlt. Ha a frissítés csak 10 bájt megváltoztatását igényli ebben a fájlban, a SteamPipe-nak szinte a teljes 25 GB-ot át kell másolnia a régi fájlból az újba. A kliens tárolóhardverétől függően ez nagyon lassú folyamat lehet. Ennek okán két dolgot javaslunk.

Az első, hogy korlátozd a csomagfájlok méretét. Egy vagy két gigabájt (GB) valószínűleg elegendően nagy; több mint elégséges a hatékony lemezolvasás lehetővé tételéhez a játék betöltésekor.

A második, hogy lehetőleg korlátozd az elemek fajtáját egy csomagfájlon belül. Például egyetlen játékpályára vagy feloldható jellemzőre. Ily módon az olyan frissítések, amelyek a játékod egy konkrét részére összpontosulnak, nem okozzák más részek adatainak másolgatását a kliensgépen. Továbbá, új funkciók, pályák stb. hozzáadásakor azokat lehet, és valószínűleg érdemes saját új csomagfájlokba tenni. Az ezt a frissítést letöltő klienseknek egyszerűen csak új fájlokat kell majd letölteniük, elkerülve minden fent említett problémát a csomagfájlok módosításakor.

Amikor kételyeid vannak, használhatsz egy helyi bináris összehasonlító eszközt, például a Beyond Compare-t csomagfájljaid verzióinak összehasonlításához. Ellenőrizd, hogy a mutatott különbségek olyan méretűek, amit a megváltoztatott elemeknél vársz, és hogy nincs esetleg több tucat, vagy akár több száz kis változás szerte az egész fájlban. Ha nem azt látod, amit vártál, ellenőrizd fájlcsomagoló eszközöd beállításait.

Tömörítés: Mivel a Steam minden adatot tömörít feltöltéshez/tároláshoz/letöltéshez, általánosságban nem javasoljuk a csomagfájlok általános tömörítését. Azonban ha a játékod lemezen elfoglalt mérete miatt aggódsz, mégis érdemes csomagfájl-tömörítést használni. Rendben működni fog a SteamPipe-pal mindaddig, amíg megfelel a fent felsorolt követelményeknek. Konkrétan, javasolt gondoskodni arról, hogy a tömörítés, amennyire lehet, elemenkénti legyen. Bármilyen tömörítés, ami túlterjed az elemhatárokon, kiterjeszti a változásokat, és a klienseknek a szükségesnél több adatot kell letölteniük.

Titkosítás: ez hasonló a tömörítéshez; valószínűleg szükségtelen, és ugyancsak a fent említett kockázatokkal jár.

Ha követed e szabályokat, minimalizálni fogod a frissítési méreteket, és csak az új tartalmat kell majd letölteni. A vásárlóid hálásak lesznek érte, te pedig több frissítés kiadásával növelni tudod terméked minőségét.

Ha azt gyanítod, hogy a játékcsomagolásod nem működik jól együtt a SteamPipe frissítési eljárásával, kérjük, lépj kapcsolatba a Valve kapcsolattartóddal, és meg tudjuk vizsgálni magasabb szintű funkciók bekapcsolását segítségképp.

Unreal Engine – Különleges megjegyzések

Az Unreal Engine néhány verziója „padding alignment” módszert használ az elemeknél a csomagfájlokban, aminek nagyon nagy hatása lehet a SteamPipe frissítések méretére. Ez a módszer az elemek lavinaszerű eltolódását okozhatja új verziók építésekor, különösen, ha a csomagfájl-tömörítés be van kapcsolva. 1 MB-os (1 048 576 bájtos) „padding alignment” használata biztosítja, hogy az újraigazítások ugyanannak a blokkméretnek a többszöröseivel tolják el a tartalmakat, mint amit a SteamPipe használ a delta számításokhoz.

Példaképp, padding alignmented megadásához vagy megváltoztatásához játék-csomagfájljaid „főzésekor” (cooking) az UnrealEngine/Engine/Source/Programs/AutomationTool/Win/WinPlatform.Automation.cs fájlban kell megváltoztatnod egy sort. Ez a fájl tartalmaz egy GetPlatformPakCommandLine függvényt; ebben a függvényben változtasd meg ezt a sort:

string PakParams = " -patchpaddingalign=2048";

erre:

string PakParams = " -patchpaddingalign=1048576 -blocksize=1048576";

E változtatással engedélyezni tudod a csomagfájl-tömörítést, és így is optimalizált SteamPipe frissítési viselkedést kellene kapnod.

Az Unreal Engine az Epic védjegye vagy bejegyzett védjegye az Egyesült Államokban és más országokban.

Steamworks oktatóvideó – Játékod összeállítása a SteamPipe-ban

Ez az oktatás bemutatja a SteamPipe-ot, és a lépéseket egy példaalkalmazás összeállításához a Steamen a Steamworks eszközökkel.
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Steamworks oktatóvideó – Új platformok és nyelvek hozzáadása

Ez az oktatás végigvezet új platformok és nyelvek játékodhoz adásán, depók hozzáadásával az alkalmazásodhoz.
https://www.youtube.com/watch?v=PShS32hcing

SteamPipe műszaki részletek

A SteamPipe HTTP-t használ tartalomtovábbításhoz. Mivel a letöltés szokványos webforgalom, az ügyfél és a Steam szerverek közötti bármilyen külső HTTP-gyorsítótár növelni fogja a letöltési sebességet. A tartalom elhelyezhető külső CDN-szolgáltatóknál, amelyek könnyen hozzáadhatók a hálózatunkhoz. A végfelhasználói tűzfalak többsége átengedi a HTTP forgalmat, így nem blokkolja a letöltést.

A SteamPipe bináris deltákon alapuló hatékony patchelési algoritmussal rendelkezik, ami a létező tartalomfájloknak csak a módosult részeit változtatja meg. Amikor e tartalom frissül, csak ezeket a deltákat kell elküldeni. Ezt azt jelenti, hogy mind a fejlesztői, mind a felhasználói átvitel kisebb és gyorsabb. A partnerek többsége úgy találja, hogy nincs szükség SteamPipe helyi tartalomszerver használatára, mivel privát ágakon hatékonyan tudnak buildeket frissíteni.

Steam build fiók

Mielőtt buildeket tudnál létrehozni a Steamen, kell lennie egy „Alkalmazás-metaadatok szerkesztése” és „Alkalmazásváltozások kiadása a Steamen” engedélyekkel rendelkező Steam fióknak a Steamworks fiókodon. Biztonsági okokból javasoljuk, hogy legyen egy kijelölt build fiókod csupán ezekkel az engedélyekkel. Erre a célra létrehozhatsz egy új Steam fiókot itt: https://store.steampowered.com/join.

A Steamworks fiókod bármelyik adminisztrátora hozzá tud adni Steam fiókot, és meg tudja adni a szükséges engedélyeket. Erről a folyamatról további információ a Steamworks fiókod kezelése dokumentációban található. Egy példa arra, hogyan nézhet ki egy ilyen fiók:

create_build_account.png
Megjegyzés: Ha a Steam fióknak egy kiadott alkalmazáshoz kell élőre állítania egy buildet, a fiókhoz vagy telefonszámnak, vagy Steam mobilalkalmazásnak kell lennie társítva. Ezekkel a módszerekkel lesz megerősítve a kiadott alkalmazás buildjének élőre állítása. Továbbá, ha a Steam fiókon bármilyen biztonsági változtatás történik (e-mail, telefonszám stb.), akkor három napot kell várnod, mielőtt buildet állíthatnál élőre egy kiadott alkalmazáshoz. Ez azért van, hogy megelőzzük a veszélybe került fiókokon az alkalmazásod kiadott buildjeinek kezelését.

Kezdeti beállítás új SteamPipe alkalmazásokhoz

Új SteamPipe alkalmazások beállításához kövesd ezeket a lépéseket:
  1. Keresd meg alkalmazásod AppID-jét (ezt a Steamworks kezdőoldalon az alkalmazásod kiválasztásával tudod megtalálni).
  2. Menj az alkalmazásod Általános telepítési beállítások oldalára.
  3. Adj meg legalább egy indítási lehetőséget (az útvonalat, és esetlegesen a játékod indításához szükséges bármilyen indítási paramétert). További információért az egyes mezőkről vidd az egeret a (?) fölé.

    Az alábbi példa öt indítási lehetőséget mutat: kettő Windowshoz, kettő macOS-hez és egy Linuxhoz.
    A harmadik indítási lehetőség csak akkor jelenik meg Windowson, ha a felhasználónak megvan a megadott DLC is.

    updatedlaunchoptions_3.png
  4. Menj a Depók oldalra, és adj hozzá depókat, ahogyan ehhez az alkalmazáshoz szükségesek. Lehet, hogy alapesetben van már egy depó beállítva az alkalmazásodhoz.
    1. Kattints az alapértelmezett depóra, és változtasd meg a nevét egy valódi és felismerhető névre (például „Alaptartalom” vagy „Windowsos tartalom”).
    2. A nyelvet hagyd az [Összes nyelv] beállításon, hacsak ez nem egy nyelvspecifikus depó.
    3. Az op. rendszert hagyd az [Összes op. rendszer] beállításon, hacsak ez nem egy op. rendszer specifikus depó (ha az alkalmazás „minden egyben”, vagy csak PC vagy csak Mac, az [Összes op. rendszer] beállításon kell hagyni). Csak op. rendszer specifikus játékdepókhoz add meg.
    4. További depók létrehozásához kattints az Új depó hozzáadására.
    5. Bármilyen elvégzett változtatás mentéséhez kattints a Változtatások mentésére.
  5. Miután végeztél depóid definiálásával, tedd közzé a végrehajtott változtatásokat a Kiadás oldalon.
  6. A birtokodba kerülésükhöz minden újonnan definiált depódat be kell vonni egy csomagba. A Steamen minden játékhoz lennie kell egy Fejlesztői tiszteletpéldány csomagnak, ami automatikusan meg van adva a kiadói csoportodban felsorolt fiókoknak.
    Az új depókat a Társított csomagok és DLC-k oldalon adhatod hozzá ehhez a csomaghoz (illetve más csomagokhoz is, amelyekben ennek a depónak szerepelnie kellene).
Megjegyzés: Ha a futtatható fájlod a fő telepítési könyvtár egy alkönyvtárában van, add hozzá az alkönyvtár nevét a Futtatható fájl mezőhöz. Ne használj bevezető perjelet vagy pontot.
Platform megjegyzés: Ahogy fent látható, macOS alkalmazások indíthatók akár egy alkalmazáscsomag (Game.app) akár egy parancsfájl/bináris (Game.app/Contents/MacOS/Game) megadásával. Általánosságban az alkalmazáscsomag formátumot kell előnyben részesíteni, ha lehet, mivel az lehetővé teszi a macOS-nek az indítási paraméterek megfelelőbb meghatározását, ahogy akkor tenné, ha az alkalmazás manuálisan, Steamen kívülről lenne indítva.

Egy példa erre a megjegyzésre, hogy jelenleg azok az alkalmazások, amelyek alkalmazáscsomagon keresztül vannak indítva Apple Silicon eszközökön, az alkalmazásban elérhető legjobb architektúrával fognak elindulni, míg a közvetlen bináris indítások ugyanazt az architektúrát fogják használni, mint a Steam folyamat (jelenleg x86_64).

Az SDK beállítása SteamPipe feltöltésekhez

Töltsd le és csomagold ki a Steamworks SDK legújabb verzióját azon a gépen, amelyről buildeket fogsz feltölteni.

A SteamPipe eszközök az SDK-n belül a tools könyvtárban találhatók, ami két ide tartozó alkönyvtárat tartalmaz.

A ContentBuilder könyvtár az, ahol a játéktartalmad és a SteamPipe build eszközök lesznek. Ez a könyvtár a következő alkönyvtárakat tartalmazza:
  • builder - Ez a könyvtár kezdetben csak a steamcmd.exe-t tartalmazza, ami a Steam parancssori változata.
  • builder_linux - A steamcmd Linuxos változata.
  • builder_osx - A steamcmd macOS-es változata.
  • content - Ez a könyvtár tartalmazza az összes játékfájlt, amik depókba lesznek építve.
  • output - Ez a könyvtár lesz a build naplófájlok, a „chunk cache” és a közbülső kimenet helye. MEGJEGYZÉS: ez a könyvtár bármikor törölhető vagy kiüríthető, de törlése után a következő feltöltés hosszabb időt fog igénybe venni.
  • scripts - Ez az a könyvtár, ahova az összes build parancsfájlodat fogod tenni a játékdepód felépítéséhez.
steampipebuilddir.png

Javasolt egyszer közvetlenül a builder könyvtárban futtatni a platformodhoz való steamcmd.exe-t a build rendszered beindításához. Ez feltölti a builder könyvtáradat az összes fájllal, amire szüksége van depók építéséhez.

A ContentServer könyvtár tartalmazza a saját SteamPipe helyi tartalomszerver futtatásához szükséges eszközöket, ha emellett döntesz.

SteamCmd macOS-en

A SteamCmd bekapcsolásához macOS-en végre kell hajtanod az alábbi lépéseket:
  1. Terminálablakban menj a tools\ContentBuilder\builder_osx helyre.
  2. Futtasd a chmod +x steamcmd parancsot.
  3. Írd be: bash ./steamcmd.sh
  4. Ekkor elindul a SteamCmd, és a legújabb buildre frissíti magát, a SteamCmd parancssorában maradva.
  5. A parancssorból kilépéshez írd be az exit parancsot, és nyomj Returnt.
Ez után követheted e dokumentáció többi részét (szükség szerint behelyettesítve az útvonalakat) depók és alkalmazás-konfigurációs fájlok létrehozására tartalmad feltöltéséhez a Steamre.

SteamPipe build konfigurációs fájlok létrehozása

Fájlok feltöltésére alkalmazásodhoz a SteamPipe-pal parancsfájlokat kell létrehoznod, amelyek leírják buildedet és az egyes depókat, amelyeket az tartalmazni fog. Az itt látható példa parancsfájlok a Steamworks SDK Tools\ContentBuilder\scripts könyvtárában vannak.

Kezelőfelületes SteamPipe eszköz

Ha Windowson futtatod, és jobban szeretnél kezelőfelületes eszközt segítségül e konfigurációs fájlok létrehozásához és builded feltöltéséhez, használhatod a SteamPipeGUI-t, ami a Steamworks SDK tools könyvtárában található meg. A .zip fájlban további útmutatás található a kezdéshez.

Ha a kezelőfelületes eszköz használata mellett döntesz, akkor is javasolt elolvasni a következő szakaszokat, hogy segítsenek jobban megismerkedned a SteamPipe rendszer működésével.

Egyszerű build parancsfájl


Kezdjük a lehető legegyszerűbb build parancsfájllal. A példánkban van egy játékunk (AppID 1000), amelynek van egy depója (DepotID 1001), és fel akarunk tölteni minden fájlt egy tartalomkönyvtárból és annak alkönyvtáraiból. Ehhez csak egy egyszerű build parancsfájlra van szükségünk; nézzük meg az SDK-hoz mellékelt „simple_app_build.vdf” fájlt:

"AppBuild" { "AppID" "1000" // az AppID-d "Desc" "Ez egy egyszerű build parancsfájl." // belső leírás ehhez a buildhez "ContentRoot" "..\content\" // a tartalom gyökérkönyvtára, ehhez a fájlhoz képest "BuildOutput" "..\output\" // a build kimeneti könyvtár a build naplófájloknak és build cache fájloknak "Depots" { "1001" // a DepotID-d { "FileMapping" { "LocalPath" "*" // minden fájl a ContentRoot könyvtárból "DepotPath" "." // a depó gyökerébe leképezve "recursive" "1" // minden alkönyvtár belevétele } } } }

Állítsd be az AppID-t és a DepotID-t, ahogy a játékodhoz szükséges. Egy építés elindításához futtatnod kell a steamcmd-t, átadva annak néhány paramétert:
tools\ContentBuilder\builder\steamcmd.exe +login <fióknév> <jelszó> +run_app_build ..\scripts\simple_app_build.vdf +quit

Egy SteamPipe építési művelet során a következő lépések zajlanak le:
  1. A steamcmd.exe frissíti magát a legújabb verzióra.
  2. A steamcmd.exe belép a Steam szerverekre a megadott Steam builder fiókot használva.
  3. Az alkalmazásépítés kezdete regisztrálásra kerül az MDS-nél (Master Depot Server), ami biztosítja, hogy a felhasználónak megfelelő engedélye legyen ennek az alkalmazásnak a módosításához.
  4. Az alkalmazásépítésbe bevont mindegyik depóhoz készül egy fájllista a tartalomkönyvtárban levő fájlok és a depó build konfigurációs fájljában meghatározott szűrők alapján.
  5. Mindegyik fájl át lesz vizsgálva, és körülbelül 1 MB-os darabokra lesz bontva. Ha a depó volt már felépítve, ez a particionálás annyit meg fog őrizni a változatlan darabokból, amennyit lehetséges.
  6. Az új fájldarabok tömörítésre és titkosításra kerülnek, majd fel lesznek töltve az MDS-re.
  7. Készül erről a depóverzióról egy végső jegyzékfájl; minden jegyzékfájlt egyedi 64 bites manifest ID azonosít.
  8. Az összes depó feldolgozása után az MDS befejezi ezt az alkalmazás buildet, és hozzárendel egy globális BuildID-t.
  9. A build elkészülte után lehetnek *.csm és *.csd fájlok a build output könyvtárban. Ezek átmeneti fájlok, lehet őket törölni, de lerövidítik a későbbi építési időket.


A build elkészülte után láthatod azt az alkalmazás buildek oldaladon, ami ebben az esetben a https://partner.steamgames.com/apps/builds/1000 volna. Itt élőre állíthatod ezt a buildet a default branch-hez vagy bármelyik béta ághoz, és a felhasználók pár percen belül le fogják tudni tölteni ezt a frissítést.

Haladó build parancsfájlok


Ha az alkalmazásodnak sok depója van, összetett fájlleképezési szabályokkal, készíthetsz depó build parancsfájlt mindegyik depóhoz, amelyekre az alkalmazás build parancsfájlja fog hivatkozni. Először nézzük meg az alkalmazás build parancsfájlban rendelkezésre álló paramétereket:

  • AppID - A játékod AppID-je. A feltöltő Steam partnerfióknak „Alkalmazás-metaadatok szerkesztése” engedéllyel kell rendelkeznie.
  • Desc - A leírás csak neked látható az alkalmazás-adminisztráció panel „Buildjeid” szakaszában. Ez egy build feltöltése után bármikor megváltoztatható a „Buildjeid” oldalon.
  • ContentRoot - A játékfájljaid gyökérkönyvtára, lehet abszolút útvonal, vagy relatív a build parancsfájlhoz képest.
  • BuildOutput - Ez a könyvtár lesz a build naplófájlok, a depó jegyzékfájl, a „chunk cache” és a közbülső kimenet helye. A legjobb teljesítményért használj egy másik meghajtót az építés kimeneteként. Ez megosztja a lemezművelet-terhelést, lehetővé téve, hogy a tartalom-gyökérkönyvtár lemeze kezelje az olvasásokat, a kimeneti lemez pedig az írási kéréseket.
  • Preview - Ez a fajta építés csak naplófájlokat és egy fájljegyzéket készít a build output könyvtárba. Előnézeti buildek építése jó módja feltöltő parancsfájljaid lépésenkénti elkészítésének, és meggyőződni arról, hogy a fájlleképezéseid, szűrőid és tulajdonságaid a szándékaid szerint működnek.
  • Local - Ezt a SteamPipe helyi tartalomszerver htdocs útvonalára állítsd be. A helyi tartalomszerver buildek csak a te HTTP-szerveredre tesznek tartalmat, és lehetővé teszik a játékod telepítésének tesztelését a Steam kliens használatával.
  • SetLive - A sikeres építés után automatikusan élőre állítandó béta ág neve. Ha üres, nem lesz ilyen. Vedd figyelembe, hogy a „default branch” nem állítható élőre automatikusan. Azt az alkalmazás-adminisztráció panelen kell megtenni.
  • Depots - Ez a szakasz tartalmazza az összes fájlleképezést, szűrőt és fájltulajdonságot mindegyik depóhoz, vagy hivatkozik egy-egy különálló parancsfájlra az egyes depókhoz.

Az "app_build_1000.vdf" példa alkalmazás build parancsfájl az összes lehetőséget használja:
"AppBuild" { "AppID" "1000" // az AppID-d "Desc" "Ide kerül a buildleírásod." // belső leírás ehhez a buildhez "Preview" "1" // legyen csak build előnézet, semmi nem lesz feltöltve "Local" "..\..\ContentServer\htdocs" // a tartalmat tegye a helyi tartalomszerverre a Steamre feltöltés helyett "SetLive" "AlphaTest" // állítsa élőre ezt a buildet egy béta ágon "ContentRoot" "..\content\" // a tartalom gyökérkönyvtára ehhez a parancsfájlhoz képest "BuildOutput" "D:\build_output\" // tegye a build cache és naplófájlokat egy másik meghajtóra a jobb teljesítményért "Depots" { // a fájlleképezési utasítások az egyes depókhoz különálló parancsfájlokban vannak "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

Ez az alkalmazás build parancsfájl két depó build parancsfájlra hivatkozik, amelyek meghatározzák az összes leképezést és fájltulajdonságot. Egy depó build parancsfájlban az alábbi utasítások állnak rendelkezésre (és akkor is, ha a szakasz közvetlenül az alkalmazás build parancsfájlban van elhelyezve).

  • DepotID - E szakasz DepotID-je.
  • ContentRoot - Opcionálisan depónként felülbírálhatod vele az alkalmazás build parancsfájlból származó ContentRoot könyvtárat.
  • FileMapping - Leképez egy fájlt vagy fájlcsoportot a helyi tartalom gyökérkönyvtárból a depód gyökerébe. Több fájlleképezés létezhet, amely fájlokat ad a depóhoz. A LocalPath a tartalom gyökérkönyvtárhoz képesti relatív útvonal, és tartalmazhat behelyettesítő karaktereket, mint a "?" és a "*". Az alkönyvtárakban levő egyező fájlokra is alkalmazódik, ha a Recursive engedélyezve van. A DepotPath paraméter azt adja meg, hol jelenjenek meg a kiválasztott fájlok a depóban (ha nincs külön leképezés, adj meg "." értéket)
  • FileExclusion - Kizárja a leképezésből a megadott fájlokat, és ez is tartalmazhat behelyettesítő karaktereket, mint a "?" és a "*".
  • InstallScript - Telepítő parancsfájlként jelöl meg egy fájlt, és a build folyamat során aláírja azt a fájlt. A Steam kliens tudja, hogy ezt bármelyik alkalmazáshoz futtatni kell, amelyik felcsatolja ezt a depót.
  • FileProperties - Speciális jelölőkkel lát el egy fájlt:
    • userconfig - Ezt a fájlt a felhasználó vagy a játék módosítja. A frissítések nem írhatják felül, és nem fog ellenőrzési hibát okozni, ha eltér a fájl korábbi változatától.
    • versionedconfig - Hasonló a userconfighoz, azonban ha a fájl a depóban frissül, felül lesz írva helyileg, amikor a felhasználó játéka frissül. Csak akkor frissítsd a fájlt a depóban, amikor formátumváltoztatás vagy hibajavítás szükséges.

Példa depot_build_1002.vdf depó build parancsfájl, bemutatva az összes beállítás használatát:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // az alkalmazás build parancsfájlból származó ContentRoot felülbírálása "FileMapping" { // a ".\bin" könyvtárban levő minden forrás fájl és könyvtár a ".\executables" könyvtárba lesz leképezve a depóban "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // minden alkönyvtár bevonása } "FileMapping" { // az \\audio könyvtárban levő hangfájlok felülbírálása a német változataikkal "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // a telepítő parancsfájl bemásolása a német változathoz a depó gyökérkönyvtárába "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // e fájl kihagyása "FileExclusion" "*.pdb" // mindegyik .PDB fájl kihagyása mindenhonnan "FileExclusion" "bin\tools*" // a bin\tools\ könyvtárban levő összes fájl kihagyása "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // ez a fájl futásidőben módosítva lesz } }

MEGJEGYZÉS: Ezeket a fájlokat úgy nevezed el, ahogy akarod, de mi a következetesség kedvéért az app_build_<AppID> és depot_build_<DepotID> neveket használjuk. Ha tudod, hogy ezen a gépen fogsz alkalmazásokat építeni, jó ötlet lehet alkönyvtárakat készíteni a parancsfájl könyvtáradban minden egyes alkalmazáshoz, segítségül az egyes alkalmazások build parancsfájljainak rendszerezéséhez.

SteamPipe használata CI/CD környezetben


A steamcmd folyamatos integráláshoz beállításához, vagy csak egy olyan gépen vagy virtuális gépen, ami gyakran újra lesz telepítve, bele kell venned a bejelentkezési tokenedet tartalmazó konfigurációs fájlt. Kövesd e lépéseket, hogy az első bejelentkezési tokened megfelelően legyen elmentve:

  1. Futtasd a „steamcmd.exe +login <felhasználónév>” parancsot azon a gépen, amely az építést fogja végezni.
  2. Add meg a jelszavad és a SteamGuard tokent.
  3. Írd be, hogy „info”, és a fiókodat csatlakozott állapotban kellene látnod.
  4. Írd be, hogy „quit”.
  5. A jövőbeni parancskiadásokkor ne adj meg jelszót. Csak add ki a "steamcmd.exe +login <felhasználónév>" parancsot.
  6. Győződj meg róla, hogy a <Steam>\config\config.vdf helyen tárolt konfigurációs fájl el van mentve, és meg van őrizve parancskiadások között, mivel e fájl sikeres belépés után frissülhet.

MEGJEGYZÉS: ha mégis újból bejelentkezel és megadod a jelszavad, új SteamGuard token lesz kiosztva, és az lesz szükséges a bejelentkezéshez.

Frissítések kezelése

Az alkalmazásod kiadása után a vásárlóknak azok az alapértelmezettként jelölt buildet fogják megkapni. Új build feltöltésekor mindig jó ötlet tesztelni azt, mielőtt kiadod a vásárlóidnak. További információkért ennek sikeres végrehajtásáról nézd meg a Tesztelés a Steamen dokumentációt.

Építési problémák hibakeresése

Ha az építés sikertelen volt, a hibainformációkat a kimeneti könyvtáradban kell keresni, nem a konzolban, ahol a build parancsfájlt futtattad. A hibainformációk legtöbbje megtalálható a *.log fájlokban.
A problémák hibakereséséhez használhatod az alábbi Steam kliens parancsokat és kliensoldali fájlokat:
  • "app_status [AppID]" - Megmutatja az alkalmazás jelenlegi állapotát ezen a kliensen.
  • "app_info_print [AppID]" - Megmutatja ennek a játéknak a jelenlegi Steamworks konfigurációját (depók, indítási lehetőségek stb.).
  • "app_config_print [AppID]" - Megmutatja e játék jelenlegi felhasználói konfigurációját (jelenlegi nyelv, telepítési könyvtár stb.).
  • "logs\content_log.txt" - Felsorolja az összes naplózott SteamPipe műveletet és hibát.
  • "steamapps\appmanifest_[AppID].acf" - Megmutatja ennek az alkalmazásnak a jelenlegi telepítési állapotát (KeyValues).

Kiskereskedelmi telepítőlemezek építése

SteamPipe játékok kiskereskedelmi telepítőlemezeinek készítéséhez először el kell készíteni egy építési projektfájlt.
Ebben a példában az SKU fájl neve "sku_goldmaster.txt" lesz:
"sku" { "name" "Teszt Játék telepítő" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Amit érdemes észben tartani:
  • Hozz létre egy új könyvtárat, ahová a kiskereskedelmi lemezek képfájljai ki lesznek írva, pl. "D:\retail_disks". Csak az included_depots szakaszban levő depók lesznek hozzáadva, kihagyást vezérlő szakasz már nincsen.
  • Telepítő lemezképek készítéséhez használhatod a Steam.exe fájlt (a -dev és -console parancssori kapcsolókkal) vagy a steamcmd.exe fájlt. Mindkét esetben használd a "build_installer" parancsot.
  • Jelentkezz be egy olyan Steam fiókkal, amely birtokolja a játékot és minden depót, amit a telepítőlemezre akarsz tenni. A fióknak ezen kívül más speciális jogra nincs szüksége, így bárki tud telepítőlemezt készíteni.
  • Ha a Steam.exe-t használod, állíts le minden más letöltést.
  • Válts a konzolra és futtasd a build_installer parancsot:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    Az építés eltarthat egy ideig, mivel az első alkalommal az összes depó újra le lesz töltve.
  • Ha helyi tartalomszerver használatával építesz telepítőlemezt, ezt futtasd:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    A kimenetben „Backup” fog szerepelni, mivel a kiskereskedelmi telepítőlemez és a helyi biztonsági mentés lényegében ugyanaz.
  • Amikor megjelent a "Backup finished for AppID..." üzenet, elkészültek a telepítő lemezképek. A biztonsági build részleteit a logs\backup_log.txt fájlban találod.
  • A "D:\retail_disks" könyvtárban új könyvtárak lesznek (Disk_1, Disk_2 és így tovább), amelyek nem nagyobbak 640 MB-nál, ahogy a "disk_size_mb" paraméterben meg volt adva. Mindegyik lemezkönyvtár tartalmaz egy "sku.sis" fájlt, valamint egy .csd és .csm fájlt minden egyes depóhoz. A nagyobb depók több lemezen helyezkednek el. Minden telepítőlemez-tartalom mindig titkosítva van (a helyi biztonsági mentés játékfájlokkal ellentétben). Másold be az SDK GM telepítő fájljait (setup.exe, setup.ini stb.) az első lemezed könyvtárába, és ezzel elkészült a kiskereskedelmi telepítőlemez.
  • Amikor macOS-hez készítesz GM-et, mindenképp nyisd meg a goldmaster/disk_assets/SteamRetailInstaller.dmg lemezképet egy Macen. Ezután fogd az ott levő alkalmazást, és másold az adathordozód gyökérkönyvtárába. Valószínűleg érdemes megváltoztatnod a telepítőalkalmazás nevét, márkaképre cserélni az ikont, és kidíszíteni az ablakot, hogy csak a telepítőt mutassa.
  • Ha többlemezes GM-et készítesz macOS-hez, gondoskodj róla, hogy mindegyik lemez kötetneve egyezzen. A kötetnév a felcsatolási útvonal részévé válik, és ha a név nem egyezik, a telepítő nem fogja tudni megtalálni a következő lemezt.

Opcionális kiskereskedelmi telepítő építése egy béta ágból

A fenti eljárás az alapértelmezett ágból fog kiskereskedelmi telepítőt létrehozni. Ha egy béta ágon alapuló telepítőt kell készítened, először létre kell hoznod egy "baseline" nevű béta ágat. Utána használd az alábbi parancsot a baseline ágból építéshez:
build_installer <projektfájl> <célkönyvtár> <béta kulcs> <béta jelszó> steamcmd példa: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret Parancsfájl példa: steamcmd.exe +login felhasználónév jelszó +build_installer "..\Build\GameDataSku.txt" c:\celkonyvtar béta_kulcs béta_jelszó +exit

DLC telepítése kiskereskedelmi telepítőből

Bizonyos körülmények között szükséged lehet olyan kiskereskedelmi telepítő készítésére, amely tartalmazza DLC csomagjaidat. Ilyen esetekben a telepítő készítési eljárása csak néhány változtatást igényel.
Az "sku_goldmaster.txt" fájlban add meg a DLC AppID-ket az "included_depots" szakaszban. Miután lefuttattad a "build_installer" folyamatot, keresd meg a telepítőhöz létrehozott sku.sis fájlt és nyisd meg egy szövegszerkesztővel.
Add hozzá a DLC AppID-ket az "apps" szakaszhoz. Például, ha van egy 1000 AppID-jű játékod és egy 1010 AppID-jű DLC-d, akkor a következőképp módosítanád az "apps" szakaszt:
"apps" { "0" "1000" "1" "1010" }
Ez biztosítja, hogy a Steam ellenőrizni fogja a DLC birtoklását, és kulcsot kér a felhasználótól, ha a fiók, amellyel be van jelentkezve a Steambe, nem birtokolja a DLC-t.

Kiskereskedelmi telepítő építése több AppID-hez egyetlen lemezen / telepítőcsomagban

Több SteamPipe alkalmazást tartalmazó GM építéséhez építsd fel az egyes alkalmazástelepítőket egyenként, de irányítsd mindet ugyanabba a kimeneti könyvtárba. Mindegyik build összeolvasztja magát a már létező telepítő lemezképpel.

Kiskereskedelmi telepítőlemez egyedivé tétele

További információkért kiskereskedelmi telepítőlemezed egyedivé tételéről nézd meg a Creating a retail and "Gold Master" disk dokumentációt.

Játékok kiadás előtti előtöltése

Alapesetben minden tartalom titkosítva van, a kiskereskedelmi lemezeken és minden tartalomszerveren. Egy játék előtöltés módba váltása azt jelenti, hogy a birtoklók letölthetik a tartalmat, de az titkosítva marad a felhasználó lemezén, és nem játszható. Miután a játék hivatalosan megjelentté vált, a Steam dekódolja az előtöltött tartalmat, és a felhasználó játszani tud a játékkal.

Egy játék előtöltés módba kapcsolása az alábbi esetekben javasolt:
  • Termékkulcsos kiskereskedelmi lemezek forgalomba hozása a játék tényleges megjelenése előtt (0. napi kalózkodás).
  • Olyan elővásárolható játékok, amelyek 20 GB-nál nagyobb méretűek.

Kérjük, ha úgy gondolod, hogy játékod előtöltést igényel, küldj be támogatási jegyet.

DLC építése

A DLC-k építése az alapjáték depóiként történik. További információkért nézd meg a Letölthető tartalom (DLC) dokumentációt.

SteamPipe hibaelhárítás

„Login Failure: Account Login Denied Failed” üzenet steamcmd-n keresztüli bejelentkezéskor

Ok: Valószínűleg a Steam Guard gátolja meg a bejelentkezést. Megoldás:
  • Nézd meg az ahhoz a fiókhoz társított e-mail-címet, amellyel belépni próbálsz, és keresd az üzenetet a Steam Támogatástól. Másold ki a kódot az e-mailből.
  • Futtasd a következő steamcmd parancsot: set_steam_guard_code <kód>
  • Próbáld meg újra a steamcmd-s bejelentkezést: Steam>login <buildfiók> <jelszó>

Általános hibaelhárítás letöltési problémákhoz

  • Indítsd újra a számítógépet, modemet, routert stb.
  • Ellenőrizd a tűzfalbeállításokat. Az új rendszer a 80-as portot (HTTP) és az összes többi Steam portot igényli, amelyek itt vannak felsorolva.
  • Átmenetileg állítsd le a helyi antivírus- és spamblokkoló programokat.
  • Ellenőrizd a Steam letöltési régióját a Beállítások -> Letöltések kategóriában. Egyeznie kellene azzal, ahol te vagy.
  • Állítsd le a letöltést, távolítsd el, majd telepítsd újra a játékot (jegyzékfájl-gyorsítótárak ürítése).
  • Lépj ki a Steamből, és töröld a Steam telepítési könyvtáradban levő „appcache” és „depotcache” könyvtárakat.
  • Próbáld átállítani a Steam letöltési régióját valami távoli helyre. Ez segíthet, ha egy közeledben levő tartalomszerver hibás adatokat szolgáltat.

Mac, illetve Linux buildjeim nem telepítenek semmilyen fájlt. Miért?

Ha Steamen keresztül teszteled játékod vagy alkalmazásod telepítését több platformon, találkozhatsz olyan helyzettel, amikor a build Windowson települ, de Macen vagy Linuxon nem telepít fájlokat annak ellenére, hogy a SteamPipe folyamatod be van állítva Mac, illetve Linux depók feltöltésére. Van egy könnyen kifelejthető lépés, ami magában foglalja alternatív depóid hozzáadását a telepítésre kerülő csomaghoz. Az alábbi lépésekkel ellenőrizheted, mely depókat tartalmazza egy csomag:
  1. Menj az Alkalmazás-adminisztráció oldaladra.
  2. A Társított elemek megnézése szakaszban kattints Az összes társított csomag, DLC, demó és kellék lehetőségre.
  3. Kattints annak a csomagnak a címére, amit letölteni próbálsz.
  4. Tekintsd át a Tartalmazott depók szakaszt.
  5. Használd a Depók hozzáadása/eltávolítása lehetőséget annak biztosítására, hogy a megfelelő depókészlet legyen hozzárendelve a csomaghoz.
Van erről néhány fórumtéma, amelyek szintén segíthetnek:

A steamcmd.exe futtatása a következő hibát eredményezi: "SteamUpdater: Hiba: A Steam frissítése csak online lehetséges. Ellenőrizd a hálózati kapcsolatot, és próbáld újra."

Megoldás: nyisd meg az Internetbeállítások->Kapcsolatok->Helyi hálózati beállítások ablakot, és jelöld be a Beállítások automatikus észlelése jelölőnégyzetet.

Az alkalmazásépítés futtatása a következő hibát adja: "ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6."

Lehetséges okok:
  • A fióknak nincs engedélye az alkalmazáshoz.
    • Ellenőrizd, hogy helyes-e az AppID az app_build.vdf-ben.
    • Ellenőrizd, hogy a build fióknak megvannak-e a megfelelő engedélyei az AppID-hez.
  • A steamcmd nem találja a depótartalmat.
    • Ellenőrizd, hogy a "contentroot" érték az app_build parancsfájlban érvényes relatív útvonal-e a parancsfájl helyéhez képest.
    • Ellenőrizd, hogy a "LocalPath" érték a depot_build parancsfájlban érvényes relatív útvonal-e az app_build parancsfájlban levő útvonalhoz képest. Ellenőrizd, hogy az útvonalon ténylegesen van-e tartalom.

Az alkalmazásépítés futtatása a következő hibát adja: "ERROR! Failed to get application info for app NNNNN (check login and subscription)"

Ez azt jelenti, hogy a Steam nem tud információt lekérni az alkalmazásról, vagy mert az nem létezik, vagy mert a felhasználónak nincs hozzáférése ahhoz.
  • Ellenőrizd, hogy az NNNNN az alkalmazásodhoz kapott AppID.
  • Ellenőrizd, hogy helyes-e az AppID az app_build.vdf-ben.
  • Ha ez egy új AppID, ellenőrizd, hogy a Steamworks alkalmazás-adminisztráció konfiguráció közzé lett-e téve. Az új alkalmazásoknak rendelkezniük kellene egy SteamPipe telepítési könyvtárral valamint egy depóval. Ezek a Steamworks beállítások szerkesztésében találhatók; a telepítési könyvtár a Telepítés fülön az Általános telepítés alatt, a depó pedig a SteamPipe fül alatt van. Minden közzétett változtatást a Kiadás fülön keresztül kell végrehajtani.
  • Ha mindezek rendben levőnek tűnnek, győződj meg róla, hogy a fiókod birtokolja az AppID-t.

"An error occurred while installing [AppName] (Invalid content configuration)" hibaüzenet indításkor

Lehetséges okok:
  • Nincs élőre állított build azon az ágon, amelyről telepíteni próbálsz.
    Megoldás: állítsd élőre a buildedet egy ágon, felkeresve a https://partner.steamgames.com/apps/builds/<játékod AppID-je> oldalt, majd válaszd ki azt az ágat a Steam kliensben (az itt leírtak szerint).
  • Érvénytelen játékindítási beállítások.
    Megoldás: ellenőrizd az indítási beállításokat játékod alkalmazás-adminisztráció oldalának telepítés fülén: https://partner.steamgames.com/apps/config/<játékod AppID-je>
  • Nem birtoklod a DepotID-ket, amelyekből a játék áll.
    Megoldás: győződj meg róla, hogy a szükséges depók hozzá vannak adva a fejlesztői előfizetéshez (további részletekért nézd meg a Csomagok szerkesztése dokumentációt).

Nem emlékszem egy steamcmd parancsra, vagy hogy az hogyan működik

Használd a steamcmdben a "find" parancsot bármelyik steamcmd parancs megkeresésére. Részleges egyezéssel keres a parancsnévre, és kilistázza a parancs szintaxisát.
Steam>find build_installer ConVars: Commands: build_installer : <projektfájl> <célmappa> <bétakulcs> <bétajelszó>