# Players

O `Players` módulo permite [cenas](https://github.com/decentraland/docs/blob/main/contributor/content/entity-types/scenes/README.md) procurar Players em seu ambiente e obter informações sobre sua identidade e [profiles](https://github.com/decentraland/docs/blob/main/contributor/content/entity-types/profiles/README.md).

```ts
const Players = require("~system/Players");
```

Contém os seguintes métodos e tipos:

* [`function getPlayersInScene`](#getPlayersInScene)
* [`function getConnectedPlayers`](#getPlayersInScene)
* [`function getPlayerData`](#getPlayerData)
* [`interface Player`](#Player)
* [`interface UserData`](#UserData)

### Métodos

Há dois métodos neste módulo para descobrir Players na cena e um para obter seus profiles.

**`getPlayersInScene`**

Retorna um [`Player`](#Player) array, cada um com um `userId` que pode ser usado em [getPlayerData](#getPlayerData).

```ts
interface Request {}

interface Response {
  players: Player[];
}

function getPlayersInScene(Request): Promise<Response>;
```

**`getConnectedPlayers`**

```ts
interface Request {}

interface Response {
  players: Player[];
}

function getConnectedPlayers(Request): Promise<Response>;
```

**`getPlayerData`**

Retorna o [`UserData`](#UserData) para um usuário, se conhecido para o dado `userId`.

```ts
interface Request {
  // O identificador do usuário (para não-guests, seu endereço Ethereum).
  userId: string;
}

interface Response {
  // As informações de profile para este usuário, se disponíveis.
  data?: UserData;
}

function getPlayerData(Request): Promise<Response>;
```

### Tipos

Há apenas dois tipos neste módulo: [`Player`](#Player) e [`UserData`](#UserData).

**`Player`**

Mantém uma referência para um `userId`.

```ts
interface Player {
  // O identificador do usuário (para não-guests, seu endereço Ethereum).
  userId: string;
}
```

**`UserData`**

Contém informação (possivelmente parcial) sobre um usuário, sua identidade e avatar.

World Explorers obtêm esta informação através do [content system](https://github.com/decentraland/docs/blob/main/contributor/content/overview/README.md).

O [definição de entidade de perfil](https://github.com/decentraland/docs/blob/main/contributor/content/entity-types/profiles/README.md) detalha todos esses campos e mais. Embora a estrutura e as chaves de `UserData` sejam ligeiramente diferentes, o significado de cada campo é o mesmo.

```ts
export interface UserData {
  // O identificador do usuário (ou seja, seu endereço Ethereum).
  userId: string;

  // Um nome para chamá-los na UI.
  displayName: string;

  // A chave pública Ethereum com a qual eles assinam.
  publicKey?: string;

  // Se eles têm funcionalidade web3 habilitada.
  hasConnectedWeb3: boolean;

  // A versão sequencial desta informação, incrementada a cada atualização do usuário.
  version: number;

  // Informação sobre o avatar deles, se disponível.
  avatar?: {
    // Ponteiros para os assets necessários para renderizar este avatar.
    bodyShape: string;
    wearables: string[];

    // Tints de cor RGB/RGBA codificados em hex para diferentes partes do corpo.
    skinColor: string;
    hairColor: string;
    eyeColor: string;

    // Identificadores de arquivo para as "fotos" deste avatar.
    snapshots?: {
      face256: string;
      body: string;
    };
  };
}
```
