Нажми — и деталь появится в мире
- ⏱ Сколько займёт
- 40–60 минут, 6 шагов. Каждый шаг заканчивается результатом на экране.
- 💻 Что нужно
- Компьютер с Windows или macOS. Понадобится Roblox Studio — бесплатная, поставим на первом шаге. С телефона этот квест не проходится.
- ⏸ Если прервёшься
- Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
- 🎓 Чему научишься
- клиент и сервер · RemoteEvent · кто чем управляет
Почему друг не видит того же
Капитан рисует на песке две окружности и черту между ними.
«Здесь то, что видишь ты. Здесь то, что знают все. Между ними — граница».
Кто путает эти два мира, у того игроки летают сквозь стены и рисуют себе миллион дублонов.
Это запись из Roblox Studio: экран игрока рисует одно, сервер отвечает другое. Такой же мост между двумя мирами ты построишь за этот квест.
Читать текстом
Разберёмся, кто где живёт — и построим между мирами мост.
Запомни картинку целиком. Сервер наверху — общая правда. Внизу личные экраны, у каждого свой. Всё, что должно быть настоящим для всех, обязано случиться наверху.
1 -- LocalScript — работает ТОЛЬКО на твоём экране
2 local beacon = workspace:WaitForChild("Маяк")
3 beacon.Color = Color3.fromRGB(255, 90, 60)
4
5 -- ты видишь красный маяк. друг видит старый цвет.
6 -- ошибки нет. просто это твой личный мир.
Этот код рабочий — и в этом ловушка. Маяк покраснеет, Output промолчит, ты решишь, что всё получилось. А друг рядом увидит серый маяк. Не баг: просто ты покрасил его в своём личном мире. Если решишь попробовать прямо сейчас — клади LocalScript в StarterPlayer → StarterPlayerScripts: из ServerScriptService он молча не запустится. Почему — на следующем шаге.
Кто где живёт
Вот и вся тайна: LocalScript слышит твои клавиши, но не может менять общий мир. Script меняет мир для всех, но не слышит клавиш. Ни один не справится в одиночку — им придётся договариваться.
Самая обидная ошибка новичка: положить LocalScript не в ту папку. Он не ругается — он просто молчит. Правильный дом — StarterPlayer → StarterPlayerScripts.
Проверка · Ты покрасил маяк из LocalScript. Что увидит друг?
Кто умеет слышать нажатие клавиши E?
Оба верных ответа — +10 дублонов.

- 1StarterPlayer → StarterPlayerScriptsЖми треугольник — строка раскроется. Только здесь LocalScript оживает и слышит твою клавишу E. Положишь его в ServerScriptService — ни ошибки, ни предупреждения, мёртвая тишина.
- 2ReplicatedStorage — папка, которую видят оба мираВот она, живая, в списке — а не «где-то там». Наведи на строку → «+» → RemoteEvent и назови «ЗажечьМаяк». Это и есть мост между твоим экраном и общим миром.
- 3ServerScriptService — сторона сервера«+» → Script. Он ловит OnServerEvent и красит маяк по-настоящему, для всех. И первым аргументом ему сам собой приходит player — Roblox добавляет его сам, подделать нельзя.
- 4Селектор режима — «Server & Clients»На кадре он уже переключён. Только этот режим показывает оба мира сразу: окно сервера и окна игроков. Никаких «Local Server» и «2 Players» в меню нет.
- 5Счётчик игроков — 2, и жми ▶ слеваПокрась маяк из LocalScript и переключись в соседнее окно: там он остался серым. Потом сделай то же через RemoteEvent — и цвет появится у обоих. Вот вся тайна двух миров.
Это настоящий экран Roblox Studio 2026 — такой же, как у тебя: та же лента вкладок, тот же Explorer со всеми сервисами, та же панель Properties. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно. Чего на кадре нет — про то честно написано словами. Отмечай пройденное — прогресс сохранится.
Мост между мирами
Мост называется RemoteEvent. По шагам: в Explorer наведи мышь на ReplicatedStorage → нажми круглую кнопку + → в списке выбери RemoteEvent → сразу переименуй его в ЗажечьМаяк (ПКМ → Rename). Это папка, куда дотягиваются оба мира. Клиент кричит в рупор, сервер слышит и делает по-настоящему.
Попробуй сам. Сначала покрась из LocalScript и посмотри на правый экран. Потом переключись на сервер и нажми ещё раз. Разницу лучше один раз увидеть, чем десять раз прочитать.
1 -- LocalScript в StarterPlayerScripts
2 local RS = game:GetService("ReplicatedStorage")
3 local event = RS:WaitForChild("ЗажечьМаяк")
4
5 local UIS = game:GetService("UserInputService")
6 UIS.InputBegan:Connect(function(key, typing)
7 if typing then return end -- буква E набрана в чате — не наше дело
8 if key.KeyCode == Enum.KeyCode.E then
9 event:FireServer() -- кричим на сервер: «зажигай!»
10 end
11 end)
Клиент делает ровно одно: слышит клавишу и кричит на сервер. Сам он маяк не трогает — не его работа. Обрати внимание на FireServer — «эй, сервер, тут кое-что произошло». А вторая строка — обязательная страховка: второй аргумент InputBegan говорит, «съел» ли нажатие интерфейс. Без него любая буква E, набранная в чате, будет зажигать маяк.
1 -- Script в ServerScriptService
2 local RS = game:GetService("ReplicatedStorage")
3 local event = RS:WaitForChild("ЗажечьМаяк")
4 local beacon = workspace:WaitForChild("Маяк")
5
6 event.OnServerEvent:Connect(function(player)
7 -- player приходит САМ, первым. его никто не отправлял!
8 beacon.Color = player.TeamColor.Color
9 print(player.Name .. " зажёг маяк")
10 end) -- теперь маяк видят ВСЕ
А вот это надо запомнить накрепко: в строке 6 player приходит первым сам по себе. Клиент его не отправлял — Roblox добавляет его к сигналу, чтобы сервер точно знал, кто кричал. Отсюда и цвет команды.
И маленький секрет напоследок: сервер не обязан слушаться. Он может проверить — а хватает ли монет, а жив ли игрок — и отказать. Поэтому важные вещи и решают наверху: клиент подделать легко, сервер — нет.

Золотое правило: не верь клиенту
Экран игрока — территория игрока. Всё, что считается только там, можно подменить. Так и появляются читеры с бесконечными деньгами.
Поэтому у профессионалов правило: никогда не верь клиенту. Важное считает сервер, а клиент только просит и показывает.
Это не только про игры. Точно так же устроены банковские приложения и магазины: настоящая проверка всегда на той стороне.
Сигнал пришёл, а цвет не тот
Здесь Output наконец-то помогает: «ждали Color3, получили Instance». То есть в переменной лежит какой-то объект вместо цвета. Найди строку, где мы принимаем сигнал неправильно.
Правило в одну строку, которое сэкономит тебе часы: отправил один аргумент — принимай два. Первым на сервер всегда приходит тот, кто кричал.
Два экрана рядом
Запусти Test ▾ → Server & Clients → поставь 2 игрока → ▶ Play и поставь окна рядом. Нажми E в первом — и смотри во второе. Маяк должен покраснеть у обоих. Это и есть доказательство, что ты достучался до общего мира.
Шестая галочка — самая красивая: маяк загорается цветом той команды, чей игрок нажал. Сервер узнал это из player, которого никто не отправлял.
Что теперь можно построить
Ты только что открыл дверь, за которой почти все настоящие механики. Выбери одну идею и добавь её в свою игру — приём везде один и тот же.
Вызов другу: пусть зайдёт и нажмёт E со своей стороны. Маяк вспыхнет его цветом — и он сразу спросит, как ты это сделал.
Читать текстом
Жми — Гильдия отметит пятый остров.