Menu
CoddyTech

Разбей стопку

Урок 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).

challenge icon

Задание

Легко
  1. Выше spawnPile объяви local hitPile.
  2. В spawnPile добавь к куче ClickDetector и подключи его MouseClick к hitPile(player, pile).
  3. Ниже 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игра в Roblox: симулятор питомцев