Steamworks-dokumentation
Upload til Steam
Nedenfor er en guide til, hvordan du bruger SteamPipe, Valves værktøj til levering af indhold på Steam. Du kan få flere oplysninger om de bedste fremgangsmåder til at opdatere dit spil i Bedste fremgangsmåder for spilopdateringer.

Introduktion til SteamPipe-indholdssystemet

SteamPipe er det indholdssystem til spil/applikationer, som Steam bygger på. Funktioner i SteamPipe:
  • Hurtig og effektiv levering af indhold.
  • Offentlige og private "betagrene", så flere builds kan testes.
  • Enkel webbaseret buildstyring – udgiv nye builds eller annuller et tidligere build med få klik.
  • Mulighed for at se opdateringsstørrelsen på et build, inden det sættes til live.
  • Mulighed for at dele indhold mellem flere applikationer.
  • Mulighed for at bygge installationsdiske fra offentligt eller betaindhold.
  • Spil/applikationer bliver ved med at være tilgængelige offline, også når hentning af en opdatering er startet.
  • Alt indhold er altid krypteret, og ikke-aktive versioner er ikke synlige for kunder.
  • En Lokal SteamPipe-indholdsserver, som kan bruges under udvikling.
BEMÆRK: Der er nogle koncepter, som er uundværlige for SteamPipe, og inden du går i gang, bør du sætte dig ind i de koncepter, der beskrives i dokumentationen Applikationer. Det vil være nyttigt at have en grundlæggende forståelse for, hvordan disse elementer hører sammen, når du uploader dit produkt til Steam.

Spilindholdsstruktur – bedste fremgangsmåder


SteamPipe er designet til både effektiv download af den første spilinstallation og effektiv rettelse af opdateringer. Generelt fungerer det godt med meget forskelligt struktureret spilindhold. Men der er nogle vigtige ting at bemærke med hensyn til optimering og for at undgå situationer, som kan forårsage ineffektivitet.

Til at starte med deler SteamPipe hver fil i segmenter på cirka 1 megabyte (MB). Derefter komprimeres og krypteres hvert segment, inden det uploades til Steams indholdsleveringssystem. De forbliver komprimerede og krypterede, indtil de downloades af den enkelte klient, hvor de dekrypteres og udpakkes og anbringes på de nødvendige filplaceringer.

Når SteamPipe behandler en opdatering til et eksisterende spil, søger den efter segmenter som disse, som matcher det tidligere spilbuild. På denne måde er det ideelt set kun de nye eller ændrede portioner af en fil, som bliver til "nye" segmenter, og en klient skal kun downloade disse nye segmenter for at opdatere spillet.

Mange spilmotorer bruger "pakkefiler" til at samle spilassets og forbedrer indlæsningstiden gennem mere effektiv diskadgang. Generelt fungerer dette godt med SteamPipe. Men nogle pakkefilssystemer bruger og tillader fremgangsmåder, som kan forårsage problemer. Disse problemer resulterer næsten altid i, at opdateringer er meget større end nødvendigt. Det kan også medføre, at downloadprocessen er hurtig, men opdateringsprocessen langsom, fordi den kræver en masse disklæsninger og -skrivninger.

Hvis dit spil bruger pakkefiler, er der her nogle generelle retningslinjer:

  • Sørg for, at ændrede assets stadig er indenfor den samme pakkefil, hvis det er muligt
  • Undgå at ændre rækkefølgen på assets i en pakkefil
  • Begræns størrelsen på pakkefiler
  • Gruppér assets efter niveau/spilområde/funktion i flere pakkefiler, og overvej at tilføje nye pakkefiler til en opdatering i stedet for at ændre eksisterende
  • Inkluder ikke originale filnavne eller fil-/buildtidsstempler for hvert asset

Det første punkt ovenfor handler om mængden af bytes, som ændres i en fil, når et enkelt asset ændres. Ideelt set skal dataene i det pågældende asset ændres og/eller vokse eller skrumpe ind på den samme pakkefilsplacering. SteamPipe opretter kun nye segmenter for de dele af filen, som indeholder assetdata. Men alle pakkefiler skal have en slags indholdsfortegnelse, så spilmotoren kan finde assetdataene. Strukturen i indholdsfortegnelsen kan have stor betydning for, hvor effektiv SteamPipe-opdateringer er. Der skal helst kun være én indholdsfortegnelse eller et indholdstræ i begyndelsen eller slutningen af filen. Eftersom andre assets kan ændre byteposition i filen, ændres deres poster i indholdsfortegnelsen også. I en sådan situation laver SteamPipe nye segmenter for de ændrede assetdata og de ændrede dele af indholdsfortegnelsen.

Vi har dog set i nogle spilmotorer, at oplysningerne i indholdsfortegnelsen er spredt over hele filen. Hvad værre er, bruger det absolutte byteforskydningsværdier. Så hvis et asset ved byte 3450 øges med 8 bytes i størrelsen, ændres forskydningsværdierne for alle assets efter dette i filen. Selvom hver forskydningsværdi kun er 4 eller 8 bytes i størrelsen, resulterer en ændring af et tal på 8 bytes i, at SteamPipe opretter et nyt segment på 1 MB. Dette kan have katastrofale konsekvenser, fordi selv en ændring af et par små assets i en pakkefil kræver, at klienter skal downloade mere and halvdelen af filen for at opdatere. Hvis du ved eller har mistanke om, at din pakkefilsstruktur forårsager dette problem, bedes du henvende dig til din kontaktperson hos Valve hurtigst muligt. Vi har en alternativ buildalgoritme, som kan hjælpe med at begrænse problemet, selvom der også er visse ulemper.

Desuden kender SteamPipe ikke assetgrænserne i en pakkefil. Hvis assets på under 1 MB blandes, vil SteamPipe sandsynligvis ikke kunne registrere den nye rækkefølge, fordi de tidligere fastlagte 1 MB-segmenter ikke længere findes i filen. Så hvis du, når du laver en opdatering til dit spil, vil optimere indlæsningstiden ved at omarrangere assets i pakkefilen, skal du vide, at det faktisk kan resultere i en meget stor download til opdateringen. Vi anbefaler kun at gøre dette, hvis det forbedrer ydeevnen markant.

Som det næste skridt for at opdatere en pakkefil på en klientenhed opretter SteamPipe en ny version ved siden af den gamle. Når alle nye filer er oprettet, "udfører" SteamPipe opdateringen ved at slette gamle filer og flytte de nye filer over. Det betyder, at for at opdatere en pakkefil på 25 GB, opretter SteamPipe altid en ny fil på 25 GB. Hvis opdateringen kun kræver filændringer på 10 bytes, skal SteamPipe kopiere næsten alle 25 GB fra den gamle fil til den nye. Alt efter klientens lagerhardware kan denne proces være meget langsom. Derfor anbefaler vi to ting:

For det første: Begræns pakkefilers størrelse. 1-2 GB er nok rigeligt – mere end nok til effektiv disklæsning, når spillet indlæses.

For det andet: Begræns størrelsen på assets i en enkelt pakkefil. Måske til et enkelt spillevel eller oplåselig funktion. Opdateringer, som vedrører bestemte dele af spillet, resulterer således ikke i, at data fra andre dele kopieres frem og tilbage på klientenheden. Derudover kan og bør nye funktioner, levels osv. være i deres egne nye pakkefiler. Klienter, der downloader opdateringen, kan blot downloade de nye filer og undgå de ovennævnte problemer med ændrede pakkefiler.

Hvis du er i tvivl, kan du bruge et lokalt binært sammenligningsværktøj såsom Beyond Compare til at sammenligne versionerne af dine pakkefiler. Bekræft, at størrelsen på de viste forskelle svarer til den forventede størrelse på de ændrede assets, og at der ikke er et stort antal små ændringer fordelt i hele filen. Hvis du ser noget uventet, skal du kontrollere indstillingerne for det program, du bruger til at pakke filerne.

Komprimering: Da Steam komprimerer alle data til upload/lagring/download, anbefaler vi generelt ikke at bruge generel komprimering til pakkefiler. Men hvis du er bekymret for størrelsen af dit spil på disken, kan du komprimere pakkefilerne. Dette fungerer ganske godt med SteamPipe, så længe ovenstående kriterier er opfyldt. Du skal især sørge for, at komprimeringen så vidt muligt er pr. asset. Enhver komprimering, der overskrider assetgrænser, medfører, at ændringerne spredes, og kræver, at klienter skal downloade flere data end nødvendigt.

Kryptering: Det minder om komprimering. Det er sandsynligvis unødvendigt og indebærer de samme risici som nævnt ovenfor.

Ved at følge disse regler reducerer du patchstørrelserne, og kun nyt indhold skal downloades. Dine kunder vil takke dig, og du vil kunne øge kvaliteten af dit produkt ved at udgive flere opdateringer.

Hvis du har mistanke om, at din spilpakke ikke interagerer godt med SteamPipe-opdateringsprocessen, skal du henvende dig til din kontaktperson hos Valve, så vi kan undersøge, om vores avancerede funktioner kan hjælpe.

Steamworks-videoguide: Sådan bygger du dit spil i SteamPipe

Denne guide præsenterer SteamPipe og forklarer trin for trin, hvordan man bruger Steamworks-værktøjerne til at lave en testapplikation til Steam.
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Steamworks-videoguide - Tilføjelse af nye platforme og sprog

Denne guide gennemgår, hvordan du tilføjer nye platforme og sprog til dit spil ved at tilføje depoter til applikationen.
https://www.youtube.com/watch?v=PShS32hcing

Tekniske detaljer om SteamPipe

SteamPipe anvender HTTP-protokollen til levering af indhold. Eftersom downloads er almindelig webtrafik, øger HTTP-cache fra en tredjepart mellem kunden og Steam-serverne downloadhastigheden. Indhold kan hostes af eksterne CDN-udbydere, som nemt kan lægges til vores indholdsnetværk. De fleste firewalls hos forbrugere tillader HTTP-trafik og blokerer ikke downloads.

SteamPipe har en effektiv patching-algoritme baseret på binære deltaer, som kun ændrer de modificerede dele i eksisterende indholdsfiler. Når indholdet opdateres, er det kun nødvendigt at sende disse deltaer. Det betyder, at både udvikler- og brugeroverførsler er mindre og hurtigere. De fleste partnere oplever, at det ikke er nødvendigt med en Lokal SteamPipe-indholdsserver, da de effektivt kan patche builds på private grene.

Steam-konto til builds

Før du kan oprette builds på Steam, skal du have en Steam-konto på din Steamworks-konto med tilladelserne "Rediger app-metadata" og "Udgiv app-ændringer på Steam". Af sikkerhedsmæssige årsager anbefales det at oprette en dedikeret build-konto, der kun har disse tilladelser. Du kan oprette en ny Steam-konto til dette formål på https://store.steampowered.com/join.

Administratorer af din Steamworks-konto kan tilføje en Steam-konto og tildele de nødvendige tilladelser. Mere information om processen kan findes i dokumentationen Administrer din Steamworks-konto. Her er et eksempel på, hvordan kontoen kan se ud:

create_build_account.png

Indledende opsætning for nye SteamPipe-apps

Følg disse trin for at konfigurere nye SteamPipe-applikationer:
  1. Find app-ID'et for din applikation (dette kan findes ved at vælge applikationen på din hjemmeside i Steamworks).
  2. Gå til siden Generelle installationsindstillinger for din app.
  3. Definer mindst en startparameter (stien og (valgfrit) nødvendige argumenter for at starte spillet). Hold musen over (?) for at læse mere om hvert felt.

    Eksemplet nedenfor viser fem startparametre: to til Windows, to til macOS og en til Linux.
    Den tredje startparameter vises kun på Windows, hvis brugeren også ejer det angivne DLC.

    updatedlaunchoptions_3.png
  4. Gå til siden Depoter, og tilføj depoter efter behov for denne app. Som standard kan der allerede være et depot konfigureret for din applikation.
    1. Klik på standarddepotet, og omdøb depotet med et passende og genkendeligt navn (for eksempel "Grundindhold" eller "Windows-indhold").
    2. Lad sproget være på [All languages], medmindre det er et sprogspecifikt depot.
    3. Lad operativsystemet være sat til [All OSes], medmindre det er et OS-specifikt depot (hvis appen er en alt-i-én-løsning eller kun til PC eller kun til Mac, skal den indstilles til [All OSes]. Du skal kun ændre denne parameter for OS-specifikke spildepoter.
    4. Klik på Tilføj nyt depot for at oprette yderligere depoter.
    5. Klik på Gem ændringer for at gemme eventuelle ændringer.
  5. Når du er færdig med at definere dine depoter, skal du udgive de ændringer, du har foretaget fra siden Udgiv.
  6. Nyligt definerede depoter skal inkluderes i en pakke, så du får ejerskab over dem. Hvert spil på Steam skal have en udviklerpakke, som automatisk tildeles til de konti, der står i din udgivergruppe.
    Du kan tilføje de nye depoter til denne pakke (og/eller andre pakker, som skal have disse depoter) på siden Tilknyttede pakker og DLC.
Bemærk: Hvis din eksekverbare fil ligger i en undermappe til den primære installationsmappe, skal du tilføje navnet på undermappen i feltet "Executable". Brug ikke foranstillede skråstreger eller prikker.
Platformnote: Som vist ovenfor kan macOS-applikationer startes ved at angive enten et appbundt (Game.app) eller et script/binær fil (Game.app/Contents/MacOS/Game). Generelt er formatet med appbundter at foretrække, hvis det er muligt, da det gør det muligt for macOS mere præcist at fastlægge startparametrene på samme måde, som det ville, hvis det blev startet manuelt uden for Steam.

Ét tilfælde af dette, som bør bemærkes, er, at applikationer, som i øjeblikket startes via et appbundt på Apple Silicon-enheder, starter den bedste tilgængelige arkitektur i applikationen, hvorimod opstart direkte fra en binær fil bruger samme arkitektur som Steam-processen (p.t. x86_64).

Opsætning af SDK'en til SteamPipe-uploads

Download og udpak den seneste version af Steamworks-SDK'en på den maskine, du vil uploade builds på.

SteamPipe-værktøjerne kan findes i SDK'en i mappen tools, som indeholder to relevante undermapper.

I mappen ContentBuilder finder du dit spilindhold og værktøjer til SteamPipe-buildet. Denne mappe har følgende undermapper:
  • builder – Denne mappe indeholder til at starte med kun steamcmd.exe, som er kommandolinjeversionen af Steam.
  • builder_linux – Linux-versionen af steamcmd.
  • builder_osx – MacOS-versionen af steamcmd.
  • content – Denne mappe indeholder alle spilfiler, som skal bygges ind i depoter.
  • output – Denne mappe vil være stedet for buildlogs, segmentcache og mellemliggende output. BEMÆRK: Denne mappe kan slettes eller tømmes når som helst, men når den er blevet slettet, vil den næste upload tage længere tid.
  • scripts – Denne mappe er der, hvor du placerer alle dine buildscripts, når du bygger dine spildepoter.
steampipebuilddir.png

Det anbefales, at du kører steamcmd.exe direkte i mappen "builder" fra din platform for at selvstarte buildsystemet. Dermed burde "builder"-mappen blive fyldt med alle de nødvendige filer til at oprette depoter.

Mappen ContentServer indeholder værktøjer til at køre en Lokal SteamPipe-indholdsserver, hvis du vælger at gøre det.

SteamCmd på macOS

Du skal udføre følgende trin for at aktivere SteamCmd på macOS:
  1. Fra terminalen skal du gå til mappen tools\ContentBuilder\builder_osx
  2. Kør chmod +x steamcmd
  3. Indtast bash ./steamcmd.sh
  4. SteamCmd vil så køre og opdatere til det seneste build, hvorefter du ser SteamCmd-kommandoprompten
  5. Indtast exit, og tryk på Enter for at forlade kommandoprompten
Du kan derefter følge resten af denne dokumentation (hvor du erstatter stierne efter behov) for at oprette depot- og appkonfigurationsfiler til at uploade dit indhold til Steam.

Oprettelse af SteamPipe-buildkonfigurationsfiler

For at uploade filer til din app med SteamPipe skal du oprette scripts, som beskriver dit build, og hvert depot som er inkluderet i det. Scripteksemplerne, som er vist her, ligger i mappen Tools\ContentBuilder\scripts i Steamworks-SDK'en.

GUI-værktøj i SteamPipe

Hvis du kører på Windows og foretrækker et GUI-værktøj til oprettelse af disse konfigurationsfiler og uploade dine builds, kan du bruge SteamPipeGUI, som er tilgængeligt i "tools"-mappen i Steamworks-SDK'en. Zip-filen indeholder yderligere instruktioner til at hjælpe dig i gang.

Hvis du vælger at bruge GUI-værktøjet, anbefaler vi stadig, at du læser de følgende sektioner, så du bliver mere bekendt med SteamPipe-systemet.

Simpelt buildscript


Lad os starte med det mest enkle buildscript, vi kan have. I vores eksempel har vi et spil (app-ID 1000), som har ét depot (depot-ID 1001), og vi vil uploade alle filer fra en indholdsmappe og de tilhørende undermapper. Vi har kun brug for et enkelt buildscript. Se "simple_app_build.vdf", som er inkluderet i SDK'en:

"AppBuild" { "AppID" "1000" // dit app-ID "Desc" "Dette er et simpelt buildscript" // intern beskrivelse til dette build "ContentRoot" "..\content\" // indholdsrodmappen relativt til denne fils placering "BuildOutput" "..\output\" // buildoutputmappen til logs og cachefiler for buildet "Depots" { "1001" // dit depot-ID { "FileMapping" { "LocalPath" "*" // alle filer fra indholdsrodmappen "DepotPath" "." // tilknyttet depotets rod "recursive" "1" // inkluderer alle undermapper } } } }

Juster dit spils app-ID og depot-ID efter behov. For at starte et build skal du køre steamcmd og sende et par parametre:
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

BEMÆRK: Det første forsøg på at køre et build kan mislykkes på grund af Steam Guard. Hvis Steam Guard forhindrer dig i at logge ind, skal du se efter en Steam Guard-kode i dine e-mails og køre steamcmd som: steamcmd.exe "set_steam_guard_code <code>" og forsøge igen. Når du har logget ind med Steam Guard én gang, bruges en sentry-fil til at bekræfte, at det er et ægte login.

Hvis du bruger steamcmd fra en maskine eller VM, som jævnligt gendannes fra afbildninger, skal du inkludere config-filen i afbildningen, så du ikke skal indtaste en Steam Guard-kode hver gang. Config-filen findes i <Steam>\config\config.vdf.

Følgende trin udføres under et SteamPipe-build:
  1. Steamcmd.exe opdaterer sig selv til den seneste version.
  2. Steamcmd.exe logger ind i Steams backend med den angivne Steam-buildkonto.
  3. Appbuildets start registreres med MDS (Master Depot Server), som sikrer, at brugeren har de nødvendige rettigheder til at ændre appen.
  4. For hvert depot i appbuildet genereres der en filliste baseret på filerne i indholdsmappen og de definerede filterregler i config-filen for depotbuildet.
  5. Hver fil scannes og deles op i små segmenter på ca. 1 MB. Hvis depotet er blevet bygget før, bevarer denne partitionering så mange af de uændrede segmenter som muligt.
  6. Nye filsegmenter komprimeres, krypteres og uploades derefter til MDS'en.
  7. Der genereres et endeligt manifest for denne depotversion. Hvert manifest kan identificeres ud fra et unikt 64-bit manifest-ID.
  8. Når alle depoter er blevet behandlet, afslutter MDS'en appbuildet og tildeler det et globalt build-ID.
  9. Når buildet er færdigt, kan der være *.csm- og *.csd-filer i buildets outputmappe. Disse er midlertidige og kan slettes, men de øger efterfølgende buildtider.


Når buildet er færdigt, kan du se det på appbuildsiden. Det ville i dette tilfælde være https://partner.steamgames.com/apps/builds/1000. Der kan du sætte buildet live for standardgrenen eller en betagren, og brugere vil kunne downloade denne opdatering i løbet af et par minutter.

Avancerede buildscripts


Hvis din app har mange depoter med komplekse filtilknytningsregler, kan du oprette et buildscript for hvert depot, som appens buildscript refererer til. Lad os først se på de tilgængelige parametre i appbuildscriptet:

  • AppID : Dit spils app-ID. Den Steam-partnerkonto, der uploader, skal have tilladelsen "Rediger app-metadata".
  • Desc : Beskrivelsen er kun synlig for dig i sektionen "Dine builds" i panelet "App-administrator". Dette kan ændres når som helst, når du har uploadet et build på siden "Dine builds".
  • ContentRoot : Rodmappen for dine spilfiler. Kan være en absolut sti eller en relativ sti til buildscriptfilen.
  • BuildOutput : Denne mappe indeholder buildlogs, depotmanifester, segmentcaches og mellemliggende output. Brug en særskilt disk til buildoutputtet for at opnå den bedste ydeevne. Dette deler IO-belastningen på disken og lader indholdsroddisken håndtere læseanmodningerne og outputdisken håndtere skriveanmodningerne.
  • Preview : Denne type build laver kun outputlogs og et filmanifest i buildoutputmappen. Forhåndsvisningsbuilds er en god måde at arbejde videre med dine uploadscripts og sikre, at filtilknytninger, filtre og egenskaber fungerer som ønsket.
  • Local : Sæt dette til htdocs-stien for din LCS (Lokal SteamPipe-indholdsserver). LCS-builds lægger kun indhold på din egen HTTP-server og lader dig teste din spilinstallation med Steam-klienten.
  • SetLive : Navn på betagrenen, som automatisk sættes lives, når buildet er færdigt. Intet navn, hvis dette er tomt. Bemærk: Standardgrenen kan ikke sættes live automatisk. Det skal gøres gennem panelet "App-administrator".
  • Depots: Denne sektion indeholder alle filtilknytninger og filegenskaber for hvert depot og refererer til en særskilt scriptfil for hvert depot.

Dette eksempel på et appbuildscript "app_build_1000.vdf" bruger det hele:
"AppBuild" { "AppID" "1000" // dit app-ID "Desc" "Din buildbeskrivelse her" // intern beskrivelse til dette build "Preview" "1" // gør dette build udelukkende til en forhåndsvisning, der uploades ikke noget "Local" "..\..\ContentServer\htdocs" // læg indhold på den lokale indholdsserver i stedet for at uploade til Steam "SetLive" "AlphaTest" // sæt dette build live på en betagren "ContentRoot" "..\content\" // indholdsrodmappe relativt til denne scriptfil "BuildOutput" "D:\build_output\" // læg buildcache og logfiler på et andet drev for at opnå bedre ydeevne "Depots" { // filtilknytningsinstruktioner for hvert depot kan findes i separate scriptfiler "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

Dette appbuildscript refererer til to scriptfiler for depotbuildet, som angiver alle filtilknytninger og filegenskaber. De følgende instruktioner kan findes i depotbuildscriptet (og også, hvis sektionen inkluderes direkte i appbuildscriptet).

  • DepotID : Depot-ID'et for denne sektion
  • ContentRoot : Lader dig tilsidesætte ContentRoot-mappen, hvis du vil, fra appbuildscriptet pr. depot
  • FileMapping : Dette tilknytter en enkelt fil eller et sæt af filer fra den lokale indholdsrod til depotet. Der kan være flere filtilknytninger, som tilføjer filer til depotet. Parameteren LocalPath er en relativ sti til indholdsrodmappen og kan indeholde jokertegn såsom "?" eller "*". Det gælder også for matchende filer i undermapper, hvis Recursive er aktiveret. Parameteren DepotPath angiver, hvor de valgte filer skal vises i depotet (brug ".", hvis der ikke skal være nogen særlig tilknytning).
  • FileExclusion : ekskluderer tilknyttede filer igen og kan også indeholde jokertegn såsom "?" eller "*"
  • InstallScript : markerer filer som installationsscripts og signerer dem under oprettelsesprocessen. Steam-klienten ved, at de skal køres for hver applikation, som indeholder dette depot.
  • FileProperties : markerer filer med særlige flag.
    • userconfig : Denne fil ændres af brugeren eller spillet. Den kan ikke tilsidesættes af en opdatering, og der udløses ikke en verificeringsfejl, hvis den er anderledes end den tidligere version af filen.
    • versionedconfig : Ligner userconfig, men hvis filen opdateres i depotet, tilsidesættes den lokalt, når brugerens spil opdateres. Opdater kun filen i depotet, når der er en nødvendig formatændring eller fejlrettelse.

Dette eksempel på et depotbuildscript depot_build_1002.vdf viser, hvordan alt dette bruges:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // tilsidesæt ContentRoot fra appbuildscriptet "FileMapping" { // alle kildefiler og -mapper i ".\bin" tilknyttes mappen ".\executables" i depotet "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // inkluder alle undermapper } "FileMapping" { // tilsidesæt lydfiler i \\audio med tyske versioner "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // kopier installationsscript for den tyske version til depotrodmappen "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // ekskluder denne fil "FileExclusion" "*.pdb" // ekskluder alle .PDB-filer alle steder "FileExclusion" "bin\tools*" // ekskluder alle filer under bin\tools\ "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // denne fil ændres under runtime } }

BEMÆRK: Du kan omdøbe disse scripts, som du vil, men vi bruger navnene app_build_<AppID> og depot_build_<DepotID> af hensyn til ensartethed. Hvis du ved, at du skal bygge applikationer på denne maskine, kan det være en god idé at oprette undermapper i din scriptmappe for hver applikation for at gøre det nemmere at holde styr på hver applikations buildscripts.

Administration af opdateringer

Når din app er udgivet til kunderne, vil dine kunder modtage det build, som er markeret som standardbuild. Når du uploader et nyt build, er det altid godt at teste det, inden du udgiver det til kunderne. Læs mere om dette her: Testarbejde på Steam

Fejlfinding af builds

Hvis der er noget galt med dit build, så se, om der er nogen fejloplysninger i outputmappen og ikke konsollen, hvor buildscriptet blev kørt. De fleste fejloplysninger kan findes i *.log-filerne.
Du kan bruge disse Steam-klientkommandoer og filer på klientsiden til at foretage fejlfinding:
  • "app_status [appid]" – Viser appens nuværende tilstand på denne klient.
  • "app_info_print [appid]" – Viser den nuværende Steamworks-konfiguration for dette spil (depoter, startparametre osv.).
  • "app_config_print [appid]" – Viser den nuværende brugerkonfiguration for dette spil (nuværende sprog, installationsmappe osv.).
  • file "logs\content_log.txt" – Angiver alle logførte SteamPipe-operationer og -fejl.
  • file "steamapps\appmanifest_[appid].acf" – Viser denne apps nuværende installationstilstand (KeyValues).

Oprettelse af installationsdiske til detailhandel

For at oprette installationsdiske til detail til SteamPipe-spil skal du først oprette en buildprojektfil.
I dette eksempel hedder SKU-filen "sku_goldmaster.txt":
"sku" { "name" "Test Game Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Gode tips:
  • Opret en ny mappe, som diskbilleder skal skrives til, for eksempel "D:\retail_disks". Kun depoter i included_depots-sektionerne tilføjes. Der er ikke længere undtagelser.
  • Du kan bruge Steam.exe (med kommandolinjeparametrene -dev og -console) eller steamcmd.exe til at bygge installationsbilleder. Brug "build_installer"-kommandoen i begge tilfælde.
  • Log på med en Steam-konto, som ejer spillet og alle de depoter, du vil lægge på detaildisken. Ellers behøver kontoen ikke at have særlige rettigheder, så alle kan oprette installationsdiske.
  • Hvis du bruger Steam.exe, skal alle andre downloads stoppes.
  • Gå til konsolsiden, og kør kommandoen build_installer:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    Buildet kan tage et stykke tid, eftersom alle depoter downloades igen for første gang.
  • Hvis du opretter en Gold Master med en lokal indholdsserver, skal du køre:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    Teksten i konsollen henviser til "Sikkerhedskopiering", eftersom en installationsdisk og en lokal backup stort set er det samme.
  • Når du ser teksten "Sikkerhedskopiering færdig for app-ID...", er installationsdiskbillederne klar. Du kan finde flere detaljer om backup-buildet i logs\backup_log.txt.
  • Der er nye mapper (Disk_1, Disk_2 osv.) i "D:\retail_disks", hver på maks. 640 MB, som angivet med "disk_size_mb". hver diskmappe indeholder en "sku.sis"-fil og en .csd og .csm for hvert depot. Større depoter kan strække sig over flere diske. Alt indhold på detailinstallationsdiske krypteres altid (til forskel fra lokale spilsikkerhedskopifiler). Kopier GM-installationsfilerne for SDK'en (setup.exe, setup.ini osv.) til mappen med din første disk for at færdiggøre oprettelsen af din installationsdisk.
  • Når du opretter en GM til macOS, skal du åbne afbildningen goldmaster/disk_assets/SteamRetailInstaller.dmg på en Mac. Tag derefter appen, som ligger der, og kopier den til mediets rod. Du skal nok ændre navnet på installationsappen, oprette dit eget ikon og kun vise installationsprogrammet i vinduet.
  • Ved oprettelse af flere GM-diske til macOS skal hver diskenheds navn stemme overens. Enhedsnavnet bliver en del af forbindelsesstien, og hvis navnene ikke stemmer overens, vil installationsprogrammet ikke kunne finde den næste disk.

Oprettelse af valgfri installationsdisk fra en betagren

Processen ovenfor resulterer i en detailinstallationsdisk baseret på standardgrenen. Hvis du har brug for at oprette et installationsprogram baseret på en betagren, skal du først oprette en betagren med navnet "baseline". Brug derefter følgende kommando for at oprette baseline-grenen:
build_installer <project file> <target folder> <beta key> <beta pwd> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login user_name password +build_installer "..\Build\GameDataSku.txt" c:\destination beta_key beta_password +exit

Installation af DLC fra et detailinstallationsprogram

I visse tilfælde kan det være ønskeligt at oprette et detailinstallationsprogram, som inkluderer dine DLC-pakker. I så tilfælde kræver det blot et par få ændringer i processen for at oprette installationsprogrammet.
I "sku_goldmaster.txt" skal du inkludere DLC-app-ID'erne under sektionen "included_depots". Når du har kørt "build_installer"-processen, skal du finde den genererede sku.sis-fil for installationsprogrammet og åbne den med en teksteditor.
Tilføj DLC-app-ID'et i sektionen "apps". Hvis jeg f.eks. havde et spil med app-ID 1000 og DLC-app-ID 1010, ville jeg justere sektionen "apps" således:
"apps" { "0" "1000" "1" "1010" }
Dette vil sikre, at Steam kontrollerer ejerskab af DLC'et og beder brugeren om en nøgle, hvis DLC'et ikke er ejet af kontoen, som brugeren logger på Steam med.

Oprettelse af detailinstallationsprogram for flere app-ID'er på en enkelt disk/installationspakke

For at oprette en GM med flere SteamPipe-applikationer skal hvert appinstallationsprogram oprettes et ad gangen, men de skal alle pege på den samme outputmappe. Hvert build kombineres med den allerede eksisterende installationsafbildning.

Tilpasning af installationsdisk

Læs mere om tilpasning af en installationsdisk til detailhandel i Tilpasning af en Gold Master.

Forudindlæsning af spil inden udgivelse

Som udgangspunkt er alt indhold altid krypteret, på alle detaildiske og på alle indholdsservere. Hvis et spil sættes i forudindlæsningstilstand, betyder det, at ejere kan downloade indholdet, men at det forbliver krypteret på brugerens disk og ikke kan spilles. Når spillet udgives officielt, dekrypterer Steam det forudindlæste indhold, og brugeren kan spille spillet.

Forudindlæsningstilstand anbefales i disse situationer:
  • Udgivelse af detaildiske med produktnøgler, inden spillet er officielt tilgængeligt (undgå piratkopiering før udgivelsen).
  • Spil med forudkøb, og som er større end 20 GB.

Opret en supportsag hos Steam-udgivelsesteamet, hvis du mener, at dit spil har brug for forudindlæsning.

Oprettelse af DLC

DLC oprettes som et depot af grundspillet. Læs mere i dokumentationen Indhold, der kan downloades (DLC).

Fejlfinding af SteamPipe

"Login Failure: Account Login Denied Failed", når du logger på via steamcmd

Årsag: SteamGuard forhindrer sandsynligvis login. Løsning:
  • Tjek e-mailadressen, som er tilknyttet den konto, du prøver at logge på med, og se efter en e-mail fra Steam Support. Kopier koden fra e-mailen.
  • Kør steamcmd: set_steam_guard_code <code>
  • Forsøg at logge ind fra steamcmd igen: Steam>login <buildaccount> <password>

Generel fejlfinding af problemer med downloads

  • Genstart computeren, modemmet, routeren osv.
  • Bekræft firewallindstillingerne. Det nye system kræver port 80 (HTTP) og alle andre Steam-porte, som står her.
  • Slå lokale antivirus- eller spamblokeringsprogrammer fra.
  • Tjek download-området i Steam under Indstillinger -> Downloads. Dette bør matche din placering.
  • Stop overførslen, afinstaller og geninstaller spillet (ryd manifestcachelagre).
  • Afslut Steam, slet mapperne appcache og depotcache i Steam-installationsmappen.
  • Indstil "Download-område" i Steam til et sted langt væk. Dette vil måske virke, hvis en indholdsserver i nærheden af dig serverer dårlige data.

Mine Mac- og/eller Linux-builds installerer ikke nogen filer. Hvorfor?

Hvis du tester installationen af dit spil eller din applikation via Steam på flere platforme, kan du opleve en situation, hvor buildet udrulles på Windows, men ikke på Mac eller Linux, selvom SteamPipe-processen er sat til at uploade Mac- og/eller Linux-depoter. Der er et trin, som er nemt at overse, hvor du skal tilføje alternative depoter til den pakke, der udrulles. Du kan tjekke, hvilke depoter der er inkluderet i en pakke, med følgende trin:
  1. Gå til siden App-administrator
  2. Fra sektionen "Vis associerede emner" skal du klikke på Alle tilknyttede pakker, DLC, demoer og værktøjer.
  3. Klik på titlen på den pakke, du forsøger at downloade
  4. Gennemgå sektionen Depoter inkluderet
  5. Brug Tilføj/fjern depoter for at sikre, at det korrekte depotsæt er tildelt pakken
Der er flere diskussionstråde om dette, som måske også kan hjælpe:

Når steamcmd.exe køres, giver det følgende fejl: "SteamUpdater: Error: Steam needs to be online to update. Please confirm your network connection and try again." (SteamUpdater: Fejl: Steam skal være online for at opdatere)

Løsning: Gå til Internetindstillinger->Forbindelser->LAN-indstillinger, og markér feltet Automatisk registrering af indstillinger.

Når app-buildet køres, giver det følgende fejl: "ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6." (FEJL! "DepotBuild for scriptname.vdf" fejlede – status = 6)

Mulige årsager:
  • Kontoen har ikke tilladelser til appen.
    • Kontrollér, at app-ID'et er korrekt i app_build.vdf.
    • Kontrollér, at build-kontoen har de nødvendige tilladelser til app-ID'et.
  • Steamcmd kan ikke finde depotindholdet.
    • Kontrollér, at "contentroot"-værdien i appen app_build-scriptet er en gyldig sti i forhold til scriptfilens placering.
    • Kontrollér, at "LocalPath"-værdien i depot_build-scriptet er en gyldig sti i forhold til app_build-scriptet. Kontrollér, at stien indeholder indhold.

Når app-buildet køres, giver det følgende fejl: "ERROR! Failed to get application info for app NNNNN (check login and subscription)" (FEJL! Kunne ikke få applikationsinformation for appen NNNNN (tjek login og abonnement))

Dette betyder, at Steam ikke kan hente oplysninger om applikationen, enten fordi de ikke findes, eller fordi brugeren ikke har adgang til applikationen.
  • Kontrollér, at NNNNN er det app-ID, du fik tildelt for appen.
  • Kontrollér, at app-ID'et er korrekt i app_build.vdf.
  • Hvis det er et nyt app-ID, skal du kontrollere, at konfigurationen af app-administratoren i Steamworks er blevet udgivet. Nye apps skal have en SteamPipe-installationsmappe på konfigurationsfanen, et depot på depotfanen, og alle ændringer skal være udgivet på udgivelsesfanen.
  • Hvis alt dette ser korrekt ud, skal du sikre, at din konto ejer app-ID'et.

"An error occurred while installing [AppName] (Invalid content configuration)" at launch time (Der opstod en fejl under installation af [AppName] (ugyldig indholdskonfiguration)", når spillet startes)

Mulige årsager:

"Error code 15", når spillet startes

Dette sker, når CEG-serverne afviser anmodningen til CEG om den eksekverbare fil. Tjek udgivelsesstatussen på spilsiden. Hvis der ikke står "Spilbart", skal du anmode om Steam-nøgler, der overskriver udgivelsesstatussen.

"The Steam Servers are too busy to handle your request... Error Code (2)" at launch time (Steam-serverne er for optagede til at håndtere til anmodning... Fejlkode (2), når spillet startes)

Dette sker, når CEG-serverne ikke kan finde en matchende eksekverbar CEG-fil. Dobbelttjek, at du har en fungerende eksekverbar CEG-fil i CEG-fanen i "App-administrator". Klik på statusknappen for at sikre, at den er der.

Jeg kan ikke huske, hvad steamcmd-kommandoen var, eller hvordan den virkede

Brug "find"-kommandoen i steamcmd for at søge efter steamcmd-kommandoer. Den finder delvise matches på kommandonavnet og viser kommandosyntaksen.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>