JJBA Stand Script Universal
Key RequiredUniversal

JJBA Stand Script Universal

Universal ScriptGuestEZQGuestEZQ 8.9K views 2.7K executesUpdated Oct 21, 2025
2.5/ 5(2 votes)
1150% Positive
Lua Script•574 lines (18482 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Debris = game:GetService("Debris")
local UserInputService = game:GetService("UserInputService")
local TextChatService = game:GetService("TextChatService")

local function SendChatMessage(message)
	if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
		local textChannel = TextChatService.TextChannels:FindFirstChild("RBXGeneral")
		if textChannel then
			textChannel:SendAsync(message)
		end
	else
		game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(message, "All")
	end
end
local player = Players.LocalPlayer
local function GetNearestPlayerInFront(targetPlayer, maxAngle)
    maxAngle = maxAngle or 60 -- degrees (cone size)

    if not targetPlayer.Character then return nil end
    local targetHRP = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not targetHRP then return nil end

    local targetLook = targetHRP.CFrame.LookVector

    local closest = nil
    local closestDist = math.huge

    for _, p in pairs(Players:GetPlayers()) do
        if p ~= player and p ~= targetPlayer and p.Character then
            local hrp = p.Character:FindFirstChild("HumanoidRootPart")
            if hrp then
                local vec = (hrp.Position - targetHRP.Position).Unit
                local angle = math.deg(math.acos(targetLook:Dot(vec)))

                -- Check if player is in front
                if angle <= maxAngle then
                    local dist = (hrp.Position - targetHRP.Position).Magnitude
                    if dist < closestDist then
                        closestDist = dist
                        closest = hrp
                    end
                end
            end
        end
    end

    return closest
end

local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local humanoid = character:FindFirstChildOfClass("Humanoid") or character:WaitForChild("Humanoid")

local standDistance = 3
local sideOffset = 2
local heightOffset = 2
local followSpeed = 0.35
local flingDuration = 1
local followDuration = 0.6

local punchSoundId = "rbxassetid://6186250072"
local heavyPunchSoundId = "rbxassetid://6164853733"

local summonSoundIds = {
    "rbxassetid://2102274452",
    "rbxassetid://2554017604"
}

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "StandControllerGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = player:WaitForChild("PlayerGui")

local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 200, 0, 270)
mainFrame.Position = UDim2.new(0.05, 0, 0.5, -135)
mainFrame.BackgroundColor3 = Color3.fromRGB(25,25,30)
mainFrame.BorderSizePixel = 0
mainFrame.Parent = screenGui
Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0,12)

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -10, 0, 28)
title.Position = UDim2.new(0, 10, 0, 6)
title.BackgroundTransparency = 1
title.Text = "Stand Controller"
title.TextColor3 = Color3.fromRGB(0, 200, 255)
title.Font = Enum.Font.GothamBold
title.TextSize = 18
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = mainFrame

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 28, 0, 24)
closeBtn.Position = UDim2.new(1, -36, 0, 6)
closeBtn.Text = "X"
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 14
closeBtn.TextColor3 = Color3.fromRGB(255,255,255)
closeBtn.BackgroundColor3 = Color3.fromRGB(35,35,45)
Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0,8)
closeBtn.Parent = mainFrame

local guiToggle = Instance.new("TextButton")
guiToggle.Size = UDim2.new(0, 48, 0, 28)
guiToggle.Position = UDim2.new(0.5, -24, 1, -44)
guiToggle.Text = "GUI"
guiToggle.Font = Enum.Font.GothamBold
guiToggle.TextSize = 14
guiToggle.TextColor3 = Color3.fromRGB(255,255,255)
guiToggle.BackgroundColor3 = Color3.fromRGB(30,30,40)
Instance.new("UICorner", guiToggle).CornerRadius = UDim.new(0,8)
guiToggle.Parent = screenGui

local guiVisible = true
guiToggle.MouseButton1Click:Connect(function()
    guiVisible = not guiVisible
    mainFrame.Visible = guiVisible
end)
closeBtn.MouseButton1Click:Connect(function() mainFrame.Visible = false end)

local function makeButton(text, y)
    local b = Instance.new("TextButton")
    b.Size = UDim2.new(0.78, 0, 0, 36)
    b.Position = UDim2.new(0.11, 0, 0, y)
    b.Text = text
    b.Font = Enum.Font.GothamBold
    b.TextSize = 16
    b.TextColor3 = Color3.fromRGB(255,255,255)
    b.BackgroundColor3 = Color3.fromRGB(30,30,45)
    Instance.new("UICorner", b).CornerRadius = UDim.new(0,10)
    b.Parent = mainFrame
    return b
end

local standBtn = makeButton("Stand: OFF", 36)

local targetBox = Instance.new("TextBox")
targetBox.Size = UDim2.new(0.78, 0, 0, 36)
targetBox.Position = UDim2.new(0.11, 0, 0, 80)
targetBox.PlaceholderText = "Enter target name"
targetBox.ClearTextOnFocus = false
targetBox.Font = Enum.Font.Gotham
targetBox.TextSize = 14
targetBox.BackgroundColor3 = Color3.fromRGB(35,35,45)
targetBox.TextColor3 = Color3.fromRGB(255,255,255)
Instance.new("UICorner", targetBox).CornerRadius = UDim.new(0,10)
targetBox.Parent = mainFrame

local punchBtn = makeButton("Skull Crusher", 122)

local function makeSlider(labelText, y, default, min, max, callback)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0.5, 0, 0, 16)
    lbl.Position = UDim2.new(0.14, 0, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.Text = labelText .. ": " .. tostring(default)
    lbl.TextColor3 = Color3.fromRGB(0,200,255)
    lbl.Font = Enum.Font.Gotham
    lbl.TextSize = 12
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = mainFrame

    local box = Instance.new("TextBox")
    box.Size = UDim2.new(0.72, 0, 0, 20)
    box.Position = UDim2.new(0.14, 0, 0, y + 16)
    box.Text = tostring(default)
    box.ClearTextOnFocus = false
    box.BackgroundColor3 = Color3.fromRGB(35,35,45)
    box.TextColor3 = Color3.fromRGB(255,255,255)
    box.Font = Enum.Font.Gotham
    box.TextSize = 14
    Instance.new("UICorner", box).CornerRadius = UDim.new(0,6)
    box.Parent = mainFrame

    box.FocusLost:Connect(function(enter)
        local num = tonumber(box.Text)
        if num then
            num = math.clamp(num, min, max)
            box.Text = tostring(num)
            lbl.Text = labelText .. ": " .. tostring(num)
            callback(num)
        else
            box.Text = tostring(default)
        end
    end)
    return box, lbl
end

local posBox, posLabel = makeSlider("Position", 160, standDistance, 0, 20, function(v) standDistance = v end)
local offBox, offLabel = makeSlider("Offset", 188, sideOffset, -10, 10, function(v) sideOffset = v end)
local heightBox, heightLabel = makeSlider("Float Height", 216, heightOffset, 0, 10, function(v) heightOffset = v end)

do
    local dragging = false
    local dragStart = Vector2.new()
    local startPos = mainFrame.Position

    mainFrame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = mainFrame.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)

    RunService.RenderStepped:Connect(function()
        if dragging then
            local mousePos = UserInputService:GetMouseLocation()
            local delta = mousePos - dragStart
            local newX = math.clamp(startPos.X.Offset + delta.X, 0, workspace.CurrentCamera.ViewportSize.X - mainFrame.Size.X.Offset)
            local newY = math.clamp(startPos.Y.Offset + delta.Y, 0, workspace.CurrentCamera.ViewportSize.Y - mainFrame.Size.Y.Offset)
            mainFrame.Position = UDim2.new(0, newX, 0, newY)
        end
    end)
end

local function findTargetByName(namePart)
    if not namePart or namePart == "" then return nil end
    namePart = namePart:lower()
    for _, p in pairs(Players:GetPlayers()) do
        if p ~= player and p.Name:lower():find(namePart) then
            return p
        end
    end
    return nil
end

local standOn = false
local bp, gyro = nil, nil
local floatTime = 0

local function enableStand()
for _, part in pairs(character:GetDescendants()) do
    if part:IsA("BasePart") then
        part.CanCollide = false
    end
end
    if not bp then
        bp = Instance.new("BodyPosition")
        bp.MaxForce = Vector3.new(4e5, 4e5, 4e5)
        bp.P = 2000
        bp.D = 50
        bp.Position = humanoidRootPart.Position
        bp.Parent = humanoidRootPart
    end
    if not gyro then
        gyro = Instance.new("BodyGyro")
        gyro.P = 2000
        gyro.D = 50
        gyro.MaxTorque = Vector3.new(4e5, 4e5, 4e5)
        gyro.CFrame = humanoidRootPart.CFrame
        gyro.Parent = humanoidRootPart
    end
end

local function disableStand()
for _, part in pairs(character:GetDescendants()) do
    if part:IsA("BasePart") then
        part.CanCollide = true
    end
end
    if bp then bp:Destroy(); bp=nil end
    if gyro then gyro:Destroy(); gyro=nil end
end

standBtn.MouseButton1Click:Connect(function()
    standOn = not standOn
    standBtn.Text = standOn and "Stand: ON" or "Stand: OFF"
    if standOn then
        enableStand()
        local t = findTargetByName(targetBox.Text)
        if t and t.Character and t.Character:FindFirstChild("HumanoidRootPart") then
            for _, id in ipairs(summonSoundIds) do
                local summon = Instance.new("Sound", humanoidRootPart)
                summon.SoundId = id
                summon.Volume = 1
                summon:Play()
                Debris:AddItem(summon, 3)
            end
        end

        --  Tambah di sini untuk hantar mesej summon JoJo
        SendChatMessage("Sutāpurachina, osewaninarimasu.")

    else
        disableStand()
    end
end)

RunService.RenderStepped:Connect(function(dt)
    if standOn and bp and gyro and targetBox.Text~="" then
        floatTime += dt * 2
        local floatOffset = math.sin(floatTime) * 0.5

        local t = findTargetByName(targetBox.Text)
        if t and t.Character and t.Character:FindFirstChild("HumanoidRootPart") then
            local targetHRP = t.Character.HumanoidRootPart
            local tcf = targetHRP.CFrame
            local desiredPos = tcf.Position - tcf.LookVector*standDistance + tcf.RightVector*sideOffset + Vector3.new(0, heightOffset + floatOffset, 0)
            bp.Position = bp.Position:Lerp(desiredPos, math.clamp(followSpeed,0.01,1))
            gyro.CFrame = CFrame.new(humanoidRootPart.Position, humanoidRootPart.Position + tcf.LookVector)
        end
    end
end)

local function runPastebinStyleFling(duration)
    local start = tick()
    local movel = 0.1
    while tick() - start < duration do
        RunService.Heartbeat:Wait()
        local c = player.Character
        local hrp = c and c:FindFirstChild("HumanoidRootPart")
        if hrp then
            local vel = hrp.Velocity
            hrp.Velocity = vel * 10000 + Vector3.new(0,10000,0)
            RunService.RenderStepped:Wait()
            hrp.Velocity = vel
            RunService.Stepped:Wait()
            hrp.Velocity = vel + Vector3.new(0, movel, 0)
            movel = -movel
        end
    end
end

local function punchTarget()
    local punchAnim = Instance.new("Animation")
    punchAnim.AnimationId = "rbxassetid://86464152593138"
    local punchTrack = humanoid:LoadAnimation(punchAnim)
    punchTrack.Priority = Enum.AnimationPriority.Action
    punchTrack:Play()

    -- Berhenti automatik lepas 1 saat
    task.delay(1, function()
        if punchTrack then
            punchTrack:Stop()
            punchTrack:Destroy()
        end
    end)
    local targetPlayer = findTargetByName(targetBox.Text)
    if not targetPlayer or not targetPlayer.Character then return end
    local targetHRP = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not targetHRP then return end

-- 🌟 Hantar mesej Skull Crusher
SendChatMessage("ORA ORA! Sabaku no ha ore no sutando da!")

    local nearest = GetNearestPlayerInFront(targetPlayer)
if not nearest then return end

    local wasStandOn = standOn
    if wasStandOn then
        standOn = false
        standBtn.Text = "Stand: OFF"
        disableStand()
    end

    humanoidRootPart.CFrame = CFrame.new(nearest.Position + Vector3.new(0,3,0))

    local tempBP = Instance.new("BodyPosition")
    tempBP.MaxForce = Vector3.new(1e6, 1e6, 1e6)
    tempBP.P = 4000
    tempBP.D = 100
    tempBP.Position = nearest.Position
    tempBP.Parent = humanoidRootPart

    local tempGyro = Instance.new("BodyGyro")
    tempGyro.MaxTorque = Vector3.new(1e6, 1e6, 1e6)
    tempGyro.P = 4000
    tempGyro.D = 100
    tempGyro.CFrame = humanoidRootPart.CFrame
    tempGyro.Parent = humanoidRootPart

    local followConnection
    followConnection = RunService.RenderStepped:Connect(function()
        if not (tempBP and tempGyro and nearest and nearest.Parent) then
            return
        end
        tempBP.Position = nearest.Position
        local lookVec = nearest.CFrame.LookVector
        tempGyro.CFrame = CFrame.new(humanoidRootPart.Position, humanoidRootPart.Position + lookVec)
    end)

    task.delay(followDuration, function()
        if followConnection then
            followConnection:Disconnect()
            followConnection = nil
        end
        if tempBP then tempBP:Destroy(); tempBP = nil end
        if tempGyro then tempGyro:Destroy(); tempGyro = nil end
    end)

    local effect = Instance.new("ColorCorrectionEffect")
    effect.Saturation = -1
    effect.Parent = game.Lighting

    local s = Instance.new("Sound", humanoidRootPart)
    s.SoundId = punchSoundId
    s.Volume = 1
    s:Play()
    Debris:AddItem(s,3)

    task.delay(0.2, function()
        local s2 = Instance.new("Sound", humanoidRootPart)
        s2.SoundId = heavyPunchSoundId
        s2.Volume = 1
        s2:Play()
        Debris:AddItem(s2,3)
    end)

    task.spawn(function()
        runPastebinStyleFling(flingDuration)
    end)

    task.delay(flingDuration + 0.25, function()
        if followConnection then
            followConnection:Disconnect()
            followConnection = nil
        end
        if tempBP then tempBP:Destroy(); tempBP = nil end
        if tempGyro then tempGyro:Destroy(); tempGyro = nil end

        if effect and effect.Parent then
            effect:Destroy()
        end
        if wasStandOn then
            standOn = true
            standBtn.Text = "Stand: ON"
            enableStand()
            if bp then
                bp.Position = humanoidRootPart.Position
            end
        end
    end)
end

punchBtn.MouseButton1Click:Connect(punchTarget)

local function onPlayerChatted(otherPlayer, message)
    local targetName = targetBox.Text
    if not targetName or targetName == "" then return end

    if standOn and otherPlayer.Name:lower():find(targetName:lower()) and message:lower():find("barrage") then
        punchTarget()
    end

    if standOn and otherPlayer.Name:lower():find(targetName:lower()) and message:lower():find("vanish") then
        standOn = false
        standBtn.Text = "Stand: OFF"
        disableStand()
SendChatMessage("Yare Yare Daze,Kōun o..")
    end

    if otherPlayer.Name:lower():find(targetName:lower()) and message:lower():find("summon") then
        standOn = not standOn
        standBtn.Text = standOn and "Stand: ON" or "Stand: OFF"
        if standOn then
            enableStand()
            local t = findTargetByName(targetBox.Text)
            if t and t.Character and t.Character:FindFirstChild("HumanoidRootPart") then
                for _, id in ipairs(summonSoundIds) do
                    local summon = Instance.new("Sound", humanoidRootPart)
                    summon.SoundId = id
                    summon.Volume = 1
                    summon:Play()
                    Debris:AddItem(summon, 3)
                end
            end
SendChatMessage("Sutāpurachina, osewaninarimasu.")
        else
            disableStand()
        end
    end
end

for _, p in pairs(Players:GetPlayers()) do
    if p ~= player then
        p.Chatted:Connect(function(msg)
            onPlayerChatted(p, msg)
        end)
    end
end

Players.PlayerAdded:Connect(function(p)
    if p ~= player then
        p.Chatted:Connect(function(msg)
            onPlayerChatted(p, msg)
        end)
    end
end)

player.CharacterAdded:Connect(function(char)
    character = char
    humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    humanoid = character:FindFirstChildOfClass("Humanoid") or character:WaitForChild("Humanoid")
    disableStand()
    standOn = false
    standBtn.Text = "Stand: OFF"
end)

local levitateIdle = Instance.new("Animation")
levitateIdle.AnimationId = "rbxassetid://122746752555782"

local moveAnim = Instance.new("Animation")
moveAnim.AnimationId = "rbxassetid://10921135644"

local levitateTrack
local moveTrack

local function playLevitateIdle()
	if humanoid and not levitateTrack then
		levitateTrack = humanoid:LoadAnimation(levitateIdle)
		levitateTrack.Priority = Enum.AnimationPriority.Idle
		levitateTrack.Looped = true
		levitateTrack:Play()
	end
end

local function stopLevitateIdle()
	if levitateTrack then
		levitateTrack:Stop()
		levitateTrack:Destroy()
		levitateTrack = nil
	end
end

local function playMoveAnim()
	if humanoid and not moveTrack then
		moveTrack = humanoid:LoadAnimation(moveAnim)
		moveTrack.Priority = Enum.AnimationPriority.Movement
		moveTrack.Looped = true
		moveTrack:Play()
	end
end

local function stopMoveAnim()
	if moveTrack then
		moveTrack:Stop()
		moveTrack:Destroy()
		moveTrack = nil
	end
end

RunService.RenderStepped:Connect(function(dt)
	if standOn then
		local target = findTargetByName(targetBox.Text)
		if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then
			local targetHumanoid = target.Character:FindFirstChildOfClass("Humanoid")
			
			if targetHumanoid then
				if targetHumanoid.MoveDirection.Magnitude > 0 then
					stopLevitateIdle()
					playMoveAnim()
				else
					stopMoveAnim()
					playLevitateIdle()
				end
			end
		else
			stopMoveAnim()
			playLevitateIdle()
		end
	else
		stopLevitateIdle()
		stopMoveAnim()
	end
end)

Features & Information

Jojo Stand Script For All Game, --cmds-- ((Stand Users need to Chat these cmds to control stand)) 1."Barrage" 2."Vanish" 3."Summon"

Community Comments (12)

MizuScriptsMizuScriptsOct 21, 2025

Yeah W

MizuScriptsMizuScriptsOct 21, 2025

Finally you've post it in scriptblox

Replying to @MizuScripts
GuestEZQGuestEZQOct 21, 2025

@MizuScripts mb i need to wait 7 whole days to post a script

GuestEZQGuestEZQOct 21, 2025

lol

gibbigibbiNov 15, 2025

make one without the stand saying text it got me banned for spamming

gibbigibbiNov 17, 2025

it is getting me banned for spam

mpredstonempredstoneMar 15, 2026

remove the chat text yourself lol its not hard to find it in the script

bobbylife80bobbylife80Mar 17, 2026

yo can you make it so you got an item esp for jjbad diamond on roblox

StanduserStanduserJul 11, 2026

Add more moves

Replying to @Standuser
StaticAmourStaticAmourSep 29, 2026

@Standuser i did on my account

ChaLoLChaLoLAug 7, 2026

what new

StaticAmourStaticAmourSep 27, 2026

i tweaked up the script on my account. dont worry i gave credit

More Scripts for Universal Scripts