Grupy online i czat głosowy w grach PlayDrop
Pozwól znajomym grać razem online: zadeklaruj rozmiary grup, otwórz okno grupy, dołączaj do zarezerwowanych pokoi przez sdk.multiplayer.join i steruj głosem.
Grupa PlayDrop to znajomi, którzy razem przechodzą z gry do gry. Gdy grupa uruchamia twoją grę, PlayDrop rezerwuje miejsca dla jej członków w jednym z pokoi twojego serwera, więc znajomi trafiają do tego samego meczu, zamiast zostać rozdzieleni. Czat głosowy działa w PlayDrop, a nie w twojej grze.
Czego potrzebujesz
- Serwera gry czasu rzeczywistego: grupy grają w twoich pokojach Colyseus.
- Zalogowanych graczy: pokoje odrzucają gości.
- Tych deklaracji w catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online wymienia dokładne rozmiary grup, do 4, które mogą dołączyć razem; [2, 4] wyklucza 3. To rozmiar dołączającej grupy, a nie pojemność pokoju: dwie czteroosobowe grupy mogą dzielić pokój na osiem miejsc. party wymaga typu party, a party.online wymaga online. roomVoice: true włącza głos pokoju i wymaga online.
Dołącz do właściwego pokoju
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join wykorzystuje zarezerwowane miejsce gracza w grupie, gdy grę uruchomiła grupa PlayDrop, a w przeciwnym razie dołącza niezależnie. Jeśli dołączenie grupy się nie powiedzie, wywołanie zostaje odrzucone; nigdy nie umieszcza po cichu gracza w innym pokoju. Gość dostaje authentication_required, a PlayDrop pokazuje logowanie; dołącz ponownie z sdk.me.onAuthChange. Zachowaj ten sam pokój między rundami.
Po przeładowaniu sdk.multiplayer.reconnect(roomName, token) przywraca zarezerwowane miejsce za pomocą tokenu ponownego połączenia, który zapisano prywatnie dla tej gry, wersji i użytkownika. Przy multiplayer_reconnect_expired, multiplayer_reconnect_unavailable lub party_reconnect_mismatch odrzuć token i wywołaj join.
Okno grupy
Wywołane po naciśnięciu przycisku w grze sdk.social.openParty({ mode: "online" }) otwiera okno grupy PlayDrop, w którym gracze zapraszają znajomych oraz włączają i wyłączają głos. Istniejąca grupa jest używana ponownie. openParty() otwiera menu grupy, a openParty({ section: "voice" }) otwiera ustawienia głosu; nie łącz mode i section. Obietnica spełnia się po zamknięciu okna, także przy anulowaniu.
Odczytuj grupę przez sdk.social.getParty() lub sdk.social.onPartyChange(callback), które najpierw dostarcza bieżący stan: { partyId, leaderUserId, revision, members, launch }. launch.status ma wartość joining lub ready, gdy grupa gra w tę grę. Samo członkostwo nie oznacza, że gracze są w jednym pokoju; użyj join.
Członkostwo w grupie należy do PlayDrop: gry nie mogą dodawać ani usuwać członków grupy ani sterować mikrofonami, a gracze zapraszają znajomych do grupy z tego okna. Gra nadal może wysłać znajomemu własną kartę zaproszenia lub wyzwania przez sdk.social.sendMessage; zobacz udostępnianie, znajomi i zaproszenia.
Głos pokoju
Przy roomVoice: true każdy w pokoju może rozmawiać, bez kodu serwera. Aby zmienić, kto kogo słyszy, powiąż pokój na serwerze i ustaw zasady:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");Dostępne zasady to all, team, proximity (z { range }) i off. setAudience(player, audience) nadpisuje ustawienie jednego gracza, a updatePositions([{ player, position: { x, y, z } }]) dostarcza pozycje graczy dla trybu bliskości; przekaż null, aby wyczyścić drużynę lub nadpisanie. PlayDrop egzekwuje, kto kogo może słyszeć. W przeglądarce sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) dostosowuje tylko głośność i panoramę.
Głos podlega zgodzie gracza, wyciszeniu i blokadom oraz zależy od wersji hosta i wdrożenia.
Pauza
Kapsuła grupy nie wstrzymuje rozgrywki. Pauza PlayDrop zatrzymuje twojego klienta, ale pokój pozostaje połączony, a serwer działa dalej. Pauza jednego gracza nie może zatrzymać meczu pozostałym; pauzę meczu zaimplementuj na serwerze.
Testuj
Prześlij wersję prywatną, a potem otwórz link testowy w dwóch oknach z player=1 i player=2, jak opisano w poradniku serwery gier czasu rzeczywistego. Grupy lokalne z kontrolerami to osobny tryb: zobacz grupy lokalne i kontrolery.