Menu
CoddyTech

Dash dengan Q

Pelajaran 6 dari 20 dalam kursus Game Roblox: Battlegrounds di Coddy.

Kemampuan dimulai di perangkat pemain. BattleClient adalah LocalScript di HUD, dan ContextActionService mengaitkan suatu aksi dengan tombol, serta dengan argumen ketiga true juga membuat tombol untuk aksi tersebut di layar ponsel:

ContextActionService:BindAction("Dash", use, true, Enum.KeyCode.Q)

Fungsi tersebut menerima nama aksi dan status input, yaitu Begin saat tombol ditekan. Server mengatur aturan game, jadi client tidak melakukan dash sendiri: client meminta server melalui RemoteEvent Remotes.Ability, berdasarkan nama. Server menyimpan tabel kemampuan berdasarkan nama, dan dash adalah dorongan: mengatur velocity root akan melontarkan karakter ke depan.

function abilities.Dash(player, character, root)
	root.AssemblyLinearVelocity = root.CFrame.LookVector * Settings.DashSpeed + Vector3.new(0, 15, 0)
end
challenge icon

Tantangan

Sedang

Di BattleClient: dapatkan ContextActionService dan folder Remotes, tulis use(name, state) yang memanggil remotes.Ability dengan name saat Begin, lalu ikat "Dash" ke Q dengan tombol sentuh.

Di BattleServer: tambahkan local remotes = game.ReplicatedStorage.Remotes, tabel abilities dengan Dash, lalu hubungkan remotes.Ability.OnServerEvent(player, name) untuk menjalankan ability yang disebutkan dengan player, character-nya, dan root-nya.

Tekan Mainkan lalu tekan Q. Kemudian Periksa.

Coba sendiri

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

local lastSwing = {} -- player -> waktu terakhir kali mengayunkan pedang

-- Animasi pedang bawaan Roblox
local slash = Instance.new("Animation")
slash.AnimationId = "rbxassetid://522635514"

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

-- Satu ayunan: animasi diputar, lalu semua yang berada dalam kotak di depanmu terkena serangan
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()
	-- Kotak di depanmu, tidak pernah mencakup tubuhmu sendiri
	local params = OverlapParams.new()
	params.FilterDescendantsInstances = { character }
	local box = root.CFrame * CFrame.new(0, 0, -3)
	local hit = {} -- Setiap humanoid hanya sekali per ayunan
	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

-- Setiap pemain mendapat Kills di papan peringkat dan pedang setiap kali hidup
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)

-- Boneka latihan: bilah kesehatannya mengikuti kesehatannya, dan boneka yang dikalahkan
-- muncul kembali setelah beberapa saat sebagai salinan baru di tempat yang sama
local function setupDummy(dummy)
	local humanoid = dummy.Humanoid
	humanoid.HealthChanged:Connect(function(health)
		dummy.HealthBar.Back.Fill.Size = UDim2.fromScale(health / humanoid.MaxHealth, 1)
	end)
	humanoid.Died:Connect(function()
		local spot = dummy:GetPivot()
		task.wait(0.5)
		dummy:Destroy()
		task.wait(Settings.DummyRespawn)
		local fresh = ServerStorage.Dummy:Clone()
		fresh:PivotTo(spot)
		fresh.Parent = workspace
		setupDummy(fresh)
	end)
end
setupDummy(workspace.Dummy)
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Battlegrounds

Latihan sendiri: Playground Roblox