I have the Gamepass script in ServerScriptService and the actual DoubleJump script(local script) inside the Gamepass script. The Gamepass script is supposed to put the DoubleJump script inside the players backpack if they have the Gamepass. Not sure what I did wrong but it wont work.

Gamepass Script ~ Inside ServerScriptService

local id = 7163241
 
game.Players.PlayerAdded:Connect(function(plr)
    plr.CharacterAdded:connect(function(char)
    if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(game.Players[char.Name].UserId, id) then
    local DbJump = script.DoubleJump:Clone()
    DbJump.Parent = plr.Backpack
    end
  end)
end)

DoubleJump script ~ Inside Gamepass Script

local UIS = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local character
local humanoid

local canDoubleJump = false
local hasDoubleJumped = false
local oldPower
local time_delay = 0.1
local jump_multiplier = 1.2 -- set to 1 for a normal double jump, increase for the second jump to be higher

function onJumpRequest()
	if not character or not humanoid or not character:IsDescendantOf(workspace) or humanoid:GetState() == Enum.HumanoidStateType.Dead then
		return
	end
	
	if canDoubleJump and not hasDoubleJumped then
		hasDoubleJumped = true
		humanoid.JumpPower = oldPower * jump_multiplier
		humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
	end
end

local function characterAdded(new)
	character = new
	humanoid = new:WaitForChild("Humanoid")
	hasDoubleJumped = false
	canDoubleJump = false
	oldPower = humanoid.JumpPower
	
	humanoid.StateChanged:connect(function(old, new)
		if new == Enum.HumanoidStateType.Landed then
			canDoubleJump = false
			hasDoubleJumped = false
			humanoid.JumpPower = oldPower
		elseif new == Enum.HumanoidStateType.Freefall then
			wait(time_delay)
			canDoubleJump = true
		end
	end)
end

if player.Character then
	characterAdded(player.Character)	
end

player.CharacterAdded:connect(characterAdded)
UIS.JumpRequest:connect(onJumpRequest)