Reach the Base
Lesson 3 of 18 in Coddy's Roblox Game: Tower Defense course.
An enemy that gets to the end of the path hurts the base. The base's health belongs on the server, but every player's screen will show it, so keep it as an attribute of the workspace: an attribute set on the server is seen by every client.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount) lowers it, never below 0 (math.max). After the last waypoint the enemy calls it and leaves the game with Destroy.
Challenge
Easy- After sorting the waypoints, set the workspace attribute
BaseHealthtoSettings.BaseHealth. - Write
damageBase(amount), which lowersBaseHealthbyamount, never below 0. - At the end of
walkPath, after the last waypoint, calldamageBase(1)and destroy the enemy.
Press Play, then Check.
Try it yourself
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")
-- The waypoints, in order (they are named 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- Every player gets Money on the 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)
-- Walk an enemy along the path. MoveTo gives up after 8 seconds and says so
-- (MoveToFinished with false), so a slow enemy is sent again until it arrives.
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
-- A new enemy at the gate, walking the path
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- dropped in just above the first waypoint
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- One enemy, for now
spawnEnemy("Zombie")
This lesson includes a short quiz. Start the lesson to answer it and track your progress.