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)
endTantangan
SedangDi 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)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Game Roblox: Battlegrounds
Latihan sendiri: Playground Roblox