From 61026a1df019d9c9ce749692807aeb0645feb2de Mon Sep 17 00:00:00 2001
From: min
Date: Tue, 9 Jun 2026 23:29:41 +0300
Subject: [PATCH] =?UTF-8?q?feat(docs):=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE?=
=?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=82=20=20=D0=BF=D0=B5=D1=80=D0=B5?=
=?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5=D1=82=20JS/Lua=20=D0=B8?=
=?UTF-8?q?=D0=BD=D0=BB=D0=B0=D0=B9=D0=BD=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
В уроке 50 (и можно дальше) в тексте было много game.ui.showText,
game.broadcast и т.д. — это JS-API. В Lua-вкладке вики они
оставались JS — путало юзера.
Фикс:
- Новый компонент использует useDocsLang().
Если lang='lua' и lua задан — показывает Lua-эквивалент.
- В уроке 50 заменил все инлайны game.* на с Lua-параллелями:
- game.ui.showText → __rbxl_show_text
- game.sound.play → winSound:Play()
- game.onMessage/broadcast → BindableEvent:Connect/Fire
- game.self.onTouch/onInteract/onClick → Touched/UIS+Heartbeat/ClickDetector
- game.onTick → RunService.Heartbeat
- game.after/every → task.delay/spawn
- game.tween → TweenService:Create
- game.scene.spawnNpc → __rbxl_spawn_npc
- game.ui.score → __rbxl_score_set
---
src/community/docsLessons.jsx | 71 ++++++++++++++++++++++++-----------
1 file changed, 49 insertions(+), 22 deletions(-)
diff --git a/src/community/docsLessons.jsx b/src/community/docsLessons.jsx
index bcc9998..680450a 100644
--- a/src/community/docsLessons.jsx
+++ b/src/community/docsLessons.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import { Code, ScriptKind, Step, Note, Try, Shot } from './docsData';
-import { LangTabs } from './docsLang';
+import { LangTabs, useDocsLang } from './docsLang';
import { LUA_OVERRIDES } from './docsGamesBuildersLua';
/**
@@ -20,6 +20,17 @@ function CodeBoth({ game, script, children }) {
);
}
+/**
+ * Инлайн-API-имена в тексте уроков, меняющиеся в зависимости от JS/Lua вкладки.
+ *
+ * Если lua не задан — показывает js в обоих режимах.
+ */
+function Api({ js, lua }) {
+ const { lang } = useDocsLang();
+ const txt = lang === 'lua' && lua ? lua : js;
+ return {txt};
+}
+
/**
* docsLessons.jsx — тексты уроков для 50 мини-игр (раздел K вики).
*
@@ -7270,8 +7281,10 @@ game.self.onTouch(() => {
И обязательно покажи игроку, когда он победил —
- надписью game.ui.showText('Победа!', 5),
- звуком game.sound.play('win') и конфетти.
+ надписью ,
+ звуком и конфетти.
Шаг 4. Напиши скрипты
@@ -7279,34 +7292,48 @@ game.self.onTouch(() => {
Сцена сама по себе не «живая» — её оживляют скрипты.
Начинай с главного скрипта: в нём заводи переменные
(счёт, флажок победы) и лови сообщения через
- game.onMessage('имя', fn). На объекты вешай
- небольшие скрипты — они шлют сообщения главному через
- game.broadcast('имя'). Так главный скрипт
- узнаёт, что монетку собрали или кнопку нажали. Ты делал
- так в каждом уроке.
+ <> >.
+ На объекты вешай небольшие скрипты — они шлют сообщения
+ главному через .
+ Так главный скрипт узнаёт, что монетку собрали или кнопку
+ нажали. Ты делал так в каждом уроке.
Каждый скрипт работает в своей «песочнице» — переменные
одного скрипта не видны другому. Поэтому скрипты общаются
- сообщениями: один шлёт game.broadcast('имя'),
- другой ловит game.onMessage('имя', fn). Можно
- передать данные: game.broadcast('имя', {'{'} ... {'}'}).
+ сообщениями: один шлёт ,
+ другой ловит .
+ Можно передать данные: .
Базовый набор инструментов, который ты знаешь:
- game.self.onTouch — реакция на касание;
- game.self.onInteract — реакция на
+ - — реакция на касание;
+ - — реакция на
E;
- game.self.onClick — реакция на клик;
- game.broadcast и game.onMessage
+ - — реакция на клик;
+ - и
+ <> >
— связь между скриптами;
- game.onTick — каждый кадр;
- game.after и game.every —
- таймеры;
- game.tween — плавное движение;
- game.scene.spawnNpc — враги и NPC;
- game.ui.score и
- game.ui.showText — счёт и подсказки.
+ - — каждый кадр;
+ - — таймеры;
+ - — плавное движение;
+ - — враги и NPC;
+ - и
+ <> > — счёт и подсказки.
Шаг 5. Проверяй и улучшай