Yes I know what that is, i just need a way to tackle the task at hand. I want to create a matchmaking system with this, and I was thinking about firing a server event from the client, if it was fired, publishasync, with the player’s name, somehow check anyone from the server also had this event fired, match them together, and teleport? Is this a good way to do this task, or should I handle it differently?
If you are beginner at MessagingService then I recommended start off with simple task such as sending message to another server and print it. Once you done this, slowly increase difficult and get better. Try to start off with simple, I am sure you will become better.
If you disagree above the message then here what you should do :
Bit complex way :
1. Send random player name using publish async
2. Add the player name into table
3. Loop the table and print player name
Simple way : (inspired from someone...)
1. Add all players in to the table (yes, all players in all server)
2. Use math.random to select random player name in the table
EDIT : Please note. I expect you have basic knowledge of scripting and knowing how to optimize thing such as reducing lag, script line, parts in workspace, etc…
Add all the players to a big table using messaging Service, pick 2 random people from it
That’s the simple way to do it
I love how u added it to ur reply lol
Tried this, got an error:
Here is the script, help?
local AoQ = game.ReplicatedStorage.AddtoQueue
local RFQ = game.ReplicatedStorage.RemoveFromQueue
local MessageService = game:GetService("MessagingService")
local TeleportService = game:GetService("TeleportService")
local PlayersToMatch = {}
local place = 10262480669
AoQ.OnServerEvent:Connect(function(player)
table.insert(PlayersToMatch, player)
MessageService:PublishAsync("ChosenPlayer", PlayersToMatch[math.random(#PlayersToMatch)])
end)
RFQ.OnServerEvent:Connect(function(player)
table.remove(PlayersToMatch, player)
end)
MessageService:SubscribeAsync("ChosenPlayer", function(player)
TeleportService:TeleportPartyAsync(place, {player.Data, PlayersToMatch[math.random(#PlayersToMatch)]})
end)
The error of the message say. Cannot publish ‘Instance’. Can only Publish ‘string’.
yeah i know but i do need to publish it to send it to the place, how can i work around it?
You mean send it to another game?
it is a problem?? i want to know how to FIX it
yes, publish the player and send to another game
I don’t think you can send it to another game. I will try to find a way to do it
ok, wb the actual error, how can i fix it?
Send player name. Not instance
Master Server // Cross Server MSS - Resources / Community Resources - DevForum | Roblox
for JobId, Server in pairs(Servers) do
DebugPrint("JobId: "..Server.JobId..", Players: "..#Server.Players..", Master: "..(Server.Master and "Y" or "N"))
-- Can access players with 'Server.Players'
end
- The server ‘obj’ contains .Players, .IsLocal, .Send(), .Shutdown(), .JobId, .FPS, .Master and .Runtime
- The player ‘obj’ contains .Age, .UserId, .Name, .Ping and .Connection
while true do
local ServersTable = {}
for _, Server in pairs(Servers) do
table.insert(ServersTable, Server)
end
if (#ServersTable < 2) wait(10) continue end
local AllPlayersDict = {}
for _, Server in pairs(ServersTable) do
for __, Player in pairs(Server.Players) do
AllPlayersDict[Player.UserId] = Player
end
end
local AllPlayersTable = {}
for _, Player in pairs(AllPlayersDict) do
table.insert(AllPlayersTable, Player)
end
if (#AllPlayersTable) < 2 then wait(10) continue end
local RandomIndex = math.random(1, #AllPlayersTable)
local RandomPlayer1 = AllPlayersTable[RandomIndex1]
table.remove(AllPlayersTable, RandomIndex)
RandomIndex = math.random(1, #AllPlayersTable)
local RandomPlayer2 = AllPlayersTable[RandomIndex1]
table.remove(AllPlayersTable, RandomIndex)
print(RandomPlayer1.Name.." (Ping: "..RandomPlayer1.Ping.." UserId: "..RandomPlayer1.UserId..")")
print(RandomPlayer2.Name.." (Ping: "..RandomPlayer2.Ping.." UserId: "..RandomPlayer2.UserId..")")
break
end
I tostringed it, and now it says Attempt to concatenate string with Instance
local AoQ = game.ReplicatedStorage.AddtoQueue
local RFQ = game.ReplicatedStorage.RemoveFromQueue
local MessageService = game:GetService("MessagingService")
local TeleportService = game:GetService("TeleportService")
local PlayersToMatch = {}
local place = 10262480669
AoQ.OnServerEvent:Connect(function(player)
table.insert(PlayersToMatch, player)
MessageService:PublishAsync("ChosenPlayer", tostring(PlayersToMatch[math.random(#PlayersToMatch)]))
end)
RFQ.OnServerEvent:Connect(function(player)
table.remove(PlayersToMatch, player)
end)
MessageService:SubscribeAsync("ChosenPlayer", function(player)
print("We have chosen"..player.Data.." vs. "..PlayersToMatch[math.random(#PlayersToMatch)])
end)
SERVICE:PublishAsync(player.Name)
player.Name is going to be the name of the local player tho
does this get everyone in a server and pick one or does it pick two people from the table?
gets two random players from ALL servers