local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") -- Character references local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local hrp = character:WaitForChild("HumanoidRootPart") -- Disable default Animate script local animateScript = character:FindFirstChild("Animate") if animateScript then animateScript.Disabled = true end -- Animation Delay local animDelay = 0.2 -- Animation IDs local anims = { Idle = "rbxassetid://0", Walk = "rbxassetid://0", Run = "rbxassetid://0", Attack = "rbxassetid://0", Q = "rbxassetid://0", E = "rbxassetid://0", R = "rbxassetid://0", T = "rbxassetid://0", } local tracks = {} local attacking = false local normalWalkSpeed = humanoid.WalkSpeed local textboxMap = {} -- Helper: sanitize textbox input local function getAnimFromTextbox(tb) local txt = tb.Text:gsub("%s","") if txt == "" or txt == "0" then return "rbxassetid://0" end txt = txt:gsub("rbxassetid://","") -- remove existing prefix return "rbxassetid://"..txt end -- Stop track safely local function stopTrack(track) if track and track.IsPlaying then track:Stop() end end -- Load animation from current textbox local function loadAnim(name) stopTrack(tracks[name]) local id = anims[name] if id == "rbxassetid://0" then tracks[name] = nil return end local anim = Instance.new("Animation") anim.AnimationId = id tracks[name] = humanoid:LoadAnimation(anim) end -- Reload all animations local function reloadAll() for name,_ in pairs(anims) do loadAnim(name) end end reloadAll() -- Movement logic for Idle/Walk/Run RunService.RenderStepped:Connect(function() if attacking then return end local speed = hrp.Velocity.Magnitude local moveDir = humanoid.MoveDirection.Magnitude if moveDir <= 0.1 then if tracks.Idle and not tracks.Idle.IsPlaying then stopTrack(tracks.Walk) stopTrack(tracks.Run) tracks.Idle:Play() end return end if speed > normalWalkSpeed + 1 then if tracks.Run and not tracks.Run.IsPlaying then stopTrack(tracks.Idle) stopTrack(tracks.Walk) tracks.Run:Play() end else if tracks.Walk and not tracks.Walk.IsPlaying then stopTrack(tracks.Idle) stopTrack(tracks.Run) tracks.Walk:Play() end end end) -- Play ability animation local function playAbility(name, duration) if attacking then return end local id = getAnimFromTextbox(textboxMap[name]) if id == "rbxassetid://0" then return end anims[name] = id loadAnim(name) local track = tracks[name] if not track then return end attacking = true task.wait(animDelay) -- Stop all other animations except this one for _,t in pairs(tracks) do if t ~= track then stopTrack(t) end end track:Play() task.delay(duration or track.Length, function() attacking = false end) end -- GUI setup local gui = Instance.new("ScreenGui") gui.Name = "AnimChangerPro" gui.ResetOnSpawn = false gui.DisplayOrder = 999 gui.Parent = playerGui local main = Instance.new("Frame") main.Size = UDim2.new(0,380,0,650) main.Position = UDim2.new(0.5,-190,0.5,-325) main.BackgroundColor3 = Color3.fromRGB(22,22,28) main.BorderSizePixel = 0 main.Active = true main.Draggable = true main.ClipsDescendants = true main.Parent = gui Instance.new("UICorner", main).CornerRadius = UDim.new(0,12) -- Title bar local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1,0,0,50) titleBar.BackgroundColor3 = Color3.fromRGB(30,30,38) titleBar.Parent = main Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0,12) local title = Instance.new("TextLabel") title.Size = UDim2.new(1,-100,1,0) title.Position = UDim2.new(0,15,0,0) title.BackgroundTransparency = 1 title.Text = "Animation Changer" title.TextColor3 = Color3.fromRGB(255,100,150) title.Font = Enum.Font.GothamBold title.TextSize = 18 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = titleBar -- Refresh button local refreshBtn = Instance.new("TextButton") refreshBtn.Size = UDim2.new(0,60,0,30) refreshBtn.Position = UDim2.new(1,-70,0,10) refreshBtn.Text = "Refresh" refreshBtn.Font = Enum.Font.Gotham refreshBtn.TextSize = 14 refreshBtn.TextColor3 = Color3.fromRGB(255,255,255) refreshBtn.BackgroundColor3 = Color3.fromRGB(40,40,50) refreshBtn.Parent = titleBar Instance.new("UICorner", refreshBtn).CornerRadius = UDim.new(0,6) refreshBtn.MouseButton1Click:Connect(function() character = player.Character or player.CharacterAdded:Wait() humanoid = character:WaitForChild("Humanoid") hrp = character:WaitForChild("HumanoidRootPart") local animateScript = character:FindFirstChild("Animate") if animateScript then animateScript.Disabled = true end reloadAll() print("Animations refreshed!") end) -- Info button local infoBtn = Instance.new("TextButton") infoBtn.Size = UDim2.new(0,30,0,30) infoBtn.Position = UDim2.new(1,-35,0,10) infoBtn.Text = "?" infoBtn.Font = Enum.Font.GothamBold infoBtn.TextSize = 18 infoBtn.TextColor3 = Color3.fromRGB(255,255,255) infoBtn.BackgroundColor3 = Color3.fromRGB(40,40,50) infoBtn.Parent = titleBar Instance.new("UICorner", infoBtn).CornerRadius = UDim.new(0,6) -- Scroll frame local scroll = Instance.new("ScrollingFrame") scroll.Size = UDim2.new(1,-30,1,-140) scroll.Position = UDim2.new(0,15,0,65) scroll.BackgroundTransparency = 1 scroll.ScrollBarThickness = 6 scroll.ScrollBarImageColor3 = Color3.fromRGB(255,100,150) scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y scroll.Parent = main local list = Instance.new("UIListLayout") list.Padding = UDim.new(0,10) list.Parent = scroll -- Create animation textboxes local function createRow(name) local row = Instance.new("Frame") row.Size = UDim2.new(1,0,0,48) row.BackgroundColor3 = Color3.fromRGB(35,35,45) row.Parent = scroll Instance.new("UICorner", row).CornerRadius = UDim.new(0,8) local label = Instance.new("TextLabel") label.Size = UDim2.new(0.3,0,1,0) label.Text = name label.TextColor3 = Color3.fromRGB(200,200,240) label.BackgroundTransparency = 1 label.Font = Enum.Font.GothamSemibold label.TextSize = 15 label.Parent = row local box = Instance.new("TextBox") box.Size = UDim2.new(0.68,-10,0,34) box.Position = UDim2.new(0.32,5,0.5,-17) box.BackgroundColor3 = Color3.fromRGB(45,45,55) box.TextColor3 = Color3.fromRGB(230,230,250) box.PlaceholderText = "Enter ID" box.Text = anims[name]:gsub("rbxassetid://","") box.Font = Enum.Font.Code box.TextSize = 14 box.ClearTextOnFocus = false box.Parent = row Instance.new("UICorner", box).CornerRadius = UDim.new(0,6) textboxMap[name] = box box.FocusLost:Connect(function(enter) if enter then anims[name] = getAnimFromTextbox(box) loadAnim(name) end end) end for _,name in ipairs({"Idle","Walk","Run","Attack","Q","E","R","T"}) do createRow(name) end -- Animation delay row local delayRow = Instance.new("Frame") delayRow.Size = UDim2.new(1,0,0,40) delayRow.BackgroundColor3 = Color3.fromRGB(35,35,45) delayRow.Position = UDim2.new(0,0,1,-50) delayRow.Parent = main Instance.new("UICorner", delayRow).CornerRadius = UDim.new(0,8) local delayLabel = Instance.new("TextLabel") delayLabel.Size = UDim2.new(0.4,0,1,0) delayLabel.Text = "Animation Delay:" delayLabel.TextColor3 = Color3.fromRGB(200,200,240) delayLabel.BackgroundTransparency = 1 delayLabel.Font = Enum.Font.GothamSemibold delayLabel.TextSize = 15 delayLabel.TextXAlignment = Enum.TextXAlignment.Left delayLabel.Parent = delayRow local delayBox = Instance.new("TextBox") delayBox.Size = UDim2.new(0.55,-10,0,30) delayBox.Position = UDim2.new(0.45,5,0.5,-15) delayBox.BackgroundColor3 = Color3.fromRGB(45,45,55) delayBox.TextColor3 = Color3.fromRGB(230,230,250) delayBox.PlaceholderText = "Seconds" delayBox.Text = tostring(animDelay) delayBox.Font = Enum.Font.Code delayBox.TextSize = 14 delayBox.ClearTextOnFocus = false delayBox.Parent = delayRow Instance.new("UICorner", delayBox).CornerRadius = UDim.new(0,6) delayBox.FocusLost:Connect(function(enter) if enter then local val = tonumber(delayBox.Text) if val then animDelay = val else delayBox.Text = tostring(animDelay) end end end) -- Toggle GUI visibility with Alt local visible = true UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == Enum.KeyCode.LeftAlt or input.KeyCode == Enum.KeyCode.RightAlt then visible = not visible main.Visible = visible end end) -- Ability key input UserInputService.InputBegan:Connect(function(input, gp) if gp then return end local keyMap = { [Enum.KeyCode.Q] = "Q", [Enum.KeyCode.E] = "E", [Enum.KeyCode.R] = "R", [Enum.KeyCode.T] = "T", } if input.UserInputType == Enum.UserInputType.MouseButton1 then playAbility("Attack",1) elseif keyMap[input.KeyCode] then playAbility(keyMap[input.KeyCode]) end end) -- Copy animation GUI local copyGui = Instance.new("ScreenGui") copyGui.Name = "AnimCopyGUI" copyGui.ResetOnSpawn = false copyGui.Parent = playerGui copyGui.Enabled = false local copyFrame = Instance.new("Frame") copyFrame.Size = UDim2.new(0,300,0,200) copyFrame.Position = UDim2.new(0.5,-150,0.5,-100) copyFrame.BackgroundColor3 = Color3.fromRGB(35,35,45) copyFrame.Parent = copyGui Instance.new("UICorner", copyFrame).CornerRadius = UDim.new(0,8) local copyTitle = Instance.new("TextLabel") copyTitle.Size = UDim2.new(1,0,0,30) copyTitle.Text = "Which animation to copy?" copyTitle.TextColor3 = Color3.fromRGB(255,255,255) copyTitle.BackgroundTransparency = 1 copyTitle.Font = Enum.Font.GothamBold copyTitle.TextSize = 16 copyTitle.Parent = copyFrame local copyList = Instance.new("UIListLayout") copyList.Padding = UDim.new(0,10) copyList.Parent = copyFrame local function showCopyGUI(playingTracks) for _,v in pairs(copyFrame:GetChildren()) do if v:IsA("TextButton") then v:Destroy() end end for _,track in ipairs(playingTracks) do local id = track.Animation.AnimationId local alreadyInTextboxes = false for _,tb in pairs(textboxMap) do if tb.Text == id:gsub("rbxassetid://","") then alreadyInTextboxes = true break end end if alreadyInTextboxes then continue end local btn = Instance.new("TextButton") btn.Size = UDim2.new(1,-20,0,30) btn.Position = UDim2.new(0,10,0,30) btn.Text = id btn.Font = Enum.Font.Gotham btn.TextSize = 14 btn.TextColor3 = Color3.fromRGB(255,255,255) btn.BackgroundColor3 = Color3.fromRGB(50,50,60) btn.Parent = copyFrame Instance.new("UICorner", btn).CornerRadius = UDim.new(0,6) btn.MouseButton1Click:Connect(function() setclipboard(id) print("Copied: "..id) copyGui.Enabled = false end) end copyGui.Enabled = true end -- Click humanoid to copy local mouse = player:GetMouse() mouse.Button1Down:Connect(function() local target = mouse.Target if not target then return end local model = target:FindFirstAncestorWhichIsA("Model") if not model then return end local hum = model:FindFirstChildOfClass("Humanoid") if not hum then return end local playing = hum:GetPlayingAnimationTracks() if #playing > 0 then showCopyGUI(playing) end end)