From c489a31854340ea9119c7be4eb76dd83ae11fb8a Mon Sep 17 00:00:00 2001 From: min Date: Tue, 9 Jun 2026 20:26:19 +0300 Subject: [PATCH] =?UTF-8?q?feat(g19):=20=D0=BF=D0=BE=D0=BB=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=B0=D1=80=D0=B8=D1=82=D0=B5=D1=82=20=C2=AB?= =?UTF-8?q?=D0=9B=D0=B8=D1=84=D1=82=C2=BB=20=E2=80=94=20Heartbeat=20yo-yo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Игра 19 падала на WaitForChild + Vector3 + (оператор не поддержан). Lua паритет с JS: - showText 'Встань на синий лифт — он повезёт наверх' - task.delay 0.2c для FindFirstChild('Лифт') (WaitForChild может зависать) - Heartbeat yo-yo по Y: startY (1) ↔ TOP_Y (12.3) с периодом 7с (3.5с вверх + 3.5с вниз через треугольную функцию) - Vector3.new напрямую (без +) - Респаун при y<-3 - BindableEvent WinReached + g19_finish.Touched → ev:Fire - При победе: showText 'Победа!' + win Sound + confetti --- src/community/docsGamesBuildersLua.js | 85 +++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 12 deletions(-) diff --git a/src/community/docsGamesBuildersLua.js b/src/community/docsGamesBuildersLua.js index 9809525..60b17da 100644 --- a/src/community/docsGamesBuildersLua.js +++ b/src/community/docsGamesBuildersLua.js @@ -1638,21 +1638,82 @@ end)`, // ИГРА 19 — «Лифт» // ═══════════════════════════════════════════════════════════════ 'elevator': { - g19_main: `-- === ИГРА «ЛИФТ» (Lua) === -local TweenService = game:GetService("TweenService") -local elevator = workspace:WaitForChild("Лифт") -local startPos = elevator.Position -local topPos = startPos + Vector3.new(0, 10, 0) + g19_main: `-- === ИГРА «ЛИФТ» — главный скрипт (Lua) === +${SNIPPET_BROADCAST} -local goingUp = true -elevator.Touched:Connect(function(hit) +local Players = game:GetService("Players") +local RunService = game:GetService("RunService") +local player = Players.LocalPlayer +local won = false + +__rbxl_show_text("Встань на синий лифт — он повезёт наверх", 3) + +local winSound = Instance.new("Sound", workspace) +winSound.SoundId = "win"; winSound.Volume = 1 + +-- Лифт ездит вверх-вниз. WaitForChild зависает, поэтому FindFirstChild +-- с задержкой через task.delay. +local lift = nil +local startY = 1 +local TOP_Y = 12.3 +local PERIOD = 7 -- полный цикл вниз→вверх→вниз (3.5с вверх + 3.5с вниз) +local elapsed = 0 + +task.delay(0.2, function() + lift = workspace:FindFirstChild("Лифт") + if lift then startY = lift.Position.Y end +end) + +RunService.Heartbeat:Connect(function(dt) + if won then return end + dt = dt or 0.016 + -- Лифт двигается + if lift then + elapsed = elapsed + dt + -- Yo-yo: 0..PERIOD/2 — вверх, PERIOD/2..PERIOD — вниз + local t = (elapsed % PERIOD) / PERIOD + local k + if t < 0.5 then + k = t * 2 -- 0..1 + else + k = (1 - t) * 2 -- 1..0 + end + local y = startY + (TOP_Y - startY) * k + local pos = lift.Position + lift.Position = Vector3.new(pos.X, y, pos.Z) + end + -- Падение + local py = __rbxl_player_y() + if py < -3 then + player:LoadCharacter() + end +end) + +-- Финиш +local winEvent = getEvent("WinReached") +winEvent.Event:Connect(function() + if won then return end + won = true + winSound:Play() + __rbxl_show_text("Победа! Ты поднялся на лифте!", 5) + local px = __rbxl_player_x() + local py = __rbxl_player_y() + local pz = __rbxl_player_z() + __rbxl_spawn_particles("confetti", px, py + 3, pz, 3, 3) +end)`, + g19_finish: `-- === Скрипт финиша (Lua) === +local ReplicatedStorage = game:GetService("ReplicatedStorage") +local part = script.Parent +local fired = false + +part.Touched:Connect(function(hit) + if fired then return end local h = hit.Parent and hit.Parent:FindFirstChild("Humanoid") if not h then return end - local goal = { Position = goingUp and topPos or startPos } - TweenService:Create(elevator, TweenInfo.new(3), goal):Play() - goingUp = not goingUp -end) -print("Встань на лифт — он повезёт тебя наверх!")`, + fired = true + local ev = ReplicatedStorage:FindFirstChild("WinReached") + if ev then ev:Fire() end +end)`, }, // ═══════════════════════════════════════════════════════════════