ServerScriptService.ServerHandler:37: attempt to compare string <= number

Hello Everyone,
I’m trying to make a gun game with a little help with Alvin Blox’s sword fighting game series, I’m making the shop where you can buy a item and equip it, but it keeps saying the error above, any fixes will be great.

Script for serverhandle (I haven’t finished the whole series, but this part of the script does not work)

game.ReplicatedStorage:WaitForChild(“GetTools”).OnServerInvoke = function(player)
local items = {}

for _, object in pairs(game.ServerStorage:WaitForChild("Items"):GetChildren()) do
	local itemProperties = {object.Name,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 Credits = player.leaderstats.Credits
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
			-- Currency Unequipped
			game.ServerStorage.PlayerData[player.Name].Equipped.Value = itemName
			return "Equipped"
		else
			game.ServerStorage.PlayerData[player.Name].Equipped.Value = ""
			return "Unequipped"
		end 
	end
	
	if Credits.Value >= item.Price.Value then
		Credits.Value = Credits.Value - item.Price.Value
		
		local itemValue = Instance.new("ObjectValue")
		itemValue.Name = itemName
		itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
		
		return true
	else
		
		return "NotEnoughCredits"
	end
	
else
	return "NoItem"
end

end

Core Script:

– Core UI localscript

local availableTools = game.ReplicatedStorage:WaitForChild(“GetTools”):InvokeServer()
local mainFrame = script.Parent:WaitForChild(“MainFrame”)
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 shopButton = script.Parent:WaitForChild(“ShopButton”)
local buyButton = infoFrame.BuyButton
local equippedItemViewport = script.Parent:WaitForChild(“EquippedItemViewport”)
local itemViewport = itemInformation.ItemViewport

shopButton.MouseButton1Click:Connect(function()
mainFrame.Visible = not mainFrame.Visible
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("ToolModules"):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.Credits.Text = "Owned"
		infoFrame.BuyButton.Text = "Unequip"
	elseif owned == true then
		infoFrame.Credits.Text = "Owned"
		infoFrame.BuyButton.Text = "Equip"
	else
		infoFrame.BuyButton.Text = "Buy"
		infoFrame.Credits.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("ToolModules"):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 == “NotEnoughCredits” then
buyButton.BackgroundColor3 = Color3.fromRGB(204,31,31)
buyButton.Text = “Not Enough Credits”
wait(0.5)
buyButton.Text = “Buy”
buyButton.BackgroundColor3 = Color3.fromRGB(55,193,55)
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)

What exactly is Credits and Items? IntValue? StringValue? etc

Credits is the intvalue for my leaderstats, Items is a folder in the serverstorage which are the items im selling in the shop. Btw not the best script in the world so yea.

then what is Price?
image

the Price is a string value inside my items folder im selling on the shop

Ok that makes sense now. Since Price is a StringValue and Credits is an IntValue you can’t really compare them like just an example: 4 >= “Hello”. Wouldn’t make much sense. Can you show me the Price Value? (only one of them is ok)

image
I just realized it’s a string value do i need to change it into a number value for it to work?

Eh it really depends. NumberValue can store decimals. Like 3.5. IntValue’s don’t. It’s up to you. But I’d say IntValue is the better option.

Ok just tried at It worked perfectly! Thank you for helping out!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.