--[[ CUBO V4 FINAL - JJS STABLE PRECISION - NORMAL: 0.5s Cravados - GROUND: Frame Perfect (2-1 frames antes do fim) - DETECÇÃO: Torso no chão ativa a lógica de frames. ]] local player = game.Players.LocalPlayer local mouse = player:GetMouse() local UIS = game:GetService("UserInputService") local VIM = game:GetService("VirtualInputManager") local RunService = game:GetService("RunService") local scriptActive = true local isThrottled = false local lockedTargetRoot = nil local isLocked = false local isMobile = UIS.TouchEnabled -- Simulações local function press(key) VIM:SendKeyEvent(true, key, false, game) task.wait(0.01) VIM:SendKeyEvent(false, key, false, game) end local function click() VIM:SendMouseButtonEvent(0, 0, 0, true, game, 0) task.wait(0.01) VIM:SendMouseButtonEvent(0, 0, 0, false, game, 0) end -- DETECÇÃO FÍSICA: TORSO NO CHÃO local function isEnemyOnGround() local target = (isLocked and lockedTargetRoot and lockedTargetRoot.Parent) or (mouse.Target and mouse.Target.Parent) if not target then return false end local torso = target:FindFirstChild("Torso") or target:FindFirstChild("UpperTorso") or target:FindFirstChild("HumanoidRootPart") if torso then -- Verifica se o Torso está inclinado (horizontal) local isLyingDown = math.abs(torso.CFrame.UpVector.Y) < 0.5 return isLyingDown end return false end -- ========================================== -- LÓGICA PERFECT SWAP (T) -- ========================================== local function executePerfectSwap() if not SkillStates["perfect"] then return end local char = player.Character local hum = char and char:FindFirstChild("Humanoid") if not hum then return end press(Enum.KeyCode.R) -- Inicia Boogie Woogie task.spawn(function() if isEnemyOnGround() then -- LÓGICA POR FRAMES (2-1 ANTES DO FIM) local detectedAnim = nil local start = tick() while tick() - start < 0.3 do for _, track in pairs(hum:GetPlayingAnimationTracks()) do if track.Name:lower():find("boogie") or track.Name:lower():find("swap") then detectedAnim = track break end end if detectedAnim then break end RunService.Heartbeat:Wait() end if detectedAnim then -- 2 frames = 0.033s | 1 frame = 0.016s -- Usamos um valor intermediário para garantir precisão local waitTime = detectedAnim.Length - (2 / 60) if waitTime > 0 then task.wait(waitTime) end else task.wait(0.25) -- Fallback end else -- LÓGICA NORMAL: EXATOS 0.5 SEGUNDOS task.wait(0.5) end click() -- M1 end) end -- ========================================== -- INTERFACE MOBILE E MENU ORIGINAL -- ========================================== local MobileGui = Instance.new("ScreenGui", player.PlayerGui) MobileGui.Name = "JJS_Mobile_System" local function createMobileBtn(id, text, color, pos) local btn = Instance.new("TextButton", MobileGui) btn.Size = UDim2.new(0, 60, 0, 60); btn.Position = pos; btn.Text = text btn.BackgroundColor3 = color; btn.Visible = false; btn.TextColor3 = Color3.new(1,1,1) btn.Font = Enum.Font.Code; btn.TextSize = 10 Instance.new("UICorner", btn).CornerRadius = UDim.new(1, 0) return btn end local mButtons = { faint = createMobileBtn("faint", "FEINT", Color3.fromRGB(130, 50, 220), UDim2.new(0.85, 0, 0.15, 0)), perfect = createMobileBtn("perfect", "PERF", Color3.fromRGB(220, 130, 50), UDim2.new(0.75, 0, 0.25, 0)), yuji = createMobileBtn("yuji", "YUJI", Color3.fromRGB(50, 130, 220), UDim2.new(0.85, 0, 0.35, 0)), todoBF = createMobileBtn("todoBF", "TODO", Color3.fromRGB(220, 50, 100), UDim2.new(0.75, 0, 0.45, 0)), lockOn = createMobileBtn("lockOn", "LOCK", Color3.fromRGB(100, 100, 100), UDim2.new(0.85, 0, 0.55, 0)) } local ScreenGui = Instance.new("ScreenGui", player.PlayerGui) ScreenGui.Name = "CuboV4_Final_Timer" local MainFrame = Instance.new("Frame", ScreenGui) MainFrame.Size = UDim2.new(0, 180, 0, 480); MainFrame.Position = UDim2.new(0.02, 0, 0.2, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(10, 10, 20); MainFrame.Active = true; MainFrame.Draggable = true local Close = Instance.new("TextButton", MainFrame) Close.Text = "X"; Close.Size = UDim2.new(0, 25, 0, 25); Close.Position = UDim2.new(1, -30, 0, 5); Close.BackgroundColor3 = Color3.fromRGB(150, 0, 0) Close.MouseButton1Click:Connect(function() ScreenGui:Destroy(); MobileGui:Destroy(); scriptActive = false end) local Content = Instance.new("Frame", MainFrame) Content.Size = UDim2.new(1, -20, 1, -80); Content.Position = UDim2.new(0, 10, 0, 40); Content.BackgroundTransparency = 1 Instance.new("UIListLayout", Content).Padding = UDim.new(0, 8) local Skills = { {id = "faint", Name = "Feint Swap (E)", Color = Color3.fromRGB(130, 50, 220)}, {id = "perfect", Name = "Perfect Swap (T)", Color = Color3.fromRGB(220, 130, 50)}, {id = "yuji", Name = "BlackFlash (3)", Color = Color3.fromRGB(50, 130, 220)}, {id = "yujiTP", Name = "BlackFlash TP", Color = Color3.fromRGB(0, 255, 150)}, {id = "todoBF", Name = "Todo BF (X)", Color = Color3.fromRGB(220, 50, 100)}, {id = "todoTP", Name = "Todo TP (X)", Color = Color3.fromRGB(255, 0, 255)}, {id = "lockOn", Name = "Lock (H)", Color = Color3.fromRGB(100, 100, 100)} } SkillStates = {} for _, data in ipairs(Skills) do SkillStates[data.id] = false local btn = Instance.new("TextButton", Content) btn.Size = UDim2.new(1, 0, 0, 45); btn.BackgroundColor3 = Color3.fromRGB(30, 30, 40) btn.Text = data.Name .. "\n[OFF]"; btn.TextColor3 = Color3.new(1, 1, 1); btn.Font = Enum.Font.Code; btn.TextSize = 10 btn.MouseButton1Click:Connect(function() SkillStates[data.id] = not SkillStates[data.id] btn.Text = SkillStates[data.id] and data.Name .. "\n[ON]" or data.Name .. "\n[OFF]" btn.BackgroundColor3 = SkillStates[data.id] and data.Color or Color3.fromRGB(30, 30, 40) if isMobile and mButtons[data.id] then mButtons[data.id].Visible = SkillStates[data.id] end end) end -- LÓGICAS ADICIONAIS local function doLockOn() if not SkillStates["lockOn"] then return end if isLocked then isLocked = false; lockedTargetRoot = nil else local t = (mouse.Target and mouse.Target.Parent:FindFirstChild("HumanoidRootPart")) if t then lockedTargetRoot = t; isLocked = true end end end local function doBlackFlash() if not SkillStates["yuji"] or isThrottled then return end isThrottled = true task.spawn(function() task.wait(0.3); if SkillStates["yujiTP"] then local t = (isLocked and lockedTargetRoot) or (mouse.Target and mouse.Target.Parent:FindFirstChild("HumanoidRootPart")) if t then player.Character:PivotTo(t.CFrame * CFrame.new(0, 0, 3)) end end press(Enum.KeyCode.Three); task.wait(0.3); isThrottled = false end) end local function doTodoBF() if not SkillStates["todoBF"] then return end task.spawn(function() press(Enum.KeyCode.Three); task.wait(0.7); press(Enum.KeyCode.R); task.wait(0.38); press(Enum.KeyCode.Two) if SkillStates["todoTP"] then task.delay(0.5, function() local t = (isLocked and lockedTargetRoot) or (mouse.Target and mouse.Target.Parent:FindFirstChild("HumanoidRootPart")) if t then player.Character:PivotTo(t.CFrame * CFrame.new(0, 0, 3)) end end) end task.wait(0.7); press(Enum.KeyCode.Two) end) end -- INPUTS UIS.InputBegan:Connect(function(i, p) if p or not scriptActive then return end if i.KeyCode == Enum.KeyCode.H then doLockOn() end if i.KeyCode == Enum.KeyCode.T then executePerfectSwap() end if i.KeyCode == Enum.KeyCode.E then task.spawn(function() press(Enum.KeyCode.R); task.wait(0.1); click() end) end if i.KeyCode == Enum.KeyCode.X then doTodoBF() end if i.KeyCode == Enum.KeyCode.Three then doBlackFlash() end end) mButtons.perfect.MouseButton1Click:Connect(executePerfectSwap) mButtons.lockOn.MouseButton1Click:Connect(doLockOn) mButtons.yuji.MouseButton1Click:Connect(doBlackFlash) mButtons.todoBF.MouseButton1Click:Connect(doTodoBF) mButtons.faint.MouseButton1Click:Connect(function() press(Enum.KeyCode.R); task.wait(0.1); click() end) RunService.RenderStepped:Connect(function() if scriptActive and SkillStates["lockOn"] and isLocked and lockedTargetRoot and lockedTargetRoot.Parent then workspace.CurrentCamera.CFrame = CFrame.new(workspace.CurrentCamera.CFrame.Position, lockedTargetRoot.Position) end end)