> 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

## 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 você executa uma preview da sua scene.
* Se quiser que a sua scene funcione bem para jogadores em dispositivos móveis, faça primeiro a preview e teste-a num dispositivo real — veja [Building for Mobile](/creator/content-creator-pt/scenes-sdk7/criar-para-mobile/building-for-mobile.md) e [Preview on mobile](/creator/content-creator-pt/scenes-sdk7/criar-para-mobile/preview-on-mobile.md). Depois de publicada, a sua scene fica acessível a partir da app móvel da Decentraland da mesma forma que no desktop.
* Você tem uma [Metamask](https://metamask.io/) account, com os seus parcels de LAND atribuídos a ela.
* Você possui a quantidade necessária de parcels de LAND adjacentes ou um Decentraland NAME. Caso contrário, você pode comprar LAND no [Market](https://market.decentraland.org) ou um NAME no [Builder](https://decentraland.org/builder/names).

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

{% hint style="danger" %}
**❗Aviso**: Ao planear eventos ao vivo, certifique-se de não fazer alterações de última hora na scene mesmo antes do evento.

Após cada publicação, um processo interno otimiza todos os modelos 3D antes que possam ser renderizados. Isso leva cerca de 15 minutos. Se você visitar a scene antes disso terminar, ela pode parecer com problemas. Esse processo é executado mesmo se todos os modelos 3D já tiverem sido publicados anteriormente.
{% endhint %}

## Verificar dados da scene

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

Abra o *scene.json* file da sua scene e preencha os seguintes dados:

* **title**: O título é exibido na UI por baixo do mini-map, sempre que os jogadores entram na sua scene. Também é apresentado no popup de teleport.
* **description**: Uma descrição do que os jogadores encontrarão na sua scene. Isto é exibido no popup de teleport.
* **navmapThumbnail**: Uma imagem que representa a sua scene. Isto é exibido no popup de teleport. A imagem deve ser um *.png* ou *.jpg* imagem com um tamanho recomendado de *228x160* pixels.
* **Parcels**: As coordenadas dos parcels que serão ocupados pela sua scene
* **Base**: As coordenadas do parcel que será considerado a coordenada \[0,0] da scene. Se a sua scene tiver vários parcels, deve ser o parcel inferior esquerdo (Sudoeste).
* **spawnPoints**: Um conjunto de coordenadas dentro da scene (relativas ao parcel base da scene) onde os jogadores aparecem. Por predefinição, os jogadores aparecem na *0,0,0* localização da scene (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 scene. Estas ajudam os jogadores a explorar a Decentraland, facilitando encontrar conteúdo de que tenham interesse. [Veja a lista de tags disponíveis](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#tags).
* **rating**: Isto é usado para classificar o conteúdo da sua scene com base na sua adequação a diferentes faixas etárias (`T` para Teens ou `A` para Adults). Ajuda a filtrar conteúdo para os jogadores.

{% hint style="warning" %}
**📔 Nota**: Veja [scene metadata](/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 scene

### 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á [instalado o Creator Hub](/creator/content-creator-pt/scene-editor/comecar/editor-installation.md).

1. Abra o projeto da sua scene.
2. Clique no **Publish** button no canto superior direito.
3. será apresentada uma mensagem a perguntar se pretende publicar num **WORLD** ou num **LAND**.
   * Selecione **PUBLISH TO WORLD** para disponibilizar a sua scene num dos seus [WORLDs](/creator/content-creator-pt/worlds/about.md). Em seguida, selecione em qual dos seus NAMEs ou ENS Domains pretende publicar.
   * Selecione **PUBLISH TO LAND** se for proprietário do land, ou se lhe tiverem sido concedidas permissões de deploy pelo proprietário. Em seguida, selecione os parcels onde pretende fazer o deploy no mapa. Os parcels onde lhe é permitido fazer deploy aparecem a cor-de-rosa.
   * Selecione **Servidores alternativos** para publicar no [test server](#the-test-server) ou um [custom server](#custom-servers).

![](/files/442be405dc54dd7d42dd5ffb8f4afc25928c651b)

4. Isto abre um novo separador no seu browser, mostrando os detalhes do upload. Aprove a transação.
   * Para LAND numa conta do Metamask no browser, confirme o deploy. Depois aprove a transação na extensão do Metamask no browser.
   * Para LAND ligado a uma wallet que pode usar via Wallet Connect, clique em **Connect wallet**, depois leia 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 do Metamask com o mesmo endereço público associado aos seus parcels na Decentraland.
2. Execute `npm run deploy` a partir da pasta da scene.

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

3. Abrirá um separador no browser, mostrando para quais parcels está a fazer deploy. Clique em **Sign and Deploy**.
4. O Metamask abre, notificando que a sua assinatura foi solicitada. Clique em **Sign** 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 scene são feitas deploy automaticamente, então pode definir a variável de ambiente `export DCL_PRIVATE_KEY` para a private key de uma conta que tenha permissões de deploy.
{% endhint %}

{% hint style="info" %}
**💡 Dica**: `npm run deploy` executa um `npm run build`, que verifica a scene quanto a erros de tipo de forma mais rigorosa do que executar `npm run start`. Se estes erros não puderem ser evitados (por exemplo: acontecem numa biblioteca externa) e não afetarem a scene, pode usar `npm run deploy --skip-build` para ignorar o passo `npm run build` e fazer deploy da scene tal como está.
{% endhint %}

## Publicar em Worlds

Para publicar a sua scene numa Decentraland World, precisa de ser proprietário de um Decentraland NAME ou de um domínio ENS. Veja [Publishing Options](/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** o seu deploy será feito. Adicione a seguinte secção no seu `scene.json`:

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

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

Tenha em conta o seguinte:

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

### Worlds com várias scenes

Por predefinição, ao fazer deploy para um world via a 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 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, estas scenes existirão todas em conjunto.

{% hint style="warning" %}
\*\*📔 Nota\*\*: Se tiver direitos de operador sobre um world que não lhe pertence, e lhe forem concedidos direitos apenas em parcels específicos desse world, então só conseguirá publicar nesses parcels e não poderá afetar o conteúdo de outros parcels do world.
{% endhint %}

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

Se quiser optar por não ter os seus Worlds indexados em 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** button no canto superior direito.
3. Selecione **PUBLISH TO WORLD**.
4. Selecione em qual dos seus NAMEs ou ENS Domains pretende publicar.

### Via a CLI

Use o seguinte comando:

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

Assim que executar o comando, será solicitado 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

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

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

Veja [Tornar descobrível](https://github.com/decentraland/docs/blob/main/creator/sdk7/projects/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 um LAND e quiser fazer deploy de uma scene de World para a Genesis City, pode fazê-lo ao voltar a fazer deploy da sua scene para a rede descentralizada Catalyst, que é o content server da Genesis City.

Lembre-se do seguinte:

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

## Publicar a partir de uma hardware wallet

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

Se estiver a usar um destes dispositivos, pode ligar a hardware wallet à 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 sobre como ligar a sua conta.

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

## Sobrescrita de scene

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

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

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

A sua scene *A* não pode ser renderizada parcialmente em apenas um parcel, por isso *\[100, 100]* não mostrará qualquer conteúdo. Você deve construir uma nova versão da scene *A* que ocupe apenas um parcel e fazer deploy apenas no parcel *\[100, 100]*.

## O que são os content servers

Os content servers são uma rede de servidores pertencentes à comunidade com um filesystem baseado em content-addressed, o que significa que cada ficheiro é identificado pelo seu conteúdo, e não por um nome de ficheiro arbitrário.

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

1. Os content servers armazenam e distribuem todos os assets necessários para render as suas scenes.
2. O `npm run deploy` o comando associa estes assets ao parcel de LAND especificado no seu **scene.json** file. Sempre que voltar a fazer deploy da sua scene, a CLI atualizará o seu smart contract de LAND, se necessário, para apontar para o conteúdo mais recente disponível nos content servers.

A informação em cada cópia do servidor é verificável, pois cada scene é assinada pelo hash do proprietário do LAND. Isto significa que alguém que aloje 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 o DAO.

## O servidor de teste

Pode fazer deploy de conteúdo para o test catalyst server para executar testes completos com vários utilizadores, as scenes circundantes e um ambiente idêntico ao de produção. O test server é idêntico a todos os outros catalyst servers. A diferença é que o conteúdo feito deploy para este servidor não é propagado para os outros. No entanto, o conteúdo feito deploy para outros servidores é propagado para este servidor, por isso as scenes circundantes devem parecer como irão parecer em produção.

{% hint style="warning" %}
**📔 Nota**: Para fazer deploy para parcels no servidor de teste, você deve ter as mesmas permissões exigidas para fazer deploy para esses parcels na main network.
{% endhint %}

Os jogadores nunca são direcionados para este servidor; a única forma de aceder é fornecer explicitamente um parâmetro URL para se ligar a ele.

Se estiver a trabalhar num projeto confidencial que não quer revelar até ao lançamento, note que o servidor de teste está relativamente escondido dos jogadores, mas qualquer pessoa a usar explicitamente a URL do servidor de teste poderia potencialmente entrar nele.

### Via a CLI

Para fazer deploy para o test server, execute:

`npm run deploy -- --target peer-testing.decentraland.org`

Para entrar no content server, adicione `&CATALYST=peer-testing.decentraland.org` ao URL da Decentraland

*<https://play.decentraland.org/?CATALYST=peer-testing.decentraland.org>*

## Servidores personalizados

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

Veja [Como executar o seu próprio Catalyst Node](https://github.com/decentraland/docs/blob/main/creator/tutorials/how-to-run-a-catalyst.md) para mais informações sobre o que pode fazer com o seu próprio servidor e como configurá-lo.

{% hint style="warning" %}
**📔 Nota**: Os jogadores terão de escrever manualmente um URL para aceder ao seu servidor personalizado. Algumas validações de serviços como o [servidor de rewards](https://github.com/decentraland/docs/blob/main/creator/sdk7/rewards/getting-started.md) ou o [servidor de quests](https://github.com/decentraland/docs/blob/main/creator/sdk7/deprecated/quests/overview.md) podem falhar nestes contextos, pois muitas vezes estes serviços exigem que o pedido venha de um servidor oficial.
{% endhint %}

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

### Via a CLI

Para fazer deploy para um custom server, execute:

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

O URL para entrar na sua scene feita deploy no seu custom server dependerá do domínio onde está alojada.

## Verifique o sucesso do deployment

Assim que fizer deploy da sua scene, estas alterações levarão alguns minutos a propagar-se pelos vários content servers da rede. Se entrar na Decentraland logo após fazer deploy, poderá ainda ver a versão anterior do seu conteúdo, dependendo do realm em que entrar.

Depois de assinar para autorizar o deploy da sua scene, a dapp de assinatura começará a mostrar 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 content network da Decentraland. Para cada servidor, é indicado o timestamp da última alteração carregada nesse parcel. Cada servidor refere-se a um realm diferente. Pode ver como estes nomes de servidor correspondem aos nomes de realm no [ecrã de monitorização do catalyst](https://decentraland.github.io/catalyst-monitor/).

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

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

{% hint style="warning" %}
**📔 Nota**: Use as coordenadas da sua scene em vez de `0,0`. Se a sua scene tiver vários parcels, qualquer um dos seus parcels 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 `-` caracter seja mal interpretado pela linha de comandos.
{% endhint %}

## Deploys automáticos

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

Para isso, primeiro tem de armazenar a sua scene num projeto do GitHub. Depois pode definir 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, faz build do projeto e depois faz deploy para a 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:ci
      - name: Deploy scene
        run: |
          npm run deploy:prod
```

> Importante: Para este processo funcionar, tem de definir a private key de uma wallet como variável de ambiente no GitHub, que será usada para assinar o deploy. Como sempre, tenha muito cuidado para manter as private keys seguras. NÃO use a private key da conta que realmente possui os tokens de land, 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 tokens valiosos. Se esta private key alguma vez for exposta, pode revogar facilmente esses direitos de operador da 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
