Menu
CoddyTech

Rozbij stos

Lekcja 3 z 18 w kursie Gra Roblox: Symulator zwierzaków w Coddy.

Gracze rozbijają stosy, klikając je. Umieszczony wewnątrz części ClickDetector wywołuje na serwerze zdarzenie MouseClick wraz z informacją o graczu, który kliknął, gdy znajduje się on wystarczająco blisko.

Każde kliknięcie odejmuje 1 od wartości Health stosu. Gdy osiągnie ona 0, stos się rozpada: gracz otrzymuje liczbę monet równą jego wartości Value, a stos zostaje zniszczony.

local health = pile:GetAttribute("Health") - 1
if health > 0 then
	pile:SetAttribute("Health", health)
	return
end
-- zepsute

Obsługa kliknięcia jest podłączona wewnątrz spawnPile i wywołuje hitPile, która jest zdefiniowana poniżej spawnPile. Funkcja może używać tylko lokalnej nazwy, która została już zadeklarowana, więc najpierw zadeklaruj local hitPile, powyżej obu funkcji, a później uzupełnij ją za pomocą function hitPile(player, pile).

challenge icon

Wyzwanie

Łatwy
  1. Nad spawnPile zadeklaruj local hitPile.
  2. W spawnPile dodaj do stosu ClickDetector i połącz jego MouseClick z hitPile(player, pile).
  3. Pod spawnPile napisz function hitPile(player, pile): zmniejsz atrybut Health o 1; jeśli nadal jest większy niż 0, zapisz go i zakończ działanie; w przeciwnym razie dodaj wartość Value stosu do Coins gracza i zniszcz stos.

Naciśnij Play i kliknij stos trzy razy. Następnie naciśnij Check.

Spróbuj swoich sił

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")

-- Każdy gracz otrzymuje Coins w tabeli wyników
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)

-- Stos monet w miejscu pojawiania się: kopia ServerStorage.CoinPile z jego zdrowiem
-- i wartością zapisanymi jako atrybuty
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

-- Stos w każdym miejscu pojawiania się w Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Roblox: Symulator zwierzaków