
Key RequiredUniversal

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)



doesnt work twin