Menu
CoddyTech

פעם אחת בכל הנפה

שיעור 4 מתוך 20 בקורס משחק Roblox: זירות קרב של Coddy.

מכה אחת הורידה לבובת האימון 30 נקודות. השורש, הרגליים והראש שלה הם שלושה חלקים שנמצאים כולם בתוך התיבה, וכל אחד מהם פגע באותו Humanoid.

טבלה פותרת את הבעיה: זוכרים כל Humanoid שהמכה הזאת פגעה בו, ומדלגים על מי שכבר ראינו. המפתחות של טבלה יכולים להיות מופעים:

local hit = {}
if humanoid and not hit[humanoid] then
	hit[humanoid] = true
	-- פגע בו פעם אחת
end

הטבלה נוצרת בתוך swing, כך שכל מכה מתחילה עם טבלה ריקה, ושני אויבים שנמצאים בתוך התיבה נפגעים פעם אחת כל אחד.

challenge icon

אתגר

קל

בתוך swing, צור local hit = {} לפני הלולאה, ופגע ב-Humanoid רק אם הוא עדיין לא נמצא בתוך hit, וסמן אותו כשאתה עושה זאת.

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

נסו בעצמכם

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local lastSwing = {} -- player -> מתי הניף את החרב בפעם האחרונה

-- אנימציות החרב של Roblox
local slash = Instance.new("Animation")
slash.AnimationId = "rbxassetid://522635514"

print("Swords deal " .. Settings.SwordDamage .. " damage")

-- הנפת חרב: האנימציה מופעלת, ואז כל מי שנמצא בתיבה שלפניך נפגע
local function swing(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if not root or character.Humanoid.Health <= 0 then
		return
	end
	local now = time()
	if lastSwing[player] and now - lastSwing[player] < Settings.SwingCooldown then
		return
	end
	lastSwing[player] = now
	character.Humanoid.Animator:LoadAnimation(slash):Play()
	-- התיבה שלפניך, אף פעם לא הגוף שלך
	local params = OverlapParams.new()
	params.FilterDescendantsInstances = { character }
	local box = root.CFrame * CFrame.new(0, 0, -3)
	for _, part in workspace:GetPartBoundsInBox(box, Settings.HitboxSize, params) do
		local humanoid = part.Parent:FindFirstChildOfClass("Humanoid")
		if humanoid then
			humanoid:TakeDamage(Settings.SwordDamage)
		end
	end
end

-- כל שחקן מקבל Kills בטבלת המובילים, וחרב בכל פעם שהוא נולד מחדש
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local kills = Instance.new("IntValue")
	kills.Name = "Kills"
	kills.Parent = leaderstats

	player.CharacterAdded:Connect(function()
		local sword = ServerStorage.Sword:Clone()
		sword.Parent = player.Backpack
		sword.Activated:Connect(function()
			swing(player)
		end)
	end)
end)
quiz iconבחנו את עצמכם

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

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