Урок Roblox StudioЗанятие 1 / 8

Граница клиента и сервера

Разобраться, кто кому доверяет

Граница клиента и сервера
Иллюстрация к теме занятия

Цель

Разобраться, кто кому доверяет

Подготовка

ReplicatedStorage → RemoteEvent RequestOpen; Workspace → Door (Part); ServerScriptService → Script DoorServer; StarterPlayerScripts → LocalScript DoorClient.

Пошаговая работа

  1. Создай отдельную копию проекта для урока №73.
  2. ReplicatedStorage → RemoteEvent RequestOpen; Workspace → Door (Part); ServerScriptService → Script DoorServer; StarterPlayerScripts → LocalScript DoorClient.
  3. Нарисуй схему LocalScript → RemoteEvent → Script
  4. Отправь запрос
  5. Разрешай действие после серверной проверки
  6. Запусти Play и проверь результат по контрольным условиям.

Пример Luau

-- DoorClient (LocalScript)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("RequestOpen")
-- Для опыта запускаем запрос при нажатии F
local UIS = game:GetService("UserInputService")
UIS.InputBegan:Connect(function(input, processed)
    if not processed and input.KeyCode == Enum.KeyCode.F then
        event:FireServer()
    end
end)

-- DoorServer (отдельный Script)
local event = game.ReplicatedStorage:WaitForChild("RequestOpen")
local door = workspace:WaitForChild("Door")
event.OnServerEvent:Connect(function(player)
    local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
    if not root or (root.Position-door.Position).Magnitude > 12 then return end
    door.CanCollide = false
    door.Transparency = 0.65
end)

Проверка

Сервер не принимает произвольное число наград от клиента

Нажатие F рядом с дверью открывает её; издалека сервер не меняет дверь.

Ошибка и ограничения

Сервер слепо использует переданную сумму. Не передавай от клиента количество наград: сервер должен определять разрешённое действие.

Усложнение

Добавь ограничение частоты запросов

Проверь пример в тестовой Roblox Studio перед публикацией. Используй отдельные копии проектов и не подключай два конкурирующих сохранения одновременно.

Проверь свою работу

Перед тестом убедись, что ты выполнил практику самостоятельно.

Эти отметки — личная памятка, они не влияют на звёзды.

Проверь себя

Ответь на вопросы урока. Успешный тест даёт одну звезду в личном кабинете.

⭐ Проверь свои знания

5 вопросов по теме урока. За 4 правильных ответа получишь звезду. Повторные попытки разрешены.

1. Клиент отправил на сервер запрос: «Выдай мне 1000 звёзд». Что должен сделать сервер?
2. Какой скрипт обычно вызывает RemoteEvent:FireServer()?
3. Как сервер узнаёт, кто вызвал OnServerEvent?
4. Почему нельзя считать присланное клиентом значение Stars безопасным?
5. Как ограничить поток запросов от одного игрока?