> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Suporte a Games-as-a-Service (GaaS)

> Suporte a Games-as-a-Service (GaaS)

Em vez de ser um jogo independente lançado em um momento específico, alguns jogos estão
migrando para um modelo em que são tratados como serviço, recebendo temporadas ou atualizações que mantêm esses
jogos atualizados por muitos anos. Esse modelo é chamado de Games-as-a-Service (GaaS). O GDK oferece um bom
suporte a esse modelo. Este documento fornece uma visão geral das práticas recomendadas a serem consideradas ao
usar o GDK para dar suporte à publicação de um jogo como serviço.

## Adoção do GDK

Cada GDK tem suporte por apenas um ano. Embora os jogos existentes possam continuar sendo lançados usando um GDK
descontinuado, isso pode ser problemático para jogos lançados como serviço. Jogos que introduzem novos recursos depois
que um GDK foi descontinuado podem encontrar bugs ou problemas de integração que não foram vistos em casos de uso
anteriores do GDK. Da mesma forma, o jogo pode querer aproveitar recursos encontrados apenas nos GDKs mais recentes
que estão sendo lançados.

Um jogo deve ser compilado com um único GDK. Os jogos não podem misturar componentes de um GDK com outro. No
console, o jogo inclui apenas um único Game OS, e as várias bibliotecas do GDK podem ter
dependências desse sistema operacional subjacente. No PC, apenas uma versão do runtime de jogos é carregada no
processo do jogo, criando um ambiente de "versão única" semelhante ao visto no console.

É recomendável que os títulos GaaS atualizem periodicamente para um GDK lançado mais recentemente que ainda tenha
suporte.

## Intelligent Delivery

Os títulos GaaS podem ficar cada vez maiores ao longo dos anos com a introdução de novo conteúdo. Os jogadores
podem ter quantidades limitadas de espaço de armazenamento. Isso pode afetar a capacidade deles de instalar a
atualização mais recente do jogo. Embora seja verdade que os jogadores podem gerenciar seus próprios espaços de armazenamento,
jogos criados com [Intelligent Delivery](/pt-BR/build/core-features/common/packaging/overviews/intelligentdelivery) dão ao jogador mais flexibilidade e
opções sobre como usar seu espaço de armazenamento, além de desinstalar jogos inteiros, e permitem que
os jogadores mantenham mais jogos instalados em seus dispositivos por muito mais tempo.

Usando o Intelligent Delivery, os jogos podem aproveitar
[recursos e receitas](/pt-BR/build/core-features/common/packaging/intelligentdelivery-features-recipes), escolhendo o que é instalado por
padrão e dando aos jogos a capacidade de gerenciar quais partes do jogo desejam manter instaladas
e quais partes podem querer remover porque não as estão mais usando.

Os títulos GaaS podem optar por colocar seu novo conteúdo em recursos separados para permitir esse tipo de
gerenciamento. A ideia é que o novo conteúdo seja um [durável](https://learn.microsoft.com/build/store/commerce/fundamentals/xstore-dwobs). Aqui está uma sugestão
que facilitaria esse gerenciamento:

1. No arquivo de layout do jogo, faça com que cada durável corresponda a um **Feature**.
2. O **Feature** declarará uma ou mais **Tags** que podem ser usadas para indicar quais
   blocos no arquivo de layout devem ser instalados se o jogador tiver uma licença para esse conteúdo.
3. Certifique-se de que o arquivo de layout inclua uma **Recipe** que tenha um filho Store ID. Essa receita
   deve referenciar um único recurso que corresponda ao mesmo Store ID. Adicionar a receita
   garantirá que, se o jogador tiver comprado esse conteúdo anteriormente, ele será instalado
   automaticamente.
   > \[!NOTE]
   > Pode haver outros recursos e receitas que não têm nenhuma relação com duráveis.

Seguir essa recomendação significa que os jogos podem então:

1. Chamar [XPackageEnumerateFeatures](/pt-BR/reference/system/xpackage/functions/xpackageenumeratefeatures) para enumerar os recursos.
2. Usar o Store ID retornado que está em [XPackageFeature](/pt-BR/reference/system/xpackage/structs/xpackagefeature) para verificar a
   licença, consultar mais detalhes ou invocar fluxos de compra da loja.

Todos os jogos com mais de 40 GB devem considerar fortemente o uso do
[Intelligent Delivery](/pt-BR/build/core-features/common/packaging/overviews/intelligentdelivery). Os jogos podem considerar o uso de duráveis para dar suporte a GaaS.

## Conteúdo para download

Em vez de evoluir continuamente seu pacote base, alguns títulos GaaS podem optar por evoluir ao longo dos
anos usando [conteúdo para download (DLC)](/pt-BR/build/core-features/common/packaging/packaging-downloadable-content-dlc). Os jogos podem optar
por colocar ativos ou código executável nesse DLC. Com código executável, há dois caminhos
possíveis: DLLs e EXEs.

Se o jogo colocar DLLs em seu DLC, ele poderá:

1. Montar esse DLC usando [XPackageMountWithUiAsync](/pt-BR/reference/system/xpackage/functions/xpackagemountwithuiasync).
2. Usar [LoadLibraryEx](https://learn.microsoft.com/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa).
3. Todo DLC montado anteriormente permanece montado.

Se o jogo colocar um EXE em seu DLC, ele poderá:

1. Montar esse DLC usando [XPackageMountWithUiAsync](/pt-BR/reference/system/xpackage/functions/xpackagemountwithuiasync).
2. Chamar [XLaunchNewGames](/pt-BR/reference/system/xgame/functions/xlaunchnewgame) usando o caminho do DLC montado.
3. O processo do jogo existente será encerrado.
4. Todo DLC, exceto o destino de **XLaunchNewGames**, será desmontado.
5. A unidade **G:** continuará apontando para a raiz do pacote base e não para o EXE recém-
   iniciado.

É recomendável que os jogos que colocam código executável em seu DLC acessem esse código executável usando
[LoadLibraryEx](https://learn.microsoft.com/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa).

## Documentação de referência da API

* [XPackage (conteúdo da API)](/pt-BR/reference/system/xpackage/xpackage_members)
  * Funções
    * [XPackageEnumerateFeatures](/pt-BR/reference/system/xpackage/functions/xpackageenumeratefeatures)
    * [XPackageMountWithUiAsync](/pt-BR/reference/system/xpackage/functions/xpackagemountwithuiasync)
  * Estruturas
    * [XPackageFeature](/pt-BR/reference/system/xpackage/structs/xpackagefeature)
* [xgame (conteúdo da API)](/pt-BR/reference/system/xgame/xgame_members)
  * Funções
    * [XLaunchNewGames](/pt-BR/reference/system/xgame/functions/xlaunchnewgame)

## Confira também

[Conteúdo para download (DLC)](/pt-BR/build/core-features/common/packaging/packaging-downloadable-content-dlc)
[Recursos e receitas](/pt-BR/build/core-features/common/packaging/intelligentdelivery-features-recipes)
[Intelligent Delivery](/pt-BR/build/core-features/common/packaging/overviews/intelligentdelivery)
[XPackageMountWithUiAsync](/pt-BR/reference/system/xpackage/functions/xpackagemountwithuiasync)


## Related topics

- [Games-as-a-Service(GaaS) 지원](/ko/build/core-features/common/packaging/supporting-games-as-a-service.md)
- [Compatibilidad con Games-as-a-Service (GaaS)](/es/build/core-features/common/packaging/supporting-games-as-a-service.md)
- [Games-as-a-Service (GaaS) のサポート](/ja-jp/build/core-features/common/packaging/supporting-games-as-a-service.md)
- [Supporting Games-as-a-Service (GaaS)](/build/core-features/common/packaging/supporting-games-as-a-service.md)
- [XLaunchNewGame](/ja-jp/reference/system/xgame/functions/xlaunchnewgame.md)
