Dostań się do bazy
Lekcja 3 z 18 w kursie Gra Roblox: Obrona wieży w Coddy.
Wróg, który dotrze do końca ścieżki, zadaje obrażenia bazie. Zdrowie bazy powinno być przechowywane na serwerze, ale będzie widoczne na ekranie każdego gracza, więc przechowuj je jako atrybut workspace: atrybut ustawiony na serwerze jest widoczny dla każdego klienta.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount) zmniejsza jego wartość, ale nigdy poniżej 0 (math.max). Po minięciu ostatniego punktu trasy wróg wywołuje tę funkcję i opuszcza grę za pomocą Destroy.
Wyzwanie
Łatwy- Po posortowaniu punktów trasy ustaw atrybut workspace
BaseHealthnaSettings.BaseHealth. - Napisz
damageBase(amount), która zmniejszaBaseHealthoamount, ale nigdy poniżej 0. - Na końcu
walkPath, za ostatnim punktem trasy, wywołajdamageBase(1)i zniszcz wroga.
Naciśnij Play, a następnie Check.
Spróbuj swoich sił
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local enemies = workspace.Enemies
print("The base can take " .. Settings.BaseHealth .. " hits")
-- Punkty trasy w kolejności (noszą nazwy 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- Każdy gracz otrzymuje Money w tabeli wyników
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local money = Instance.new("IntValue")
money.Name = "Money"
money.Value = Settings.StartMoney
money.Parent = leaderstats
end)
-- Poprowadź przeciwnika wzdłuż trasy. MoveTo przerywa próbę po 8 sekundach i sygnalizuje to
-- (MoveToFinished z wartością false), więc powolny przeciwnik jest ponownie kierowany do celu, aż tam dotrze.
local function walkPath(enemy)
local humanoid = enemy.Humanoid
for i = 2, #waypoints do
repeat
humanoid:MoveTo(waypoints[i].Position)
until humanoid.MoveToFinished:Wait() or not enemy.Parent
if not enemy.Parent then
return
end
end
end
-- Nowy przeciwnik przy bramie, podążający trasą
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- umieszczony tuż nad pierwszym punktem trasy
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- Na razie jeden przeciwnik
spawnEnemy("Zombie")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.