PlayDrop oyunlarında çevrimiçi partiler ve sesli sohbet
Arkadaşlar oyununu çevrimiçi oynasın: parti boyutlarını bildir, parti penceresini aç, sdk.multiplayer.join ile ayrılmış odaya katıl, oda sesli sohbetini yönet.
PlayDrop partisi, oyunlar arasında birlikte dolaşan bir arkadaş grubudur. Bir parti oyununu başlattığında PlayDrop, arkadaşlar bölünmek yerine aynı maça gelsin diye sunucunun odalarından birinde üyeler için yer ayırır. Sesli sohbet oyununda değil, PlayDrop’ta çalışır.
Neye ihtiyacın var
- Bir gerçek zamanlı oyun sunucusu: partiler senin Colyseus odalarında oynar.
- Giriş yapmış oyuncular: odalar misafirleri reddeder.
- catalogue.json içinde şu bildirimler:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online, birlikte gelebilecek tam grup boyutlarını 4’e kadar listeler; [2, 4] 3’ü dışarıda bırakır. Bu oda kapasitesi değil, gelen grubun boyutudur: dörder kişilik iki parti sekiz kişilik bir odayı paylaşabilir. party için party türü, party.online için online gerekir. roomVoice: true oda sesli sohbetini açar ve online gerektirir.
Doğru odaya katıl
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });PlayDrop bir parti başlattığında join oyuncunun ayrılmış parti yerini kullanır, aksi halde bağımsız olarak katılır. Bir parti katılımı başarısız olursa reddedilir; oyuncuyu asla sessizce başka bir odaya koymaz. Bir misafir authentication_required alır ve PlayDrop giriş ekranını gösterir; sdk.me.onAuthChange içinden yeniden katıl. Turlar boyunca aynı odayı koru.
Bir yeniden yüklemeden sonra sdk.multiplayer.reconnect(roomName, token), bu oyun, sürüm ve kullanıcı için gizli olarak sakladığın bir yeniden bağlanma jetonuyla ayrılmış yeri geri getirir. multiplayer_reconnect_expired, multiplayer_reconnect_unavailable veya party_reconnect_mismatch durumunda jetonu at ve join çağır.
Parti penceresi
Bir düğmeden çağrılan sdk.social.openParty({ mode: "online" }), oyuncuların arkadaş davet ettiği ve sesli sohbeti açıp kapattığı PlayDrop parti penceresini açar. Mevcut bir parti yeniden kullanılır. openParty() parti menüsünü, openParty({ section: "voice" }) ise ses ayarlarını açar; mode ve section değerlerini birleştirme. Promise, iptal dahil pencere kapandığında tamamlanır.
Partiyi sdk.social.getParty() ya da önce mevcut durumu ileten sdk.social.onPartyChange(callback) ile oku: { partyId, leaderUserId, revision, members, launch }. Parti bu oyunu oynarken launch.status değeri joining ya da ready olur. Tek başına üyelik, oyuncuların aynı odayı paylaştığı anlamına gelmez; join kullan.
Parti üyeliği PlayDrop’a aittir: oyunlar parti üyesi ekleyemez, çıkaramaz ya da mikrofonları kontrol edemez; oyuncular arkadaşlarını partiye bu pencereden davet eder. Bir oyun yine de sdk.social.sendMessage ile bir arkadaşa kendi davet ya da meydan okuma kartını gönderebilir; bkz. paylaşım, arkadaşlar ve davetler.
Oda sesli sohbeti
roomVoice: true ile bir odadaki herkes sunucu kodu olmadan konuşabilir. Kimin kimi duyacağını değiştirmek için odayı sunucunda bağla ve bir politika ayarla:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");Politikalar all, team, proximity ({ range } ile) ve off değerleridir. setAudience(player, audience) tek bir oyuncu için geçersiz kılma yapar, updatePositions([{ player, position: { x, y, z } }]) yakınlığı besler; bir takımı ya da geçersiz kılmayı temizlemek için null geçir. Kimin kimi duyabileceğini PlayDrop uygular. Tarayıcıda sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) yalnızca ses düzeyini ve stereo konumlandırmayı ayarlar.
Sesli sohbet oyuncu onayına, sessize almaya ve engellemelere tabidir; ana uygulama sürümüne ve kullanıma açılma durumuna bağlıdır.
Duraklatma
Parti kapsülü oynanışı duraklatmaz. PlayDrop’un duraklatması istemcini durdurur ama oda bağlı kalır ve sunucun çalışmaya devam eder. Bir oyuncunun duraklatması maçı diğerleri için durdurmamalıdır; maç duraklatmasını sunucuda uygula.
Test et
Özel bir sürüm yükle, sonra gerçek zamanlı oyun sunucuları kılavuzunda anlatıldığı gibi test bağlantısını iki pencerede player=1 ve player=2 ile aç. Kumandalı yerel partiler ayrı bir moddur: bkz. yerel partiler ve kumandalar.