[quake3-commits] r1842 - in trunk: . code/client code/qcommon code/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Feb 4 08:25:51 EST 2011
Author: thilo
Date: 2011-02-04 08:25:51 -0500 (Fri, 04 Feb 2011)
New Revision: 1842
Modified:
trunk/README
trunk/code/client/cl_main.c
trunk/code/qcommon/q_shared.h
trunk/code/server/server.h
trunk/code/server/sv_init.c
trunk/code/server/sv_main.c
Log:
- Add cvars cl_gamename, sv_heartbeat, sv_flatline so standalone games can customise their messages to the master server
Modified: trunk/README
===================================================================
--- trunk/README 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/README 2011-02-04 13:25:51 UTC (rev 1842)
@@ -110,7 +110,8 @@
cl_mouseAccelStyle - Set to 1 for QuakeLive mouse acceleration
behaviour, 0 for standard q3
cl_mouseAccelOffset - Tuning the acceleration curve, see below
-
+ cl_gamename - Gamename sent to master server in
+ getserversExt query
s_useOpenAL - use the OpenAL sound backend if available
s_alPrecache - cache OpenAL sounds before use
s_alGain - the value of AL_GAIN for each source
@@ -142,24 +143,27 @@
com_ansiColor - enable use of ANSI escape codes in the tty
com_altivec - enable use of altivec on PowerPC systems
com_standalone (read only) - If set to 1, quake3 is running in
- standalone mode.
+ standalone mode
com_basegame - Use a different base than baseq3. If no
original Quake3 or TeamArena pak files
are found, this will enable running in
- standalone mode.
+ standalone mode
com_homepath - Specify name that is to be appended to the
home path
com_maxfpsUnfocused - Maximum frames per second when unfocused
com_maxfpsMinimized - Maximum frames per second when minimized
com_busyWait - Will use a busy loop to wait for rendering
- next frame when set to non-zero value.
+ next frame when set to non-zero value
in_joystickNo - select which joystick to use
in_keyboardDebug - print keyboard debug info
sv_dlURL - the base of the HTTP or FTP site that
holds custom pk3 files for your server
sv_banFile - Name of the file that is used for storing
- the server bans.
+ the server bans
+ sv_heartbeat - Heartbeat string sent to master server
+ sv_flatline - Heartbeat string sent to master server
+ when server is killed
net_ip6 - IPv6 address to bind to
net_port6 - port to bind to using the ipv6 address
@@ -354,10 +358,27 @@
+set com_homepath <homedirname>
- to the command line. Example line:
+ to the command line. Then you can control which kind of messages to send to
+ the master server:
+ +set sv_heartbeat <heartbeat> +set sv_flatline <flatline>
+ +set cl_gamename <gamename>
+
+ The <heartbeat> and <flatline> message can be specific to your game. The
+ flatline message is sent to signal the master server that the game server is
+ quitting. Vanilla quake3 uses "QuakeArena-1" both for the heartbeat and
+ flatline messages.
+ The cl_gamename message is for dpmaster to specify which game the client
+ wants a server list for. It is only used in the new ipv6 based getServersExt
+ query.
+
+ Example line:
+
+set com_basegame basefoo +set com_homepath .foo
+ +set sv_heartbeat fooalive +set sv_flatline foodead
+ +set cl_gamename foo
+
If you really changed parts that would make vanilla ioquake3 incompatible with
your mod, we have included another way to conveniently build a stand-alone
binary. Just run make with the option BUILD_STANDALONE=1. Don't forget to edit
Modified: trunk/code/client/cl_main.c
===================================================================
--- trunk/code/client/cl_main.c 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/code/client/cl_main.c 2011-02-04 13:25:51 UTC (rev 1842)
@@ -100,6 +100,8 @@
cvar_t *cl_consoleKeys;
+cvar_t *cl_gamename;
+
clientActive_t cl;
clientConnection_t clc;
clientStatic_t cls;
@@ -3169,6 +3171,8 @@
// ~ and `, as keys and characters
cl_consoleKeys = Cvar_Get( "cl_consoleKeys", "~ ` 0x7e 0x60", CVAR_ARCHIVE);
+ cl_gamename = Cvar_Get("cl_gamename", GAMENAME_FOR_MASTER, CVAR_TEMP);
+
// userinfo
Cvar_Get ("name", "UnnamedPlayer", CVAR_USERINFO | CVAR_ARCHIVE );
Cvar_Get ("rate", "25000", CVAR_USERINFO | CVAR_ARCHIVE );
@@ -3715,7 +3719,6 @@
netadr_t to;
int count, i, masterNum;
char command[1024], *masteraddress;
- char *cmdname;
if ((count = Cmd_Argc()) < 3 || (masterNum = atoi(Cmd_Argv(1))) < 0 || masterNum > MAX_MASTER_SERVERS - 1)
{
@@ -3753,14 +3756,24 @@
// Use the extended query for IPv6 masters
if (to.type == NA_IP6 || to.type == NA_MULTICAST6)
{
- cmdname = "getserversExt " GAMENAME_FOR_MASTER;
+ int v4enabled = Cvar_VariableIntegerValue("net_enabled") & NET_ENABLEV4;
+
+ if(v4enabled)
+ {
+ Com_sprintf(command, sizeof(command), "getserversExt %s %s ipv6",
+ cl_gamename->string, Cmd_Argv(2));
+ }
+ else
+ {
+ Com_sprintf(command, sizeof(command), "getserversExt %s %s",
+ cl_gamename->string, Cmd_Argv(2));
+ }
// TODO: test if we only have an IPv6 connection. If it's the case,
// request IPv6 servers only by appending " ipv6" to the command
}
else
- cmdname = "getservers";
- Com_sprintf( command, sizeof(command), "%s %s", cmdname, Cmd_Argv(2) );
+ Com_sprintf(command, sizeof(command), "getservers %s", Cmd_Argv(2));
for (i=3; i < count; i++)
{
Modified: trunk/code/qcommon/q_shared.h
===================================================================
--- trunk/code/qcommon/q_shared.h 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/code/qcommon/q_shared.h 2011-02-04 13:25:51 UTC (rev 1842)
@@ -33,6 +33,7 @@
#define CLIENT_WINDOW_MIN_TITLE "changeme2"
#define GAMENAME_FOR_MASTER "iofoo3" // must NOT contain whitespaces
#define HEARTBEAT_FOR_MASTER GAMENAME_FOR_MASTER
+ #define FLATLINE_FOR_MASTER GAMENAME_FOR_MASTER "dead"
#else
#define PRODUCT_NAME "ioq3"
#define BASEGAME "baseq3"
@@ -41,6 +42,7 @@
#define CLIENT_WINDOW_MIN_TITLE "ioq3"
#define GAMENAME_FOR_MASTER "Quake3Arena"
#define HEARTBEAT_FOR_MASTER "QuakeArena-1"
+ #define FLATLINE_FOR_MASTER HEARTBEAT_FOR_MASTER
#endif
#ifdef _MSC_VER
Modified: trunk/code/server/server.h
===================================================================
--- trunk/code/server/server.h 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/code/server/server.h 2011-02-04 13:25:51 UTC (rev 1842)
@@ -276,6 +276,8 @@
extern cvar_t *sv_lanForceRate;
extern cvar_t *sv_strictAuth;
extern cvar_t *sv_banFile;
+extern cvar_t *sv_heartbeat;
+extern cvar_t *sv_flatline;
extern serverBan_t serverBans[SERVER_MAXBANS];
extern int serverBansCount;
@@ -298,12 +300,10 @@
void SV_RemoveOperatorCommands (void);
-void SV_MasterHeartbeat (void);
void SV_MasterShutdown (void);
-
//
// sv_init.c
//
Modified: trunk/code/server/sv_init.c
===================================================================
--- trunk/code/server/sv_init.c 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/code/server/sv_init.c 2011-02-04 13:25:51 UTC (rev 1842)
@@ -684,6 +684,8 @@
sv_lanForceRate = Cvar_Get ("sv_lanForceRate", "1", CVAR_ARCHIVE );
sv_strictAuth = Cvar_Get ("sv_strictAuth", "1", CVAR_ARCHIVE );
sv_banFile = Cvar_Get("sv_banFile", "serverbans.dat", CVAR_ARCHIVE);
+ sv_heartbeat = Cvar_Get("sv_heartbeat", HEARTBEAT_FOR_MASTER, CVAR_INIT);
+ sv_flatline = Cvar_Get("sv_flatline", FLATLINE_FOR_MASTER, CVAR_INIT);
// initialize bot cvars so they are listed and can be set before loading the botlib
SV_BotInitCvars();
Modified: trunk/code/server/sv_main.c
===================================================================
--- trunk/code/server/sv_main.c 2011-02-04 12:34:11 UTC (rev 1841)
+++ trunk/code/server/sv_main.c 2011-02-04 13:25:51 UTC (rev 1842)
@@ -58,6 +58,9 @@
cvar_t *sv_lanForceRate; // dedicated 1 (LAN) server forces local client rates to 99999 (bug #491)
cvar_t *sv_strictAuth;
cvar_t *sv_banFile;
+cvar_t *sv_heartbeat; // Heartbeat string that is sent to the master
+cvar_t *sv_flatline; // If the master server supports it we can send a flatline
+ // when server is killed
serverBan_t serverBans[SERVER_MAXBANS];
int serverBansCount = 0;
@@ -232,7 +235,8 @@
================
*/
#define HEARTBEAT_MSEC 300*1000
-void SV_MasterHeartbeat( void ) {
+void SV_MasterHeartbeat(const char *message)
+{
static netadr_t adr[MAX_MASTER_SERVERS][2]; // [2] for v4 and v6 address for the same address string.
int i;
int res;
@@ -315,9 +319,9 @@
// ever incompatably changes
if(adr[i][0].type != NA_BAD)
- NET_OutOfBandPrint( NS_SERVER, adr[i][0], "heartbeat %s\n", HEARTBEAT_FOR_MASTER );
+ NET_OutOfBandPrint( NS_SERVER, adr[i][0], "heartbeat %s\n", message);
if(adr[i][1].type != NA_BAD)
- NET_OutOfBandPrint( NS_SERVER, adr[i][1], "heartbeat %s\n", HEARTBEAT_FOR_MASTER );
+ NET_OutOfBandPrint( NS_SERVER, adr[i][1], "heartbeat %s\n", message);
}
}
@@ -331,11 +335,11 @@
void SV_MasterShutdown( void ) {
// send a hearbeat right now
svs.nextHeartbeatTime = -9999;
- SV_MasterHeartbeat();
+ SV_MasterHeartbeat(sv_flatline->string);
// send it again to minimize chance of drops
svs.nextHeartbeatTime = -9999;
- SV_MasterHeartbeat();
+ SV_MasterHeartbeat(sv_flatline->string);
// when the master tries to poll the server, it won't respond, so
// it will be removed from the list
@@ -1139,7 +1143,7 @@
SV_SendClientMessages();
// send a heartbeat to the master if needed
- SV_MasterHeartbeat();
+ SV_MasterHeartbeat(sv_heartbeat->string);
}
//============================================================================
More information about the quake3-commits
mailing list