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