Menu
CoddyTech

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

damageBase(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.

challenge icon

Desafío

Fácil
  1. Después de ordenar los puntos de ruta, establece el atributo del espacio de trabajo BaseHealth en Settings.BaseHealth.
  2. Escribe damageBase(amount), que reduce BaseHealth en amount, nunca por debajo de 0.
  3. Al final de walkPath, después del último punto de ruta, llama a damageBase(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")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Roblox: defensa de torres