Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

attempt to concatenate string with nil. how to fix this?

local MarketplaceService = game:GetService("MarketplaceService")
local plr = game.Players.LocalPlayer

local ID = 111111--11925441
local BuyBtn = script.Parent.BuyBtn
local Cost = script.Parent.Cost
local ProductInfo = MarketplaceService:GetProductInfo(ID, Enum.InfoType.Product)
local Price = ProductInfo.PriceInRobux

BuyBtn.MouseButton1Click:Connect(function()
	MarketplaceService:PromptGamePassPurchase(plr, ID)
end)

if MarketplaceService:UserOwnsGamePassAsync(plr.UserId,ID) then
	BuyBtn.Visible = false
	Cost.Text = "Owned"
else
	BuyBtn.Visible = true
	Cost.Text = "R$"..Price
end

1 answer

✓ Accepted answer

Well first, PriceInRobux is nil in your case so doing

Cost.Text = "R$"..Price

is same as doing

Cost.Text = "R$"..nil

It can't work, to get PriceInRobux without it being nil you need to change line 7 from Enum.InfoType.Product to Enum.InfoType.GamePass so

local ProductInfo = MarketplaceService:GetProductInfo(ID, Enum.InfoType.GamePass)

Now it will get your PriceInRobux, but it will still error that you are trying to compensate number with string because

Cost.Text = "R$"..Price

is same as

Cost.Text = "R$"..300 -- for example

Which you also can't do, to fix this you can use 2 ways. First way is tostring:

Cost.Text = "R$"..tostring(PriceInRobux)

Which will convert given value into string. The second way is using string.format:

Cost.Text = string.format("R$ %d", PriceInRobux)

About string patterns here, Basically %d is pattern for numbers so it takes second argument which is PriceInRobux and formats it into the %d pattern so the result should be R$ 300 (Not 300 but PriceInRobux). This might not work as i have no idea what i am doing i haven't used MarketplaceService since 2019. If it did not help, don't accept it as an answer.

This discussion is preserved as it was. New answers, comments, and votes are closed.