Menu
CoddyTech

Raggiungi la base

Lezione 3 di 18 del corso Gioco Roblox: Tower Defense di Coddy.

Un nemico che raggiunge la fine del percorso danneggia la base. La salute della base deve risiedere sul server, ma verrà mostrata sullo schermo di ogni giocatore, quindi mantienila come attributo del workspace: un attributo impostato sul server è visibile a ogni client.

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

damageBase(amount) la riduce, senza mai scendere sotto 0 (math.max). Dopo l'ultimo punto di passaggio, il nemico la chiama e lascia la partita con Destroy.

challenge icon

Sfida

Facile
  1. Dopo aver ordinato i punti di passaggio, imposta l'attributo del workspace BaseHealth su Settings.BaseHealth.
  2. Scrivi damageBase(amount), che riduce BaseHealth di amount, senza mai scendere sotto 0.
  3. Alla fine di walkPath, dopo l'ultimo punto di passaggio, chiama damageBase(1) e distruggi il nemico.

Premi Play, poi Check.

Provalo tu

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

-- I waypoint, in ordine (si chiamano 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Ogni giocatore riceve Money nella classifica
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)

-- Fai avanzare un nemico lungo il percorso. MoveTo rinuncia dopo 8 secondi e lo segnala
-- (MoveToFinished con false), quindi a un nemico lento viene dato di nuovo il comando finché non arriva.
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 nuovo nemico al cancello, che percorre il tragitto
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- posizionato appena sopra il primo waypoint
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Un solo nemico, per ora
spawnEnemy("Zombie")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Roblox: Tower Defense