Tag Info

Hot answers tagged

38

I may be wrong, but your question makes it seem like you are missing a lot of knowledge in order to successfully write an MMO server. I know this message will likely fall on deaf ears because I was in your position when I started programming. My answer: If I were you I would start smaller. If you want to learn to write an MMO server I would do the ...


34

You don't want to send player input to the server. What you probably want to do is send an abstracted representation of what the player wants to do to the server, and then run the logic on there. Likewise you don't necessarily want to send back everything the client needs to do. For example, you can send some kind of message saying "NPC X died", and the ...


23

Most companies use C++. Eve is an outlier, the core graphics engine is in C++, while the game logic is, as others have noted, in Python. CCP also makes a lot of contributions to Stackless itself, which is in C for the most part. WoW is C++ for the game itself, though the UI is scripted in Lua. Cryptic (Champions Online, Star Trek Online) uses plain C, but ...


23

Sure, you can use C#. One of the bigger issues to be aware of in terms of performance in C# or other .NET ecosystems is the GC -- the .NET framework provides several flavors of GC, including a "server" GC, that are worth learning about. Intelligently managing memory (for example, by pooling) is still a good technique even in a managed environment. There ...


21

Two words: headless client. Basically it's an AI driven client that's had the all graphics bypassed so that you can run many multiples of copies on a machine, you can even run them on servers because you never initialize the graphics at all. Above all those clients is a supervisor that is responsible for starting, monitoring and stopping all the clients to ...


20

Most MMOs these days have anything important done server-side, for safety reasons. You can't off-load much to the client, which is why one of the first things axed are AI routines. I think most developers consider client-side to be hackable as a rule, not an exception. Scalify's Badumna ( http://www.scalify.com/badumna.php ) tries to off-load part of it on ...


20

You should prefer to keep your rendering code separate from your game logic, as they are separate concerns. If you separate your rendering code from your client/server code, you get a couple of advantages: Creating a dedicated server will be easier, as any code that renders will be in one place. You can separate your update phase from your render phase, ...


19

It seems like the obvious answer is to do most of your detection client-side (for smoothness), and then you interpolate to what the server says if your client is too far off. The server will tick at a less frequent rate than the client (like, say, 10hz), and would probably need to have some basic "can this player have reached where he says he currently is ...


18

It depends on the nature of the content: Is it an asset that is loaded by the game, like a model or a texture? You want a version control system. Is it some form of data not loaded directly by the game, but used to build data directly loaded by the game, such as a localisation spreadsheet? You want a version control system. Is it a document outlining the ...


17

TL;DR: Lua does have overhead, but if used properly it is negligible and easily mitigated. Don't use it for heavy math operations or transforming geometry. You will probably not see any performance problems at all using it to script a GUI. I've done some basic benchmarks regarding Lua's performance as a game scripting language, and it's pretty damn fast. ...


16

Not only viable, but really good, in my experience. I've developed several MMO servers using C#, and I must say I never regretted the choice of language and platform. There are lots of great libraries and tools for C# and .NET in general - network, logging, O/R mapping, etc. And, compared to Java C# is more expressive and less verbose (some people might ...


15

So, a few answers here. Client-side collision is ideal from a performance point of view and from a player feel point of view. You don't want collision to be laggy, you want players to run into a solid object and stop. If you do it server-side, you're either looking at rubberbanding players all over the place or giving players noticable lag when they try to ...


14

For traffic load testing there are many tools, but you're going to need to test other things as well that will be specific to your game server because network traffic is only one part of the equation -- the processor utilization and constant database queries are two others that immediately come to mind as important factors that you'll want to measure (there ...


14

The world being separated into chunks is indeed the first step you should take, with each chunk being handled separatedly. Static objects? Purely static in the sense that they never move, and never disappear? Then you could simply incorporate these objects into whatever data structure you're using for player navigation in the world (such as a grid, ...


12

I believe this is mostly caused by the fact that login and game handling are logically more or less independent, so they're typically kept separate for better decoupling, easier maintenance and scalability. They needn't necessarily reside on different physical servers .. they can as well run as independent services on the same machine. If the traffic grows ...


12

Attack vector 1: The netcode As already pointed out by Mario, one important factor when designing the network protocol of a client/server application is to not blindly trust the client. You can't control the software which runs on the client machine. You can't even tell that it's your software and not something the user programmed themself. The same ...


11

You can host a simple matchmaking service on Google App Engine for free. It should be able to service many users. If it starts being really really popular, you can start paying for the service with what you earn.


11

In general that's a very complex subject. You have two conflicting aims (at least if you don't plan on running every single game on a dedicated server): You'll want as much as possible done on the server, both to prevent cheating and to make sure all clients see the same things. But you also want things to be fair, which means if one person has a 0-time ...


11

I'll see if I can answer this the best I can: How often is the listen-server model used in the gaming industry? When it comes to most online games, you'll find that a large majority of games use a client-server architecture, though not always in the way you think. Take any Source game, for instance. Most will use a standard client-server with a master ...


10

Just as @JustSid said, if you move from one cell to another the handover is handled transparently. The 3G network is just the method of transportation of your data packets, therefore it is a few layers below the IP layer, if you think in terms of the ISO/OSI stack. I worked on a push-to-talk application for mobile phones and all i can say is, that we never ...


10

As a former developer for MaNGOS and project founder for ScriptDev2 I would say your objective is not realistic. The basics to make the game happy are actually pretty complex. If you tried to do this without pulling code from an existing project you will be asking questions about specific op codes for months. World of Warcraft seems like a simple game but ...


9

One very important aspect in MMOs development is achieving scalability and allowing for load balancing. Authentication users by checking credentials, ban status, counting recent failed logins, etc. is a task that can be done without knowing anything of the game logic or game data. So it is very easy to move that to its own server cluster. Furthermore the ...


9

RunUO and SunUO are free Ultima Online servers. Ultima Online client can be downloaded for free. SunUO is a free Ultima Online server for Linux/Mono and Windows.NET, based on RunUO. Ultima Online is a commercial MMORPG by Origin / Electronic Arts.


9

Well, you got answers but your real answer is at "try yourself". The things differ from game to game. I did couple of multiplayer games for some distributed network game design course. The most challenging was doing a realtime action game where many players involved and sending inputs like hell. When it comes to that point, everything becomes problem. As ...


8

There's too many undefined or barely defined terms there. MMO is such a loaded term. Without knowing how much CPU processing a user needs, how much backend storage a user needs, etc... It's impossible to say. I mean just at a bare minimum assuming the hardware can support it, you would need 8 front end servers just to support 500,000 connections. (TCP ...


8

I'm working on my first multiplayer game as well. It can be daunting just learning the problems specific to multiplayer, so I highly recommend that you get good at making single player ones first. First, see if any of the game/networking engines fit your needs. For an Android game especially, starting with a well-developed toolset is almost always a good ...


8

I think you are worried about the wrong things Milo. I see from your other questions you are planning on writing the game is C++. Even a not very well coded sever written in a scripting language would be able to handle 100's if not 1000's of requests with out apparent lag in a card game. These kinds of technical details are probably not going to be a ...


8

In my opinion there are a few types of mobile games. Single player / action / arcade puzzle - these doesn't really require a server side anyway and you can go a long way with openfeint or gamecenter to implement the social functions. Multiplayer / MMO / MMORPG - These require a strong backend with very quick response times and the BAAS solutions are really ...


8

After the user authenticated itself to the loginserver, give it a token (an unique, randomly-generated string too long to be guessed). The loginserver picks a gameserver. Send the token, the username and all other relevant data about the user from the loginserver to the server it picked. Send the token and the hostname of the gameserver to the client. Then ...


7

In Stendhal we solved the performance issue by adding game events to a queue and then processing them asynchronously in the background. In our case the events are not just records but objects which have a little bit of logic because in some cases we need to do two inserts with a link between them. For example the first time a item is handled in game, it ...



Only top voted, non community-wiki answers of a minimum length are eligible