Erreiche die Basis
Lektion 3 von 18 im Kurs Roblox-Spiel: Tower Defense von Coddy.
Ein Gegner, der das Ende des Pfads erreicht, fügt der Basis Schaden zu. Die Lebenspunkte der Basis gehören auf den Server, aber sie werden auf dem Bildschirm jedes Spielers angezeigt. Speichere sie daher als Attribut des Workspace: Ein auf dem Server gesetztes Attribut ist für jeden Client sichtbar.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount) verringert sie, jedoch niemals unter 0 (math.max). Nach dem letzten Wegpunkt ruft der Gegner die Funktion auf und verlässt mit Destroy das Spiel.
Aufgabe
Einfach- Setze nach dem Sortieren der Wegpunkte das Workspace-Attribut
BaseHealthaufSettings.BaseHealth. - Schreibe
damageBase(amount), dasBaseHealthumamountverringert, jedoch niemals unter 0. - Rufe am Ende von
walkPath, nach dem letzten Wegpunkt,damageBase(1)auf und zerstöre den Gegner.
Drücke Play und dann Check.
Probier es selbst
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")
-- Die Wegpunkte in der richtigen Reihenfolge (sie heißen 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- Jeder Spieler bekommt Money auf der Bestenliste
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)
-- Bewege einen Gegner den Pfad entlang. MoveTo bricht nach 8 Sekunden ab und meldet das
-- (MoveToFinished mit false), deshalb wird ein langsamer Gegner erneut losgeschickt, bis er ankommt.
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
-- Ein neuer Gegner am Tor, der den Pfad entlangläuft
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- knapp über dem ersten Wegpunkt platziert
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- Vorerst nur ein Gegner
spawnEnemy("Zombie")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.