Online-Partys und Sprachchat in PlayDrop-Spielen
Freunde online zusammen spielen lassen: Partygrößen deklarieren, Party-Fenster öffnen, mit sdk.multiplayer.join reservierte Räume betreten, Sprachchat steuern.
Eine PlayDrop-Party ist eine Gruppe von Freunden, die gemeinsam von Spiel zu Spiel zieht. Wenn eine Party dein Spiel startet, reserviert PlayDrop für ihre Mitglieder Plätze in einem der Räume deines Servers, sodass Freunde im selben Match landen, statt getrennt zu werden. Der Sprachchat läuft in PlayDrop, nicht in deinem Spiel.
Was du brauchst
- Einen Echtzeit-Spielserver: Partys spielen in deinen Colyseus-Räumen.
- Angemeldete Spieler: Räume lehnen Gäste ab.
- Diese Angaben in der catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online listet die genauen Gruppengrößen bis 4 auf, die gemeinsam ankommen dürfen; [2, 4] schließt 3 aus. Das ist die Größe der ankommenden Gruppe, nicht die Kapazität des Raums: Zwei Vierer-Partys können sich einen Raum mit acht Plätzen teilen. party erfordert den Typ party, und party.online erfordert online. roomVoice: true aktiviert den Raum-Sprachchat und erfordert online.
Dem richtigen Raum beitreten
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join nutzt den reservierten Party-Platz des Spielers, wenn PlayDrop eine Party gestartet hat, und tritt sonst eigenständig bei. Schlägt ein Party-Beitritt fehl, wird der Aufruf abgelehnt; er setzt den Spieler nie stillschweigend in einen anderen Raum. Ein Gast erhält authentication_required, und PlayDrop zeigt die Anmeldung; tritt danach aus sdk.me.onAuthChange erneut bei. Behalte denselben Raum über mehrere Runden.
Nach einem Neuladen stellt sdk.multiplayer.reconnect(roomName, token) den reservierten Platz mit einem Wiederverbindungstoken wieder her, das du privat für dieses Spiel, diese Version und diesen Nutzer gespeichert hast. Verwirf das Token und rufe join auf, wenn multiplayer_reconnect_expired, multiplayer_reconnect_unavailable oder party_reconnect_mismatch kommt.
Das Party-Fenster
Über einen Button öffnet sdk.social.openParty({ mode: "online" }) das Party-Fenster von PlayDrop, in dem Spieler Freunde einladen und den Sprachchat ein- oder ausschalten. Eine bestehende Party wird weiterverwendet. openParty() öffnet das Party-Menü und openParty({ section: "voice" }) die Sprachchat-Einstellungen; kombiniere mode und section nicht. Das Promise wird erfüllt, wenn das Fenster geschlossen wird, auch beim Abbrechen.
Lies die Party mit sdk.social.getParty() oder sdk.social.onPartyChange(callback), das zuerst den aktuellen Zustand liefert: { partyId, leaderUserId, revision, members, launch }. launch.status ist joining oder ready, wenn die Party gerade dieses Spiel spielt. Mitgliedschaft allein heißt nicht, dass die Spieler sich einen Raum teilen; verwende join.
Die Party-Mitgliedschaft gehört PlayDrop: Spiele können keine Party-Mitglieder hinzufügen oder entfernen und keine Mikrofone steuern, und Spieler laden Freunde über dieses Fenster in die Party ein. Ein Spiel kann trotzdem mit sdk.social.sendMessage eine eigene Einladungs- oder Herausforderungskarte an einen Freund senden; siehe Teilen, Freunde und Einladungen.
Raum-Sprachchat
Mit roomVoice: true kann jeder in einem Raum sprechen, ganz ohne Servercode. Um zu ändern, wer wen hört, binde den Raum auf deinem Server und lege eine Regel fest:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");Die Regeln sind all, team, proximity (mit { range }) und off. setAudience(player, audience) legt für einen einzelnen Spieler eine Ausnahme fest, und updatePositions([{ player, position: { x, y, z } }]) liefert die Positionen für die Nähe; übergib null, um ein Team oder eine Ausnahme zu löschen. PlayDrop setzt durch, wer wen hören darf. Im Browser passt sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) nur Lautstärke und Stereoposition an.
Der Sprachchat hängt von der Zustimmung der Spieler, Stummschaltungen und Blockierungen ab, außerdem vom Build des Hosts und von der schrittweisen Einführung.
Pausieren
Die Party-Kapsel pausiert das Gameplay nicht. Die Pause von PlayDrop hält deinen Client an, aber der Raum bleibt verbunden, und dein Server läuft weiter. Die Pause eines Spielers darf das Match für die anderen nicht anhalten; setze eine Match-Pause auf dem Server um.
Testen
Lade eine private Version hoch und öffne dann den Testlink in zwei Fenstern mit player=1 und player=2, wie unter Echtzeit-Spielserver beschrieben. Lokale Partys mit Controllern sind ein eigener Modus: siehe lokale Partys und Controller.