Hello, im quite new to roblox programming. I made a matchmaking script (i took inspiration from CB:RO matchmaking that i've seen on youtube). Everything is fine, but the teleportation to my other game is not working and showing me that error: Unable to cast value to Objects

I tried to figure it for whole day but with no positive results. Here is my MM code:

eloData = game:GetService("DataStoreService"):GetDataStore("Elo")
UpdateRate = 3
GAME_ID = 7298612208
--///////////////////////////////////////////////////////////////////////////
local TPS = game:GetService("TeleportService")
local moduleScript = script:WaitForChild("ModuleScript")
local _M = require(moduleScript)
function genRank(elo)
	
end
function game.ReplicatedStorage.RequestInfo.OnServerInvoke(player)
	local PrimaryMap = script.Parent.Primary.Value
	return PrimaryMap
end

local playersInQueue = {}
local JoinQueueQueue = {}

function game.ReplicatedStorage.JoinQueue.OnServerInvoke(Player)
	local PlayerData = {
		PlayerObj = Player;
		PlayerName = "";
		Elo = 0;
		Range = 50;
		matched = false;
	}
	PlayerData["Elo"] = 25 --eloData:GetAsync(tostring(Player.userId))
	PlayerData["PlayerName"] = Player.Name
	table.insert(JoinQueueQueue, 1, PlayerData)
	
end
function game.ReplicatedStorage.LeaveQueue.OnServerInvoke(Player)
	local PlayerData = {
		PlayerObj = Player;
		PlayerName = "";
		Elo = 0;
		Range = 50;
		matched = false;
	}
	PlayerData["Elo"] = 25 --eloData:GetAsync(tostring(Player.userId))
	PlayerData["PlayerName"] = Player.Name
	table.remove(playersInQueue, 1, PlayerData)
	if #Matches > 0 then
		for i=1, #Matches do
			table.remove(Matches, 1, PlayerData)
		end
	end
end
Matches = {}
while true do
	print("Matchmaking tick")
	local function CreateMatch(FirstPlayer)
		print(FirstPlayer["PlayerName"])
		print("Creating new match!")
		local NewMatch = {}
		NewMatch["Average"] = FirstPlayer["Elo"]
		--print(tostring(FirstPlayer["Elo"]))
		NewMatch["Range"] = 50
		FirstPlayer["matched"] = true
		table.insert(NewMatch, 1, FirstPlayer)
		table.insert(Matches, 1, NewMatch)
	end
	wait(UpdateRate)
	print("Players in JoinQueueQueue = "..#JoinQueueQueue)
	if #JoinQueueQueue > 0 then
		for i=1, #JoinQueueQueue do
			print("Transfered "..JoinQueueQueue[i]["PlayerName"].." into a queue")
			print("Index = "..tostring(i))
			table.insert(playersInQueue, 1, JoinQueueQueue[i])
			JoinQueueQueue[i] = nil
		end
	end
	print("playersInQueue = "..#playersInQueue)
	game.ReplicatedStorage.playersInQueue.Value = #playersInQueue
	if #playersInQueue > 0 then
		for i=1, #playersInQueue do
			if playersInQueue[i]["matched"] == false then
				if #Matches ~= 0 then
					for i_2=1,#Matches do
						local Diff = Matches[i_2]["Average"] - playersInQueue[i]["Elo"]
						if Diff < 0 then
							Diff = Diff * -1
						end
						if Matches[i_2]["Range"] >= Diff then
							--moze grac
							print("Gracz kwalifikuje sie do gry")
							table.insert(Matches[i_2], 1, playersInQueue[i])
							playersInQueue[i]["matched"] = true
							break
						end
					end
				else	
					CreateMatch(playersInQueue[i])
				end
			end
		end
	end
	print("Amount of matches = "..#Matches)
	if #Matches > 0 then
		for i=1, #Matches do
			--if #Matches[i] == 0 then Matches[i] = nil end
			Matches[i]["Range"] = Matches[i]["Range"] + 2
			if #Matches[i] == 1 then
				game.ReplicatedStorage.isMatch.Value = true
				print("Utworzono mecz!")
				TPS:TeleportAsync(GAME_ID, Matches[i])
				--print("----"..tostring(playersInQueue[i]["PlayerName"]))
			end
		end
	end
end