Цель
Разобраться, кто кому доверяет
Подготовка
ReplicatedStorage → RemoteEvent RequestOpen; Workspace → Door (Part); ServerScriptService → Script DoorServer; StarterPlayerScripts → LocalScript DoorClient.
Пошаговая работа
- Создай отдельную копию проекта для урока №73.
- ReplicatedStorage → RemoteEvent RequestOpen; Workspace → Door (Part); ServerScriptService → Script DoorServer; StarterPlayerScripts → LocalScript DoorClient.
- Нарисуй схему LocalScript → RemoteEvent → Script
- Отправь запрос
- Разрешай действие после серверной проверки
- Запусти 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 перед публикацией. Используй отдельные копии проектов и не подключай два конкурирующих сохранения одновременно.
