# Groupes en ligne et chat vocal dans les jeux PlayDrop

Faites jouer des amis ensemble en ligne : tailles de groupe, fenêtre de groupe PlayDrop, salles réservées avec sdk.multiplayer.join et voix de salle.

Source: https://www.playdrop.ai/fr/create/learn/online-party

Un groupe PlayDrop, ce sont des amis qui passent d’un jeu à l’autre ensemble. Quand un groupe lance votre jeu, PlayDrop réserve des places pour ses membres dans l’une des salles de votre serveur : les amis arrivent ainsi dans le même match au lieu d’être séparés. Le chat vocal fonctionne dans PlayDrop, pas dans votre jeu.

## Ce qu’il vous faut

- Un [serveur de jeu temps réel](https://www.playdrop.ai/fr/create/learn/game-servers) : les groupes jouent dans vos salles Colyseus.
- Des joueurs connectés : les salles refusent les invités.
- Ces déclarations dans [catalogue.json](https://www.playdrop.ai/fr/create/learn/catalogue-json) :

```json
{
  "types": ["solo", "online", "party"],
  "party": { "online": [2, 3, 4] },
  "roomVoice": true,
  "server": { "entry": "server/index.mjs", "rooms": ["game"] }
}
```

`party.online` liste les tailles exactes de groupe, jusqu’à 4, qui peuvent arriver ensemble ; `[2, 4]` exclut 3. Il s’agit de la taille du groupe qui arrive, pas de la capacité de la salle : deux groupes de quatre peuvent partager une salle de huit places. `party` exige le type `party` et `party.online` exige `online`. `roomVoice: true` active la voix de salle et exige `online`.

## Rejoignez la bonne salle

```js
if (!sdk.me.isLoggedIn) {
  await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });
```

`join` utilise la place réservée du joueur quand PlayDrop a lancé un groupe, et sinon rejoint une salle de façon indépendante. Si l’arrivée d’un groupe échoue, la promesse est rejetée ; le joueur n’est jamais placé discrètement dans une autre salle. Un invité reçoit `authentication_required` et PlayDrop affiche la connexion ; rejoignez de nouveau depuis `sdk.me.onAuthChange`. Gardez la même salle d’une manche à l’autre.

Après un rechargement, `sdk.multiplayer.reconnect(roomName, token)` restaure la place réservée grâce à un jeton de reconnexion que vous avez stocké en privé pour ce jeu, cette version et cet utilisateur. Abandonnez le jeton et appelez `join` en cas de `multiplayer_reconnect_expired`, `multiplayer_reconnect_unavailable` ou `party_reconnect_mismatch`.

## La fenêtre de groupe

Depuis un bouton, `sdk.social.openParty({ mode: "online" })` ouvre la fenêtre de groupe de PlayDrop, où les joueurs invitent des amis et activent ou désactivent la voix. Un groupe existant est réutilisé. `openParty()` ouvre le menu du groupe et `openParty({ section: "voice" })` ouvre les réglages de la voix ; ne combinez pas `mode` et `section`. La promesse se résout à la fermeture de la fenêtre, y compris en cas d’annulation.

Lisez le groupe avec `sdk.social.getParty()` ou `sdk.social.onPartyChange(callback)`, qui transmet d’abord l’état actuel : `{ partyId, leaderUserId, revision, members, launch }`. `launch.status` vaut `joining` ou `ready` quand le groupe joue à ce jeu. Faire partie du groupe ne signifie pas à soi seul que les joueurs partagent une salle ; utilisez `join`.

Les membres du groupe sont gérés par PlayDrop : les jeux ne peuvent ni ajouter ni retirer de membres, ni contrôler les microphones, et les joueurs invitent leurs amis dans le groupe depuis cette fenêtre. Un jeu peut tout de même envoyer à un ami sa propre carte d’invitation ou de défi avec `sdk.social.sendMessage` ; consultez [partage, amis et invitations](https://www.playdrop.ai/fr/create/learn/social).

## Voix de salle

Avec `roomVoice: true`, tout le monde dans une salle peut parler, sans code serveur. Pour changer qui entend qui, liez la salle sur votre serveur et définissez une règle :

```js
import { playdrop } from "@playdrop/server";

const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");
```

Les règles sont `all`, `team`, `proximity` (avec `{ range }`) et `off`. `setAudience(player, audience)` définit une dérogation pour un joueur et `updatePositions([{ player, position: { x, y, z } }])` alimente la proximité ; passez `null` pour effacer une équipe ou une dérogation. PlayDrop fait respecter qui peut entendre qui. Dans le navigateur, `sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] })` ne règle que le volume et la position stéréo.

La voix dépend du consentement des joueurs, de la sourdine et des blocages, ainsi que de la version de l’hôte et du déploiement.

## Pause

La capsule du groupe ne met pas le jeu en pause. La pause de PlayDrop arrête votre client, mais la salle reste connectée et votre serveur continue de tourner. La pause d’un joueur ne doit pas arrêter le match des autres ; si le match doit pouvoir être mis en pause, gérez-le sur le serveur.

## Tester

Envoyez une version privée, puis ouvrez le lien de test dans deux fenêtres avec `player=1` et `player=2`, comme décrit dans [serveurs de jeu temps réel](https://www.playdrop.ai/fr/create/learn/game-servers). Les groupes locaux avec manettes forment un mode distinct : consultez [groupes locaux et manettes](https://www.playdrop.ai/fr/create/learn/local-party).

## Guides associés

- [Serveurs de jeu temps réel](https://www.playdrop.ai/fr/create/learn/game-servers): Faites héberger un serveur Colyseus 0.17 avec base MongoDB pour votre jeu, connectez le navigateur avec le SDK, testez à deux joueurs et connaissez les limites.
- [Groupes locaux et manettes](https://www.playdrop.ai/fr/create/learn/local-party): Lisez manettes physiques et manettes téléphone PlayDrop avec sdk.device, suivez les emplacements locaux, déclarez manettes et tailles de groupe local.
- [Partage, amis et invitations](https://www.playdrop.ai/fr/create/learn/social): Partagez avec image ou extrait, lisez les données de lancement, choisissez des amis, envoyez invitations et défis dans PlayDrop Chat, recommandez des jeux.
