Menu
CoddyTech

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

damageBase(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.

challenge icon

Wyzwanie

Łatwy
  1. Po posortowaniu punktów trasy ustaw atrybut workspace BaseHealth na Settings.BaseHealth.
  2. Napisz damageBase(amount), która zmniejsza BaseHealth o amount, ale nigdy poniżej 0.
  3. Na końcu walkPath, za ostatnim punktem trasy, wywołaj damageBase(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")
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: Obrona wieży