Why does the purchase prompt say "this item is not currently for sale"

local Objects = {}
local TeamColor = script.Parent.TeamColor.Value
local Settings = require(script.Parent.Parent.Parent.Settings)
local Money = script.Parent.CurrencyToCollect
local Debris = game:GetService(‘Debris’)
local Stealing = Settings.StealSettings
local CanSteal = true – don’t change or else you won’t be able to steal currency

script.Parent.Essentials.Spawn.TeamColor = TeamColor
script.Parent.Essentials.Spawn.BrickColor = TeamColor

function Sound(part,id)
	if part:FindFirstChild('Sound') then
		return
	else
		local Sound = Instance.new('Sound',part)
		Sound.SoundId = "rbxassetid://"..tostring(id)
		Sound:Play()
		delay(Sound.TimeLength, function()
			Sound:Destroy()
		end)
	end
end

--Parts that fall into the collector(s) get processed
for i,v in pairs(script.Parent.Essentials:GetChildren()) do
	if v.Name == "PartCollector" then
		v.Touched:connect(function(Part)
			if Part:FindFirstChild('Cash') then
				Money.Value = Money.Value + Part.Cash.Value
				Debris:AddItem(Part,0.1)
			end
		end)
	end
end

--Player Touched Collector processor
deb = false
script.Parent.Essentials.Giver.Touched:connect(function(hit)
	local player = game.Players:GetPlayerFromCharacter(hit.Parent)
	if player ~= nil then
		if script.Parent.Owner.Value == player then
			if hit.Parent:FindFirstChild("Humanoid") then
				if hit.Parent.Humanoid.Health > 0 then
					if deb == false then
						deb = true
						script.Parent.Essentials.Giver.BrickColor = BrickColor.new("Bright red")
						local Stats = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
						if Stats ~= nil then 
						Sound(script.Parent.Essentials, Settings.Sounds.Collect)
						Stats.Value = Stats.Value + Money.Value
						Money.Value = 0
						wait(1)
						script.Parent.Essentials.Giver.BrickColor = BrickColor.new("Sea green")
						deb = false
						end
					end
				end
			end
		elseif Stealing.Stealing then -- if player isn't owner and stealing is on
			if CanSteal == true then
				CanSteal = false
				delay(Stealing.PlayerProtection, function()
					CanSteal = true
				end)
				if hit.Parent:FindFirstChild("Humanoid") then
					if hit.Parent.Humanoid.Health > 0 then
						local Stats = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
						if Stats ~= nil then
							local Difference = math.floor(Money.Value * Stealing.StealPrecent)
							Sound(script.Parent.Essentials, Settings.Sounds.Collect)
							Stats.Value = Stats.Value + Difference
							Money.Value = Money.Value - Difference
						end
					end
				end
			else
				Sound(script.Parent.Essentials, Settings.Sounds.Error)
			end
		end
	end
end)

script.Parent:WaitForChild("Buttons")
for i,v in pairs(script.Parent.Buttons:GetChildren()) do
	spawn(function()
	if v:FindFirstChild("Head") then
		
		local ThingMade = script.Parent.Purchases:WaitForChild(v.Object.Value)
		if ThingMade ~= nil then
			Objects[ThingMade.Name] = ThingMade:Clone()
			ThingMade:Destroy()
		else
			--//Button doesn't have object, remove it
			error('Object missing for button: '..v.Name..', button has been removed')
			v.Head.CanCollide = false
			v.Head.Transparency = 1
			end
								
		if v:FindFirstChild("Dependency") then --// if button needs something unlocked before it pops up
			v.Head.CanCollide = false
			v.Head.Transparency = 1
			coroutine.resume(coroutine.create(function()
				if script.Parent.PurchasedObjects:WaitForChild(v.Dependency.Value) then
					if Settings['ButtonsFadeIn'] then
						for i=1,20 do
							wait(Settings['FadeInTime']/20)
							v.Head.Transparency = v.Head.Transparency - 0.05
						end
					end
					v.Head.CanCollide = true
					v.Head.Transparency = 0
				end
			end))
		end
		
		v.Head.Touched:connect(function(hit)
			local player = game.Players:GetPlayerFromCharacter(hit.Parent)
			if v.Head.CanCollide == true then
				if player ~= nil then
					if script.Parent.Owner.Value == player then
						if hit.Parent:FindFirstChild("Humanoid") then
							if hit.Parent.Humanoid.Health > 0 then
								local PlayerStats = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
								if PlayerStats ~= nil then
									if (v:FindFirstChild('Gamepass')) and (v.Gamepass.Value >= 1) then
										if game:GetService("MarketplaceService"):PlayerOwnsAsset(player,v.Gamepass.Value) then
											Purchase({[1] = v.Price.Value,[2] = v,[3] = PlayerStats})
										else
											game:GetService('MarketplaceService'):PromptPurchase(player,v.Gamepass.Value)
										end
									elseif (v:FindFirstChild('DevProduct')) and (v.DevProduct.Value >= 1) then
										game:GetService('MarketplaceService'):PromptProductPurchase(player,v.DevProduct.Value)
									elseif PlayerStats.Value >= v.Price.Value then
										Purchase({[1] = v.Price.Value,[2] = v,[3] = PlayerStats})
										Sound(v, Settings.Sounds.Purchase)
									else
										Sound(v, Settings.Sounds.ErrorBuy)
									end
								end
							end
						end
					end
				end
			end
		end)
		end
	end)
end

function Purchase(tbl)
	local cost = tbl[1]
	local item = tbl[2]
	local stats = tbl[3]
	stats.Value = stats.Value - cost
	Objects[item.Object.Value].Parent = script.Parent.PurchasedObjects
	if Settings['ButtonsFadeOut'] then
		item.Head.CanCollide = false
		coroutine.resume(coroutine.create(function()
			for i=1,20 do
				wait(Settings['FadeOutTime']/20)
				item.Head.Transparency = item.Head.Transparency + 0.05
			end
		end))
	else
		item.Head.CanCollide = false
		item.Head.Transparency = 1
	end
end

function Create(tab)
	local x = Instance.new('Model')
	Instance.new('NumberValue',x).Value = tab[1]
	x.Value.Name = "Cost"
	Instance.new('ObjectValue',x).Value = tab[2]
	x.Value.Name = "Button"
	local Obj = Instance.new('ObjectValue',x)
	Obj.Name = "Stats"
	Obj.Value = tab[3]
	x.Parent = script.Parent.BuyObject
end

--// This was very rushed and is inefficent; if you plan on making something like this don't use a child added listener.
script.Parent:WaitForChild('BuyObject').ChildAdded:connect(function(child)
	local tab = {}
	tab[1] = child.Cost.Value
	tab[2] = child.Button.Value
	tab[3] = child.Stats.Value
	Purchase(tab)
	wait(10)
	child:Destroy()
end)

That’s the entire code in the purchase handler.

The problem could be that you didn’t plug in the Gamepass ID into the value shown here that’s called "Gamepass" Did you do do that or no?

Yes I did that. I filled out all the stuff, I’m confused as the why it shows “item not currently for sale”

So I’m a bit confused. thats why,

14304673 <— Thats the ID of the gamepass.

And no the output didn’t say anything/

Maybe try deleting this? It could cause some issues.

Alright so I delete that? And what do I replace it with?

Just try the script out, see if it works. I’m not fairly sure what’s going on with the script.

I can’t find that in the code lol. Where is it?

Actually ignore that; look in the gamepass value and make sure that there aren’t any spaces or typos.

image

image

The value doesn’t have a typo, That’s why it makes no sense as to way this is happening.

So does anybody know maybe? I really need to figure this out.

Can anybody help me? I really have no idea what to do.

Make sure the script is correct and make sure it is in the correct place for example ‘ServerScriptService’.

If you did that and everything still doesn’t work try making a new gamepass and testing the button with that new gamepass.

If anything above doesn’t work then you’ll probably have to re-write the script.

1 Like

Okay, GamePass is not the problem, it is from the script, also, the model no longer works xd
I’ll fix it in a moment, the model is very old and has several flaws.

Tycoon.rbxl (56,5 KB)

image

You must change the value of the GamePass and what the player is going to buy must be in Purchases and must be a model, the value of the object must be the same name of the model that he is going to buy.

Example: For the GamePass 147 you will get an “Amazing Dropper”.

GamePass.Value = 147
Object.Value = "Amazing Dropper"
Purchases["Amazing Droper"]

Alright so do I have to change the Amazing dropper to what I want my item to be?

Wait never mind, I got it. Thank you so much.

You’re welcome, happy to help ^ - ^

1 Like