Two different remote functions are calling the same thing

Hello I am trying to equip tools from a players inventory into GUI using remote functions but I am some how calling a completely different function. I am using two different scripts and different variables and values but I keep getting an error: Price is not a valid member of Folder “ReplicatedStorage.ToolModels.Basic Crate Tools”. Price should only be for the store not the inventory.

game.ReplicatedStorage:WaitForChild("InventoryEvents"):WaitForChild("GetTools").OnServerInvoke = function()
	local Itemsz = {}

	for _, object in pairs(game.ServerStorage:WaitForChild("Items"):GetChildren())do
		for v, itemssssss in pairs(object:GetChildren()) do
			local itemPropertiezx = {itemssssss.Name}
			if not itemssssss:IsA("Tool") then
				--itemssssss :Destroy() destroys shop stuff for some reason
			end
			table.insert(Itemsz,itemPropertiezx)
		end
	end

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

game.ReplicatedStorage:WaitForChild("InventoryEvents"):WaitForChild("EquipItem").OnServerInvoke = function(Playerrr,ItemNames)
	local Item = game.ServerStorage.Items:FindFirstChild(ItemNames)
	local ItemTable = Item:GetChildren() 
	local ItemPicked = ItemTable[math.random(#ItemTable)]

	if game.ServerStorage.PlayerData[Playerrr.Name].Inventory:FindFirstChild(ItemNames) then
		if game.ServerStorage.PlayerData[Playerrr.Name].Equipped.Value ~= ItemPicked then
			-- currently unequipped
			game.ServerStorage.PlayerData[Playerrr.Name].Equipped.Value = ItemPicked 
			return "Equipped"
		else
			game.ServerStorage.PlayerData[Playerrr.Name].Equipped.Value = ""
			return "UnEquipped"
		end
	end

	return "NoItem"
end -- if itempicked end

Line of error:

	local handle = game.ReplicatedStorage:WaitForChild("ToolModels"):WaitForChild("Basic Crate Tools")[availableToolz[o][1]]:Clone()

You could try using the debugger to put breakpoints in your suspicious functions and step through them line-by-line to see what the variables all are at each step.

haha I forgot about the debugger

Your code is really obscure, no offense intended.
I rewrote the naming convention maybe you could derive some insight into best practices

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local InventoryEvents = ReplicatedStorage:WaitForChild("InventoryEvents")
local randomseed = math.randomseed

InventoryEvents:WaitForChild("GetTools").OnServerInvoke = function()
	
	local Items = {}
	
	local Storage = game.ServerStorage:WaitForChild("Items"):GetChildren()
	for i = 1, table.getn(Storage) do
		local substore = Storage[i]:GetChildren()
		for j = 1, table.getn(substore) do
			local item:Instance = substore[j]
			if not item:IsA("Tool") then
				item:Destroy() continue
			end
			
			table.insert(Items, item.Name)
		end
	end
	
	return Items	
end

InventoryEvents:WaitForChild("ItemCheck").OnServerInvoke = function(player:Player, itemname:string)
	local datafolder = game.ServerStorage.PlayerData:FindFirstChild(player.Name)
	return datafolder ~= nil and datafolder:FindFirstChild(itemname) ~= nil
end

InventoryEvents:WaitForChild("EquipItem").OnServerInvoke = function(player:Player, itemnames:table)
	local Item = game.ServerStorage.Items:FindFirstChild(itemnames)
	local ItemTable = Item:GetChildren()
	local picked = ItemTable[math.random(1, #ItemTable)]
	
	local datafolder = game.ServerStorage.PlayerData[player.Name]
	local exists = datafolder.Inventory:FindFirstChild(itemnames)
	if exists then
		if datafolder.Equipped.Value ~= picked then
			datafolder.Equipped.Value = picked
			return "Equipped"
		end

		datafolder.Equipped.Value = ""
        return "UnEquipped"
	end
	
	return "NoItem"	
end