AnimationSpy
Key RequiredUniversal

AnimationSpy

Universal Scriptgentgent 2K views 25 executesUpdated Apr 9, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•226 lines (6665 chars)
-- Services
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local MyHumanoid = Character:WaitForChild("Humanoid")

-- GUI Setup
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AnimationSpyGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")

-- Main Frame
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 350, 0, 400)
mainFrame.Position = UDim2.new(0.5, -175, 0.5, -200)
mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.Parent = screenGui

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 40)
title.BackgroundTransparency = 1
title.Text = "AnimationSpy"
title.Font = Enum.Font.GothamBold
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextScaled = true
title.Parent = mainFrame

local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Size = UDim2.new(1, -20, 1, -80)
scrollFrame.Position = UDim2.new(0, 10, 0, 50)
scrollFrame.BackgroundTransparency = 1
scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollFrame.ScrollBarThickness = 4
scrollFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrollFrame.Parent = mainFrame

local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 5)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = scrollFrame

local helpButton = Instance.new("TextButton")
helpButton.Size = UDim2.new(0, 30, 0, 30)
helpButton.Position = UDim2.new(0, 10, 1, -40)
helpButton.Text = "?"
helpButton.Font = Enum.Font.GothamBold
helpButton.TextColor3 = Color3.new(1, 1, 1)
helpButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
helpButton.TextScaled = true
helpButton.Parent = mainFrame

local helpPanel = Instance.new("Frame")
helpPanel.Size = UDim2.new(0, 300, 0, 200)
helpPanel.Position = UDim2.new(0.5, -150, 0.5, -100)
helpPanel.Visible = false
helpPanel.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
helpPanel.ZIndex = 10
helpPanel.Parent = screenGui

local helpLabel = Instance.new("TextLabel")
helpLabel.Size = UDim2.new(1, -20, 1, -40)
helpLabel.Position = UDim2.new(0, 10, 0, 10)
helpLabel.BackgroundTransparency = 1
helpLabel.Text = [[
šŸŽ® Keybinds:

šŸ–± Left Click = Play/Stop animation  
šŸ–± Right Click = Rename animation  
⌫ Delete = Remove hovered animation  
⌨ Left Ctrl = Toggle GUI visibility  
šŸ‘† Click Player = Spy their animations  
ā“ Click '?' = Show/Hide this help menu
]]
helpLabel.TextWrapped = true
helpLabel.TextScaled = false
helpLabel.Font = Enum.Font.Gotham
helpLabel.TextColor3 = Color3.new(1, 1, 1)
helpLabel.TextSize = 14
helpLabel.TextYAlignment = Enum.TextYAlignment.Top
helpLabel.ZIndex = 11
helpLabel.Parent = helpPanel

local closeHelp = Instance.new("TextButton")
closeHelp.Size = UDim2.new(0, 30, 0, 30)
closeHelp.Position = UDim2.new(1, -35, 0, 5)
closeHelp.Text = "X"
closeHelp.BackgroundColor3 = Color3.fromRGB(80, 30, 30)
closeHelp.TextColor3 = Color3.new(1, 1, 1)
closeHelp.Font = Enum.Font.GothamBold
closeHelp.TextScaled = true
closeHelp.ZIndex = 11
closeHelp.Parent = helpPanel

closeHelp.MouseButton1Click:Connect(function()
	helpPanel.Visible = false
end)

helpButton.MouseButton1Click:Connect(function()
	helpPanel.Visible = not helpPanel.Visible
end)

-- Animation Handling
local animations = {}
local hoveredButton = nil

local function createTrack(animId)
	local anim = Instance.new("Animation")
	anim.AnimationId = animId
	local track = MyHumanoid:LoadAnimation(anim)
	track.Looped = true
	return track
end

local function addAnimationButton(animId, humanoid)
	if animations[animId] then return end

	local button = Instance.new("TextButton")
	button.Size = UDim2.new(1, 0, 0, 30)
	button.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
	button.TextColor3 = Color3.new(1, 1, 1)
	button.Text = animId
	button.Font = Enum.Font.Gotham
	button.TextScaled = true
	button.ClipsDescendants = true
	button.Parent = scrollFrame

	animations[animId] = {
		track = nil,
		playing = false,
		humanoid = MyHumanoid,  -- Use LocalPlayer's humanoid
		button = button
	}

	button.MouseEnter:Connect(function()
		hoveredButton = animId
	end)
	button.MouseLeave:Connect(function()
		hoveredButton = nil
	end)

	button.MouseButton1Click:Connect(function()
		local anim = animations[animId]
		if anim.playing then
			anim.track:Stop()
			anim.track:Destroy()
			anim.track = nil
			anim.playing = false
			button.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
		else
			anim.track = createTrack(animId)
			anim.track:Play()
			anim.playing = true
			button.BackgroundColor3 = Color3.fromRGB(0, 170, 100)
		end
	end)

	button.MouseButton2Click:Connect(function()
		local renameBox = Instance.new("TextBox")
		renameBox.Size = button.Size
		renameBox.Position = button.Position
		renameBox.Text = ""
		renameBox.PlaceholderText = "Enter name"
		renameBox.TextScaled = true
		renameBox.ClearTextOnFocus = true
		renameBox.Parent = button.Parent
		button.Visible = false
		renameBox.FocusLost:Connect(function(enter)
			if enter and renameBox.Text ~= "" then
				button.Text = renameBox.Text
			end
			button.Visible = true
			renameBox:Destroy()
		end)
		renameBox:CaptureFocus()
	end)
end

UserInputService.InputBegan:Connect(function(input, gp)
	if gp then return end
	if input.KeyCode == Enum.KeyCode.Delete and hoveredButton then
		local anim = animations[hoveredButton]
		if anim then
			if anim.track then
				anim.track:Stop()
				anim.track:Destroy()
			end
			anim.button:Destroy()
			animations[hoveredButton] = nil
			hoveredButton = nil
		end
	elseif input.KeyCode == Enum.KeyCode.LeftControl then
		screenGui.Enabled = not screenGui.Enabled
	end
end)

-- Spy on humanoid animations
Mouse.Button1Down:Connect(function()
	local target = Mouse.Target
	if not target then return end
	local model = target:FindFirstAncestorOfClass("Model")
	if not model then return end
	local humanoid = model:FindFirstChildWhichIsA("Humanoid")
	if not humanoid then return end
	local animator = humanoid:FindFirstChildWhichIsA("Animator")
	if not animator then return end

	for _, track in ipairs(animator:GetPlayingAnimationTracks()) do
		if track.Animation and track.Animation.AnimationId then
			addAnimationButton(track.Animation.AnimationId, humanoid)
		end
	end
end)

-- Handle character respawn
LocalPlayer.CharacterAdded:Connect(function(newChar)
	Character = newChar
	MyHumanoid = newChar:WaitForChild("Humanoid")
end)

Features & Information

it animates

Community Comments (1)

gentgentApr 9, 2025(edited)

mobile aint supported

More Scripts for Universal Scripts