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

Безопасный магазин

Проверять цену и покупку на сервере

Безопасный магазин
Иллюстрация к теме занятия

Цель

Проверять цену и покупку на сервере

Подготовка

ServerScriptService → Script ShopServer; Workspace → ShopPart → ProximityPrompt; серверный leaderstats.Stars из предыдущего задания.

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

  1. Создай отдельную копию проекта для урока №75.
  2. ServerScriptService → Script ShopServer; Workspace → ShopPart → ProximityPrompt; серверный leaderstats.Stars из предыдущего задания.
  3. Задай фиксированную стоимость
  4. Проверь Stars и факт покупки
  5. Списывай валюту только при успехе
  6. Запусти Play и проверь результат по контрольным условиям.

Пример Luau

local prompt = workspace.ShopPart:WaitForChild("ProximityPrompt")
local PRICE = 5
local owned = {}
prompt.Triggered:Connect(function(player)
    if owned[player] then return end
    local stats = player:FindFirstChild("leaderstats")
    local stars = stats and stats:FindFirstChild("Stars")
    if not stars or stars.Value < PRICE then return end
    stars.Value -= PRICE
    owned[player] = true
    player:SetAttribute("HasFlippers", true)
end)
game.Players.PlayerRemoving:Connect(function(p) owned[p] = nil end)

Проверка

Нельзя купить без валюты и дважды

При 4 звёздах покупка не совершается, при 5 — звёзды списываются ровно один раз.

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

Стоимость передана клиентом как истина. В учебном примере покупка действует одну сессию, а звёзды должны создаваться только сервером.

Усложнение

Добавь две покупки с разной ценой

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

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

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

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

Проверь себя

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

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

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

1. У игрока 4 звезды, предмет стоит 5. Что делает сервер?
2. Клиент прислал цену 0 для предмета стоимостью 5. Как поступить?
3. Игрок уже купил одноразовые ласты и снова нажал «Купить».
4. У игрока 9 звёзд, покупка стоит 5. Сколько останется при успешной покупке?
5. Почему проверку баланса и списание следует выполнять в одной серверной операции?