Menu
CoddyTech

Chegue à Base

Lição 3 de 18 do curso Jogo no Roblox: Defesa de Torres da Coddy.

Um inimigo que chega ao fim do caminho causa dano à base. A vida da base deve ficar no servidor, mas será exibida na tela de cada jogador; portanto, mantenha-a como um atributo do workspace: um atributo definido no servidor é visto por todos os clientes.

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

damageBase(amount) diminui esse valor, nunca abaixo de 0 (math.max). Depois do último ponto de referência, o inimigo chama essa função e sai do jogo com Destroy.

challenge icon

Desafio

Fácil
  1. Depois de ordenar os pontos de passagem, defina o atributo do workspace BaseHealth como Settings.BaseHealth.
  2. Escreva damageBase(amount), que reduz BaseHealth em amount, nunca abaixo de 0.
  3. No final de walkPath, depois do último ponto de passagem, chame damageBase(1) e destrua o inimigo.

Pressione Play e, em seguida, Check.

Experimente você mesmo

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

-- Os pontos de passagem, em ordem (eles são nomeados 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Todo jogador recebe Money no placar
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)

-- Faça um inimigo percorrer o caminho. MoveTo desiste após 8 segundos e sinaliza isso
-- (MoveToFinished com false), então um inimigo lento recebe o comando novamente até chegar.
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

-- Um novo inimigo no portão, percorrendo o caminho
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- posicionado logo acima do primeiro ponto de passagem
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Um inimigo, por enquanto
spawnEnemy("Zombie")
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo no Roblox: Defesa de Torres