@oyna360/lobby-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/avatar-accessories.d.ts +16 -0
  4. package/dist/avatar-accessories.d.ts.map +1 -0
  5. package/dist/avatar-accessories.js +214 -0
  6. package/dist/avatar-accessories.js.map +1 -0
  7. package/dist/avatar-asset-manager.d.ts +54 -0
  8. package/dist/avatar-asset-manager.d.ts.map +1 -0
  9. package/dist/avatar-asset-manager.js +215 -0
  10. package/dist/avatar-asset-manager.js.map +1 -0
  11. package/dist/avatar-clips.d.ts +17 -0
  12. package/dist/avatar-clips.d.ts.map +1 -0
  13. package/dist/avatar-clips.js +47 -0
  14. package/dist/avatar-clips.js.map +1 -0
  15. package/dist/avatar-config.d.ts +4 -0
  16. package/dist/avatar-config.d.ts.map +1 -0
  17. package/dist/avatar-config.js +9 -0
  18. package/dist/avatar-config.js.map +1 -0
  19. package/dist/avatar-factory.d.ts +64 -0
  20. package/dist/avatar-factory.d.ts.map +1 -0
  21. package/dist/avatar-factory.js +464 -0
  22. package/dist/avatar-factory.js.map +1 -0
  23. package/dist/avatar-instance.d.ts +31 -0
  24. package/dist/avatar-instance.d.ts.map +1 -0
  25. package/dist/avatar-instance.js +56 -0
  26. package/dist/avatar-instance.js.map +1 -0
  27. package/dist/avatar-material-pipeline.d.ts +34 -0
  28. package/dist/avatar-material-pipeline.d.ts.map +1 -0
  29. package/dist/avatar-material-pipeline.js +580 -0
  30. package/dist/avatar-material-pipeline.js.map +1 -0
  31. package/dist/avatar-rig-builder.d.ts +74 -0
  32. package/dist/avatar-rig-builder.d.ts.map +1 -0
  33. package/dist/avatar-rig-builder.js +347 -0
  34. package/dist/avatar-rig-builder.js.map +1 -0
  35. package/dist/draco.d.ts +7 -0
  36. package/dist/draco.d.ts.map +1 -0
  37. package/dist/draco.js +82 -0
  38. package/dist/draco.js.map +1 -0
  39. package/dist/humanoid-animator.d.ts +35 -0
  40. package/dist/humanoid-animator.d.ts.map +1 -0
  41. package/dist/humanoid-animator.js +191 -0
  42. package/dist/humanoid-animator.js.map +1 -0
  43. package/dist/humanoid-bone-names.d.ts +35 -0
  44. package/dist/humanoid-bone-names.d.ts.map +1 -0
  45. package/dist/humanoid-bone-names.js +126 -0
  46. package/dist/humanoid-bone-names.js.map +1 -0
  47. package/dist/humanoid-locomotion.d.ts +101 -0
  48. package/dist/humanoid-locomotion.d.ts.map +1 -0
  49. package/dist/humanoid-locomotion.js +300 -0
  50. package/dist/humanoid-locomotion.js.map +1 -0
  51. package/dist/humanoid-rig.d.ts +51 -0
  52. package/dist/humanoid-rig.d.ts.map +1 -0
  53. package/dist/humanoid-rig.js +304 -0
  54. package/dist/humanoid-rig.js.map +1 -0
  55. package/dist/index.d.ts +60 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +42 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lobby-chat-ui.d.ts +3 -0
  60. package/dist/lobby-chat-ui.d.ts.map +1 -0
  61. package/dist/lobby-chat-ui.js +258 -0
  62. package/dist/lobby-chat-ui.js.map +1 -0
  63. package/dist/lobby-colliders.d.ts +10 -0
  64. package/dist/lobby-colliders.d.ts.map +1 -0
  65. package/dist/lobby-colliders.js +225 -0
  66. package/dist/lobby-colliders.js.map +1 -0
  67. package/dist/lobby-connection-ui.d.ts +8 -0
  68. package/dist/lobby-connection-ui.d.ts.map +1 -0
  69. package/dist/lobby-connection-ui.js +68 -0
  70. package/dist/lobby-connection-ui.js.map +1 -0
  71. package/dist/lobby-debug.d.ts +50 -0
  72. package/dist/lobby-debug.d.ts.map +1 -0
  73. package/dist/lobby-debug.js +132 -0
  74. package/dist/lobby-debug.js.map +1 -0
  75. package/dist/lobby-font.d.ts +5 -0
  76. package/dist/lobby-font.d.ts.map +1 -0
  77. package/dist/lobby-font.js +35 -0
  78. package/dist/lobby-font.js.map +1 -0
  79. package/dist/lobby-music.d.ts +40 -0
  80. package/dist/lobby-music.d.ts.map +1 -0
  81. package/dist/lobby-music.js +250 -0
  82. package/dist/lobby-music.js.map +1 -0
  83. package/dist/lobby-orientation-ui.d.ts +10 -0
  84. package/dist/lobby-orientation-ui.d.ts.map +1 -0
  85. package/dist/lobby-orientation-ui.js +64 -0
  86. package/dist/lobby-orientation-ui.js.map +1 -0
  87. package/dist/lobby-perf-diag.d.ts +254 -0
  88. package/dist/lobby-perf-diag.d.ts.map +1 -0
  89. package/dist/lobby-perf-diag.js +775 -0
  90. package/dist/lobby-perf-diag.js.map +1 -0
  91. package/dist/lobby-plaza-diag.d.ts +103 -0
  92. package/dist/lobby-plaza-diag.d.ts.map +1 -0
  93. package/dist/lobby-plaza-diag.js +534 -0
  94. package/dist/lobby-plaza-diag.js.map +1 -0
  95. package/dist/lobby-presence-ui.d.ts +4 -0
  96. package/dist/lobby-presence-ui.d.ts.map +1 -0
  97. package/dist/lobby-presence-ui.js +89 -0
  98. package/dist/lobby-presence-ui.js.map +1 -0
  99. package/dist/lobby-real-device-diag.d.ts +119 -0
  100. package/dist/lobby-real-device-diag.d.ts.map +1 -0
  101. package/dist/lobby-real-device-diag.js +468 -0
  102. package/dist/lobby-real-device-diag.js.map +1 -0
  103. package/dist/lobby-spawn.d.ts +15 -0
  104. package/dist/lobby-spawn.d.ts.map +1 -0
  105. package/dist/lobby-spawn.js +18 -0
  106. package/dist/lobby-spawn.js.map +1 -0
  107. package/dist/lobby-ui-i18n.d.ts +11 -0
  108. package/dist/lobby-ui-i18n.d.ts.map +1 -0
  109. package/dist/lobby-ui-i18n.js +21 -0
  110. package/dist/lobby-ui-i18n.js.map +1 -0
  111. package/dist/lobby-voice-ui.d.ts +3 -0
  112. package/dist/lobby-voice-ui.d.ts.map +1 -0
  113. package/dist/lobby-voice-ui.js +105 -0
  114. package/dist/lobby-voice-ui.js.map +1 -0
  115. package/dist/local-player-controller.d.ts +80 -0
  116. package/dist/local-player-controller.d.ts.map +1 -0
  117. package/dist/local-player-controller.js +422 -0
  118. package/dist/local-player-controller.js.map +1 -0
  119. package/dist/name-tag.d.ts +3 -0
  120. package/dist/name-tag.d.ts.map +1 -0
  121. package/dist/name-tag.js +59 -0
  122. package/dist/name-tag.js.map +1 -0
  123. package/dist/network-client.d.ts +87 -0
  124. package/dist/network-client.d.ts.map +1 -0
  125. package/dist/network-client.js +182 -0
  126. package/dist/network-client.js.map +1 -0
  127. package/dist/platform-bridge.d.ts +17 -0
  128. package/dist/platform-bridge.d.ts.map +1 -0
  129. package/dist/platform-bridge.js +90 -0
  130. package/dist/platform-bridge.js.map +1 -0
  131. package/dist/platform-lobby.d.ts +176 -0
  132. package/dist/platform-lobby.d.ts.map +1 -0
  133. package/dist/platform-lobby.js +679 -0
  134. package/dist/platform-lobby.js.map +1 -0
  135. package/dist/platform-types.d.ts +56 -0
  136. package/dist/platform-types.d.ts.map +1 -0
  137. package/dist/platform-types.js +3 -0
  138. package/dist/platform-types.js.map +1 -0
  139. package/dist/player-label.d.ts +9 -0
  140. package/dist/player-label.d.ts.map +1 -0
  141. package/dist/player-label.js +14 -0
  142. package/dist/player-label.js.map +1 -0
  143. package/dist/playground/playground-layout.d.ts +14 -0
  144. package/dist/playground/playground-layout.d.ts.map +1 -0
  145. package/dist/playground/playground-layout.js +320 -0
  146. package/dist/playground/playground-layout.js.map +1 -0
  147. package/dist/playground/playground-system.d.ts +30 -0
  148. package/dist/playground/playground-system.d.ts.map +1 -0
  149. package/dist/playground/playground-system.js +202 -0
  150. package/dist/playground/playground-system.js.map +1 -0
  151. package/dist/plaza-layout.d.ts +30 -0
  152. package/dist/plaza-layout.d.ts.map +1 -0
  153. package/dist/plaza-layout.js +527 -0
  154. package/dist/plaza-layout.js.map +1 -0
  155. package/dist/plugins.d.ts +5 -0
  156. package/dist/plugins.d.ts.map +1 -0
  157. package/dist/plugins.js +26 -0
  158. package/dist/plugins.js.map +1 -0
  159. package/dist/protocol.d.ts +276 -0
  160. package/dist/protocol.d.ts.map +1 -0
  161. package/dist/protocol.js +107 -0
  162. package/dist/protocol.js.map +1 -0
  163. package/dist/quality.d.ts +39 -0
  164. package/dist/quality.d.ts.map +1 -0
  165. package/dist/quality.js +95 -0
  166. package/dist/quality.js.map +1 -0
  167. package/dist/remote-player-manager.d.ts +48 -0
  168. package/dist/remote-player-manager.d.ts.map +1 -0
  169. package/dist/remote-player-manager.js +339 -0
  170. package/dist/remote-player-manager.js.map +1 -0
  171. package/dist/scene-manager.d.ts +26 -0
  172. package/dist/scene-manager.d.ts.map +1 -0
  173. package/dist/scene-manager.js +169 -0
  174. package/dist/scene-manager.js.map +1 -0
  175. package/dist/spawn-utils.d.ts +8 -0
  176. package/dist/spawn-utils.d.ts.map +1 -0
  177. package/dist/spawn-utils.js +29 -0
  178. package/dist/spawn-utils.js.map +1 -0
  179. package/dist/starter-layout.d.ts +17 -0
  180. package/dist/starter-layout.d.ts.map +1 -0
  181. package/dist/starter-layout.js +102 -0
  182. package/dist/starter-layout.js.map +1 -0
  183. package/dist/third-person-camera.d.ts +35 -0
  184. package/dist/third-person-camera.d.ts.map +1 -0
  185. package/dist/third-person-camera.js +181 -0
  186. package/dist/third-person-camera.js.map +1 -0
  187. package/dist/types.d.ts +164 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/types.js +2 -0
  190. package/dist/types.js.map +1 -0
  191. package/dist/voice-chat.d.ts +78 -0
  192. package/dist/voice-chat.d.ts.map +1 -0
  193. package/dist/voice-chat.js +321 -0
  194. package/dist/voice-chat.js.map +1 -0
  195. package/dist/yield-to-render.d.ts +3 -0
  196. package/dist/yield-to-render.d.ts.map +1 -0
  197. package/dist/yield-to-render.js +11 -0
  198. package/dist/yield-to-render.js.map +1 -0
  199. package/dist/zones.d.ts +36 -0
  200. package/dist/zones.d.ts.map +1 -0
  201. package/dist/zones.js +68 -0
  202. package/dist/zones.js.map +1 -0
  203. package/docs/00-overview.md +47 -0
  204. package/docs/01-connect.md +85 -0
  205. package/docs/02-github.md +43 -0
  206. package/docs/03-modes.md +70 -0
  207. package/docs/04-api.md +106 -0
  208. package/docs/05-features.md +55 -0
  209. package/docs/06-controls.md +34 -0
  210. package/docs/07-troubleshooting.md +39 -0
  211. package/package.json +65 -0
@@ -0,0 +1,70 @@
1
+ # حالت‌های اجرا
2
+
3
+ ## 1) Production — iframe پلتفرم
4
+
5
+ ```text
6
+ بازیکن → /play/{slug} → iframe بازی → game-sdk init → lobby-sdk
7
+ ```
8
+
9
+ - سشن توسط پلتفرم ساخته می‌شود.
10
+ - `platform:init` شامل `avatar` و `lobby` است.
11
+ - امتیاز/جِم بعداً از game-sdk در iframe در دسترس است.
12
+
13
+ ```ts
14
+ await PlatformSDK.init();
15
+ const lobby = await PlatformLobby.create({
16
+ canvas,
17
+ platformInit: PlatformSDK.getInitPayload()!,
18
+ roomId: PlatformSDK.getInitPayload()!.lobby!.roomId,
19
+ wsUrl: PlatformSDK.getInitPayload()!.lobby!.wsUrl,
20
+ });
21
+ ```
22
+
23
+ ---
24
+
25
+ ## 2) Direct Development — بدون iframe
26
+
27
+ ```text
28
+ npm run dev → origin شما → game-sdk Authorize → Context واقعی → lobby-sdk → WS واقعی
29
+ ```
30
+
31
+ مناسب وقتی پلتفرم را لوکال ندارید ولی سرور oyna360 در دسترس است.
32
+
33
+ 1. game-sdk را طبق [09-direct-development](../../game-sdk/docs/09-direct-development.md) تنظیم کنید.
34
+ 2. همان `PlatformLobby.create({ platformInit })`.
35
+ 3. Origin توسعه را allowlist کنید.
36
+
37
+ `createDev()` را اینجا استفاده نکنید.
38
+
39
+ ---
40
+
41
+ ## 3) `createDev()` — Fake / Offline
42
+
43
+ ```ts
44
+ await PlatformLobby.createDev({
45
+ canvas,
46
+ roomId: 'game:my-game',
47
+ config: { enableMultiplayer: false },
48
+ mockUser: { displayName: 'Tester' },
49
+ });
50
+ ```
51
+
52
+ - سشن ساختگی (`dev-token`) — سرور لابی آن را برای مالتی‌پلیر واقعی قبول نمی‌کند.
53
+ - برای چیدمان صحنه، UI، پورتال بدون شبکه.
54
+ - با Direct Development اشتباه نشود.
55
+
56
+ ---
57
+
58
+ ## مقایسه سریع
59
+
60
+ | | Production | Direct Dev | createDev |
61
+ |--|:----------:|:----------:|:---------:|
62
+ | اکانت واقعی | ✅ | ✅ | ❌ |
63
+ | سشن واقعی | ✅ | ✅ | ❌ |
64
+ | remote players | ✅ | ✅ | ❌ |
65
+ | نیاز به پلتفرم لوکال | نه* | نه | نه |
66
+ | نیاز به iframe | ✅ | ❌ | ❌ |
67
+
68
+ \* مگر خودتان همه stack را لوکال بالا آورده باشید.
69
+
70
+ بعدی: [04-api.md](./04-api.md)
package/docs/04-api.md ADDED
@@ -0,0 +1,106 @@
1
+ # API — `PlatformLobby`
2
+
3
+ ## ساخت نمونه
4
+
5
+ ### `PlatformLobby.create(options)`
6
+
7
+ ```ts
8
+ interface PlatformLobbyCreateOptions {
9
+ canvas: HTMLCanvasElement;
10
+ platformInit: SdkInitPayload | PlatformInitMessage;
11
+ roomId: string;
12
+ wsUrl?: string; // پیش‌فرض از platformInit.lobby.wsUrl
13
+ strictRoom?: boolean; // دعوت دوست؛ بدون spillover ظرفیت
14
+ config?: PlatformLobbyConfig;
15
+ }
16
+ ```
17
+
18
+ ### `PlatformLobby.createFromPlatform(canvas, config?)`
19
+
20
+ منتظر Context روی window / `platform:init` می‌ماند، سپس `create` را صدا می‌زند.
21
+
22
+ ### `PlatformLobby.createDev(options)`
23
+
24
+ Mock Context + معمولاً `enableMultiplayer: false`.
25
+
26
+ ---
27
+
28
+ ## `PlatformLobbyConfig` (مهم‌ترین‌ها)
29
+
30
+ | فیلد | پیش‌فرض | توضیح |
31
+ |------|---------|--------|
32
+ | `enableMultiplayer` | `true` | اتصال سوکت |
33
+ | `enableChat` | `true` | overlay چت |
34
+ | `enableVoice` | `true` | voice WebRTC |
35
+ | `enablePresenceUi` | با مالتی‌پلیر | toast ورود/خروج |
36
+ | `enableConnectionUi` | با مالتی‌پلیر | قطع اتصال |
37
+ | `enableOrientationUi` | `true` | اعلان landscape موبایل |
38
+ | `locale` | `'fa'` | `'fa'` \| `'en'` |
39
+ | `spawnPoint` / `spawnPoints` | — | محل اسپان |
40
+ | `playerSpeed` / `runMultiplier` | داخلی | حرکت |
41
+ | `cameraDistance` / `cameraHeight` | داخلی | دوربین |
42
+ | `quality` | `'auto'` | کیفیت رندر |
43
+ | `avatarBases` | — | کاتالوگ GLB |
44
+ | `preloadAvatarBases` | true | گرم کردن کش GLB |
45
+
46
+ ---
47
+
48
+ ## متدهای پرکاربرد
49
+
50
+ ```ts
51
+ lobby.getUser();
52
+ lobby.getSession();
53
+ lobby.getAvatar();
54
+ lobby.getPlayers();
55
+
56
+ lobby.applyPlazaLayout({ onRoomStart, /* … */ });
57
+ lobby.applyStarterLayout({ /* … */ });
58
+
59
+ lobby.addZone({ id, bounds, onEnter, onExit });
60
+ lobby.addPortal({ id, /* … */ });
61
+
62
+ lobby.sendChat('سلام');
63
+ lobby.sendData('my-channel', payloadString); // کانال data جدا از چت
64
+
65
+ lobby.playEmote('wave');
66
+ lobby.attachChat();
67
+ lobby.destroy();
68
+ ```
69
+
70
+ ### رویدادها
71
+
72
+ ```ts
73
+ lobby.on('chat', ({ displayName, text }) => {});
74
+ lobby.on('playerJoin', (player) => {});
75
+ lobby.on('playerLeave', ({ userId }) => {});
76
+ // و سایر رویدادهای LobbyEventMap
77
+ ```
78
+
79
+ ### Plugin
80
+
81
+ ```ts
82
+ import { ShopZonePlugin, defineLobbyPlugin } from '@oyna360/lobby-sdk';
83
+ lobby.use(ShopZonePlugin);
84
+ ```
85
+
86
+ ---
87
+
88
+ ## چیدمان
89
+
90
+ - **`applyPlazaLayout` (متد):** میدان، اتاق‌ها، برخورد — برای اکثر بازی‌ها.
91
+ - **`applyStarterLayout`:** چیدمان ساده‌تر استارتر.
92
+ - تابع‌های export هم‌نام را به‌جای متد صدا نزنید؛ برخورد به‌درستی اعمال نمی‌شود.
93
+
94
+ ---
95
+
96
+ ## چرخه عمر
97
+
98
+ 1. create
99
+ 2. layout / zones
100
+ 3. بازیکن در لابی
101
+ 4. شروع مسابقه → **`destroy()`**
102
+ 5. موتور گیم‌پلی خودتان (مثلاً Three.js روی canvas دیگر)
103
+
104
+ دو موتور روی یک canvas توصیه نمی‌شود.
105
+
106
+ بعدی: [05-features.md](./05-features.md)
@@ -0,0 +1,55 @@
1
+ # امکانات — آواتار، چت، voice، data
2
+
3
+ ## آواتار
4
+
5
+ از `platformInit.avatar` ساخته می‌شود (procedural یا GLB).
6
+
7
+ - رنگ / لباس / اکسسوری از `customConfig`
8
+ - `avatarBases` برای پیش‌بارگذاری چند بدنهٔ GLB مشترک
9
+ - انیمیشن راه رفتن / دویدن / پرش داخل SDK
10
+
11
+ بازی معمولاً لازم نیست `AvatarFactory` را مستقیم صدا بزند مگر ابزار سفارشی بسازید.
12
+
13
+ URL تکسچر و GLB باید از پلتفرم **مطلق** باشند تا از origin بازی cross-origin لود شوند (CORS روی `/uploads` سمت پلتفرم فعال است).
14
+
15
+ ---
16
+
17
+ ## چت
18
+
19
+ - زنده، بدون ذخیره دائمی
20
+ - `enableChat: false` برای خاموش کردن UI پیش‌فرض
21
+ - `sendChat(text)` / رویداد `chat`
22
+
23
+ برای فریم‌های کنترلی بازی (مثلاً matchmaking) از چت استفاده نکنید → کانال data.
24
+
25
+ ---
26
+
27
+ ## Voice
28
+
29
+ - با `enableVoice` (پیش‌فرض روشن وقتی مالتی‌پلیر باشد)
30
+ - محدودیت تعداد peer نزدیک روی سرور تنظیم می‌شود
31
+ - نیاز به مجوز میکروفون مرورگر
32
+
33
+ ---
34
+
35
+ ## کانال `lobby:data`
36
+
37
+ پیام‌های باینری/متنی کوتاه برای منطق بازی، جدا از چت.
38
+
39
+ ```ts
40
+ lobby.sendData('fc.pad-room', frameString);
41
+
42
+ lobby.on('data', ({ channel, payload, fromUserId }) => {
43
+ if (channel === 'fc.pad-room') handleFrame(payload);
44
+ });
45
+ ```
46
+
47
+ محدودیت اندازه و نرخ از سمت سرور اعمال می‌شود. چت را sanitize نکنید روی data — فرمت خودتان را validate کنید.
48
+
49
+ ---
50
+
51
+ ## Presence / اتصال
52
+
53
+ UIهای آماده برای ورود بازیکن و قطع شبکه را می‌توان با فلگ‌های config خاموش کرد و UI خودتان را گذاشت.
54
+
55
+ بعدی: [06-controls.md](./06-controls.md)
@@ -0,0 +1,34 @@
1
+ # کنترل‌ها و موبایل
2
+
3
+ ## دسکتاپ
4
+
5
+ | ورودی | عمل |
6
+ |-------|-----|
7
+ | WASD (`event.code`) | حرکت |
8
+ | Shift | دویدن |
9
+ | Space | پرش |
10
+ | E | تعامل / ایموجی |
11
+ | ماوس | چرخش دوربین سوم‌شخص |
12
+
13
+ ## موبایل / لمسی
14
+
15
+ - اهرک مجازی: راه رفتن
16
+ - دکمه دویدن جدا
17
+ - دکمه پرش
18
+ - در portrait ممکن است overlay «افقی کنید» بیاید (`enableOrientationUi`)
19
+
20
+ ## کیفیت
21
+
22
+ `config.quality = 'auto' | 'low' | 'medium' | 'high'`
23
+ روی موبایل‌های ضعیف auto معمولاً به low/medium می‌رود.
24
+
25
+ ## چند canvas
26
+
27
+ اگر گیم‌پلی با Three.js / موتور دیگر است:
28
+
29
+ 1. canvas لابی برای `PlatformLobby`
30
+ 2. canvas جدا برای مسابقه بعد از `destroy()`
31
+
32
+ همزمان دو رندرر WebGL سنگین روی موبایل ممکن است سفید/کرش شود.
33
+
34
+ بعدی: [07-troubleshooting.md](./07-troubleshooting.md)
@@ -0,0 +1,39 @@
1
+ # عیب‌یابی — lobby-sdk
2
+
3
+ ## Timed out waiting for platform:init
4
+
5
+ - داخل iframe نیستید و `PlatformSDK.init()` را قبلش صدا نزده‌اید.
6
+ - یا parent پلتفرم init نفرستاده.
7
+
8
+ **راه:** اول game-sdk `init`، بعد `create({ platformInit })`.
9
+
10
+ ## صفحه سفید / HUD هست صحنه نیست
11
+
12
+ اغلب سنگینی آواتار GLB یا WebGL context روی موبایل. کیفیت را `low` کنید، تعداد remote را کم کنید، مدل را سبک کنید.
13
+
14
+ ## بازیکن remote دیده نمی‌شود
15
+
16
+ - `enableMultiplayer: true`
17
+ - `session.token` واقعی است (نه `dev-token`)
18
+ - `wsUrl` به همان محیطی اشاره می‌کند که سشن ساخته شده
19
+ - فایروال / mixed content (https صفحه با ws ناامن)
20
+
21
+ ## آواتار نامرئی / منفجر
22
+
23
+ مدل GLB ناسازگار؛ از presetهای تأییدشده پلتفرم استفاده کنید. مسیر bake/fallback داخل SDK برای بعضی مدل‌ها هست ولی مدل بسیار سنگین موبایل را می‌خواباند.
24
+
25
+ ## چت می‌آید ولی data نه
26
+
27
+ کانال data جداست؛ فلگ/مجوز سرور و طول payload را چک کنید. متن را در چت نفرستید.
28
+
29
+ ## `applyPlazaLayout` برخورد ندارد
30
+
31
+ متد روی instance را صدا بزنید نه تابع export خام.
32
+
33
+ ## ساخت از GitHub خراب است
34
+
35
+ `dist` باید بدون import به `@platform/lobby-protocol` باشد. تگ را عوض کنید یا از maintainer بخواهید pack تازه بگذارد.
36
+
37
+ ## createDev به سرور وصل نمی‌شود
38
+
39
+ عمدی است. برای مالتی‌پلیر واقعی Direct یا Production را استفاده کنید.
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@oyna360/lobby-sdk",
3
+ "version": "0.1.0",
4
+ "description": "oyna360 3D Lobby SDK for game developers (Babylon.js). Protocol is bundled — do not install lobby-protocol.",
5
+ "license": "MIT",
6
+ "author": "oyna360",
7
+ "keywords": [
8
+ "oyna360",
9
+ "lobby-sdk",
10
+ "babylonjs",
11
+ "multiplayer",
12
+ "avatar"
13
+ ],
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js",
21
+ "default": "./dist/index.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "docs",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "scripts": {
31
+ "sync:protocol": "node ../../scripts/sync-lobby-protocol.mjs",
32
+ "prebuild": "node ../../scripts/sync-lobby-protocol.mjs",
33
+ "build": "tsc",
34
+ "dev": "tsc --watch",
35
+ "prepublishOnly": "npm run build",
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "echo \"No lint configured for @oyna360/lobby-sdk\"",
38
+ "check:protocol": "node ../../scripts/sync-lobby-protocol.mjs --check"
39
+ },
40
+ "dependencies": {
41
+ "@babylonjs/loaders": "^7.44.0",
42
+ "socket.io-client": "^4.8.1"
43
+ },
44
+ "peerDependencies": {
45
+ "@babylonjs/core": "^7.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "@babylonjs/core": "^7.44.0",
49
+ "typescript": "^5.7.2"
50
+ },
51
+ "engines": {
52
+ "node": ">=18"
53
+ },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "git+https://github.com/mamadjavadrasti/oyna360-lobby-sdk.git"
57
+ },
58
+ "bugs": {
59
+ "url": "https://github.com/mamadjavadrasti/oyna360-lobby-sdk/issues"
60
+ },
61
+ "homepage": "https://github.com/mamadjavadrasti/oyna360-lobby-sdk#readme",
62
+ "publishConfig": {
63
+ "access": "public"
64
+ }
65
+ }