# المجموعات عبر الإنترنت والدردشة الصوتية في ألعاب PlayDrop

دع الأصدقاء يلعبون معًا عبر الإنترنت: صرّح بأحجام المجموعات، وافتح نافذة المجموعة، وانضم إلى الغرف المحجوزة عبر sdk.multiplayer.join، وتحكم بصوت الغرفة.

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

المجموعة في PlayDrop هي مجموعة من الأصدقاء ينتقلون بين الألعاب معًا. عندما تبدأ مجموعة لعبتك، يحجز PlayDrop مقاعد لأعضائها في إحدى غرف خادمك، فيصل الأصدقاء إلى المباراة نفسها بدل أن يتفرقوا. تعمل الدردشة الصوتية في PlayDrop، لا في لعبتك.

## ما تحتاج إليه

- [خادم لعبة فوري](https://www.playdrop.ai/ar/create/learn/game-servers): تلعب المجموعات في غرف Colyseus الخاصة بك.
- لاعبون مسجّلو الدخول: ترفض الغرف الضيوف.
- هذه التصريحات في [catalogue.json](https://www.playdrop.ai/ar/create/learn/catalogue-json):

```json
{
  "types": ["solo", "online", "party"],
  "party": { "online": [2, 3, 4] },
  "roomVoice": true,
  "server": { "entry": "server/index.mjs", "rooms": ["game"] }
}
```

تسرد `party.online` أحجام المجموعات الدقيقة، حتى 4، التي يمكن أن تصل معًا؛ فالقيمة `[2, 4]` تستثني 3. وهي حجم المجموعة الواصلة، لا سعة الغرفة: يمكن لمجموعتين من أربعة لاعبين مشاركة غرفة من ثمانية مقاعد. يتطلب `party` النوع `party`، ويتطلب `party.online` النوع `online`. ويفعّل `roomVoice: true` صوت الغرفة ويتطلب `online`.

## انضم إلى الغرفة الصحيحة

```js
if (!sdk.me.isLoggedIn) {
  await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });
```

تستخدم `join` مقعد المجموعة المحجوز للاعب عندما يكون PlayDrop قد أطلق مجموعة، وإلا فإنها تنضم بشكل مستقل. وإذا فشل انضمام المجموعة فإن الوعد يُرفض؛ ولا تضع اللاعب أبدًا في غرفة مختلفة بصمت. يحصل الضيف على `authentication_required` ويعرض PlayDrop تسجيل الدخول؛ فانضم مجددًا من `sdk.me.onAuthChange`. واحتفظ بالغرفة نفسها عبر الجولات.

بعد إعادة التحميل، تستعيد `sdk.multiplayer.reconnect(roomName, token)` المقعد المحجوز باستخدام رمز إعادة اتصال خزّنته بشكل سري لهذه اللعبة والإصدار والمستخدم. تخلّص من الرمز واستدعِ `join` عند `multiplayer_reconnect_expired` أو `multiplayer_reconnect_unavailable` أو `party_reconnect_mismatch`.

## نافذة المجموعة

من زر في لعبتك، تفتح `sdk.social.openParty({ mode: "online" })` نافذة المجموعة في PlayDrop، حيث يدعو اللاعبون أصدقاءهم ويشغّلون الصوت أو يوقفونه. ويُعاد استخدام المجموعة الموجودة. تفتح `openParty()` قائمة المجموعة، وتفتح `openParty({ section: "voice" })` إعدادات الصوت؛ فلا تجمع بين `mode` و`section`. يكتمل الوعد عند إغلاق النافذة، بما في ذلك عند الإلغاء.

اقرأ المجموعة باستخدام `sdk.social.getParty()` أو `sdk.social.onPartyChange(callback)`، التي تسلّم الحالة الحالية أولًا: `{ partyId, leaderUserId, revision, members, launch }`. وقيمة `launch.status` هي `joining` أو `ready` عندما تلعب المجموعة هذه اللعبة. والعضوية وحدها لا تعني أن اللاعبين في غرفة واحدة؛ استخدم `join`.

عضوية المجموعة من اختصاص PlayDrop: لا تستطيع الألعاب إضافة أعضاء إلى المجموعة أو إزالتهم أو التحكم بالميكروفونات، ويدعو اللاعبون أصدقاءهم إلى المجموعة من هذه النافذة. ومع ذلك يمكن للعبة إرسال بطاقة دعوة أو تحدٍّ خاصة بها إلى صديق باستخدام `sdk.social.sendMessage`؛ راجع [المشاركة والأصدقاء والدعوات](https://www.playdrop.ai/ar/create/learn/social).

## صوت الغرفة

مع `roomVoice: true`، يستطيع كل من في الغرفة التحدث، دون أي كود على الخادم. ولتغيير من يسمع من، اربط الغرفة على خادمك واضبط سياسة:

```js
import { playdrop } from "@playdrop/server";

const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");
```

السياسات هي `all` و`team` و`proximity` (مع `{ range }`) و`off`. تتجاوز `setAudience(player, audience)` إعداد لاعب واحد، وتغذي `updatePositions([{ player, position: { x, y, z } }])` سياسة القرب؛ ومرّر `null` لمسح فريق أو تجاوز. يفرض PlayDrop من يمكنه سماع من. وفي المتصفح، لا تضبط `sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] })` إلا مستوى الصوت واتجاهه.

يخضع الصوت لموافقة اللاعب وكتم الصوت والحظر، ويعتمد على نسخة المضيف وطرح الميزة.

## الإيقاف المؤقت

لا توقف كبسولة المجموعة اللعب مؤقتًا. يوقف الإيقاف المؤقت في PlayDrop عميلك، لكن الغرفة تبقى متصلة ويواصل خادمك العمل. يجب ألا يوقف إيقاف لاعب واحد المباراة للآخرين؛ ونفّذ أي إيقاف مؤقت للمباراة على الخادم.

## الاختبار

ارفع إصدارًا خاصًا، ثم افتح رابط الاختبار في نافذتين مع `player=1` و`player=2`، كما هو موضّح في [خوادم الألعاب الفورية](https://www.playdrop.ai/ar/create/learn/game-servers). والمجموعات المحلية مع وحدات التحكم وضع منفصل: راجع [المجموعات المحلية ووحدات التحكم](https://www.playdrop.ai/ar/create/learn/local-party).

## أدلة ذات صلة

- [خوادم الألعاب الفورية](https://www.playdrop.ai/ar/create/learn/game-servers): شغّل خادم Colyseus 0.17 مستضافًا مع قاعدة بيانات MongoDB للعبتك، واتصل به من المتصفح عبر SDK، واختبره بلاعبَين، واعرف حدوده.
- [المجموعات المحلية ووحدات التحكم](https://www.playdrop.ai/ar/create/learn/local-party): اقرأ وحدات التحكم الفعلية ووحدات تحكم الهاتف من PlayDrop عبر sdk.device، وتابع خانات اللاعبين المحليين، وصرّح بدعم وحدات التحكم وأحجام المجموعات المحلية.
- [المشاركة والأصدقاء والدعوات](https://www.playdrop.ai/ar/create/learn/social): شارك لعبة مع صورة أو مقطع، واقرأ بيانات الإطلاق، واختر الأصدقاء، وأرسل بطاقات الدعوة والتحدي في دردشة PlayDrop، واقترح ألعابًا أخرى.
