Разбей стопку
Урок 3 из 18 курса Игра в Roblox: симулятор питомцев на Coddy.
Игроки разбивают груды, нажимая на них. ClickDetector внутри детали срабатывает на сервере при событии MouseClick, передавая игрока, который нажал, если он находится достаточно близко.
Каждое нажатие уменьшает Health груды на 1. Когда значение достигает 0, груда разбивается: игрок получает её Value в монетах, а груда уничтожается.
local health = pile:GetAttribute("Health") - 1
if health > 0 then
pile:SetAttribute("Health", health)
return
end
-- сломаноОбработчик нажатия подключается внутри spawnPile и вызывает hitPile, которая записана ниже spawnPile. Функция может использовать только локальное имя, которое уже объявлено, поэтому сначала объяви local hitPile выше обеих функций, а позже дополни его с помощью function hitPile(player, pile).
Задание
Легко- Выше
spawnPileобъявиlocal hitPile. - В
spawnPileдобавь к куче ClickDetector и подключи егоMouseClickкhitPile(player, pile). - Ниже
spawnPileнапишиfunction hitPile(player, pile): уменьши атрибут Health на 1; если он всё ещё больше 0, сохрани его и остановись; иначе добавь значение Value к Coins игрока и уничтожь кучу.
Нажми Играть и щёлкни по куче три раза. Затем нажми Проверить.
Попробуйте сами
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Каждый игрок получает Coins в таблице лидеров
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Parent = leaderstats
end)
-- Кучка монет на точке: копия ServerStorage.CoinPile, у которой здоровье
-- и ценность заданы как атрибуты
local function spawnPile(spot)
local pile = ServerStorage.CoinPile:Clone()
pile.Position = spot.Position
pile:SetAttribute("MaxHealth", Settings.PileHealth)
pile:SetAttribute("Health", Settings.PileHealth)
pile:SetAttribute("Value", Settings.PileValue)
pile.Parent = piles
return pile
end
-- Кучка на каждой точке в Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.