Greetings,
I've been making a shop gui with some gamepasses in, and it should detect if it's a gamepass or not. The problem is that I get an error and I don't know how to solve it. Here are the scripts:
Leaderstats & Events script
local MarketPlaceService = game:GetService("MarketplaceService")
local player = game.Players.LocalPlayer
local HasGamepass
game.Players.PlayerAdded:Connect(function(plr)
local leaderstats = Instance.new("Folder",plr)
leaderstats.Name = "leaderstats"
local Coins = Instance.new("IntValue",leaderstats)
Coins.Name = "Coins"
Coins.Value = 10000
end)
game.ReplicatedStorage.GetInfo.OnServerInvoke = function(player,name)
return game.ServerStorage.ShopItems[name].Coins.Value,game.ServerStorage.ShopItems[name].IsGamepass.Value,game.ServerStorage.ShopItems[name].GamepassID.Value
end
game.ReplicatedStorage.CheckSale.OnServerInvoke = function(player,name,boolGamepass,gamepassId)
local price = game.ServerStorage.ShopItems[name].Coins.Value
if player.leaderstats.Coins.Value >= price then
if boolGamepass == true then
local Pass,Error = pcall(function()
HasGamepass = MarketPlaceService:UserOwnsGamePassAsync(player.UserId,gamepassId)
end)
if not Pass then
error("Failed while checking if player owned gamepass: "..Error)
end
if HasGamepass == false then
print(player.UserId,gamepassId)
MarketPlaceService:PromptGamePassPurchase(player.UserId,gamepassId)
elseif HasGamepass == true then
game.ServerStorage.ShopItems[name][name]:Clone().Parent = player.Backpack
game.ServerStorage.ShopItems[name][name]:Clone().Parent = player.StarterGear
end
elseif boolGamepass == false then
game.ServerStorage.ShopItems[name][name]:Clone().Parent = player.Backpack
end
return true
else
return false
end
end
Select Gun Script
local MarketPlaceService = game:GetService("MarketplaceService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local ToolNameText = script.Parent.ToolName
local ToolNameDesc = script.Parent.Description
local Information = script.Parent.Parent.Parent.Parent.Information
ToolNameText.Text = tostring(ToolNameText.ToolName.Value)
ToolNameDesc.Text = "Description: " .. tostring(ToolNameDesc.Description.Value)
script.Parent.MouseButton1Click:Connect(function(player)
local Price,BoolGamepass,GamepassID = ReplicatedStorage.GetInfo:InvokeServer(tostring(ToolNameText.ToolName.Value))
if Price ~= nil then
Information.ToolName.Text = tostring(ToolNameText.ToolName.Value)
if BoolGamepass == true then
Information.ToolPrice.Text = "Gamepass: " .. Price .. " R$"
ReplicatedStorage.BuyProcess:Fire(ToolNameText.ToolName.Value,Price,BoolGamepass,GamepassID)
elseif BoolGamepass == false then
Information.ToolPrice.Text = tonumber(Price)
ReplicatedStorage.BuyProcess:Fire(ToolNameText.ToolName.Value,Price,BoolGamepass)
end
end
end)
Buy with Rubles Script
local MarketPlaceService = game:GetService("MarketplaceService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Information = script.Parent.Parent
local ToolNameText = Information.ToolName.ProductName
local ToolNameDesc = Information.ToolPrice.ProductPrice
ReplicatedStorage.BuyProcess.Event:Connect(function(name,price)
repeat wait(0.1) until script.Parent.MouseButton1Click
script.Parent.MouseButton1Click:Connect(function(player)
local Success = ReplicatedStorage.CheckSale:InvokeServer(name,nil,nil)
if Success == true then
print("Purchase success!")
elseif Success == false then
print("Not enough money!")
end
end)
end)
Buy with Robux script
local MarketPlaceService = game:GetService("MarketplaceService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Information = script.Parent.Parent
local ToolNameText = Information.ToolName.ProductName
local ToolNameDesc = Information.ToolPrice.ProductPrice
local player = game.Players.LocalPlayer
local HasGamepass = false
ReplicatedStorage.BuyProcess.Event:Connect(function(toolName,price,boolGamepass,gamepassId)
repeat wait(0.1) until script.Parent.MouseButton1Click
script.Parent.MouseButton1Click:Connect(function()
if gamepassId == nil then
local Success = ReplicatedStorage.CheckSale:InvokeServer(toolName)
if Success == true then
player.leaderstats.Coins.Value = player.leaderstats.Coins.Value - price
ServerStorage.ShopItems[toolName][toolName]:Clone().Parent = player.Backpack
elseif Success == false then
print("Not enough money!")
end
elseif gamepassId ~= nil then
print(player.UserId.." - "..gamepassId)
local Pass,Error = pcall(function()
HasGamepass = MarketPlaceService:UserOwnsGamePassAsync(player.UserId,gamepassId)
end)
if not Pass then
error("Failed while checking if player owned gamepass: "..Error)
end
print(toolName,boolGamepass,gamepassId)
local Success = ReplicatedStorage.CheckSale:InvokeServer(toolName,boolGamepass,gamepassId)
if Success == true then
print("Purchase success!")
elseif Success == false then
print("Not enough money!")
end
end
end)
end)
If you need the hierarchy of the gui and everything, ask me in the comments.

6 comments
What line and what script is the error happening in? Try to post code only relevant to the problem.
It errors in line 34, in the leaderstats script.
PromptGamePassPurchase ( Instance player , int64 gamePassId ) - your first argument at line 34 is a number (player.UserId). This method requires a Player object, not a number.
MarketPlaceService:PromptGamePassPurchase(player, gamepassId)
I see
Now the error is "Unable to cast Instance to int64"