Jojo script 0912
Key RequiredUniversal

Jojo script 0912

Universal ScriptLightnin_700Lightnin_700 788 views 1.7K executesUpdated Dec 29, 2025
Unrated
00
Lua Script•574 lines (18359 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("")

    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("")

    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("")
    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("")
        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

It's a edit of a already existing jojo script. Credits to that person I forgot their name

Community Comments (1)

ScriptgoonerScriptgoonerDec 31, 2025

doesnt work twin

More Scripts for Universal Scripts