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")) --> 20damageBase(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.
Défi
Facile- Après avoir trié les points de passage, définissez l’attribut workspace
BaseHealthsurSettings.BaseHealth. - Écrivez
damageBase(amount), qui diminueBaseHealthdeamount, sans jamais descendre sous 0. - À la fin de
walkPath, après le dernier point de passage, appelezdamageBase(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")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.