# Onlinegrupper och röstchatt i PlayDrop-spel

Låt vänner spela ihop online: deklarera gruppstorlekar, öppna PlayDrops gruppfönster, gå med i reserverade rum med sdk.multiplayer.join och styr rumsröst.

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

En PlayDrop-grupp är ett gäng vänner som byter spel tillsammans. När en grupp startar ditt spel reserverar PlayDrop platser åt medlemmarna i ett av din servers rum, så att vännerna hamnar i samma match i stället för att delas upp. Röstchatten körs i PlayDrop, inte i ditt spel.

## Det här behöver du

- En [spelserver i realtid](https://www.playdrop.ai/sv/create/learn/game-servers): grupper spelar i dina Colyseus-rum.
- Inloggade spelare: rummen släpper inte in gäster.
- De här deklarationerna i [catalogue.json](https://www.playdrop.ai/sv/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` anger de exakta gruppstorlekarna, upp till 4, som får komma tillsammans; `[2, 4]` utesluter 3. Det är storleken på den ankommande gruppen, inte rummets kapacitet: två grupper på fyra kan dela ett rum med åtta platser. `party` kräver typen `party` och `party.online` kräver `online`. `roomVoice: true` aktiverar rumsröst och kräver `online`.

## Gå med i rätt rum

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

`join` använder spelarens reserverade gruppplats när PlayDrop startade en grupp och går annars med fristående. Om en gruppanslutning misslyckas avvisas anropet; spelaren hamnar aldrig tyst i ett annat rum. En gäst får `authentication_required` och PlayDrop visar inloggningen; gå med igen från `sdk.me.onAuthChange`. Behåll samma rum mellan omgångarna.

Efter en omladdning återställer `sdk.multiplayer.reconnect(roomName, token)` den reserverade platsen med en återanslutningstoken som du har sparat privat för det här spelet, den här versionen och den här användaren. Kasta token och anropa `join` vid `multiplayer_reconnect_expired`, `multiplayer_reconnect_unavailable` eller `party_reconnect_mismatch`.

## Gruppfönstret

Från en knapp öppnar `sdk.social.openParty({ mode: "online" })` PlayDrops gruppfönster, där spelare bjuder in vänner och slår på eller av rösten. En befintlig grupp återanvänds. `openParty()` öppnar gruppmenyn och `openParty({ section: "voice" })` öppnar röstinställningarna; kombinera inte `mode` och `section`. Promise-objektet slutförs när fönstret stängs, även vid avbrott.

Läs gruppen med `sdk.social.getParty()` eller `sdk.social.onPartyChange(callback)`, som först levererar det aktuella tillståndet: `{ partyId, leaderUserId, revision, members, launch }`. `launch.status` är `joining` eller `ready` när gruppen spelar det här spelet. Medlemskap betyder inte i sig att spelarna delar ett rum; använd `join`.

Gruppmedlemskap tillhör PlayDrop: spel kan inte lägga till eller ta bort gruppmedlemmar eller styra mikrofoner, och spelarna bjuder in vänner till gruppen från det här fönstret. Ett spel kan ändå skicka ett eget spelkort med en inbjudan eller utmaning till en vän med `sdk.social.sendMessage`; se [delning, vänner och inbjudningar](https://www.playdrop.ai/sv/create/learn/social).

## Rumsröst

Med `roomVoice: true` kan alla i ett rum prata, utan serverkod. För att ändra vem som hör vem binder du rummet på din server och anger en policy:

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

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

Policyerna är `all`, `team`, `proximity` (med `{ range }`) och `off`. `setAudience(player, audience)` åsidosätter för en spelare och `updatePositions([{ player, position: { x, y, z } }])` matar närhetsläget; skicka `null` för att rensa ett lag eller en åsidosättning. PlayDrop tillämpar reglerna för vem som får höra vem. I webbläsaren justerar `sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] })` bara volym och panorering.

Rösten styrs av spelarens samtycke, ljudavstängning och blockeringar, och beror på värdens version och utrullningen.

## Paus

Gruppkapseln pausar inte spelandet. PlayDrops paus stoppar din klient, men rummet förblir anslutet och din server fortsätter köra. En spelares paus får inte stoppa matchen för de andra; bygg en eventuell matchpaus på servern.

## Testa

Ladda upp en privat version och öppna sedan testlänken i två fönster med `player=1` och `player=2`, som beskrivs i [spelservrar i realtid](https://www.playdrop.ai/sv/create/learn/game-servers). Lokala grupper med handkontroller är ett separat läge: se [lokala grupper och handkontroller](https://www.playdrop.ai/sv/create/learn/local-party).

## Relaterade guider

- [Spelservrar i realtid](https://www.playdrop.ai/sv/create/learn/game-servers): Kör en hostad Colyseus 0.17-server med en MongoDB-databas för ditt spel, anslut från webbläsaren med SDK:t, testa med två spelare och känn till gränserna.
- [Lokala grupper och handkontroller](https://www.playdrop.ai/sv/create/learn/local-party): Läs fysiska handkontroller och PlayDrops telefonkontroller via sdk.device, följ lokala spelarplatser och deklarera handkontrollsstöd och gruppstorlekar.
- [Delning, vänner och inbjudningar](https://www.playdrop.ai/sv/create/learn/social): Dela ett spel med en bild eller ett klipp, läs startdata, välj vänner, skicka inbjudnings- och utmaningskort i PlayDrop Chat och rekommendera andra spel.
