So right now I have a local script in the PlayerScripts that says this:
local p = game.Players.LocalPlayer
p.CharacterAdded:Connect(function(c)
if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(p,2380022448) == true then
--item.Parent = player backpack
end
end)
Is it correct? I'm new to the UserOwnsGamePassAsnyc bit.

2 comments
You check their UserId. So p.UserId, and no need for the == true + you should do checks on the server as well as cloning toe tool on the server.
Thanks