Цель
Изучить серверные ограничения
Подготовка
ReplicatedStorage → RemoteEvent RequestReward; ServerScriptService → Script RewardGuard; наградной объект BonusPad в Workspace.
Пошаговая работа
- Создай отдельную копию проекта для урока №80.
- ReplicatedStorage → RemoteEvent RequestReward; ServerScriptService → Script RewardGuard; наградной объект BonusPad в Workspace.
- Пошли несколько повторных запросов
- Замерь отклонения
- Проверь неизменность Stars
- Запусти Play и проверь результат по контрольным условиям.
Пример Luau
local event = game.ReplicatedStorage:WaitForChild("RequestReward")
local pad = workspace:WaitForChild("BonusPad")
local awarded = {}
event.OnServerEvent:Connect(function(player)
if awarded[player] then return end
local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
if not root or (root.Position-pad.Position).Magnitude > 8 then return end
local stars = player:FindFirstChild("leaderstats")
stars = stars and stars:FindFirstChild("Stars")
if not stars then return end
awarded[player] = true
stars.Value += 1
end)
game.Players.PlayerRemoving:Connect(function(p) awarded[p] = nil end)Проверка
Сервер не выдаёт повторные награды
Даже при десяти одинаковых запросах сервер начисляет игроку максимум одну звезду за сессию.
Ошибка и ограничения
Валидация существует только в GUI. Проверка расстояния — только учебное ограничение: в настоящей игре сервер должен подтверждать событие награды, а не полагаться лишь на положение игрока.
Усложнение
Добавь лог отказов без персональных данных
Проверь пример в тестовой Roblox Studio перед публикацией. Используй отдельные копии проектов и не подключай два конкурирующих сохранения одновременно.
