I want to make a double jump gamepass. Here is the script! Please Tell me where I made a mistake!

local gamepassId = 12077225 --- whatever your gamepass id is
local mps = game:GetService("MarketplaceService")

game.Players.PlayerAdded:Connect(function(plr)
	if mps:UserOwnsGamePassAsync(plr.UserId,gamepassId)then

local UserInputService = game:GetService("UserInputService")

local localPlayer = game.Players.LocalPlayer

local character

local humanoid

 

local canDoubleJump = false

local hasDoubleJumped = false

local oldPower

local TIME_BETWEEN_JUMPS = 0.2

local DOUBLE_JUMP_POWER_MULTIPLIER = 2

 

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 * DOUBLE_JUMP_POWER_MULTIPLIER

		humanoid:ChangeState(Enum.HumanoidStateType.Jumping)

	end

end

 

local function characterAdded(newCharacter)

	character = newCharacter

	humanoid = newCharacter: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_BETWEEN_JUMPS)

			canDoubleJump = true

		end

	end)

end

 

if localPlayer.Character then

	characterAdded(localPlayer.Character)

end

 

localPlayer.CharacterAdded:connect(characterAdded)

UserInputService.JumpRequest:connect(onJumpRequest)