Datastore/Value can't be loaded on specific function?

So, I was making a script that would assign you to a reserved server code but I’m having problems getting that code in the codeTeleport. I wanna know why the onPlayerAdded Function can get the code but the codeTeleport Function can’t.

Error

Script

local TeleportService = game:GetService("TeleportService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ShopDataStore = DataStoreService:GetDataStore("ShopCode")
local TeleportPlayer = ReplicatedStorage.Events:WaitForChild("TeleportPlayer")

local shopPlaceId = 7301251769

local function onPlayerAdded(Player)
	local shopCode
	
	local getSuccess, getError = pcall(function()
		shopCode = ShopDataStore:GetAsync(Player.UserId)
	end)
	
	if getSuccess then
		print("Success! Data received.")
		
		if shopCode then
			print("Player has data! Code is: "..shopCode)
			
		else
			print("Player has no data. Creating shop code..")
			
			local updateSuccess, updateError = pcall(function()
				
				local newShop = TeleportService:ReserveServer(shopPlaceId)
				
				ShopDataStore:SetAsync(Player.UserId, newShop)
				shopCode = ShopDataStore:GetAsync(Player.UserId)
				
			end)
			
			if updateSuccess then
				print("Player now has data! Code is: "..shopCode)
			else
				warn(updateError)
				Player:Kick("\nFailed to store data! Please rejoin.\n\nError:\n"..updateError)
			end
			
			
			
		end
		
	else
		warn(getError)
		Player:Kick("\nFailed to get data! Please rejoin.\n\nError:\n"..getError)
	end
	
end


local function codeTeleport(Player, PlayerToTeleport)
	local shopCode = nil
	local PlayerID = nil
	
	local playerSuccess, playerError = pcall(function() PlayerID = Players:GetUserIdFromNameAsync(Player) end)
	
	local getSuccess, getError = pcall(function()
		shopCode = ShopDataStore:GetAsync(PlayerID)
	end)
	
	if getSuccess then
		print(shopCode)
		TeleportService:TeleportToPrivateServer(shopPlaceId, shopCode, {PlayerToTeleport})
	else

	end
end

game.Players.PlayerAdded:Connect(onPlayerAdded)
TeleportPlayer.OnServerEvent:Connect(codeTeleport)

What exactly are you passing in from the client side? :thinking: That seems to be your issue, whenever you call FireServer()

script.Parent.SomeonesShop.MouseButton1Click:Connect(function()
	TeleportPlayer:FireServer(game.Players.LocalPlayer.UserId, script.Parent.TextBox.Text)
end)

I think this is how to handle it

Whenever you call OnServerEvent, of course the Player that fired it is the first parameter (So we have 1 parameter on the Server Side, but none on the Client so far), and then afterwards we can go ahead & get our arguments from the client side (As long as we have the equal amounts)

I am unsure though as to why you’re passing the Player’s UserId, when you could just reference it like this:

--Server Side codeTeleport function
local function codeTeleport(Player, PlayerToTeleport)
	local shopCode = nil
	local PlayerID = nil
	local OtherPlayer = game.Players:FindFirstChild(PlayerToTeleport)

	local playerSuccess, playerError = pcall(function() PlayerID = Players:GetUserIdFromNameAsync(Player.UserId) end)
	
	local getSuccess, getError = pcall(function()
		shopCode = ShopDataStore:GetAsync(PlayerID)
	end)
	
	if getSuccess and OtherPlayer then
		print(shopCode)
		TeleportService:TeleportToPrivateServer(shopPlaceId, shopCode, {PlayerToTeleport})
	else

	end
end

game.Players.PlayerAdded:Connect(onPlayerAdded)
TeleportPlayer.OnServerEvent:Connect(codeTeleport)
--Client Side
script.Parent.SomeonesShop.MouseButton1Click:Connect(function()
	TeleportPlayer:FireServer(script.Parent.TextBox.Text)
end)

You may also wanna check that the Player that entered something inside a TextBox is a valid player or not

Maybe I should clarify that this is a single-player game, PlayerToTeleport is LocalPlayer and also Player is what reserved server PlayerToTeleport wants to go to. My mind has been really cloudy lately, sorry for that :disappointed:

Edit: The text box has a Players name that is turned into their UserId to give to ShopDataStore:GetAsync(PlayerID) witch returns the reserved server code.

I fixed it… somehow [filler] [filler]