[SKY ASSASSIN] Jujutsu Shenanigans artwork
[SKY ASSASSIN] Jujutsu Shenanigans

Auto Blackflash Chain

by Bloxive Imports
0 views0 likes0 copies2 hours ago

About this script

Only Pc Support For Now Use E (Use Near Player) To BlackFlash Chain credit:rimleaf for the idea

Script code

Lua
if _G.boomshaka then 
    warn("Script already running!") 
    return 
end
_G.boomshaka = true

local ScriptEnabled = true 

local UserInputService    = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local Players             = game:GetService("Players")
local RunService          = game:GetService("RunService")
local LocalPlayer         = Players.LocalPlayer
local Camera              = workspace.CurrentCamera

local AnimationTriggers = {
    ["rbxassetid://100962226150441"] = 0.19,
    ["rbxassetid://95852624447551"]  = 0.19,
    ["rbxassetid://74145636023952"]  = 0.19,
    ["rbxassetid://72475960800126"]  = 0.20,
}

local StraightAnimations = {
    ["rbxassetid://123171106092050"] = true,
}

local Settings = {
    Duration      = 0.25,
    Radius        = 3,
    Range         = 25,
    CurveStrength = 14,
    CamOffset     = 4,
}

local pingVisualizerEnabled = false
local ghostModel            = nil
local positionHistory       = {}
local MAX_HISTORY           = 300

local function createGhost(character)
    if ghostModel then ghostModel:Destroy() ghostModel = nil end
    if not character then return end
    ghostModel = Instance.new("Model")
    ghostModel.Name = "PingGhost"
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") or part:IsA("MeshPart") then
            local clone = part:Clone()
            for _, child in pairs(clone:GetChildren()) do
                if not child:IsA("SpecialMesh") and not child:IsA("Decal") then child:Destroy() end
            end
            clone.Anchored     = true
            clone.CanCollide   = false
            clone.CastShadow   = false
            clone.Transparency = 0.6
            clone.Color        = Color3.fromRGB(255, 80, 80)
            clone.Material     = Enum.Material.Neon
            clone.Parent       = ghostModel
        end
    end
    ghostModel.Parent = workspace
end

local function destroyGhost()
    if ghostModel then ghostModel:Destroy() ghostModel = nil end
    positionHistory = {}
end

local function recordSnapshot(character)
    if not character then return end
    local snapshot = { time = tick(), parts = {} }
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") or part:IsA("MeshPart") then
            snapshot.parts[part.Name] = part.CFrame
        end
    end
    local hrp = character:FindFirstChild("HumanoidRootPart")
    if hrp then snapshot.parts["HumanoidRootPart"] = hrp.CFrame end
    table.insert(positionHistory, snapshot)
    while #positionHistory > MAX_HISTORY do table.remove(positionHistory, 1) end
end

local function getDelayedSnapshot()
    local targetTime = tick() - LocalPlayer:GetNetworkPing()
    for i = #positionHistory, 1, -1 do
        if positionHistory[i].time <= targetTime then return positionHistory[i] end
    end
    return positionHistory[1]
end

local function applySnapshotToGhost(snapshot)
    if not ghostModel or not snapshot then return end
    for _, part in pairs(ghostModel:GetDescendants()) do
        if (part:IsA("BasePart") or part:IsA("MeshPart")) and snapshot.parts[part.Name] then
            part.CFrame = snapshot.parts[part.Name]
        end
    end
end

--// GUI
local screenGui = Instance.new("ScreenGui")
screenGui.Name           = "BoomshakaPC"
screenGui.ResetOnSpawn   = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent         = LocalPlayer.PlayerGui

local hintLabel = Instance.new("TextLabel")
hintLabel.Size             = UDim2.new(0, 240, 0, 28)
hintLabel.Position         = UDim2.new(0, 20, 0, 20)
hintLabel.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
hintLabel.TextColor3       = Color3.fromRGB(130, 130, 130)
hintLabel.Text             = "Press RightShift to open settings"
hintLabel.TextSize         = 13
hintLabel.Font             = Enum.Font.Gotham
hintLabel.BorderSizePixel  = 0
hintLabel.Visible          = false
hintLabel.Parent           = screenGui
Instance.new("UICorner", hintLabel).CornerRadius = UDim.new(0, 8)
Instance.new("UIPadding", hintLabel).PaddingLeft = UDim.new(0, 10)

local frame = Instance.new("Frame")
frame.Size             = UDim2.new(0, 320, 0, 600)
frame.Position         = UDim2.new(0, 20, 0.5, -300)
frame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
frame.BorderSizePixel  = 0
frame.Active           = true
frame.Draggable        = true
frame.Parent           = screenGui
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 12)
local outerStroke = Instance.new("UIStroke", frame)
outerStroke.Color     = Color3.fromRGB(55, 55, 55)
outerStroke.Thickness = 1

local header = Instance.new("Frame")
header.Size             = UDim2.new(1, 0, 0, 52)
header.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
header.BorderSizePixel  = 0
header.Parent           = frame
Instance.new("UICorner", header).CornerRadius = UDim.new(0, 12)
local headerFix = Instance.new("Frame")
headerFix.Size             = UDim2.new(1, 0, 0.5, 0)
headerFix.Position         = UDim2.new(0, 0, 0.5, 0)
headerFix.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
headerFix.BorderSizePixel  = 0
headerFix.Parent           = header

local headerTitle = Instance.new("TextLabel")
headerTitle.Size                   = UDim2.new(1, -130, 1, 0)
headerTitle.Position               = UDim2.new(0, 16, 0, 0)
headerTitle.BackgroundTransparency = 1
headerTitle.Text                   = "Curve Settings"
headerTitle.TextColor3             = Color3.fromRGB(255, 255, 255)
headerTitle.TextSize               = 16
headerTitle.Font                   = Enum.Font.GothamBold
headerTitle.TextXAlignment         = Enum.TextXAlignment.Left
headerTitle.Parent                 = header

local headerSub = Instance.new("TextLabel")
headerSub.Size                   = UDim2.new(1, -130, 0, 16)
headerSub.Position               = UDim2.new(0, 16, 0, 30)
headerSub.BackgroundTransparency = 1
headerSub.Text                   = "RightShift to hide"
headerSub.TextColor3             = Color3.fromRGB(90, 90, 90)
headerSub.TextSize               = 11
headerSub.Font                   = Enum.Font.Gotham
headerSub.TextXAlignment         = Enum.TextXAlignment.Left
headerSub.Parent                 = header

local toggleBtn = Instance.new("TextButton")
toggleBtn.Size             = UDim2.new(0, 72, 0, 30)
toggleBtn.Position         = UDim2.new(1, -82, 0.5, -15)
toggleBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 90)
toggleBtn.Text             = "ENABLED"
toggleBtn.TextColor3       = Color3.fromRGB(255, 255, 255)
toggleBtn.TextSize         = 12
toggleBtn.Font             = Enum.Font.GothamBold
toggleBtn.BorderSizePixel  = 0
toggleBtn.Parent           = header
Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 8)

local divider = Instance.new("Frame")
divider.Size             = UDim2.new(1, -24, 0, 1)
divider.Position         = UDim2.new(0, 12, 0, 52)
divider.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
divider.BorderSizePixel  = 0
divider.Parent           = frame

local container = Instance.new("Frame")
container.Size                   = UDim2.new(1, -24, 1, -68)
container.Position               = UDim2.new(0, 12, 0, 60)
container.BackgroundTransparency = 1
container.Parent                 = frame
local layout = Instance.new("UIListLayout", container)
layout.Padding   = UDim.new(0, 8)
layout.SortOrder = Enum.SortOrder.LayoutOrder
local padder = Instance.new("UIPadding", container)
padder.PaddingBottom = UDim.new(0, 8)

local function makeSlider(labelText, description, min, max, default, settingKey, step)
    step = step or 0.01
    local row = Instance.new("Frame")
    row.Size             = UDim2.new(1, 0, 0, 72)
    row.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
    row.BorderSizePixel  = 0
    row.Parent           = container
    Instance.new("UICorner", row).CornerRadius = UDim.new(0, 10)

    local lbl = Instance.new("TextLabel")
    lbl.Size                   = UDim2.new(1, -80, 0, 20)
    lbl.Position               = UDim2.new(0, 12, 0, 8)
    lbl.BackgroundTransparency = 1
    lbl.Text                   = labelText
    lbl.TextColor3             = Color3.fromRGB(230, 230, 230)
    lbl.TextSize               = 14
    lbl.Font                   = Enum.Font.GothamBold
    lbl.TextXAlignment         = Enum.TextXAlignment.Left
    lbl.Parent                 = row

    local desc = Instance.new("TextLabel")
    desc.Size                   = UDim2.new(1, -16, 0, 14)
    desc.Position               = UDim2.new(0, 12, 0, 28)
    desc.BackgroundTransparency = 1
    desc.Text                   = description
    desc.TextColor3             = Color3.fromRGB(100, 100, 100)
    desc.TextSize               = 11
    desc.Font                   = Enum.Font.Gotham
    desc.TextXAlignment         = Enum.TextXAlignment.Left
    desc.Parent                 = row

    local valLbl = Instance.new("TextLabel")
    valLbl.Size                   = UDim2.new(0, 60, 0, 20)
    valLbl.Position               = UDim2.new(1, -70, 0, 8)
    valLbl.BackgroundTransparency = 1
    valLbl.Text                   = tostring(default)
    valLbl.TextColor3             = Color3.fromRGB(80, 180, 255)
    valLbl.TextSize               = 14
    valLbl.Font                   = Enum.Font.GothamBold
    valLbl.TextXAlignment         = Enum.TextXAlignment.Right
    valLbl.Parent                 = row

    local track = Instance.new("Frame")
    track.Size             = UDim2.new(1, -24, 0, 6)
    track.Position         = UDim2.new(0, 12, 0, 52)
    track.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    track.BorderSizePixel  = 0
    track.Parent           = row
    Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0)

    local fill = Instance.new("Frame")
    fill.Size             = UDim2.new((default - min) / (max - min), 0, 1, 0)
    fill.BackgroundColor3 = Color3.fromRGB(80, 180, 255)
    fill.BorderSizePixel  = 0
    fill.Parent           = track
    Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0)

    local knob = Instance.new("TextButton")
    knob.Size             = UDim2.new(0, 16, 0, 16)
    knob.Position         = UDim2.new((default - min) / (max - min), -8, 0.5, -8)
    knob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
    knob.Text             = ""
    knob.BorderSizePixel  = 0
    knob.ZIndex           = 2
    knob.Parent           = track
    Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

    local function update(xPos)
        local alpha   = math.clamp((xPos - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
        local snapped = math.round((min + (max - min) * alpha) / step) * step
        local display = math.floor(snapped * 1000 + 0.5) / 1000
        fill.Size            = UDim2.new(alpha, 0, 1, 0)
        knob.Position        = UDim2.new(alpha, -8, 0.5, -8)
        valLbl.Text          = tostring(display)
        Settings[settingKey] = snapped
    end

    local dragging = false
    knob.MouseButton1Down:Connect(function() dragging = true end)
    UserInputService.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
    end)
    UserInputService.InputChanged:Connect(function(i)
        if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then update(i.Position.X) end
    end)
end

makeSlider("Glide Speed",      "Lower = faster. (0.1 is instant, 1.0 is slow)", 0.1, 1.0, Settings.Duration,      "Duration",      0.025)
makeSlider("Landing Distance", "How many studs behind the target you land",      1,   10,  Settings.Radius,        "Radius",        0.5)
makeSlider("Detection Range",  "How far away a target can be detected (studs)",  10,  50,  Settings.Range,         "Range",         1)
makeSlider("Curve Width",      "How wide the arc swings around the target",      0,   30,  Settings.CurveStrength, "CurveStrength", 1)
makeSlider("Camera Height",    "How high the lock-on camera floats above you",   0,   10,  Settings.CamOffset,     "CamOffset",     0.5)

local pingDivider = Instance.new("Frame")
pingDivider.Size             = UDim2.new(1, 0, 0, 1)
pingDivider.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
pingDivider.BorderSizePixel  = 0
pingDivider.Parent           = container

local pingSection = Instance.new("Frame")
pingSection.Size             = UDim2.new(1, 0, 0, 80)
pingSection.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
pingSection.BorderSizePixel  = 0
pingSection.Parent           = container
Instance.new("UICorner", pingSection).CornerRadius = UDim.new(0, 10)

local pingSectionTitle = Instance.new("TextLabel")
pingSectionTitle.Size                   = UDim2.new(1, -16, 0, 20)
pingSectionTitle.Position               = UDim2.new(0, 12, 0, 8)
pingSectionTitle.BackgroundTransparency = 1
pingSectionTitle.Text                   = "Ping Visualizer"
pingSectionTitle.TextColor3             = Color3.fromRGB(230, 230, 230)
pingSectionTitle.TextSize               = 14
pingSectionTitle.Font                   = Enum.Font.GothamBold
pingSectionTitle.TextXAlignment         = Enum.TextXAlignment.Left
pingSectionTitle.Parent                 = pingSection

local pingSectionDesc = Instance.new("TextLabel")
pingSectionDesc.Size                   = UDim2.new(1, -16, 0, 14)
pingSectionDesc.Position               = UDim2.new(0, 12, 0, 28)
pingSectionDesc.BackgroundTransparency = 1
pingSectionDesc.Text                   = "Shows red ghost of where server thinks you are"
pingSectionDesc.TextColor3             = Color3.fromRGB(100, 100, 100)
pingSectionDesc.TextSize               = 11
pingSectionDesc.Font                   = Enum.Font.Gotham
pingSectionDesc.TextXAlignment         = Enum.TextXAlignment.Left
pingSectionDesc.Parent                 = pingSection

local pingDisplay = Instance.new("TextLabel")
pingDisplay.Size                   = UDim2.new(0, 80, 0, 20)
pingDisplay.Position               = UDim2.new(1, -90, 0, 8)
pingDisplay.BackgroundTransparency = 1
pingDisplay.Text                   = "-- ms"
pingDisplay.TextColor3             = Color3.fromRGB(80, 180, 255)
pingDisplay.TextSize               = 14
pingDisplay.Font                   = Enum.Font.GothamBold
pingDisplay.TextXAlignment         = Enum.TextXAlignment.Right
pingDisplay.Parent                 = pingSection

local pingToggle = Instance.new("TextButton")
pingToggle.Size             = UDim2.new(0, 72, 0, 28)
pingToggle.Position         = UDim2.new(1, -82, 0, 46)
pingToggle.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
pingToggle.Text             = "OFF"
pingToggle.TextColor3       = Color3.fromRGB(180, 180, 180)
pingToggle.TextSize         = 12
pingToggle.Font             = Enum.Font.GothamBold
pingToggle.BorderSizePixel  = 0
pingToggle.Parent           = pingSection
Instance.new("UICorner", pingToggle).CornerRadius = UDim.new(0, 8)

toggleBtn.MouseButton1Click:Connect(function()
    ScriptEnabled = not ScriptEnabled
    toggleBtn.Text             = ScriptEnabled and "ENABLED" or "DISABLED"
    toggleBtn.BackgroundColor3 = ScriptEnabled and Color3.fromRGB(0, 180, 90) or Color3.fromRGB(190, 50, 50)
end)

pingToggle.MouseButton1Click:Connect(function()
    pingVisualizerEnabled = not pingVisualizerEnabled
    if pingVisualizerEnabled then
        pingToggle.Text             = "ON"
        pingToggle.TextColor3       = Color3.fromRGB(255, 255, 255)
        pingToggle.BackgroundColor3 = Color3.fromRGB(0, 180, 90)
        createGhost(LocalPlayer.Character)
    else
        pingToggle.Text             = "OFF"
        pingToggle.TextColor3       = Color3.fromRGB(180, 180, 180)
        pingToggle.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
        destroyGhost()
    end
end)

UserInputService.InputBegan:Connect(function(input, processed)
    if input.KeyCode == Enum.KeyCode.RightShift then
        local v = not frame.Visible
        frame.Visible     = v
        hintLabel.Visible = not v
    end
end)

--// Helpers
local function getHRP(character)
    return character and (character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso"))
end
local function pressKey(keyCode)
    if not ScriptEnabled then return end
    VirtualInputManager:SendKeyEvent(true, keyCode, false, game)
    VirtualInputManager:SendKeyEvent(false, keyCode, false, game)
end
local function getNearestPlayer(maxRange)
    local myHRP = getHRP(LocalPlayer.Character)
    if not myHRP then return nil end
    local nearest, nearestDist = nil, maxRange
    for _, pl in pairs(Players:GetPlayers()) do
        if pl ~= LocalPlayer and pl.Character and pl.Character:FindFirstChild("Humanoid") and pl.Character.Humanoid.Health > 0 then
            local tHRP = getHRP(pl.Character)
            if tHRP then
                local dist = (myHRP.Position - tHRP.Position).Magnitude
                if dist < nearestDist then nearestDist = dist nearest = pl end
            end
        end
    end
    return nearest
end
local function isEnemyRagdolled(targetPlayer)
    if not targetPlayer or not targetPlayer.Character then return false end
    local hum = targetPlayer.Character:FindFirstChildOfClass("Humanoid")
    local hrp = getHRP(targetPlayer.Character)
    if hum and hrp then
        return hum:GetState() == Enum.HumanoidStateType.Physics or math.abs(hrp.CFrame.UpVector.Y) < 0.7
    end
    return false
end
local function getActiveAnimId()
    local char     = LocalPlayer.Character
    local hum      = char and char:FindFirstChildOfClass("Humanoid")
    local animator = hum and hum:FindFirstChildOfClass("Animator")
    if animator then
        for _, track in pairs(animator:GetPlayingAnimationTracks()) do
            local id = track.Animation.AnimationId
            if AnimationTriggers[id] or StraightAnimations[id] then return id end
        end
    end
    return nil
end

local function startCurveGlide()
    if not ScriptEnabled then return end
    local target = getNearestPlayer(Settings.Range)
    local myChar = LocalPlayer.Character
    local myHRP  = getHRP(myChar)
    local hum    = myChar and myChar:FindFirstChildOfClass("Humanoid")
    if not getActiveAnimId() then return end
    if target and isEnemyRagdolled(target) then return end
    if not (target and myHRP and hum) then return end

    local tHRP = getHRP(target.Character)
    if not tHRP or not tHRP.Parent then return end

    local goStraight = StraightAnimations[getActiveAnimId()] == true
    local startTime  = tick()
    local startPos   = Vector3.new(myHRP.Position.X, 0, myHRP.Position.Z)
    local targetPos  = Vector3.new(tHRP.Position.X,  0, tHRP.Position.Z)
    local behindDir  = Vector3.new(tHRP.CFrame.LookVector.X, 0, tHRP.CFrame.LookVector.Z).Unit
    local endPos     = targetPos - behindDir * Settings.Radius

    local controlPt
    if not goStraight then
        local mid      = (startPos + endPos) / 2
        local toTarget = targetPos - startPos
        local flatDist = toTarget.Magnitude
        local dirNorm  = flatDist > 0.1 and (toTarget / flatDist) or Vector3.new(1, 0, 0)
        local perp     = Vector3.new(-dirNorm.Z, 0, dirNorm.X)
        controlPt      = mid + perp * math.max(Settings.CurveStrength, flatDist * 0.6, 8)
    end

    hum.AutoRotate = false
    local prevCam  = Camera.CameraType
    Camera.CameraType = Enum.CameraType.Custom

    local conn
    conn = RunService.Heartbeat:Connect(function()
        if not ScriptEnabled then conn:Disconnect() hum.AutoRotate = true Camera.CameraType = prevCam return end
        local alpha = math.clamp((tick() - startTime) / Settings.Duration, 0, 1)
        if alpha >= 1 or not tHRP.Parent then conn:Disconnect() hum.AutoRotate = true Camera.CameraType = prevCam return end
        local t  = 1 - (1 - alpha)^2
        local t1 = 1 - t
        local movePos
        if goStraight then
            movePos = Vector3.new(startPos.X+(endPos.X-startPos.X)*t, myHRP.Position.Y, startPos.Z+(endPos.Z-startPos.Z)*t)
        else
            movePos = Vector3.new((t1*t1)*startPos.X+(2*t1*t)*controlPt.X+(t*t)*endPos.X, myHRP.Position.Y, (t1*t1)*startPos.Z+(2*t1*t)*controlPt.Z+(t*t)*endPos.Z)
        end
        myHRP.CFrame  = CFrame.new(movePos, Vector3.new(tHRP.Position.X, movePos.Y, tHRP.Position.Z))
        Camera.CFrame = CFrame.new(myHRP.Position + Vector3.new(0, Settings.CamOffset, 0), tHRP.Position)
    end)
end

local function setupCharacter(character)
    local humanoid = character:WaitForChild("Humanoid", 5)
    local animator = humanoid and humanoid:WaitForChild("Animator", 5)
    if not animator then return end
    animator.AnimationPlayed:Connect(function(track)
        if not ScriptEnabled then return end
        local animId    = track.Animation.AnimationId
        local delayTime = AnimationTriggers[animId]
        if not delayTime and StraightAnimations[animId] then delayTime = 0.19 end
        if delayTime then
            task.delay(delayTime, function()
                if humanoid.Health > 0 and ScriptEnabled then pressKey(Enum.KeyCode.Three) end
            end)
        end
    end)
    if pingVisualizerEnabled then createGhost(character) end
end

if LocalPlayer.Character then setupCharacter(LocalPlayer.Character) end
LocalPlayer.CharacterAdded:Connect(setupCharacter)

RunService.Heartbeat:Connect(function()
    local char = LocalPlayer.Character
    if not char then return end
    local pingMs = math.round(LocalPlayer:GetNetworkPing() * 1000)
    pingDisplay.Text = pingMs .. " ms"
    pingDisplay.TextColor3 = pingMs < 80 and Color3.fromRGB(80, 220, 100) or pingMs < 150 and Color3.fromRGB(255, 200, 50) or Color3.fromRGB(255, 80, 80)
    if not pingVisualizerEnabled then return end
    recordSnapshot(char)
    local snapshot = getDelayedSnapshot()
    if snapshot then applySnapshotToGhost(snapshot) end
end)

UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if ScriptEnabled and input.KeyCode == Enum.KeyCode.E then
        pressKey(Enum.KeyCode.Three)
        task.wait(0.2)
        startCurveGlide()
    end
end)