From c3260e039525a021009b4d18c888e5106c0c9297 Mon Sep 17 00:00:00 2001 From: min Date: Fri, 5 Jun 2026 02:21:38 +0300 Subject: [PATCH] =?UTF-8?q?fix(player):=20=D1=81=D0=BF=D0=B0=D0=B2=D0=BD?= =?UTF-8?q?=20=D0=B2=200,0=20=D0=B5=D1=81=D0=BB=D0=B8=20=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=81=D0=BF=D0=B0=D0=B2=D0=BD=D0=B0=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B0=20(=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit spawnEnabled из project_data; при false игрок появляется в (0, поверхность+2, 0). Co-Authored-By: Claude Opus 4.8 --- src/engine/BabylonScene.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/engine/BabylonScene.js b/src/engine/BabylonScene.js index ca83a2e..97693ab 100644 --- a/src/engine/BabylonScene.js +++ b/src/engine/BabylonScene.js @@ -5480,7 +5480,17 @@ export class BabylonScene { }); if (this._onPlayerHpChange) this.player.setOnHpChange(this._onPlayerHpChange); if (this._onPlayerDeath) this.player.setOnDeath(this._onPlayerDeath); - this.player.start(this._spawnPoint); + // Точка спавна удалена → игрок появляется в (0, безопасная высота, 0). + let startPoint = this._spawnPoint; + if (this._spawnEnabled === false) { + let sy = 3; + try { + const surf = this.physics?._sampleRobloxSurface?.(0, 0); + if (surf !== null && surf !== undefined) sy = surf + 2; + } catch (e) { /* ignore */ } + startPoint = { x: 0, y: sy, z: 0 }; + } + this.player.start(startPoint); // Запускаем пользовательские скрипты (этап 2.1). // Async PlayerController.start даёт нам тик чтобы дать ему собрать сцену, @@ -7460,8 +7470,10 @@ export class BabylonScene { // Точка спавна if (state.scene.spawnPoint) { this._spawnPoint = { ...state.scene.spawnPoint }; - this._updateSpawnMarker(); + this._updateSpawnMarker?.(); } + // Удалена ли точка спавна (плеер: спавн в 0,0 при отсутствии). + this._spawnEnabled = state.scene.spawnEnabled !== false; // === Авто-fix спавна для smooth terrain === // Если есть RobloxTerrain и spawnPoint оказался НИЖЕ поверхности — // поднимаем его, чтобы игрок не провалился в момент нажатия "Запустить".