Hey networking people, this may sound like an mmo question, and yes maybe it is, but I am doing it for science! Or at least considering it a project for next semester at my University.
You can skip the next three paragraphs if you just want to go to the question :)
So.. I'm very interested in alternative networking models especially the ones that don't trust their users! Recently I've been looking into ways of distributing (massive) multiplayer rpg servers. The current model I'm working on is based on splitting slow "macro" events from the faster "real time" events. I categorize the two by whether other players care or not. With the exception of chat, where people usually care, but a delay on a second or two shouldn't matter (maybe I'll leave that out and add a dedicated chat server (but not important now)).
Macro: Inventory management and skill management are not important in the faster aspects of the game, meaning users can do their changes locally, and later (1-3 seconds) sync with the macro server. This doesn't work too well with consumables, as their effects are usually needed asap. Therefore I want to add a tiny inventory to the real time part of the game - think Project Zomboid, where eating an apple takes less than a second if your'e holding it, but if it's in you backpac you need a second or two to unpack it first.
Real time: this is where the game is running. Every player have their active abilities, stats, current hp/enegy, and a few quick items such as weapon, consumables and other usable equipment. The point about only having a tiny inventory is that this the inventory in general is unnecessary information for the server, and I would rather keep the player footprint as small as possible.
And now to the interesting part. I would like to distribute the real time servers to the clients (who I do not trust). The idea is to have the clients do the real time actions and keep players in sync, but still be as stupid as I can possibly make them. What I want to do is to let the client servers report the game state to a trusted master server every x seconds. The master server will then verify (or pass randomly selected states on to a verification server) and calculate the next actions for the client server.
The actions from the master server should be instructions for what the client server must do. This should be in the form of direct instructions mixed with a state machine for individual interactive objects/AI. This could be in the form of "the seed for the random gen is xx + package id", loot for all dead creatures, if (creature reaches 30% life) {it will flee}
My question is whether this has been done before (or rather links to games/people who have done this or similar before)? And what you generally think of the idea?
I would also greatly appreciate links to article of not so similar models, if you think it would be to use for me.
/Jannek