Menu
CoddyTech

Eğitim Mankeni

Coddy'nin Roblox Oyunu: Savaş Arenası kursunda ders 5 / 20.

Eğitim mankeni olabilmesi için mankenin iki şeye ihtiyacı var: bir sağlık çubuğuna ve yenildiğinde geri gelmeye.

HealthBar, koyu renkli bir Back içinde yeşil bir Fill bulunan BillboardGui'dir. UDim2.fromScale(health / MaxHealth, 1), dolguyu kalan sağlık kadar geniş yapar.

Humanoid'i Died olduğunda, durduğu yeri (GetPivot) hatırla, onu kaldır, Settings.DummyRespawn saniye bekle ve ServerStorage'dan yeni bir kopyayı yerine koy. Yeni kopyanın da aynı kuruluma ihtiyacı var; bu nedenle kurulum, yeni manken için kendisini çağıran bir fonksiyondur:

local function setupDummy(dummy)
	-- can çubuğu ve Died gerçekleştiğinde: ... setupDummy(fresh)
end
setupDummy(workspace.Dummy)
challenge icon

Görev

Kolay

betimle

Kendin dene

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

local lastSwing = {} -- player -> en son ne zaman kılıç salladığı

-- Roblox'un kendi kılıç animasyonları
local slash = Instance.new("Animation")
slash.AnimationId = "rbxassetid://522635514"

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

-- Bir kılıç sallama: önce animasyon oynar, ardından önündeki kutunun içindeki herkes darbe alır
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()
	-- önündeki kutu; kendi karakterin asla dahil değil
	local params = OverlapParams.new()
	params.FilterDescendantsInstances = { character }
	local box = root.CFrame * CFrame.new(0, 0, -3)
	local hit = {} -- her humanoid, her kılıç sallamada yalnızca bir kez
	for _, part in workspace:GetPartBoundsInBox(box, Settings.HitboxSize, params) do
		local humanoid = part.Parent:FindFirstChildOfClass("Humanoid")
		if humanoid and not hit[humanoid] then
			hit[humanoid] = true
			humanoid:TakeDamage(Settings.SwordDamage)
		end
	end
end

-- Her oyuncu liderlik tablosunda Kills kazanır ve her yeniden doğuşunda bir kılıç alır
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 iconKendini test et

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

Roblox Oyunu: Savaş Arenası bölümündeki tüm dersler