--[[ 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)