# Smart Wearables

Smart wearables são um tipo de scene global. Como [portable experiences](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/portable-experiences.md), são gameplay que os players levam consigo à medida que se movem pelo metaverse. Por exemplo, ao executar uma scene global, um player poderia pegar uma bola de neve do chão em Genesis Plaza, caminhar até outra scene e atirar a bola de neve em outro player que também esteja jogando o mesmo game.

Smart wearables são experiências portáteis que são ativadas quando o player veste uma determinada peça de roupa. Smart wearables podem conceder aos players novas abilities, como um jetpack que permite voar, ou adicionar uma nova camada de content por cima do resto do world, como posicionar aleatoriamente moedas para serem coletadas por todo o Genesis City.

{% hint style="warning" %}
**📔 Nota**: Smart Wearables só podem ser criados usando SDK 7.

O **Creator Hub** não oferece suporte atualmente à criação de projetos de Smart Wearables.
{% endhint %}

## Getting started

### Usando a CLI

1. Abra uma command line em uma nova folder e execute

`npx @dcl/sdk-commands init --project smart-wearable`

Este comando cria os arquivos básicos e a structure para um novo smart wearable.

## Os arquivos no template

A folder de um projeto novinho em folha de Smart Wearable é muito semelhante à de uma [Decentraland scene](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-files.md), mas você notará as seguintes diferenças:

* `wearable.json` inclui todos os metadata da portable experience
* Há um modelo 3D placeholder (glasses.glb) e uma thumbnail (glasses.png) para um par de óculos escuros. Você deve substituí-los pelo wearable real que está criando
* `scene.json` é bem menor; não inclui properties irrelevantes para um wearable, como parcels ou spawn points

## Sobre wearable.json

O `wearable.json` file padrão parece com isto:

```json
{
	"data": {
		"replaces": [],
		"hides": [],
		"tags": ["special", "new", "eyebrows"],
		"representations": [
			{
				"bodyShapes": [
					"urn:decentraland:off-chain:base-avatars:BaseMale",
					"urn:decentraland:off-chain:base-avatars:BaseFemale"
				],
				"mainFile": "glasses.glb",
				"contents": ["glasses.glb"],
				"overrideHides": [],
				"overrideReplaces": []
			}
		],
		"category": "eyewear"
	},
	"name": "Portable Experience Example",
	"description": "Este recurso está em estado Alpha.",
	"rarity": "mythic"
}
```

Os seguintes fields são obrigatórios em `wearable.json`:

* `id`: ID exclusivo do smart wearable.
* `name`: O nome do wearable que os users verão no marketplace
* `description`: A descrição do wearable que os users verão no marketplace. Certifique-se de indicar o que o smart wearable pode fazer, pois os users do marketplace não terão como fazer preview da sua funcionalidade antes de comprá-lo.
* `rarity`: A oferta de raridade do token. Os valores possíveis são:
  * unique (1 cópia)
  * mythic (10 cópias)
  * exotic (50 cópias)
  * legendary (100 cópias)
  * epic (1000 cópias)
  * uncommon (10.000 cópias)
  * common (100.000 cópias)

{% hint style="warning" %}
**📔 Nota**: Se você fez fork do seu project a partir de um existente, certifique-se de que o `id` value seja único antes de publicar seu wearable. Use [uuidgenerator.net](https://www.uuidgenerator.net/) para gerar um novo UUID aleatório
{% endhint %}

Os seguintes fields também podem ser incluídos opcionalmente. Essas settings também podem ser configuradas na UI do Builder, depois que você fizer upload do smart wearable.

* `dados`: Inclui o seguinte
  * `substitui`: Lista de categorias de outros wearables que devem ser removidos ao vestir este wearable, além do padrão desta category. Ex.: ao vestir uma capa de upper body, esconda também os feet.
  * `hides`: Lista de categorias de outros wearables que devem ser ocultadas (mas não removidas) ao vestir este wearable, além do padrão desta category.
  * `tags`: Tags usadas para tornar o wearable pesquisável no marketplace.
  * `representations`:
    * `bodyShapes`: A lista de representations de avatar que podem usar este wearable. Todos os smart wearables devem estar disponíveis para os body shapes masculino e feminino.
    * `mainFile`: O file principal com o modelo 3D do wearable.
    * `contents`: A lista completa de files usados para render o modelo 3D do wearable. Por exemplo, o modelo 3D pode incluir textures como files separados.
    * `overrideHides`: Quaisquer exceções ao comportamento padrão de *hide* desta category de wearable.
    * `overrideReplaces`: Quaisquer exceções ao comportamento padrão de *replace* desta category de wearable.
  * `category`: Qual category de wearable usar. Os valores possíveis são:
    * 'eyebrows'
    * 'eyes'
    * 'facial\_hair'
    * 'hair'
    * 'mouth'
    * 'upper\_body'
    * 'lower\_body'
    * 'feet'
    * 'earring'
    * 'eyewear'
    * 'hat'
    * 'helmet'
    * 'mask'
    * 'tiara'
    * 'top\_head'
    * 'skin'
    * 'hands\_wear'
* `menuBarIcon`: Image a ser usada no menu de “experiences”, para representar esta portable experience. Esta image deve estar no nível raiz da sua folder. O tamanho recomendado da image é 256x256.
* `model`: O modelo 3D a ser usado para o wearable. Este file deve estar no nível raiz da sua folder.
* `bodyShape`: O body type do avatar com o qual este wearable é compatível. Valores possíveis:
  * male
  * female
  * both
* `collectionAddress`: O endereço ethereum da coleção de wearables publicada. Este endereço é atribuído após a publicação; ele pode ser deixado em branco.

## A thumbnail

Você deve incluir uma image chamada `thumbnail.png` no nível raiz da sua folder. Esta image será mostrada tanto na backpack quanto no marketplace, para representar seu wearable em 2D. O tamanho recomendado e obrigatório da image é 256x256.

Escolha uma image que defina as expectativas dos players e represente corretamente sua criação.

## O Preview

Executar o preview de uma portable experience é igual a executar o de uma scene; basta clicar em **Run Scene** na aba Decentraland, ou executar `npm run start` na command line. Se o `wearable.json` file estiver configurado corretamente e o project for reconhecido como um smart wearable, você notará que tudo o que está visível ao seu redor são os parcels vazios padrão. Neste modo de preview, você não fica restrito a um conjunto fixo de parcels; você pode adicionar modelos 3D ou sounds em qualquer lugar do world.

Para testar como o smart wearable se comporta no contexto de uma scene, você também pode executar um preview do seu wearable ao mesmo tempo em que executa o preview de uma ou várias scenes usando um [Workspace](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/workspaces.md). Por exemplo, você pode executar seu smart wearable junto com a [Genesis Plaza](https://github.com/decentraland-scenes/Genesis-Plaza) scene para testar como ele se comporta em uma scene movimentada, enquanto em um elevador, etc.

## Dicas

* Ao posicionar uma entity, observe que as positions são globais, relativas às coordinates 0,0 da Genesis Plaza.
* Para reagir a players próximos:
  * Consulte [Obter todos os players](/creator/content-creator-pt/scenes-sdk7/interatividade/user-data.md#fetch-all-players) para saber como obter data de outros players ao redor.
  * Tenha em mente que o loading do smart wearable, das scenes ao redor e de outros players pode ocorrer em ordens diferentes dependendo da situação. Se o player entrar no Decentraland já com o smart wearable vestido, é provável que a sua global scene seja carregada antes dos outros players. Por outro lado, se o player carregar primeiro em uma scene e depois vestir o wearable, é provável que os outros players já tenham carregado até o momento em que a scene do wearable comece a executar.
  * Para experiências multiplayer, espere até que o player esteja conectado a uma ilha dentro do seu realm. Busque os dados do realm e verifique o field ‘room’. Se o field ‘room’ for null, o player ainda não está conectado a uma ilha e os outros players ainda não serão carregados. Você pode verificar isso periodicamente a cada 1 segundo até que o field ‘room’ esteja presente, e só então inicializar sua lógica.
* Para interagir com scenes ao redor:
  * Você não pode enviar instruções diretamente para scenes próximas ou outras portable experiences; o `messageBus` está atualmente isolado em sandbox para cada portable experience/scene.
  * Você pode usar um server intermediário para enviar information entre a portable experience e uma scene.
  * Se você fizer um raycast, poderá detectar hits contra os colliders de entities das scenes ao redor. Isso pode informar o ponto exato do hit, a normal direction e até o nome da entity e o nome do mesh do modelo 3D. Isso só funciona ao atingir entities em scenes escritas com SDK7.
* Kill uma portable experience: execute o `kill()` method para encerrar uma portable experience por auto-terminação.

## Publish

Para publicar seu smart wearable:

1. Certifique-se de que as information em `wearable.json` estejam corretas. Se você usou outro project como ponto de partida, certifique-se de que o `id` seja um identificador exclusivo, não usado por outros wearables.
2. Execute `npm run pack` na folder do seu project. Isso gera um `smart-wearable.zip` file na folder do seu project.

{% hint style="warning" %}
**📔 Nota**: O output de `npm run pack` indicará o size do project exportado e descomprimido; ele deve ficar abaixo de 3MB. Se for maior do que isso, não será aceito pelo builder.
{% endhint %}

3. Abra o Builder, abra a aba Collections, clique em + para fazer upload de um novo wearable.
4. Arraste seu `smart-wearable.zip` file compactado para o Builder e verifique se todas as information estão corretas.

> Nota: Se o seu wearable contiver diferentes representations de modelo, você precisará fazer uma solução alternativa:
>
> 1. No seu project, crie uma nova folder para cada representation(`male` e `female`), e coloque o modelo 3D de cada representation na folder correspondente.
> 2. Atualize o seu `wearable.json` file para incluir as novas representations.
> 3. ```lang-json
>    "representations": [{
>      "bodyShapes": ["urn:decentraland:off-chain:base-avatars:BaseMale"],
>      "mainFile": "male/glasses.glb",
>      "contents": ["male/glasses.glb"],
>      "overrideHides": [],
>      "overrideReplaces": []
>    },
>    {
>      "bodyShapes": ["urn:decentraland:off-chain:base-avatars:BaseFemale"],
>      "mainFile": "female/glasses.glb",
>      "contents": ["female/glasses.glb"],
>      "overrideHides": [],
>      "overrideReplaces": []
>    }],
>    ```
> 4. Execute `npm run pack` para gerar um novo arquivo smart-wearable.zip.
> 5. Arraste o novo arquivo smart-wearable.zip para o Builder.

5. Abra o editor de wearables e certifique-se de que as categories “hide” e “remove” estejam definidas corretamente para desativar outras categorias de wearable quando este wearable estiver ativado.
6. Crie uma nova collection com este wearable e talvez outros.
7. Clique no ícone de 3 pontos ao lado de “Mint Items” e selecione “See in world”. Isso abrirá uma aba com o explorer na Sepolia, onde você pode experimentar todos os wearables da sua collection no Decentraland e ver como eles se comportam em um cenário mais real, por exemplo correndo pela Genesis Plaza.
8. Neste ponto, seu wearable está pronto para ser publicado.

## Ações restritas

Para evitar abuso, certos recursos não são permitidos em portable experiences por padrão e exigem a adição de um permission flag.

Consulte [Permissões necessárias](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/scene-metadata.md#required-permissions) para mais detalhes.

## Limitações

> IMPORTANTE: O smart wearable inteiro precisa caber dentro de 3MB. Isso inclui o modelo 3D, thumbnail, code, libraries, sound files, modelos 3D adicionais, images de UI, etc. Esse limite vale para a folder descompactada. O builder não permitirá que você faça upload de wearables maiores do que isso. Para verificar o size da sua portable experience, execute `npm run pack`, o size do project é especificado no output text do comando. Você também pode verificar isso descompactando o `smart-wearable.zip` file gerado e conferindo o size da folder.

Smart wearables executam a portable experience apenas para o player que está usando o wearable. Os outros players não veem os efeitos. Por exemplo, se a portable experience renderizar um pet que segue o player, os outros players por perto não verão esse pet. No entanto, os outros players verão os avatars executarem animations que rodam como parte da scene do wearable, mesmo [custom avatar animations](/creator/content-creator-pt/scenes-sdk7/interatividade/player-avatar.md#custom-animations) enviadas como parte dos files do smart wearable.

Smart wearables só funcionam quando os players os estão usando. Por esse motivo, os players só podem ter um número limitado de smart wearables ativados e, dependendo da parte do body que ocupam, alguns serão incompatíveis com outros. Por exemplo, você não pode usar dois hats ao mesmo tempo, nem um helmet e hair ao mesmo tempo.

Se um wearable estiver “hidden”, mas não “removed” por outros wearables que estejam sendo usados, então o smart wearable ainda pode estar ativado, mesmo que o wearable correspondente não esteja visível.

## Exemplos

[Exemplo de smart wearable](https://github.com/decentraland/smart-wearable-sample))


---

# Agent Instructions: 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:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/smart-wearables.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
