Hello, I am making a tycoon and have some weird complication, or perhaps it is a problem in my scripts. In my tycoon there are buttons that are dev products, when you step on them, they properly work, prompt a purchase, complete the purchase, and the assigned dropper or object appears. Apart from this, I created a gui shop to add on to the tycoon, which uses dev products as well. That's where everything broke. If I play the tycoon, I can only either purchase the cash/walkspeed/health boosts, or the dev objects in the tycoon, it depends which one I choose to do every play. What happens if I purchase cash, I then try to purchase the dev product objects, the transaction properly goes through, but the object doesn't appear. I've tried searching for the problem, but could not find it, or make the slightest sense of what it could be. However, when I delete the the main script of the shop gui to make sure it works and prompt the purchases which is in the serverscriptservices, the dev product objects work perfectly fine. Here are some scripts related to the dev products.
The local script inside the Shop GUI:
for i,v in pairs(script.Parent.Buttons:GetChildren()) do
if v:isA("TextButton") then
v.MouseButton1Click:connect(function()
pcall(function()
if v:FindFirstChild("Pass") then
game.MarketplaceService:PromptPurchase(game.Players.LocalPlayer,tonumber(v.Name))
else
game.MarketplaceService:PromptProductPurchase(game.Players.LocalPlayer,tonumber(v.Name))
end
end)
end)
end
end
The main script of the dev product shop gui (or the dev product handler) in servicescriptservice:
local MarketplaceService = game:GetService("MarketplaceService")
function getPlayerFromId(id)
for i,v in pairs(game.Players:GetChildren()) do
if v.userId == id then
return v
end
end
return nil
end
MarketplaceService.ProcessReceipt = function(receiptInfo)
local productId = receiptInfo.ProductId
local playerId = receiptInfo.PlayerId
local player = getPlayerFromId(playerId)
local productName
if productId == 51151679 then
productName = "$25,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 25000
end
elseif productId == 51151684 then
productName = "$50,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 50000
end
elseif productId == 51151691 then
productName = "$75,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 75000
end
elseif productId == 51151723 then
productName = "$100,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 100000
end
elseif productId == 51151734 then
productName = "$250,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 250000
end
elseif productId == 51151739 then
productName = "$500,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 500000
end
elseif productId == 51151758 then
productName = "$750,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 750000
end
elseif productId == 51151788 then
productName = "$1,000,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 1000000
end
elseif productId == 51151814 then
productName = "$5,000,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 5000000
end
elseif productId == 51151827 then
productName = "$10,000,000"
local cashmoney = game.ServerStorage.PlayerMoney:FindFirstChild(player.Name)
if cashmoney then
cashmoney.Value = cashmoney.Value + 10000000
end
elseif productId == 51152591 then
productName = "10 Walkspeed"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
human.WalkSpeed = human.WalkSpeed + 10
end
end
elseif productId == 51153173 then
productName = "30 Walkspeed"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
human.WalkSpeed = human.WalkSpeed + 30
end
end
elseif productId == 51153297 then
productName = "50 Health"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
human.MaxHealth = human.MaxHealth + 50
human.Health = human.Health + 50
end
end
elseif productId == 51153323 then
productName = "100 Health"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
human.MaxHealth = human.MaxHealth + 100
human.Health = human.Health + 100
end
end
elseif productId == 50163423 then
productName = "Hex Spitter"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
elseif productId == 50163462 then
productName = "Rapid Launch Blaster"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
elseif productId == 51071904 then
productName = "Super Ultra Gatling Laser Gun"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
elseif productId == 50652188 then
productName = "Super Ultra Mega Electric Dropper"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
elseif productId == 51071996 then
productName = "Super Ultraviolet Insta Kill Blaster"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
elseif productId == 49472555 then
productName = "Ultra Mega Dropper"
local char = player.Character
if char then
local human = char:FindFirstChild("Humanoid")
if human then
print("Check Complete")
end
end
end
game.BadgeService:AwardBadge(0)
local message = Instance.new("Hint",workspace)
message.Text = player.Name.." purchased "..productName.."!"
coroutine.resume(coroutine.create(function()
wait(2)
message:destroy()
end))
return Enum.ProductPurchaseDecision.PurchaseGranted
end
The dev product handler inside the actual tycoon model:
local Settings = require(script.Parent.Settings)
local Tycoon = script.Parent.Tycoons:GetChildren()[1]
script.Parent = game.ServerScriptService
local DevProducts = {}
local MarketplaceService = game:GetService('MarketplaceService')
for i,v in pairs(Tycoon:WaitForChild('Buttons'):GetChildren()) do
if v:FindFirstChild('DevProduct') then
if v.DevProduct.Value > 0 then
DevProducts[v.DevProduct.Value] = v
end
end
end
MarketplaceService.ProcessReceipt = function(receiptInfo)
for i,plr in pairs(game.Players:GetPlayers()) do
if plr.userId == receiptInfo.PlayerId then
if DevProducts[receiptInfo.ProductId] then
local obj = DevProducts[receiptInfo.ProductId]
local PlrT = game.ServerStorage.PlayerMoney:WaitForChild(plr.Name).OwnsTycoon
if PlrT.Value ~= nil then
local PlayerStats = game.ServerStorage.PlayerMoney:FindFirstChild(plr.Name)
Create({[1] = 0,[2] = obj,[3] = PlayerStats}, PlrT.Value.BuyObject)
end
end
end
end
end
function Create(tab, prnt)
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 = prnt
end
Hopefully one of you helpers can give me a guide or tell me what I'm doing wrong, thanks.
