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.
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: grupper spelar i dina Colyseus-rum.
- Inloggade spelare: rummen släpper inte in gäster.
- De här deklarationerna i catalogue.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
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.
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:
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. Lokala grupper med handkontroller är ett separat läge: se lokala grupper och handkontroller.