# 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.

Source: https://www.playdrop.ai/tr/create/learn/online-party

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](https://www.playdrop.ai/tr/create/learn/game-servers): partiler senin Colyseus odalarında oynar.
- Giriş yapmış oyuncular: odalar misafirleri reddeder.
- [catalogue.json](https://www.playdrop.ai/tr/create/learn/catalogue-json) içinde şu bildirimler:

```json
{
  "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

```js
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](https://www.playdrop.ai/tr/create/learn/social).

## 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:

```js
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ı](https://www.playdrop.ai/tr/create/learn/game-servers) 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](https://www.playdrop.ai/tr/create/learn/local-party).

## İlgili kılavuzlar

- [Gerçek zamanlı oyun sunucuları](https://www.playdrop.ai/tr/create/learn/game-servers): Oyunun için MongoDB veritabanlı, barındırılan bir Colyseus 0.17 sunucusu çalıştır, tarayıcıdan SDK ile bağlan, iki oyuncuyla test et ve sınırları öğren.
- [Yerel partiler ve kumandalar](https://www.playdrop.ai/tr/create/learn/local-party): Fiziksel kumandaları ve PlayDrop telefon kumandalarını sdk.device ile oku, yerel oyuncu yuvalarını izle, kumanda desteğini ve yerel parti boyutlarını bildir.
- [Paylaşım, arkadaşlar ve davetler](https://www.playdrop.ai/tr/create/learn/social): Oyunu görsel ya da kliple paylaş, başlatma verisini oku, arkadaş seç, PlayDrop Sohbet’te davet ve meydan okuma kartları gönder, başka oyunlar öner.
