diff --git a/src/community/docsData.jsx b/src/community/docsData.jsx index e8da0db..963887f 100644 --- a/src/community/docsData.jsx +++ b/src/community/docsData.jsx @@ -1013,35 +1013,55 @@ game.self.onUntouch(() => { <>

Нарисованная кнопка сама по себе ничего не делает — - нужен скрипт. Самый простой способ — повесить скрипт - прямо на кнопку. + нужен скрипт.

- {`// Скрипт висит на кнопке. + {`// Скрипт висит на кнопке. // game.self — это сама кнопка. game.self.onClick(() => { game.ui.showText('Кнопка нажата!', 2); game.sound.play('click'); -});`} -

- Можно и наоборот — управлять кнопкой из глобального - скрипта, если найти её по имени: -

+});`}} + lua={{`-- Скрипт висит на кнопке (TextButton) +-- script.Parent — это сама кнопка. +local btn = script.Parent + +btn.MouseButton1Click:Connect(function() + print("Кнопка нажата!") +end)`}} + /> +

Можно и наоборот — управлять кнопкой из глобального скрипта:

- {`// Находим кнопку по имени и вешаем на неё клик + {`// Находим кнопку по имени и вешаем на неё клик const btnId = game.gui.find('Кнопка старта'); game.gui.onClick(btnId, () => { game.ui.showText('Игра началась!', 2); - // спрятать кнопку после нажатия - game.gui.hide(btnId); -});`} + game.gui.hide(btnId); // спрятать кнопку после нажатия +});`}} + lua={{`local Players = game:GetService("Players") +local player = Players.LocalPlayer +local gui = player:WaitForChild("PlayerGui") + +-- Находим кнопку по имени (она лежит где-то в PlayerGui) +local btn = gui:FindFirstChild("Кнопка старта", true) + +btn.MouseButton1Click:Connect(function() + print("Игра началась!") + btn.Visible = false -- спрятать кнопку +end)`}} + />

- Что тут происходит: game.gui.find ищет - элемент по имени и возвращает его id («адрес»). - game.gui.onClick вешает на этот id действие. - game.gui.hide прячет кнопку, чтобы её нельзя - было нажать второй раз. + JS: game.gui.find ищет элемент по имени. + game.gui.onClick вешает действие, game.gui.hide прячет. +

+

+ Lua: gui:FindFirstChild(name, true) ищет рекурсивно + (третий аргумент true = во вложенных). + MouseButton1Click — стандартный сигнал клика на TextButton. + btn.Visible = false прячет элемент.

), @@ -1053,34 +1073,59 @@ game.gui.onClick(btnId, () => { <>

Поле ввода позволяет игроку напечатать ответ. - Когда он нажмёт Enter, срабатывает событие - onSubmit — и скрипт получает введённый текст. + Когда он нажмёт Enter, скрипт получает введённый текст.

- {`// Игрок вводит код. Правильный код — 1234. + {`// Игрок вводит код. Правильный код — 1234. const boxId = game.gui.find('Поле кода'); game.gui.onSubmit(boxId, (text) => { if (text === '1234') { game.ui.showText('Верно! Дверь открыта', 2); - // двигаем дверь вверх, чтобы освободить проход const door = game.scene.findOne('Дверь'); game.tween(door, { y: 8 }, { duration: 1 }); } else { game.ui.showText('Неверный код', 1.5); } -});`} +});`}} + lua={{`local Players = game:GetService("Players") +local TweenService = game:GetService("TweenService") +local player = Players.LocalPlayer +local gui = player:WaitForChild("PlayerGui") + +-- Находим TextBox по имени +local box = gui:FindFirstChild("Поле кода", true) + +-- FocusLost срабатывает когда игрок нажал Enter или ушёл с поля. +-- Первый параметр enterPressed = true только если был Enter. +box.FocusLost:Connect(function(enterPressed) + if not enterPressed then return end + + if box.Text == "1234" then + print("Верно! Дверь открыта") + local door = workspace:WaitForChild("Дверь") + local goal = { Position = door.Position + Vector3.new(0, 8, 0) } + TweenService:Create(door, TweenInfo.new(1), goal):Play() + else + print("Неверный код") + end +end)`}} + />

- Разберём построчно: onSubmit даёт переменную - text — это то, что напечатал игрок. - if (text === '1234') — проверяем, совпал ли - код. Если да — открываем дверь твином (плавно поднимаем). - Если нет — пишем «Неверный код». + JS-разбор: onSubmit даёт переменную + text — то, что напечатал игрок. + if (text === '1234') — проверяем код. +

+

+ Lua-разбор: на TextBox сигнал FocusLost + срабатывает когда поле теряет фокус (Enter или клик мимо). + Текст лежит в box.Text.

- Две одинарные кавычки '1234' означают, - что это текст, а не число. Игрок печатает в поле - всегда текст, поэтому и сравнивать нужно с текстом. + Кавычки "1234" означают, что это + текст, а не число. Игрок печатает в поле всегда + текст, поэтому и сравнивать нужно с текстом. ),