
KeylessUniversal

--[[
VOID RUSH 43 + COMBO + HIT CD 0.3s - SEM PRINTS
]]--
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Debris = game:GetService("Debris")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local root = character:WaitForChild("HumanoidRootPart")
-- IDs
local IDLE_ID = "rbxassetid://113047257611459"
local WALK_RUN_ID = "rbxassetid://90175656540190"
local EMOTE_ID = "rbxassetid://119380285634530"
local AUDIO_START_ID = "rbxassetid://117912548698898"
local AUDIO_LOOP_ID = "rbxassetid://71729812996802"
local AUDIO_HIT_ID = "rbxassetid://74602717561229"
-- Velocidades + Cooldowns
local BURST_SPEED = 43
local NORMAL_SPEED = 24
local BOOST_SPEED = 29
local HIT_COOLDOWN = 0.3
-- COMBO SYSTEM
local comboCount = 0
local lastHitTime = 0
local COMBO_TIMEOUT = 5
local comboGui = nil
-- ESTADO RUSH
local rushing = false
local inCooldown = false
local hitCooldown = false
local canRushFreely = false
local lastRushAttempt = 0
local FREE_WINDOW = 3
local emoteTrack, rushConnection, touchConnections = nil, nil, {}
local audioStart, audioLoop, rushButton
local rushStartTime, burstEndTime, smoothEndTime
------------------------------------------------------------------
-- COMBO GUI
------------------------------------------------------------------
local function createComboGui()
if comboGui and comboGui.Parent then return end
local playerGui = player:WaitForChild("PlayerGui")
local oldCombo = playerGui:FindFirstChild("VoidRushCombo")
if oldCombo then oldCombo:Destroy() end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "VoidRushCombo"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui
comboGui = Instance.new("TextLabel")
comboGui.Size = UDim2.new(0, 200, 0, 80)
comboGui.Position = UDim2.new(1, -220, 0, 20)
comboGui.BackgroundTransparency = 1
comboGui.Text = ""
comboGui.TextColor3 = Color3.fromRGB(255, 100, 100)
comboGui.TextScaled = true
comboGui.Font = Enum.Font.SourceSansBold
comboGui.TextStrokeTransparency = 0
comboGui.TextStrokeColor3 = Color3.new(0,0,0)
comboGui.Parent = screenGui
end
local function updateCombo()
if comboCount < 3 then
if comboGui and comboGui.Parent then comboGui:Destroy() comboGui = nil end
return
end
createComboGui()
comboGui.Text = "COMBO x" .. comboCount
comboGui.TextColor3 = comboCount >= 5 and Color3.fromRGB(255,255,0) or Color3.fromRGB(255,100,100)
end
local function resetCombo()
comboCount = 0
lastHitTime = 0
if comboGui then comboGui:Destroy() comboGui = nil end
end
------------------------------------------------------------------
-- ANIMAΓΓES
------------------------------------------------------------------
local function applyAnims(char)
character = char
humanoid = character:WaitForChild("Humanoid")
root = character:WaitForChild("HumanoidRootPart")
local animate = character:WaitForChild("Animate", 3)
if not animate then return end
for _, folderName in {"idle", "walk", "run", "jump", "fall"} do
local folder = animate:FindFirstChild(folderName)
if folder then
for _, anim in pairs(folder:GetChildren()) do
if anim:IsA("Animation") then
anim.AnimationId = folderName == "idle" and IDLE_ID or WALK_RUN_ID
end
end
end
end
animate.Disabled = true
task.wait(0.1)
animate.Disabled = false
end
------------------------------------------------------------------
-- GUI PRINCIPAL
------------------------------------------------------------------
local function createGui()
local playerGui = player:WaitForChild("PlayerGui")
local old = playerGui:FindFirstChild("VoidRushGui")
if old then old:Destroy() end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "VoidRushGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui
rushButton = Instance.new("TextButton")
rushButton.Size = UDim2.new(0, 70, 0, 70)
rushButton.Position = UDim2.new(0, 20, 0, 100)
rushButton.BackgroundColor3 = Color3.fromRGB(20, 20, 50)
rushButton.Text = "RUSH"
rushButton.TextColor3 = Color3.new(1, 1, 1)
rushButton.TextScaled = true
rushButton.Font = Enum.Font.SourceSansBold
rushButton.Parent = screenGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = rushButton
local dragging, dragStart, startPos
rushButton.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = rushButton.Position
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
rushButton.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
rushButton.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
return rushButton
end
rushButton = createGui()
------------------------------------------------------------------
-- VOID RUSH CORE
------------------------------------------------------------------
local function clearConnections()
for i = 1, #touchConnections do
if touchConnections[i] then pcall(function() touchConnections[i]:Disconnect() end) end
end
touchConnections = {}
end
local function cleanup()
rushing = false
if emoteTrack then pcall(function() emoteTrack:Stop() end) emoteTrack = nil end
if audioLoop then pcall(function() audioLoop:Stop() audioLoop:Destroy() end) audioLoop = nil end
if audioStart then pcall(function() audioStart:Stop() audioStart:Destroy() end) audioStart = nil end
if rushConnection then rushConnection:Disconnect() rushConnection = nil end
clearConnections()
end
local function doCooldown(duration)
if inCooldown then return end
inCooldown = true
task.spawn(function()
for i = duration, 1, -1 do
if rushButton then rushButton.Text = tostring(i) end
task.wait(1)
end
if rushButton then rushButton.Text = "RUSH" end
inCooldown = false
canRushFreely = false
end)
end
local function hitCooldownTimer()
hitCooldown = true
task.wait(HIT_COOLDOWN)
hitCooldown = false
end
local function stopRush(hitPlayer)
cleanup()
if hitPlayer then
comboCount = comboCount + 1
lastHitTime = tick()
updateCombo()
local hitSound = Instance.new("Sound")
hitSound.SoundId = AUDIO_HIT_ID
hitSound.Volume = 1 + (comboCount * 0.1)
hitSound.Parent = root
hitSound:Play()
Debris:AddItem(hitSound, 3)
spawn(hitCooldownTimer)
canRushFreely = true
lastRushAttempt = tick()
if rushButton then rushButton.Text = "RUSH" end
else
doCooldown(9)
end
end
local function startRush()
local now = tick()
if canRushFreely and (now - lastRushAttempt) > FREE_WINDOW then canRushFreely = false end
if rushing then return end
if not canRushFreely and (inCooldown or hitCooldown) then return end
if not character or not root or not root.Parent then return end
rushing = true
rushStartTime = tick()
burstEndTime = rushStartTime + 1
smoothEndTime = burstEndTime + 1
if rushButton then rushButton.Text = "GO!" end
pcall(function()
audioStart = Instance.new("Sound", root)
audioStart.SoundId = AUDIO_START_ID
audioStart.Volume = 0.7
audioStart.Looped = false
audioStart:Play()
Debris:AddItem(audioStart, 5)
end)
local anim = Instance.new("Animation")
anim.AnimationId = EMOTE_ID
emoteTrack = humanoid:LoadAnimation(anim)
emoteTrack.Looped = true
emoteTrack:Play()
task.spawn(function()
task.wait(0.3)
if rushing then
pcall(function()
audioLoop = Instance.new("Sound", root)
audioLoop.SoundId = AUDIO_LOOP_ID
audioLoop.Volume = 0.7
audioLoop.Looped = true
audioLoop:Play()
end)
end
end)
clearConnections()
for _, part in pairs(character:GetChildren()) do
if part:IsA("BasePart") and part ~= root then
local conn = part.Touched:Connect(function(hit)
if not rushing then return end
local hitPlayer = Players:GetPlayerFromCharacter(hit.Parent)
if hitPlayer and hitPlayer ~= player then
stopRush(true)
end
end)
table.insert(touchConnections, conn)
end
end
rushConnection = RunService.Heartbeat:Connect(function()
if not rushing or not root or not root.Parent then
stopRush(false)
return
end
local elapsed = tick() - rushStartTime
if elapsed >= 4.4 then
stopRush(false)
return
end
local now = tick()
local speed = now < burstEndTime and BURST_SPEED or
(now < smoothEndTime and (BURST_SPEED + (NORMAL_SPEED - BURST_SPEED) * (now - burstEndTime)) or
(canRushFreely and BOOST_SPEED or NORMAL_SPEED))
local direction = root.CFrame.LookVector
root.CFrame = root.CFrame + (direction * speed * 0.033)
end)
end
------------------------------------------------------------------
-- EVENTOS
------------------------------------------------------------------
if player.Character then applyAnims(player.Character) end
player.CharacterAdded:Connect(function(char)
task.wait(1)
cleanup()
resetCombo()
canRushFreely = false
applyAnims(char)
rushButton = createGui()
end)
if rushButton then rushButton.MouseButton1Click:Connect(startRush) end
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == Enum.KeyCode.Q then startRush() end
end)
humanoid.Died:Connect(function()
cleanup()
resetCombo()
end)
spawn(function()
while true do
task.wait(0.1)
if comboCount > 0 and tick() - lastHitTime > COMBO_TIMEOUT then resetCombo() end
end
end)



please make a verison where The animations can be EDITED