Script not working for shop gui

So I am figuring out how to make currency work on this but the script is being weird
I want it to puchase a item for the right currency and its not working right i was thinking of putting 2 ends of the parts like this

if item.Currency.Value == "PumpkinCoins" then
					if pumpkin.Value >= item.Price.Value then
						pumpkin.Value = pumpkin.Value - item.Price.Value
		
			local itemValue = Instance.new("ObjectValue")
					itemValue.Name = itemName
				itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
	end
end
				if item.Currency.Value == "Gears" then
			if gears.Value >= item.Price.Value then
				gears.Value = gears.Value - item.Price.Value

				local itemValue = Instance.new("ObjectValue")
				itemValue.Name = itemName
						itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
end
end

but it won’t work but i am thinking it was in the handler script but i might put both scripts that i might have problem on

--handler script
game.ReplicatedStorage:WaitForChild("GetTools").OnServerInvoke = function(player)
	local items = {}

	for _, object in pairs(game.ServerStorage:WaitForChild("Items"):GetChildren()) do
		local itemProperties = {object.Name,object.Currency.Value..": "..object.Price.Value}
		table.insert(items,itemProperties)
	end

	return items
end

game.ReplicatedStorage:WaitForChild("ItemCheck").OnServerInvoke = function(player,itemName)
	if game.ServerStorage.PlayerData:FindFirstChild(player.Name).Inventory:FindFirstChild(itemName) then
		return true
	else
		return false
	end
end

game.ReplicatedStorage:WaitForChild("PurchaseItem").OnServerInvoke = function(player,itemName)
	local gears = player.leaderstats.Gears
	local pumpkin = player.leaderstats.PumpkinCoins
	local item = game.ServerStorage.Items:FindFirstChild(itemName)

	if item then
		-- Item exists
		if game.ServerStorage.PlayerData[player.Name].Inventory:FindFirstChild(itemName) then
			if game.ServerStorage.PlayerData[player.Name].Equipped.Value ~= itemName then
				-- Currently unequipped
				game.ServerStorage.PlayerData[player.Name].Equipped.Value = itemName
				return "Equipped"
			else
				game.ServerStorage.PlayerData[player.Name].Equipped.Value = ""
				return "Unequipped"
			end
		end	
		if item.Currency.Value == "PumpkinCoins" then
					if pumpkin.Value >= item.Price.Value then
						pumpkin.Value = pumpkin.Value - item.Price.Value
		
			local itemValue = Instance.new("ObjectValue")
					itemValue.Name = itemName
				itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
	
				if item.Currency.Value == "Gears" then
			if gears.Value >= item.Price.Value then
				gears.Value = gears.Value - item.Price.Value

				local itemValue = Instance.new("ObjectValue")
				itemValue.Name = itemName
						itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
					end
				return true
			else

				return "NotEnoughPumpkinCoins"
			end
		else
			return "NotEnoughGears"
		end
	else
	return "NoItem"
	end
end
end
--Core script (shop)


-- Core UI localscript

local availableTools = game.ReplicatedStorage:WaitForChild("GetTools"):InvokeServer()
local mainFrame = script.Parent:WaitForChild("ShopGUI")
local safeArea = mainFrame:WaitForChild("SafeArea")
local itemInformation = safeArea:WaitForChild("ItemInformation")
local infoFrame = itemInformation.InfoFrame
local selectedItem = itemInformation.SelectedItem
local equippedItem = itemInformation.EquippedItem
local numberOfItems = #availableTools

local itemFrame = safeArea.ItemFrame

local buyButton = infoFrame.BuyButton
local equippedItemViewport = script.Parent:WaitForChild("EquippedItemViewport")
local itemViewport = itemInformation.ItemViewport


game.ReplicatedStorage.SendEquipped.OnClientEvent:Connect(function(equipped)
	equippedItem.Value = equipped
	if equippedItem.Value ~= "" then
		local fakeCam = Instance.new("Camera")
		fakeCam.Parent = equippedItemViewport
		local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):FindFirstChild(equippedItem.Value.."Handle"):Clone()
		handle.Parent = equippedItemViewport
		equippedItemViewport.CurrentCamera = fakeCam
		fakeCam.CFrame = handle.CameraCFrame.Value
	end
end)



local PADDING_X = 0.02
local DROPDOWN_Y = 0.2
local DROPDOWN_X = 0.25

local item1 = itemFrame:WaitForChild("Item1")

local box
local numRows = 1

for i = 1,numberOfItems,1 do
	
	if i == 1 then
		box = item1
	else
		
		box = item1:Clone()
		box.Name = "Item"..i
		box.Parent = itemFrame
		
		
		if(i-1) / (4*numRows) == 1 then
			-- New row
			numRows = numRows + 1
			box.Position = UDim2.new(PADDING_X,0,box.Position.Y.Scale,0) + UDim2.new(0,0,DROPDOWN_Y*(numRows - 1))
		else
			-- Add to the X only
			box.Position = itemFrame["Item"..(i-1)].Position + UDim2.new(DROPDOWN_X,0,0,0)
		end
	
	end
	
	
	box.MouseButton1Click:Connect(function()
		for _, v in pairs(itemViewport:GetChildren()) do
			if not v:IsA("Frame") then
				v:Destroy()
			end
		end
		
		local itemViewportCam = Instance.new("Camera")
		itemViewportCam.Parent = itemViewport
		
		local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):FindFirstChild(availableTools[i][1].."Handle"):Clone()
		handle.Parent = itemViewport
		
		itemViewport.CurrentCamera = itemViewportCam
		itemViewportCam.CFrame = handle.CameraCFrame.Value
		local owned = game.ReplicatedStorage.ItemCheck:InvokeServer(availableTools[i][1])
	
		if equippedItem.Value == availableTools[i][1] then
			infoFrame.Cash.Text = "Owned"
			infoFrame.BuyButton.Text = "Unequip"
		elseif owned == true then
			infoFrame.Cash.Text = "Owned"
			infoFrame.BuyButton.Text = "Equip"
		else
			infoFrame.BuyButton.Text = "Buy"
			infoFrame.Cash.Text = ""..availableTools[i][2]
		end
		
		infoFrame.ItemName.Text = availableTools[i][1]
		selectedItem.Value = availableTools[i][1]
		
		for _, v in pairs(itemFrame:GetChildren()) do
			if v:IsA("ImageButton") then
				v.BorderSizePixel = 0
			end
		end
		
		itemFrame["Item"..i].BorderSizePixel = 2
		
	end)
	
	local fakeCam = Instance.new("Camera")
	fakeCam.Parent = box.VPF
	local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):FindFirstChild(availableTools[i][1].."Handle"):Clone()
	handle.Parent = box.VPF
	box.VPF.CurrentCamera = fakeCam
	fakeCam.CFrame = handle.CameraCFrame.Value
	itemFrame["Item"..i].ItemName.Text = availableTools[i][1]
	
end


buyButton.MouseButton1Click:Connect(function()
	local result = game.ReplicatedStorage.PurchaseItem:InvokeServer(selectedItem.Value)
	if result == true then
		buyButton.BackgroundColor3 = Color3.fromRGB(42, 149, 42)
		buyButton.Text = "Bought!"
		wait(0.5)
		buyButton.Text = "Equip"
		buyButton.BackgroundColor3 = Color3.fromRGB(55, 193, 55)
	elseif result == "NotEnoughGears" then
		buyButton.BackgroundColor3 = Color3.fromRGB(204, 31, 31)
		buyButton.Text = "Not Enough Gears!"
		wait(0.5)
		buyButton.Text = "Buy"
		print("Can't Buy This with Gears")
		buyButton.BackgroundColor3 = Color3.fromRGB(55, 193, 55)
	elseif result == "NotEnoughPumpkinCoins" then
		buyButton.BackgroundColor3 = Color3.fromRGB(204, 31, 31)
		buyButton.Text = "Not Enough PumpkinCoins!"
		wait(0.5)
		buyButton.Text = "Buy"
		buyButton.BackgroundColor3 = Color3.fromRGB(55, 193, 55)
		print("Can't Buy This with Pumpkin Coins")
	elseif result == "Equipped" then
		equippedItem.Value = selectedItem.Value
		buyButton.BackgroundColor3 = Color3.fromRGB(42, 149, 42)
		buyButton.Text = "Equipped!"
		wait(0.5)
		buyButton.Text = "Unequip"
		buyButton.BackgroundColor3 = Color3.fromRGB(55, 193, 55)
	elseif result == "Unequipped" then
		equippedItem.Value = ""
		buyButton.BackgroundColor3 = Color3.fromRGB(42, 149, 42)
		buyButton.Text = "Unequipped"
		wait(0.5)
		buyButton.Text = "Equip"
		buyButton.BackgroundColor3 = Color3.fromRGB(55, 193, 55)
		end
end)


if equippedItem.Value ~= "" then
	local fakeCam = Instance.new("Camera")
	fakeCam.Parent = equippedItemViewport
	local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):FindFirstChild(equippedItem.Value.."Handle"):Clone()
	handle.Parent = equippedItemViewport
	equippedItem.CurrentCamera = fakeCam
	fakeCam.CFrame = handle.CameraCFrame.Value
end

equippedItem:GetPropertyChangedSignal("Value"):Connect(function()
	if equippedItem.Value ~= "" then
		
		for _, v in pairs(equippedItemViewport:GetChildren()) do
			if not v:IsA("Folder") then
				v:Destroy()
			end
		end
			
		local fakeCam = Instance.new("Camera")
		fakeCam.Parent = equippedItemViewport
		local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):FindFirstChild(equippedItem.Value.."Handle"):Clone()
		handle.Parent = equippedItemViewport
		equippedItemViewport.CurrentCamera = fakeCam
		fakeCam.CFrame = handle.CameraCFrame.Value
	else
		for _, v in pairs(equippedItemViewport:GetChildren()) do
			if not v:IsA("Folder") then
				v:Destroy()
			end
		end
	end	
end)

Video of problem:

Is there an error in the output? Errors can elaborate on what’s wrong. I don’t really understand what the issue is

1 Like

there is no output error for these scripts but the problem is it keep saying cant buy this item even though i had enough of the currency