Categories
Game Development

Adding clan support to my lobby system

I’m adding a generalized clan system to the lobby in RakNet. Because it’s generalized, anybody can use it for any game. It’s commercially viable in quality: Create, list, update, rename, and destroy clans. Clan names have to be unique, and can’t be in the disallowed words table. Users can be in more than one clan […]

I’m adding a generalized clan system to the lobby in RakNet. Because it’s generalized, anybody can use it for any game.

It’s commercially viable in quality:

Create, list, update, rename, and destroy clans.
Clan names have to be unique, and can’t be in the disallowed words table.
Users can be in more than one clan at a time.
Each clan has a bulletin board
You can invite members to the clan, and members can ask to be invited. You can also have open clans where anyone can join.
DB maintains integrity via constraints and cascading deletes.

This is actually the second time I’ve done something like it. The first time was with Galactic Melee, but it was too specific to the game.

As with the ranking, email, and cd key systems, the systems are reasonably independent so you can use one without having to use all the features.

Probably 3 days total for the implementation. You wouldn’t think that just creating a clan, which is just a list of players, would take a long time. But it’s much harder because you have to enforce conditions in the database and process the requests asynchronously. Once the database is working you have to do it all over again, now serializing the request to the server, having the server enforce code-level restrictions (such as only 1 user per clan), validating input, having the server serialize the reply back, and serializing and calling the proper callbacks on the client. Plus the database schema has to be reasonably efficient. Plus the system is generalized, and it’s always harder to write general than specific.

It’ll be in the next version.

Leave a Reply

Your email address will not be published. Required fields are marked *