Problem
As a Roblox developer, it is currently too hard to pass messages between experiences and/or universes.
Use Cases
Although the following use cases are presented, there are more use cases that I can think of.
Use Case 1
This use case involves cross-game chat. One such a scenario would entail a player opening a support ticket in game which a message is sent to a different game in which all the players are moderators. Within that game, the ticket is assigned to a moderator (game master) and the game master opens a chat with the player. The chat system would be a custom implementation. All these messages are not just cross server, but also cross experience/universe. This would allow for a moderator to help a player without having to log into the specific server that the player is in.
Use Case 2
Using a custom chat system as was described in case 1 above, commands can be sent to specific game servers to perform actions on that server.
One such action would be to kick a player. A command such as /kick <player name>
would be sent to all servers in all games to kick that one player no matter what game they are in.
Another action would be to locate a player. If a moderator chooses to join the player in game, they would need to locate the server the player is logged into. A command such as /teleport2player <player name>
would launch a query to all active servers across all games. The server that has the player responds with it’s game.GameId
, game.PlaceId
, and game.JobId
. Then the teleport service can be used to teleport the moderator to that specific server, if there is room.
Additional Information
Currently, the only way to do this involves the use of Cloud APIs and sending the message off the Roblox platform and then looping the message back to the Roblox platform with the new destination This method creates additional headaches with security and reliability. The big issue here is once the message leaves the platform, Roblox has lost control of it. Additionally, since security is an issue, if the external server is compromised, the messages can be manipulated before being sent back causing havoc.
Proposed Solution
One implementation that I thought of is utilizing the current MessagingService API to send messages across experiences and/or universes.
You would have a web interface for the specific global message topic in which one could add or remove the experiences which are allowed to access it, similar to the current sound permissions. Unlike the sound permissions, you can revoke access for security reasons. This would also allow the creation and deletion of said topic. You would have to create the topic first in the web interface to use it. Upon creation, you would be given a system generated identifier for that specific topic. The identifiers are unique across the platform.
Within the experiences you subscribe to the global topic as you would any other topic. This allows for the use of existing code patterns to implement message responders.
Conclusion
If Roblox is able to address this issue, it would improve my development experience because then I can have one game that is specific to moderators who can watch over many games from one location. Furthermore, this also increases security since messages are not leaving the Roblox platform which eliminates a point of vulnerability.