Menu
CoddyTech

Üsse Ulaş

Coddy'nin Roblox Oyunu: Kule Savunması kursunda ders 3 / 18.

Yolun sonuna ulaşan bir düşman üssün canını azaltır. Üssün canı sunucuda tutulmalıdır, ancak her oyuncunun ekranında gösterileceğinden çalışma alanının bir özelliği olarak saklayın: sunucuda ayarlanan bir özellik tüm istemciler tarafından görülür.

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

damageBase(amount) canı 0'ın altına düşürmeden azaltır (math.max). Son ara noktadan sonra düşman bu işlevi çağırır ve Destroy ile oyundan çıkar.

challenge icon

Görev

Kolay
  1. Yol noktalarını sıraladıktan sonra workspace özniteliği BaseHealth değerini Settings.BaseHealth olarak ayarlayın.
  2. damageBase(amount) fonksiyonunu yazın; bu fonksiyon BaseHealth değerini amount kadar azaltır ve 0'ın altına düşürmez.
  3. walkPath fonksiyonunun sonunda, son yol noktasından sonra damageBase(1) çağrısını yapın ve düşmanı yok edin.

Play'e, ardından Check'e basın.

Kendin dene

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

-- Sıralı yol noktaları (1, 2, 3... olarak adlandırılırlar)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- Her oyuncuya liderlik tablosunda Money verilir
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)

-- Bir düşmanı yol boyunca ilerlet. MoveTo 8 saniye sonra denemeyi bırakır ve bunu bildirir
-- (MoveToFinished false ile), bu yüzden yavaş bir düşmana varana kadar yeniden hareket komutu verilir.
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

-- Kapıda, yol boyunca ilerleyen yeni bir düşman
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- ilk yol noktasının hemen üzerine yerleştirilir
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- Şimdilik tek bir düşman
spawnEnemy("Zombie")
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Roblox Oyunu: Kule Savunması bölümündeki tüm dersler