Llega a la base
Lección 3 de 18 del curso Juego de Roblox: defensa de torres de Coddy.
Un enemigo que llega al final del camino daña la base. La salud de la base debe estar en el servidor, pero se mostrará en la pantalla de cada jugador, así que guárdala como un atributo del espacio de trabajo: todos los clientes pueden ver un atributo establecido en el servidor.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount) la reduce, sin bajar nunca de 0 (math.max). Después del último punto de ruta, el enemigo la llama y sale del juego con Destroy.
Desafío
Fácil- Después de ordenar los puntos de ruta, establece el atributo del espacio de trabajo
BaseHealthenSettings.BaseHealth. - Escribe
damageBase(amount), que reduceBaseHealthenamount, nunca por debajo de 0. - Al final de
walkPath, después del último punto de ruta, llama adamageBase(1)y destruye al enemigo.
Pulsa Play y después Check.
Pruébalo tú mismo
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")
-- Los puntos de paso, en orden (se llaman 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- Cada jugador recibe Money en la tabla de clasificación
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)
-- Haz que un enemigo recorra el camino. MoveTo deja de intentarlo después de 8 segundos y lo indica
-- (MoveToFinished con false), así que se vuelve a enviar al enemigo lento hasta que llega.
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 nuevo enemigo en la entrada, recorriendo el camino
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- colocado justo encima del primer punto de paso
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- Un solo enemigo, por ahora
spawnEnemy("Zombie")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.