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)Görev
Kolaybetimle
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)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.