ezQuake/ezquake-source — Issue #9: idea: social features
Author: dies-el
Created: 2011-12-18 01:13:13+00:00
State: open

Possible abuse of Github issues, but it seemed like a good way to get the attention of the active devs.

I propose a few social features added to the client in the form of a plugin.

Basic idea: Hook up the quake client to a web service. This would allow you to (from the QW client) say:
- Is my friend Jacobite online
- Go to the server that Jacobite is on

Of course there is so much more you could do (see below), but this would be a nice start.

What I think we'd need:
- Generate HTTP requests (libcurl is already in the project so that seems like a fine fit) with a signature that only the server/client can generate
- Deal with responses (most probably small chunks of data, JSON encoded)
- A plugin that can deal with various Quake events and trigger HTTP calls.
- A web service to manage it (this is something I can do in my sleep)

It could prove to be a nice demonstration of what's possible with plugins.

For example, when I load the quake client, an http request is made saying 'dies-el is online'. When I join a server an http request is made saying 'dies-el is playing at server with ip X'. When I leave, tell the server. When I quit, tell the server.

Now, this breaks down because Quake doesn't have a concept of usernames, you set your name when you join. Well, perhaps the first time you use the social features, you set yourself a username. That way, it doesn't matter what name you are playing under, you are still identifiable to your friends.

Future features:
- By tracking the scores of the game, you could come up with a ranking for a player. We could then set up a matchmaking service (find me a duel against someone who is my skill level)
- Instant messaging. You could send people 'out of server' messages

I'll probably potter on with this idea myself if everyone thinks it's a horrible idea, but I thought I'd share it with the project in case anyone fancied lending a hand. I'm a total c noob, but I can handle the web side of things (e.g. setting up the web service with a nice restful api)