
Key RequiredUniversal

-- Full updated HUG UI script with respawn-safe handling.
if game.Players.LocalPlayer.Character.Humanoid.RigType == Enum.HumanoidRigType.R6 then
if game:GetService("CoreGui"):FindFirstChild("HUGUI") then
game:GetService("CoreGui"):FindFirstChild("HUGUI"):Destroy()
end
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
-- dynamic character references (will be updated on respawn)
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local RootPart = Character:WaitForChild("HumanoidRootPart")
-- Animation asset ids (keep here so they can be reloaded after respawn)
local HUG_ANIM_ID_1 = "rbxassetid://283545583"
local HUG_ANIM_ID_2 = "rbxassetid://225975820"
local TROLL_ANIM_ID = "rbxassetid://148840371"
-- state
local hugging = false
local trolling = false
local currentSpeed = 1.0
local lockedTargetPlayer = nil
-- animation tracks (these will be recreated after respawn)
local Play_1, Play_2, TrollAnimTrack
-- helper: clamp
local function clamp(val, a, b)
if val < a then return a end
if val > b then return b end
return val
end
-- update displayed speed (defined later after SpeedBox is created)
local function updateSpeedDisplay()
if SpeedBox then
SpeedBox.Text = string.format("%.1f", currentSpeed)
end
end
-- function to safely load hug animations for current humanoid
local function loadHugAnims()
if not Humanoid then return end
-- stop old if present
if Play_1 then pcall(function() Play_1:Stop() end) end
if Play_2 then pcall(function() Play_2:Stop() end) end
-- load new
local anim1 = Instance.new("Animation")
anim1.AnimationId = HUG_ANIM_ID_1
local anim2 = Instance.new("Animation")
anim2.AnimationId = HUG_ANIM_ID_2
Play_1 = Humanoid:LoadAnimation(anim1)
Play_2 = Humanoid:LoadAnimation(anim2)
end
-- function to safely load troll animation
local function loadTrollAnim()
if not Humanoid then return end
if TrollAnimTrack then pcall(function() TrollAnimTrack:Stop() end) end
local anim = Instance.new("Animation")
anim.AnimationId = TROLL_ANIM_ID
TrollAnimTrack = Humanoid:LoadAnimation(anim)
pcall(function() TrollAnimTrack.Looped = true end)
end
-- create GUI (structure preserved as before, with speed -/+ controls)
local HUGUI = Instance.new("ScreenGui")
HUGUI.Name = "HUGUI"
HUGUI.Parent = game.CoreGui
HUGUI.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
HUGUI.Enabled = true
local HTopBar = Instance.new("Frame")
HTopBar.Name = "HTopBar"
HTopBar.Parent = HUGUI
HTopBar.AnchorPoint = Vector2.new(0.5, 0.5)
HTopBar.Position = UDim2.new(0.5, 0, 0.5, 0)
HTopBar.Size = UDim2.new(0, 250, 0, 50)
HTopBar.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
HTopBar.ZIndex = 2
local CloseButton = Instance.new("TextButton")
CloseButton.Name = "CloseButton"
CloseButton.Parent = HTopBar
CloseButton.AnchorPoint = Vector2.new(0.5, 0.5)
CloseButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
CloseButton.Position = UDim2.new(0.845, 0, 0.5, 0)
CloseButton.Size = UDim2.new(0, 80, 0, 50)
CloseButton.Font = Enum.Font.SourceSans
CloseButton.TextSize = 35
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.Text = "X"
CloseButton.MouseButton1Click:Connect(function()
HUGUI:Destroy()
end)
local MinTab = Instance.new("TextButton")
MinTab.Name = "MinTab"
MinTab.Parent = HTopBar
MinTab.AnchorPoint = Vector2.new(0.5, 0.5)
MinTab.BackgroundColor3 = Color3.fromRGB(0, 0, 255)
MinTab.Position = UDim2.new(0.54, 0, 0.5, 0)
MinTab.Size = UDim2.new(0, 80, 0, 50)
MinTab.Font = Enum.Font.SourceSans
MinTab.TextSize = 50
MinTab.TextColor3 = Color3.fromRGB(255, 255, 255)
MinTab.Text = "-"
MinTab.MouseButton1Click:Connect(function()
if MinTab.Text == "-" then
MinTab.Text = "+"
HFrame.Visible = false
else
MinTab.Text = "-"
HFrame.Visible = true
end
end)
local HFrame = Instance.new("Frame")
HFrame.Name = "HFrame"
HFrame.Parent = HTopBar
HFrame.AnchorPoint = Vector2.new(0.5, 0.5)
HFrame.Position = UDim2.new(0.5, 0, 2.5, 0)
HFrame.Size = UDim2.new(0, 250, 0, 210)
HFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
-- Speed control UI (minus, value display, plus)
local SpeedLabel = Instance.new("TextLabel")
SpeedLabel.Name = "SpeedLabel"
SpeedLabel.Parent = HFrame
SpeedLabel.AnchorPoint = Vector2.new(0.5, 0.5)
SpeedLabel.BackgroundTransparency = 1
SpeedLabel.Position = UDim2.new(0.5, 0, 0.15, 0)
SpeedLabel.Size = UDim2.new(0, 220, 0, 30)
SpeedLabel.Font = Enum.Font.SourceSans
SpeedLabel.TextSize = 18
SpeedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
SpeedLabel.Text = "Animation Speed (0.1 = fast, 10 = slow)"
SpeedLabel.TextWrapped = true
local MinusBtn = Instance.new("TextButton")
MinusBtn.Name = "MinusBtn"
MinusBtn.Parent = HFrame
MinusBtn.AnchorPoint = Vector2.new(0.5, 0.5)
MinusBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
MinusBtn.Position = UDim2.new(0.2, 0, 0.35, 0)
MinusBtn.Size = UDim2.new(0, 60, 0, 40)
MinusBtn.Font = Enum.Font.SourceSans
MinusBtn.TextSize = 30
MinusBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
MinusBtn.Text = "-"
SpeedBox = Instance.new("TextLabel") -- global for updateSpeedDisplay
SpeedBox.Name = "SpeedBox"
SpeedBox.Parent = HFrame
SpeedBox.AnchorPoint = Vector2.new(0.5, 0.5)
SpeedBox.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
SpeedBox.Position = UDim2.new(0.5, 0, 0.35, 0)
SpeedBox.Size = UDim2.new(0, 80, 0, 40)
SpeedBox.Font = Enum.Font.SourceSans
SpeedBox.TextSize = 25
SpeedBox.TextColor3 = Color3.fromRGB(255, 255, 255)
SpeedBox.Text = "1.0"
local PlusBtn = Instance.new("TextButton")
PlusBtn.Name = "PlusBtn"
PlusBtn.Parent = HFrame
PlusBtn.AnchorPoint = Vector2.new(0.5, 0.5)
PlusBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
PlusBtn.Position = UDim2.new(0.8, 0, 0.35, 0)
PlusBtn.Size = UDim2.new(0, 60, 0, 40)
PlusBtn.Font = Enum.Font.SourceSans
PlusBtn.TextSize = 30
PlusBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
PlusBtn.Text = "+"
-- Hug button (unchanged)
local HugButton = Instance.new("TextButton")
HugButton.Name = "HugButton"
HugButton.Parent = HFrame
HugButton.AnchorPoint = Vector2.new(0.5, 0.5)
HugButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
HugButton.Position = UDim2.new(0.5, 0, 0.62, 0)
HugButton.Size = UDim2.new(0, 180, 0, 60)
HugButton.Font = Enum.Font.SourceSans
HugButton.TextSize = 45
HugButton.TextColor3 = Color3.fromRGB(255, 255, 255)
HugButton.Text = "HUG\nOff"
-- Troll Animation button
local TrollButton = Instance.new("TextButton")
TrollButton.Name = "TrollButton"
TrollButton.Parent = HFrame
TrollButton.AnchorPoint = Vector2.new(0.5, 0.5)
TrollButton.BackgroundColor3 = Color3.fromRGB(120, 80, 80)
TrollButton.Position = UDim2.new(0.5, 0, 0.86, 0)
TrollButton.Size = UDim2.new(0, 180, 0, 60)
TrollButton.Font = Enum.Font.SourceSans
TrollButton.TextSize = 35
TrollButton.TextColor3 = Color3.fromRGB(255, 255, 255)
TrollButton.Text = "Troll Anim\nOff"
-- Drag functionality
local gui = HTopBar
local dragging, dragInput, dragStart, startPos
local function update(input)
local delta = input.Position - dragStart
gui.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
gui.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = gui.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
gui.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
update(input)
end
end)
-- Hug functionality unchanged (uses frontHug)
local function getNearestPlayer()
local nearest = nil
local shortestDistance = math.huge
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local distance = (player.Character.HumanoidRootPart.Position - RootPart.Position).Magnitude
if distance < shortestDistance then
shortestDistance = distance
nearest = player
end
end
end
return nearest
end
local function frontHug()
local targetPlayer = lockedTargetPlayer
if targetPlayer
and targetPlayer.Character
and targetPlayer.Character:FindFirstChild("HumanoidRootPart") then
local targetRoot = targetPlayer.Character.HumanoidRootPart
local hugDistance = 1
local targetCFrame = targetRoot.CFrame
RootPart.CFrame = CFrame.new(
targetCFrame.Position + targetCFrame.LookVector * hugDistance,
targetCFrame.Position
)
end
end
-- Hug button behavior
HugButton.MouseButton1Click:Connect(function()
if HugButton.Text == "HUG\nOff" then
HugButton.Text = "HUG\nOn"
hugging = true
-- Lock onto the nearest player ONLY ONCE
lockedTargetPlayer = getNearestPlayer()
-- If nobody is nearby, cancel hug
if not lockedTargetPlayer then
HugButton.Text = "HUG\nOff"
hugging = false
return
end
-- load and play hug animations
loadHugAnims()
if Play_1 then pcall(function() Play_1:Play() end) end
if Play_2 then pcall(function() Play_2:Play() end) end
spawn(function()
while hugging do
if RootPart and Character and Humanoid then
frontHug()
end
RunService.Heartbeat:Wait()
end
end)
else
HugButton.Text = "HUG\nOff"
hugging = false
-- Unlock target when hug is turned off
lockedTargetPlayer = nil
if Play_1 then pcall(function() Play_1:Stop() end) end
if Play_2 then pcall(function() Play_2:Stop() end) end
end
end)
-- Troll animation control
MinusBtn.MouseButton1Click:Connect(function()
currentSpeed = clamp((currentSpeed - 0.1), 0.1, 10)
updateSpeedDisplay()
if TrollAnimTrack then
local animSpeed = 1 / currentSpeed
pcall(function() TrollAnimTrack:AdjustSpeed(animSpeed) end)
end
end)
PlusBtn.MouseButton1Click:Connect(function()
currentSpeed = clamp((currentSpeed + 0.1), 0.1, 10)
updateSpeedDisplay()
if TrollAnimTrack then
local animSpeed = 1 / currentSpeed
pcall(function() TrollAnimTrack:AdjustSpeed(animSpeed) end)
end
end)
TrollButton.MouseButton1Click:Connect(function()
if TrollButton.Text == "Troll Anim\nOff" then
TrollButton.Text = "Troll Anim\nOn"
trolling = true
loadTrollAnim()
if TrollAnimTrack then
pcall(function() TrollAnimTrack:Play() end)
local animSpeed = 1 / currentSpeed
pcall(function() TrollAnimTrack:AdjustSpeed(animSpeed) end)
end
spawn(function()
while trolling do
if TrollAnimTrack then
local animSpeedInner = 1 / currentSpeed
pcall(function() TrollAnimTrack:AdjustSpeed(animSpeedInner) end)
end
RunService.Heartbeat:Wait()
end
end)
else
TrollButton.Text = "Troll Anim\nOff"
trolling = false
if TrollAnimTrack then pcall(function() TrollAnimTrack:Stop() end) end
TrollAnimTrack = nil
end
end)
-- RESPawn handling: update Character, Humanoid, RootPart & reload animations if toggles are on
local function onCharacterAdded(char)
Character = char or LocalPlayer.Character
-- small wait for humanoid/rootpart
Humanoid = Character:WaitForChild("Humanoid")
RootPart = Character:WaitForChild("HumanoidRootPart")
-- stop old tracks (they reference old humanoid)
if Play_1 then pcall(function() Play_1:Stop() end) end
if Play_2 then pcall(function() Play_2:Stop() end) end
if TrollAnimTrack then pcall(function() TrollAnimTrack:Stop() end) end
-- recreate tracks if toggles currently on
if hugging then
loadHugAnims()
if Play_1 then pcall(function() Play_1:Play() end) end
if Play_2 then pcall(function() Play_2:Play() end) end
end
if trolling then
loadTrollAnim()
if TrollAnimTrack then
pcall(function() TrollAnimTrack:Play() end)
local animSpeed = 1 / currentSpeed
pcall(function() TrollAnimTrack:AdjustSpeed(animSpeed) end)
end
end
-- reconnect humanoid died to stop flags (prevents ghost states)
if Humanoid then
Humanoid.Died:Connect(function()
-- stop active states so they don't try to use old tracks
hugging = false
trolling = false
lockedTargetPlayer = nil
pcall(function() if Play_1 then Play_1:Stop() end end)
pcall(function() if Play_2 then Play_2:Stop() end end)
pcall(function() if TrollAnimTrack then TrollAnimTrack:Stop() end end)
-- reset button labels to Off (safe)
pcall(function() HugButton.Text = "HUG\nOff" end)
pcall(function() TrollButton.Text = "Troll Anim\nOff" end)
end)
end
end
-- initial setup
updateSpeedDisplay()
-- connect current humanoid death
if Humanoid then
Humanoid.Died:Connect(function()
hugging = false
trolling = false
lockedTargetPlayer = nil
if Play_1 then pcall(function() Play_1:Stop() end) end
if Play_2 then pcall(function() Play_2:Stop() end) end
if TrollAnimTrack then pcall(function() TrollAnimTrack:Stop() end) end
pcall(function() HugButton.Text = "HUG\nOff" end)
pcall(function() TrollButton.Text = "Troll Anim\nOff" end)
end)
end
LocalPlayer.CharacterAdded:Connect(onCharacterAdded)
else
warn("Need R6")
endNo comments yet for this script.



