local player = game.Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local toolData = { { Name = "Normal Punch", AnimationId = "rbxassetid://204062532", Speed = 1 }, { Name = "Consecutive Punches", AnimationId = "rbxassetid://126753849", Speed = 2.4 }, { Name = "Shove", AnimationId = "rbxassetid://218504594", Speed = 1 }, { Name = "Uppercut", AnimationId = "rbxassetid://184574340", Speed = 1 } } local currentTrack = nil local isPlaying = false for _, data in pairs(toolData) do local tool = Instance.new("Tool") tool.Name = data.Name tool.RequiresHandle = false tool.CanBeDropped = false tool.Parent = player.Backpack tool.Equipped:Connect(function() if isPlaying then return end isPlaying = true -- ⚡ Super fast unequip task.defer(function() tool.Parent = player.Backpack end) -- Stop previous anim if currentTrack and currentTrack.IsPlaying then currentTrack:Stop() currentTrack:Destroy() end local anim = Instance.new("Animation") anim.AnimationId = data.AnimationId local track = humanoid:LoadAnimation(anim) track.Looped = false track:Play() track:AdjustSpeed(data.Speed) currentTrack = track -- Reset block when done local duration = track.Length / data.Speed task.delay(duration, function() isPlaying = false end) end) end