Menu
CoddyTech

Atteindre la base

Leçon 3 sur 18 du cours Jeu Roblox : Tower Defense de Coddy.

Un ennemi qui atteint la fin du chemin inflige des dégâts à la base. La santé de la base doit être conservée sur le serveur, mais elle sera affichée sur l’écran de chaque joueur : garde-la donc comme attribut de workspace ; un attribut défini sur le serveur est visible par tous les clients.

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

damageBase(amount) la diminue, sans jamais descendre en dessous de 0 (math.max). Après le dernier point de passage, l’ennemi appelle cette fonction et quitte le jeu avec Destroy.

challenge icon

Défi

Facile
  1. Après avoir trié les points de passage, définissez l’attribut workspace BaseHealth sur Settings.BaseHealth.
  2. Écrivez damageBase(amount), qui diminue BaseHealth de amount, sans jamais descendre sous 0.
  3. À la fin de walkPath, après le dernier point de passage, appelez damageBase(1) et détruisez l’ennemi.

Appuyez sur Play, puis sur Check.

Essayez vous-même

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

-- Les waypoints, dans l’ordre (ils sont nommés 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Chaque joueur reçoit Money dans le 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)

-- Fait avancer un ennemi le long du chemin. MoveTo abandonne après 8 secondes et le signale
-- (MoveToFinished avec false) ; un ennemi lent reçoit donc à nouveau l’ordre d’avancer jusqu’à son arrivée.
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

-- Un nouvel ennemi à l’entrée, qui suit le chemin
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- placé juste au-dessus du premier waypoint
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Un seul ennemi, pour l’instant
spawnEnemy("Zombie")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Roblox : Tower Defense