From 5101743aeddeb46e6c6b7286bd3edcb0dc11cb9a Mon Sep 17 00:00:00 2001 From: min Date: Tue, 9 Jun 2026 13:43:38 +0300 Subject: [PATCH] =?UTF-8?q?fix(g4):=20=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB?= =?UTF-8?q?=20=D0=BD=D0=B0=D0=B6=D0=B0=D1=82=D0=B8=D0=B5=20E=20(=D0=BA?= =?UTF-8?q?=D0=B0=D0=BA=20=D0=B2=20JS-=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Откат изменения 'наступи на кнопку'. JS-версия использует game.self.onInteract — нажатие E. Lua-версия должна вести себя так же. Подход: - Подсказка [E] Открыть дверь висит над кнопкой постоянно (пока не нажата) - UserInputService.InputBegan ловит E - Расстояние до кнопки проверяется ТОЛЬКО в момент нажатия E (не каждый кадр — это избегает багa с зависанием позиции после Touched) - Если близко (≤4) → дверь поднимается через TweenService --- src/community/docsGamesBuildersLua.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/community/docsGamesBuildersLua.js b/src/community/docsGamesBuildersLua.js index 5cf12e5..8025c28 100644 --- a/src/community/docsGamesBuildersLua.js +++ b/src/community/docsGamesBuildersLua.js @@ -278,7 +278,7 @@ end)`; g4_main: `-- === ИГРА «КНОПКА-ОТКРЫВАШКА» — главный скрипт (Lua) === ${SNIPPET_BROADCAST} -__rbxl_show_text("Наступи на красную кнопку чтобы открыть дверь", 4) +__rbxl_show_text("Подойди к красной кнопке и нажми E", 4) local winSound = Instance.new("Sound", workspace) winSound.SoundId = "win"; winSound.Volume = 1 @@ -293,14 +293,14 @@ winEvent.Event:Connect(function() __rbxl_spawn_particles("confetti", px, py + 3, pz, 3, 3) end)`, g4_button: `-- === Скрипт кнопки (Lua) === --- Висит на красной кнопке. Срабатывает по касанию игрока (как кнопка-педаль). -local Players = game:GetService("Players") +-- Висит на красной кнопке. Реагирует на E когда игрок рядом. +local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local part = script.Parent local opened = false --- Подсказка над кнопкой +-- Подсказка [E] всегда висит над кнопкой пока не открыта local hintGui = Instance.new("BillboardGui", part) hintGui.Size = UDim2.new(4, 0, 1, 0) hintGui.StudsOffset = Vector3.new(0, 2, 0) @@ -311,15 +311,25 @@ label.BackgroundTransparency = 1 label.TextColor3 = Color3.fromRGB(255, 255, 255) label.TextStrokeTransparency = 0 label.TextScaled = true -label.Text = "Наступи на кнопку" +label.Text = "[E] Открыть дверь" local clickSound = Instance.new("Sound", part) clickSound.SoundId = "click"; clickSound.Volume = 0.8 -part.Touched:Connect(function(hit) +UserInputService.InputBegan:Connect(function(input, gp) + if gp then return end if opened then return end - local h = hit.Parent and hit.Parent:FindFirstChild("Humanoid") - if not h then return end + if input.KeyCode ~= Enum.KeyCode.E then return end + + -- Проверяем что игрок рядом с кнопкой (читаем позицию только сейчас, + -- НЕ каждый кадр — это надёжнее) + local px = __rbxl_player_x() + local pz = __rbxl_player_z() + local dx = part.Position.X - px + local dz = part.Position.Z - pz + local dist = math.sqrt(dx*dx + dz*dz) + if dist > 4 then return end -- слишком далеко + opened = true hintGui:Destroy() clickSound:Play()