> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/publicacao/publishing.md).

# Publicação

Como publicar meu projeto?

## Antes de começar

Certifique-se do seguinte:

* A sua scene cumpre todas as [limitações da scene](/creator/content-creator-pt/scenes-sdk7/otimizacao/scene-limitations.md). A maioria destas é validada sempre que executa uma Preview da sua scene.
* Se quiser que a sua cena funcione bem para jogadores em dispositivos móveis, visualize-a e teste-a primeiro num dispositivo real — veja [Building for Mobile](/creator/content-creator-pt/criar-para-mobile/cliente-movel/overview.md) e [Prévia no mobile](/creator/content-creator-pt/criar-para-mobile/desenvolver/preview-on-mobile.md). Depois de publicada, a sua cena fica acessível a partir da app móvel Decentraland da mesma forma que no desktop.
* Você tem uma [Metamask](https://metamask.io/) conta, com as suas parcelas LAND atribuídas a ela.
* Você possui a quantidade necessária de parcels LAND adjacentes ou um NAME da Decentraland. Caso contrário, pode comprar LAND no [Mercado](https://market.decentraland.org) ou um NAME no [Marketplace](https://decentraland.org/shop/items?category=names).

{% hint style="warning" %}
\*\*📔 Nota\*\*: cenas com várias parcelas só podem ser implantadas em parcelas adjacentes.
{% endhint %}

{% hint style="danger" %}
**❗Aviso**: Ao planear eventos ao vivo, não faça alterações de última hora na scene mesmo antes do evento. Publique a sua versão final pelo menos uma hora antes de o evento começar.

Após cada publicação, um processo interno otimiza todos os modelos 3D antes de poderem ser renderizados. Isto normalmente demora apenas alguns segundos, mas pode demorar mais em cenas muito grandes ou quando os servidores estão ocupados. Até terminar, os jogadores recebem a versão anterior da sua cena.
{% endhint %}

## Ver dados da cena

Ao fazer o deploy, o CLI lê informações do *scene.json* ficheiro para determinar onde fazer o deploy da sua cena.

Abra o ficheiro *scene.json* da sua cena e complete os seguintes dados:

* **title**: O título é apresentado na UI por baixo do mini-map sempre que os jogadores entram na sua cena. Também é mostrado no pop-up de teleporte.
* **description**: Uma descrição do que os jogadores encontrarão na sua cena. Isto é apresentado no pop-up de teleporte.
* **navmapThumbnail**: Uma imagem que representa a sua cena. Isto é apresentado no pop-up de teleporte. A imagem deve ser um *.png* ou *.jpg* imagem com uma proporção de 16:9, com um tamanho recomendado de *1920x1080* pixéis. Mantenha tudo o que for essencial dentro do *1080x1080* quadrado central, já que algumas partes da plataforma mostram um recorte quadrado dela. Veja [miniatura da cena](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#scene-thumbnail).
* **Parcels**: As coordenadas das parcelas que serão ocupadas pela sua cena
* **Base**: As coordenadas da parcela que será considerada a coordenada \[0,0] da cena. Se a sua cena tiver várias parcelas, deve ser a parcela inferior esquerda (sudoeste).
* **spawnPoints**: Um conjunto de coordenadas dentro da cena (relativas à parcela base da cena) onde os jogadores aparecem. Por predefinição, os jogadores aparecem na *0,0,0* localização da cena (canto inferior esquerdo). Use isto para iniciar os jogadores num local específico, ou defina uma região para evitar que os jogadores se sobreponham uns aos outros quando aparecem pela primeira vez.
* **tags**: Um conjunto de tags que descrevem a sua cena. Isto ajuda os jogadores a explorar Decentraland, tornando mais fácil encontrar conteúdo de que estejam interessados. [Veja a lista de categorias disponíveis](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#categories).
* **campo de classificação**: Isto é usado para classificar o conteúdo da sua cena. Decentraland é uma plataforma 18+, por isso o valor a definir é `Um` para adultos. Veja [Classificação etária](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#age-rating).

{% hint style="warning" %}
**📔 Observação**: Veja [metadados da cena](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md) para mais detalhes sobre como definir estes parâmetros.
{% endhint %}

## Para publicar a cena

### Usando o Scene Editor no Creator Hub

O Scene Editor no Creator Hub oferece uma forma fácil de publicar as suas scenes. Certifique-se de que já [instalou o Creator Hub](/creator/content-creator-pt/scene-editor/primeiros-passos/editor-installation.md).

1. Abra o projeto da sua scene.
2. Clique no **Publish** botão no canto superior direito.
3. Uma mensagem perguntará se pretende publicar para um **WORLD** ou para **LAND**.
   * Selecione **PUBLICAR PARA WORLD** para tornar a sua cena disponível num dos seus [WORLDs](/creator/content-creator-pt/scenes-sdk7/publicacao/publishing-options.md#decentraland-worlds). Depois, selecione para qual dos seus NAMEs ou domínios ENS publicar.
   * Selecione **PUBLICAR PARA LAND** se possuir LAND, ou se lhe tiverem sido dadas permissões de deploy por um proprietário. Depois selecione as parcelas onde pretende que seja implantada no mapa. As parcelas onde tem permissão para fazer deploy são mostradas a rosa.
   * Selecione **Servidores alternativos** para publicar num [servidor personalizado](#custom-servers).

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a9b358ccf604ec11addf4852ce36c321e35745e0%2Fpublish-options.png?alt=media\&token=8790912e-6224-459d-94da-4d3d86816f2e)

4. Isto abre um novo separador no seu navegador, mostrando detalhes sobre o upload. Assine o deploy com a sua wallet. Isto é apenas uma assinatura para provar a propriedade, é gratuita e não envolve qualquer transação blockchain.
   * Para LAND numa conta do navegador Metamask, confirme o deploy. Depois assine a mensagem na extensão do navegador Metamask.
   * Para LAND ligada a uma wallet que pode usar via Wallet Connect, clique em **Conectar wallet**, depois digitalize o código QR com o seu dispositivo móvel e siga os passos no Wallet Connect.

### Via a CLI

1. Inicie sessão na sua conta Metamask com o mesmo endereço público associado às suas parcelas em Decentraland.
2. Execute `npm run deploy` da pasta da cena.

{% hint style="info" %}
\*\*💡 Dica\*\*: Se houver ficheiros na pasta do seu projeto que não queira fazer deploy, liste-os no ficheiro \_.dclignore\_ antes de fazer deploy.
{% endhint %}

3. Será aberto um separador do navegador, mostrando para que parcelas está a fazer deploy. Clique em **Assinar e Fazer Deploy**.
4. O Metamask abre, notificando-o de que a sua assinatura foi solicitada. Clique em **Assinar** para confirmar esta ação.

{% hint style="info" %}
**💡 Dica**: Se estiver a implementar um fluxo de integração contínua, em que as alterações à sua cena são implantadas automaticamente, então pode definir a variável de ambiente `export DCL_PRIVATE_KEY` para a chave privada de uma conta que tenha permissões de deploy.
{% endhint %}

{% hint style="info" %}
**💡 Dica**: `npm run deploy` executa uma `npm run build`compilação `npm run start`npm run start `npm run deploy -- --skip-build` para saltar a `npm run build` etapa e fazer o deploy da cena tal como está.
{% endhint %}

## Publicando em Worlds

Para publicar a sua cena num Decentraland World, precisa de possuir um Decentraland NAME ou um domínio ENS. Veja [Opções de publicação](/creator/content-creator-pt/scenes-sdk7/publicacao/publishing-options.md#decentraland-worlds) para informações sobre como obter um.

### Configurar scene.json

Tem de especificar sob que **name** será feito o deploy. Adicione a seguinte secção no seu `scene.json`:

```json
{
	"worldConfiguration": {
		"name": "my-name.dcl.eth"
	}
}
```

O **name** especificado em `scene.json` pode ser um Decentraland NAME ou um domínio ENS. Tem de ser propriedade da wallet que assina o deploy, ou de qualquer wallet à qual tenha sido dada permissão através de Access Control Lists (ACL).

Tenha o seguinte em mente:

* A wallet que assina o deploy tem de ser proprietária do NAME especificado em `scene.json` ficheiro
* A cena não tem limitações de parcelas (desde janeiro de 2023)
* Todos os Worlds são listados automaticamente na página Places, a menos que opte por não o fazer, conforme detalhado abaixo

### metadata do World

Um World tem o seu próprio nome, descrição e miniatura, separados dos metadados das scenes publicadas nele. Quando publica para um World vazio, ou para um World que contém uma única scene, os metadados do World são atualizados para corresponder aos metadados da scene em cada publicação. Se o World contiver mais de uma scene, os seus metadados são independentes: publicar uma scene não os altera, e só podem ser editados na **Gerenciar** secção do Creator Hub. Veja [Metadados do World vs metadados da cena](/creator/content-creator-pt/scene-editor/publicar/publish-scene.md#world-metadata-vs-scene-metadata).

### Orçamento de armazenamento dos Worlds

As scenes implantadas nos Worlds contam para um orçamento de armazenamento partilhado por todos os Worlds detidos pela sua wallet. O orçamento cresce com as suas holdings em Decentraland:

* Cada Decentraland NAME que possui concede 100 MB.
* Cada parcela LAND que possui concede mais 100 MB adicionais.
* Cada 2.000 MANA mantidos na sua wallet concede mais 100 MB adicionais.

É livre de distribuir este orçamento entre os seus Worlds como quiser. Por exemplo, com um orçamento de 500 MB poderia implantar uma scene de 300 MB e uma scene de 200 MB, ou cinco scenes de 100 MB. Worlds publicados em domínios ENS não retiram deste orçamento; em vez disso, têm um limite fixo de 36 MB por World.

Pode verificar quanto do seu orçamento está a ser usado e quanto resta em dois locais:

* O **Gerenciar** secção do Creator Hub. Clique **View Details** para uma repartição de como os seus ativos MANA, LAND e NAME se somam.
* O **Worlds** do [Builder](https://decentraland.org/builder/worlds).

Se exceder o seu orçamento (por exemplo, depois de vender ou transferir ativos), tem 48 horas para libertar espaço ou aumentar o seu orçamento antes de os seus Worlds ficarem inacessíveis. Veja [limites de tamanho dos Worlds](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/kinds-of-project.md#size-limits) para mais detalhes.

### Worlds com várias scenes

Por predefinição, ao fazer deploy para um world através do CLI, a sua scene será tratada como um world de uma única scene. Se o seu world já contiver uma scene, fazer deploy de uma nova scene irá substituir essa scene mais antiga, mesmo que as coordenadas sejam diferentes.

Para fazer deploy como um world com várias scenes, adicione o parâmetro `--multi-scene` ao comando de deploy:

`npm run deploy -- --multi-scene --target-content https://worlds-content-server.decentraland.org`

Ao usar este parâmetro, se a scene que está a publicar tiver coordenadas diferentes das scenes existentes nesse world, todas essas scenes existirão em conjunto.

{% hint style="warning" %}
\*\*📔 Nota\*\*: Se tiver direitos de operador num world de que não é proprietário, e lhe tiverem sido dados direitos apenas em parcelas específicas desse world, então só poderá publicar nessas parcelas e não poderá afetar o conteúdo de outras parcelas do world.
{% endhint %}

### Optar por não aparecer na listagem do Places

Se desejar optar por não ter os seus Worlds indexados no Places, pode adicionar a seguinte secção no seu `scene.json`:

```json
{
	"worldConfiguration": {
		"name": "my-name.dcl.eth",
		"placesConfig": {
			"optOut": true
		}
	}
}
```

### Usando o Scene Editor no Creator Hub

1. Abra o projeto da sua scene.
2. Clique no **Publish** botão no canto superior direito.
3. Selecione **PUBLICAR PARA WORLD**.
4. Selecione para qual dos seus NAMEs ou domínios ENS publicar.

### Via a CLI

Use o seguinte comando:

```bash
npm run deploy -- --target-content https://worlds-content-server.decentraland.org
```

Quando executar o comando, ser-lhe-á pedido que assine o deploy com a sua wallet e será executado um conjunto de validações para permitir ou rejeitar a scene.

### Aceder a um World

Depois de uma scene ser carregada para o servidor Worlds, pode aceder-lhe usando o Decentraland Explorer com o seguinte URL: `decentraland://?realm=NAME.dcl.eth`, onde `NAME` deve ser substituído pelo Decentraland NAME ou pelo domínio ENS para o qual fez o deploy.

Com o Decentraland já aberto, também pode ir para um world escrevendo o `/goto NAME.dcl.eth` comando na caixa de chat.

Veja [Tornar descobrível](/creator/content-creator-pt/scenes-sdk7/publicacao/make-discoverable.md) para mais informações sobre como tornar o seu World descobrível.

### Migrar um World para Genesis City

Se for proprietário de LAND e pretender fazer deploy de uma scene de World para Genesis City, pode fazê-lo fazendo novamente deploy da sua scene para a rede descentralizada Catalyst, que é o servidor de conteúdo de Genesis City.

Coisas a lembrar:

* Remova a `worldConfiguration` secção de `scene.json`
* A limitação de tamanho para Worlds (dinâmica com base nas holdings) é diferente da das parcelas LAND (15 MB por parcela), por isso certifique-se de que a sua scene tem o tamanho correto para deploys para Genesis City!

## Publicar a partir de uma hardware wallet

Em vez de guardar os seus tokens LAND numa conta Metamask, pode ser mais seguro guardá-los num dispositivo de hardware wallet, como um [Ledger](https://www.ledger.com/) ou um [Trezor](https://trezor.io/), que está fisicamente ligado ao seu computador.

Se estiver a utilizar um destes dispositivos, pode ligar a hardware wallet ao Metamask para permitir a assinatura de mensagens, mantendo os tokens mais seguros. Veja [este artigo da Metamask](https://metamask.zendesk.com/hc/en-us/articles/360020394612-How-to-connect-a-Trezor-or-Ledger-Hardware-Wallet) para instruções para ligar a sua conta.

Assim que a sua hardware wallet puder ser utilizada via Metamask, pode fazer deploy seguindo os mesmos passos como se os seus tokens estivessem numa conta Metamask.

## Substituição de scene

Quando uma nova scene é deployed, substitui o conteúdo mais antigo que existia nos parcels que ocupa.

Se uma scene que ocupa vários parcels for apenas parcialmente substituída por outra, todos os seus parcels são substituídos ou apagados.

Suponha que fez deploy da sua scene *Um* em dois parcels *\[100, 100]* e *\[100, 101]*. Depois vende o parcel *\[100, 101]* a um utilizador que possui land adjacente e que faz deploy de uma scene grande (*B*) para vários parcels, incluindo *\[100, 101]*.

A sua scene *Um* não pode ser renderizada parcialmente num único parcel, por isso *\[100, 100]* não mostrará qualquer conteúdo. Tem de construir uma nova versão da scene *Um* que ocupe apenas um parcel e fazer deploy apenas para o parcel *\[100, 100]*.

## O que são os servidores de conteúdo

Os servidores de conteúdo são uma rede de servidores pertencentes à comunidade, com um sistema de ficheiros endereçado por conteúdo, o que significa que cada ficheiro é identificado pelo seu conteúdo e não por um nome de ficheiro arbitrário.

Usamos os servidores de conteúdo para alojar e distribuir todo o conteúdo da scene de uma forma semelhante ao BitTorrent, mantendo a rede Decentraland distribuída.

1. Os servidores de conteúdo armazenam e distribuem todos os assets necessários para renderizar as suas scenes.
2. O `npm run deploy` comando liga estes assets à parcela LAND especificada no seu **scene.json** ficheiro. Sempre que voltar a fazer deploy da sua scene, os servidores de conteúdo atualizam os seus registos para apontar as parcelas para o conteúdo mais recente. Fazer deploy não envolve qualquer transação blockchain; apenas assina a nova entidade da scene com a sua wallet para provar a propriedade.

A informação em cada cópia do servidor é verificável, uma vez que cada scene é assinada pelo hash do proprietário da LAND. Isto significa que alguém que hospede uma cópia do servidor não conseguirá adulterar o conteúdo para mostrar algo ilegítimo. A comunidade também pode votar para aprovar ou remover qualquer um destes servidores usando a DAO.

## servers personalizados

Pode fazer deploy de conteúdo para um servidor personalizado que não pertence à rede oficial de servidores catalyst mantida pela DAO. Para isso, não precisa de possuir quaisquer tokens LAND ou NAME, pois pode configurar o servidor para usar a lógica de validação que preferir para controlar quem pode fazer deploy e onde. Os servidores personalizados podem optar por incluir conteúdo dos servidores oficiais (que pode sobrescrever), ou começar do zero e publicar conteúdo totalmente novo.

Veja o [repositório catalyst-owner](https://github.com/decentraland/catalyst-owner) para mais informações sobre o que pode fazer com o seu próprio server e como configurá-lo.

{% hint style="warning" %}
**📔 Observação**: Os players terão de escrever manualmente um URL para aceder ao seu custom server. Algumas validações de serviços como o [rewards server](/creator/content-creator-pt/recompensas/getting-started.md) podem falhar nestes contextos, já que frequentemente estes serviços exigem que o pedido venha de um server oficial.
{% endhint %}

Os players nunca são direcionados para este server; a única forma de aceder é escrever explicitamente o URL para se ligar a ele.

### Via a CLI

Para fazer deploy para um servidor personalizado, execute:

`npm run deploy -- --target <CUSTOM SERVER DOMAIN>`

O URL para entrar na sua scene implantada no seu servidor personalizado dependerá do domínio onde está alojado.

## Verificar sucesso do deployment

Depois de fazer deploy da sua scene, estas alterações podem demorar alguns minutos a ser propagadas pelos vários servidores de conteúdo da rede. Se entrar em Decentraland logo após fazer deploy, poderá ainda ver brevemente a versão anterior do seu conteúdo.

Se estiver a usar o CLI para fazer deploy, a dapp de assinatura começará a apresentar confirmações de que a nova versão do seu conteúdo foi propagada por todos os servidores da rede.

Verá uma lista de cada um dos servidores que compõem a rede de conteúdo de Decentraland. Para cada servidor, é especificado o timestamp da última alteração carregada nessa parcela. Cada servidor corresponde a um realm diferente. Pode ver como estes nomes de servidores se mapeiam para nomes de realms no [ecrã de monitorização do catalyst](https://decentraland.github.io/catalyst-monitor/).

A propagação é apenas parte do quadro: após o upload, os modelos 3D da scene são convertidos em conjuntos de assets otimizados para cada plataforma (Windows e Mac). Até essa conversão terminar, os jogadores recebem deliberadamente a última versão da sua scene que estava totalmente funcional. Normalmente isto demora apenas alguns segundos, mas pode demorar mais em cenas muito grandes ou quando os servidores estão ocupados. Pode consultar diretamente o progresso da conversão, veja [Verifique o estado da conversão](/creator/content-creator-pt/scene-editor/publicar/publish-scene.md#check-the-conversion-status).

Também pode obter a informação de propagação em qualquer momento executando o seguinte comando na consola da linha de comandos:

`npx @dcl/opscli pointer-consistency --pointer 0,0`

{% hint style="warning" %}
**📔 Observação**: Use as coordenadas da sua scene em vez de `0,0`. Se a sua scene tiver várias parcelas, qualquer uma das suas parcelas produzirá o mesmo resultado. Se as coordenadas começarem com um número negativo, adicione uma `\\` no início das coordenadas para evitar que o `-` carácter seja interpretado incorretamente pela linha de comandos.
{% endhint %}

## Deploys automáticos

Se faz alterações regularmente ao conteúdo da sua scene e quer implementar uma pipeline de publicação simplificada, pode automatizar o deploy da sua scene através de uma ação do GitHub.

Para isso, tem primeiro de guardar a sua scene num projeto GitHub. Depois, pode configurar uma [ação do GitHub](https://docs.github.com/en/actions) com o seguinte script, que é executado sempre que há um merge para a `main` branch. O script instala quaisquer dependências, compila o projeto e depois faz deploy para Decentraland.

```yaml
name: Deploy to DCL PROD

on:
  push:
    branches:
      - main

env:
  DCL_PRIVATE_KEY: ${{ secrets.DCL_PRIVATE_KEY }}

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install npm packages
        run: |
          npm install
      - name: Build scene
        run: |
          npm run build
      - name: Deploy scene
        run: |
          npm run deploy
```

> Importante: Para que este processo seja executado, tem de definir a chave privada de uma wallet como variável de ambiente no GitHub, que é usada para assinar o deploy. Como sempre, tenha muito cuidado ao manter chaves privadas seguras. NÃO use a chave privada da conta que realmente possui os tokens de terra, pois isso representaria riscos de segurança significativos. Em vez disso, delegue os direitos de operador a uma wallet descartável que não possua quaisquer tokens valiosos. Se esta chave privada alguma vez for exposta, pode facilmente revogar esses direitos de operador dessa conta e configurar uma nova wallet.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/publicacao/publishing.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
