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
-- zepsuteObsł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).
Wyzwanie
Łatwy- Nad
spawnPilezadeklarujlocal hitPile. - W
spawnPiledodaj do stosu ClickDetector i połącz jegoMouseClickzhitPile(player, pile). - Pod
spawnPilenapiszfunction 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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.