Đế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")) --> 20damageBase(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.
Thử thách
DễGây sát thương cho căn cứ khi kẻ địch chạm đến đó.
- Sau khi sắp xếp các điểm dẫn đường, đặt thuộc tính của workspace
BaseHealththànhSettings.BaseHealth. - Viết
damageBase(amount): giảmBaseHealthđiamount, không bao giờ thấp hơn 0, rồiprint("Base: " .. health). - Ở cuối
walkPath, gọidamageBase(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