Advertisement

A MMOG network model - will THIS idea work?

Started by September 05, 2002 01:47 AM
5 comments, last by Timbo_M45 22 years, 5 months ago
I am designing a MMOG (not really an RPG, its a little faster moving in terms of combat etc. more arcade style, top-down view). Anyways, I wanted to figure out a way of handling the game''s network without taxing the server too much because for the time being my server wont be anything more then a moderate PC on 2 T1 lines. Here''s my idea, in step-by-step form so it is easy to read: 1 - Every X number of minutes, the server generates a new security key (a long integer value), and this key is transmitted to all connected players. 2 - Each connected player constantly sends their locational information to the server, just their coordinates, not their direction and velocity. (All transmitted information is encrypted using the current network securty key to prevent cheating) 3 - The server determines which players are in each other''s "scopes" (a SCOPE meaning close enough to a player that its almost on their screen or is on their screen. Thus if Player A is in the scope of Player B they have the potential to influence each other), if two players are in each other''s scope (and they weren''t before) the server tells both clients that they are close to each other. If they used to be in-scope and they now are not, the server notifys both clients of that aswell. 4 - The clients in question then send locational, character, and tactical data to each other directly (location, direction, velocity [so the clients can interpolate positions], aswell as weapons fireing information etc.) NOTE: Each client has 2 sockets, one TCP protocal socket to the server, and one UDP protocal socket used to transmit data to "in-scope" players. All transmissions are encrypted using the current network encryption-key. This is my idea of howto conserve server bandwidth, and increase server cycles. Bandwidth problems between clients will be handled via server monitoring (EG - The server pings each player once every 2 minutes, if a player''s ping drops below a certain amount, and this occurs multiple timess, the player is booted). I would appreciate any feedback about this network design. If this has been done before (which I''m sure it has) I would like to know more about existing implimentations of this type of network model.
The combination of the host model and the peer-to-peer model is an interesting one. It has a few drawbacks:

The privacy advantages of the host model are negated.

It puts far too much trust in the client. What''s to keep a hacked client from reporting exact info to the other player incorrectly? The encryption key you described might make things a bit more complex, but trusting a remote client to act properly is a theoretical impossibility.

You''ll start running into all sorts of freaky latency issues when packets start arriving at clients from different players at different times. Even a few centiseconds of difference could cause update issues an order of magnitude more complex than what games already handle.

If full information is not transmitted to the server, it becomes very difficult to detect cheating.

Just my thoughts. Your idea definitely deserves some consideration.



Don''t listen to me. I''ve had too much coffee.
Advertisement
It''s very dangerous ... If all information are stored in the remote client ...

When you begin fighting with him ... you may find the swordman level 999 speed 1800 ...
// iWat::i Write a technology//
Could''nt you just make everyone the same level and make the game more about the story. I am not into theses games and my comment no doubt shows it but this seems to be an issue from what I have read on posts on the forum. if this can be exploited surely making everyone have the same levels of skills etc, would make for a more tactical battles. but back to the idea for the server I think it''s a good idea.
My game doesn''t have a LEVEL system, everyone is the same level, the only things that really change are the weapons that people have. Like i said before, this is more like a massive multiplayer birds-eye-view shoot-em-up game. So whether you hit someone or not depends on your skill of aiming you''re players guns and firing. The amount of damage that is done is determined by the type of weapon you use, and the type of shields the player has.

I am sick of the thousands and thousands of MMORPGs that all have the same setting, and same type of objectives. They all seem to take place in midevil ages with mages, warriors and traders, etc. I am more interested in newer concepts such as Westwood''s upcomming Earth and Beyond (http://www.earthandbeyond.com) - which takes place in the future, and you control a starship, not a knight. It''s original.. My game concept is also original, at least I haven''t seen it done before and if i have, i wouldn''t be making it, i''d be playing it right about now. (I aint sharing my secret ideas though. lol). Anyways, my goal with this network model is to break the overall game down into a set of "mini-games" between clients because of its fast-moving shoot-em-up style. Only things that affect the entire world as a whole are sent to the server (such as damage done to a player, the destruction of a building, etc.).
Timbo_M45 - let me first say that I do understand what you are wanting to do and why you want to do it.

I''ll direct you to Raph''s web site specifically the The Laws of Online World Design where this law appears: Never trust the client.
Never put anything on the client. The client is in the hands of the enemy. Never ever ever forget this.


Does this law apply to your game? If you think that it does not - then continue with your design. If you feel that this law is true and does apply to your game then you need to re-think the implementation of your network code.

I know that I haven''t really helped to answer your question... but I do hope that you start to think about ways a client can abuse the client and the data sent from it using the peer-to-peer approach.

Dave "Dak Lozar" Loeser
Dave Dak Lozar Loeser
"Software Engineering is a race between the programmers, trying to make bigger and better fool-proof software, and the universe trying to make bigger fools. So far the Universe in winning."--anonymous
Advertisement
Instead of the client sending information to all other clients that are in scope, keep the list of scopes on the server. When the server gets a message from a client, it rebroadcasts the message to all clients that are in scope. This will keep network traffic down on the client-side. I see how you are trying to help with network traffic server-side, but as has already been mentioned before, your system trusts the client way too much. Instant death cheats (rebroadcasting the "HITYOU" message over and over again to all clients in your scope) and other various evil things would be way too easy to implement.

Although the encryption helps.

How many players are you expecting?

This topic is closed to new replies.

Advertisement