Menu
CoddyTech

Capai Markas

Pelajaran 3 dari 18 dalam kursus Game Roblox: Tower Defense di Coddy.

Musuh yang mencapai ujung jalur akan mengurangi health base. Health base disimpan di server, tetapi layar setiap pemain akan menampilkannya, jadi simpan sebagai atribut workspace: atribut yang ditetapkan di server akan terlihat oleh setiap client.

workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20

damageBase(amount) menguranginya, tetapi nilainya tidak pernah kurang dari 0 (math.max). Setelah mencapai waypoint terakhir, musuh memanggil fungsi itu lalu keluar dari game dengan Destroy.

challenge icon

Tantangan

Mudah
  1. Setelah mengurutkan titik arah, atur atribut workspace BaseHealth menjadi Settings.BaseHealth.
  2. Tulis damageBase(amount), yang mengurangi BaseHealth sebesar amount, tetapi tidak pernah kurang dari 0.
  3. Di akhir walkPath, setelah titik arah terakhir, panggil damageBase(1) dan hancurkan musuh.

Tekan Play, lalu Check.

Coba sendiri

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

-- Waypoint sesuai urutan (bernama 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Setiap pemain mendapat Money di leaderboard
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)

-- Gerakkan musuh menyusuri jalur. MoveTo berhenti mencoba setelah 8 detik dan memberi tahu hal itu
-- (MoveToFinished dengan false), jadi musuh yang lambat diperintahkan bergerak lagi sampai tiba.
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

-- Musuh baru di gerbang, menyusuri jalur
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- ditempatkan tepat di atas waypoint pertama
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Untuk saat ini, satu musuh saja
spawnEnemy("Zombie")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Tower Defense

Latihan sendiri: Playground Roblox