I am interested to know your opinion about this topic.
First a brief story about game structure:
It is going to be a multiplayer RPG. Players can host games or request to join other games. A game consists of multiple levels and around 5 players (it can be more or less). Each game going to have its own physics space, …
There can be MANY games running simultaneously.
As I am not sure how the user base will grow up and how many game instances can be handled in a VPS/Cloud simultaneously (considering it should run the physics,…) and how many VPS/Cloud I will end up to need and how much they will end up to cost.
So I thought If possible I let players be able to host games locally on nat to take out the pressure and cost of running game servers on own VPS/Cloud.
So after a user purchases game, he can hosts a game server and register it on master server so other players around the world can see it and request to join it.
Doing so will open the gates for cheatings. A hacked game server can decompile code, modify entity data and increase/decrease stats and I won’t be able to do anything about it and that’s fine I can yet let other users report a suspicious server and I can flag that server so it will up to a player to take the risk and join to that server or not.
But there is one more thing, I want to be able to prevent an unpaid server from being able to host other players.
Ok, the simplest way is to do it on the master server and do not let an unpaid server to register it’s addresses so other players won’t be able to see it, but a hacked client can bypass this and instead of asking the list from the master server, get it from an unknown source.
So I thought one way might be to take out one of the systems that the game server needs and run it as a JME RMI service from a VPS. So there I can check if the game server is not registered I can simply reject it.
One such system that can be run as service and does not need an update loop is PlotSystem that controls how the game story reveals. It receives events from the game server like quest event (i.e quest completed), dialog events (i.e dialog option selected), … and responses by sending commands to the game server. (i.e activate another quest, add component X to an entity of type Y, …)
Do you think this is a good idea? Do you have other ideas?