dash tool
Key RequiredUniversal

dash tool

Universal ScriptSodaAlexanderSodaAlexander 394 views 70 executesUpdated Feb 9, 2026
Unrated
00
Lua Script•123 lines (3100 chars)
-- Auto-create Horizontal Dash Tool (no infinite cloning)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera

local DASH_TIME = 3
local COOLDOWN = 4
local ANIM_ID = "rbxassetid://235542946"

local canUse = true
local cooldownRemaining = 0

-- Create Tool once
local tool = Instance.new("Tool")
tool.Name = "Horizontal Dash"
tool.RequiresHandle = false
tool.CanBeDropped = false
tool.Parent = player:WaitForChild("Backpack")

-- Cooldown UI (center screen)
local gui = Instance.new("ScreenGui")
gui.Name = "DashCooldownGUI"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local cooldownLabel = Instance.new("TextLabel")
cooldownLabel.Size = UDim2.new(0, 200, 0, 30)
cooldownLabel.Position = UDim2.new(0.5, -100, 0.5, -15)
cooldownLabel.BackgroundTransparency = 1
cooldownLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
cooldownLabel.TextScaled = true
cooldownLabel.Visible = false
cooldownLabel.Parent = gui

local textConstraint = Instance.new("UITextSizeConstraint")
textConstraint.MaxTextSize = 18
textConstraint.MinTextSize = 12
textConstraint.Parent = cooldownLabel

-- Cooldown display
local function startCooldownDisplay(duration)
	cooldownRemaining = duration
	cooldownLabel.Visible = true

	while cooldownRemaining > 0 do
		cooldownLabel.Text = string.format("%.1f", cooldownRemaining)
		task.wait(0.1)
		cooldownRemaining -= 0.1
	end

	cooldownLabel.Visible = false
end

-- Main ability
local function activate()
	if not canUse then return end
	canUse = false

	local char = player.Character
	if not char then return end

	local humanoid = char:FindFirstChildOfClass("Humanoid")
	local root = char:FindFirstChild("HumanoidRootPart")
	if not humanoid or not root then return end

	-- Play animation
	local animator = humanoid:FindFirstChildOfClass("Animator")
	if not animator then
		animator = Instance.new("Animator")
		animator.Parent = humanoid
	end

	local anim = Instance.new("Animation")
	anim.AnimationId = ANIM_ID
	local track = animator:LoadAnimation(anim)
	track:Play()

	-- Lock physics
	humanoid.PlatformStand = true

	-- Direction: camera look, horizontal only
	local look = camera.CFrame.LookVector
	local direction = Vector3.new(look.X, 0, look.Z)
	if direction.Magnitude > 0 then
		direction = direction.Unit
	end

	-- Speed = WalkSpeed + 3
	local speed = humanoid.WalkSpeed + 3

	local bv = Instance.new("BodyVelocity")
	bv.MaxForce = Vector3.new(1e9, 1e9, 1e9)
	bv.Velocity = direction * speed
	bv.Parent = root

	-- Keep velocity stable
	local connection
	connection = RunService.Heartbeat:Connect(function()
		if root and bv then
			bv.Velocity = direction * speed
		end
	end)

	-- Stop dash
	task.delay(DASH_TIME, function()
		if connection then connection:Disconnect() end
		if bv then bv:Destroy() end
		if track then track:Stop() end

		humanoid.PlatformStand = false

		-- Start cooldown AFTER dash
		task.spawn(function()
			startCooldownDisplay(COOLDOWN)
			canUse = true
		end)
	end)
end

tool.Activated:Connect(activate)

Features & Information

...

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts