المجموعات عبر الإنترنت والدردشة الصوتية في ألعاب PlayDrop
دع الأصدقاء يلعبون معًا عبر الإنترنت: صرّح بأحجام المجموعات، وافتح نافذة المجموعة، وانضم إلى الغرف المحجوزة عبر sdk.multiplayer.join، وتحكم بصوت الغرفة.
المجموعة في PlayDrop هي مجموعة من الأصدقاء ينتقلون بين الألعاب معًا. عندما تبدأ مجموعة لعبتك، يحجز PlayDrop مقاعد لأعضائها في إحدى غرف خادمك، فيصل الأصدقاء إلى المباراة نفسها بدل أن يتفرقوا. تعمل الدردشة الصوتية في PlayDrop، لا في لعبتك.
ما تحتاج إليه
- خادم لعبة فوري: تلعب المجموعات في غرف Colyseus الخاصة بك.
- لاعبون مسجّلو الدخول: ترفض الغرف الضيوف.
- هذه التصريحات في catalogue.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.
انضم إلى الغرفة الصحيحة
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؛ راجع المشاركة والأصدقاء والدعوات.
صوت الغرفة
مع roomVoice: true، يستطيع كل من في الغرفة التحدث، دون أي كود على الخادم. ولتغيير من يسمع من، اربط الغرفة على خادمك واضبط سياسة:
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، كما هو موضّح في خوادم الألعاب الفورية. والمجموعات المحلية مع وحدات التحكم وضع منفصل: راجع المجموعات المحلية ووحدات التحكم.