Onlinegroepen en spraakchat in PlayDrop-games
Laat vrienden je game samen online spelen: geef groepsgroottes op, open het groepsvenster van PlayDrop, neem gereserveerde plaatsen in kamers in en regel kamerspraak.
Een PlayDrop-groep is een groep vrienden die samen van game naar game gaat. Als een groep je game start, reserveert PlayDrop plaatsen voor de leden in een van de kamers van je server, zodat vrienden in dezelfde wedstrijd terechtkomen in plaats van te worden opgesplitst. Spraakchat draait in PlayDrop, niet in je game.
Wat je nodig hebt
- Een realtime gameserver: groepen spelen in de kamers (Colyseus-rooms) van je server.
- Ingelogde spelers: kamers weigeren gasten.
- Deze declaraties in catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online somt de exacte groepsgroottes op, tot 4, die samen mogen binnenkomen; [2, 4] sluit 3 uit. Het is de grootte van de binnenkomende groep, niet de capaciteit van de kamer: twee groepen van vier kunnen een kamer met acht plaatsen delen. party vereist het type party en party.online vereist online. roomVoice: true zet kamerspraak aan en vereist online.
Naar de juiste kamer
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join gebruikt de gereserveerde groepsplaats van de speler als PlayDrop een groep heeft gestart, en doet anders zelfstandig mee. Mislukt het meedoen van een groep, dan weigert het; het zet de speler nooit ongemerkt in een andere kamer. Een gast krijgt authentication_required en PlayDrop toont het inloggen; roep join opnieuw aan vanuit sdk.me.onAuthChange. Houd dezelfde kamer aan over rondes heen.
Na het herladen herstelt sdk.multiplayer.reconnect(roomName, token) de gereserveerde plaats met een token voor opnieuw verbinden dat je privé hebt bewaard voor deze game, versie en gebruiker. Gooi het token weg en roep join aan bij multiplayer_reconnect_expired, multiplayer_reconnect_unavailable of party_reconnect_mismatch.
Het groepsvenster
Vanuit een knop opent sdk.social.openParty({ mode: "online" }) het groepsvenster van PlayDrop, waar spelers vrienden uitnodigen en spraak aan- of uitzetten. Een bestaande groep wordt hergebruikt. openParty() opent het groepsmenu en openParty({ section: "voice" }) opent de spraakinstellingen; combineer mode en section niet. De promise wordt afgerond wanneer het venster sluit, ook bij annuleren.
Lees de groep met sdk.social.getParty() of sdk.social.onPartyChange(callback), dat eerst de huidige toestand levert: { partyId, leaderUserId, revision, members, launch }. launch.status is joining of ready wanneer de groep deze game speelt. Lidmaatschap alleen betekent niet dat de spelers een kamer delen; gebruik join.
Groepslidmaatschap is van PlayDrop: games kunnen geen groepsleden toevoegen of verwijderen en geen microfoons besturen, en spelers nodigen vrienden voor de groep uit vanuit dit venster. Een game kan nog wel een eigen uitnodiging of uitdagingskaart naar een vriend sturen met sdk.social.sendMessage; zie delen, vrienden en uitnodigingen.
Kamerspraak
Met roomVoice: true kan iedereen in een kamer praten, zonder servercode. Om te wijzigen wie wie hoort, koppel je de kamer op je server en stel je een beleid in:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");De beleidsopties zijn all, team, proximity (met { range }) en off. setAudience(player, audience) overschrijft de instelling voor één speler en updatePositions([{ player, position: { x, y, z } }]) levert de posities voor afstand; geef null mee om een team of een overschrijving te wissen. PlayDrop handhaaft wie wie mag horen. In de browser past sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) alleen het volume en de panning aan.
Spraak is onderhevig aan toestemming van spelers, dempen en blokkades, en hangt af van de build van de host en de uitrol.
Pauzeren
De groepscapsule pauzeert de gameplay niet. De pauze van PlayDrop stopt je client, maar de kamer blijft verbonden en je server blijft draaien. De pauze van één speler mag de wedstrijd voor anderen niet stoppen; implementeer een eventuele wedstrijdpauze op de server.
Testen
Upload een privéversie en open daarna de testlink in twee vensters met player=1 en player=2, zoals beschreven in realtime gameservers. Lokale groepen met controllers zijn een aparte modus: zie lokale groepen en controllers.