Menu
CoddyTech

הגיעו לבסיס

שיעור 3 מתוך 18 בקורס משחק Roblox: הגנת מגדלים של Coddy.

אויב שמגיע לסוף המסלול פוגע בבסיס. הבריאות של הבסיס שייכת לשרת, אבל היא תוצג במסך של כל שחקן, לכן נשמור אותה כמאפיין של סביבת העבודה: מאפיין שמוגדר בשרת גלוי לכל לקוח.

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

damageBase(amount) מפחיתה אותה, אך לא מתחת ל-0 (math.max). אחרי נקודת הציון האחרונה האויב קורא לה ויוצא מהמשחק באמצעות Destroy.

challenge icon

אתגר

קל
  1. אחרי מיון נקודות הציון, הגדירו את המאפיין של סביבת העבודה BaseHealth לערך Settings.BaseHealth.
  2. כתבו את damageBase(amount), שמפחיתה את BaseHealth ב־amount, אך לא מתחת ל־0.
  3. בסוף walkPath, אחרי נקודת הציון האחרונה, קראו ל־damageBase(1) והשמידו את האויב.

לחצו על Play, ואז על Check.

נסו בעצמכם

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

-- נקודות הציון לפי הסדר (השמות שלהן הם 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- כל שחקן מקבל Money בלוח המובילים
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)

-- הולך עם אויב לאורך המסלול. MoveTo מוותר אחרי 8 שניות ומדווח על כך
-- (MoveToFinished עם false), לכן שולחים שוב אויב איטי עד שהוא מגיע.
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

-- אויב חדש בשער, הולך לאורך המסלול
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- מוצב ממש מעל נקודת הציון הראשונה
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- אויב אחד, לעת עתה
spawnEnemy("Zombie")
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משחק Roblox: הגנת מגדלים