Menu
CoddyTech

Đến căn cứ

Bài học 4 trên 22 trong khóa học Trò chơi Roblox: phòng thủ tháp của Coddy.

Kẻ địch đi đến cuối đường sẽ làm căn cứ mất máu. Máu của căn cứ phải nằm trên máy chủ, nhưng màn hình của mọi người chơi đều hiển thị chỉ số này, vì vậy hãy lưu nó dưới dạng thuộc tính (attribute) của workspace: thuộc tính được thiết lập trên máy chủ sẽ hiển thị với mọi client.

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

damageBase(amount) giảm chỉ số này, nhưng không thấp hơn 0 (math.max), rồi in chỉ số ra để bạn có thể theo dõi căn cứ trong Output cho đến khi HUD hiển thị chỉ số đó. Sau waypoint cuối cùng, kẻ địch gọi hàm này rồi rời khỏi trò chơi bằng Destroy, nếu không, đợt tấn công sẽ không bao giờ kết thúc.

challenge icon

Thử thách

Dễ

Gây sát thương cho căn cứ khi kẻ địch chạm đến đó.

  1. Sau khi sắp xếp các điểm dẫn đường, đặt thuộc tính của workspace BaseHealth thành Settings.BaseHealth.
  2. Viết damageBase(amount): giảm BaseHealth đi amount, không bao giờ thấp hơn 0, rồi print("Base: " .. health).
  3. Ở cuối walkPath, gọi damageBase(1) và phá hủy kẻ địch.

Nhấn Chơi: Zombie đi vào căn cứ rồi biến mất, còn Output hiển thị Base: 19. Sau đó nhấn Kiểm tra.

Tự làm thử

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

-- Các điểm mốc theo thứ tự (được đặt tên là 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Mỗi người chơi có Money trên bảng xếp hạng
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)

-- Bài học 4: Đến căn cứ đặt ở đây

-- Cho kẻ địch đi theo đường đi. MoveTo dừng sau 8 giây và báo lại
-- (MoveToFinished trả về false), nên tiếp tục ra lệnh cho kẻ địch chậm di chuyển đến khi nó tới nơi.
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

-- Một kẻ địch mới xuất hiện ở cổng và đi theo đường đi
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- xuất hiện ngay phía trên điểm mốc đầu tiên
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Hiện tại chỉ có một kẻ địch
spawnEnemy("Zombie")

Tất cả bài học trong Trò chơi Roblox: phòng thủ tháp

Tự luyện tập: Playground Roblox