aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoricculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2009-09-15 01:11:09 +0000
committericculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2009-09-15 01:11:09 +0000
commit2d7e1ad4c8e03c50021b9b7d1511e1240f9c7e2a (patch)
treebeec9580c98294432c170b77e409f2b2278ecae8
parentfdc9cb96d517332168beaefd5731c5b150b56afb (diff)
downloadioquake3-aero-2d7e1ad4c8e03c50021b9b7d1511e1240f9c7e2a.tar.gz
ioquake3-aero-2d7e1ad4c8e03c50021b9b7d1511e1240f9c7e2a.zip
When dropping bots, don't move to CS_ZOMBIE. Go straight to CS_FREE.
They aren't a real network connection, so you don't want to waste time before opening the slot for humans. Fixes Bugzilla #4243. git-svn-id: svn://svn.icculus.org/quake3/trunk@1605 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r--code/server/sv_client.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/code/server/sv_client.c b/code/server/sv_client.c
index 16a67ab..08d02d4 100644
--- a/code/server/sv_client.c
+++ b/code/server/sv_client.c
@@ -531,12 +531,13 @@ or crashing -- SV_FinalMessage() will handle that
void SV_DropClient( client_t *drop, const char *reason ) {
int i;
challenge_t *challenge;
+ const qboolean isBot = drop->netchan.remoteAddress.type == NA_BOT;
if ( drop->state == CS_ZOMBIE ) {
return; // already dropped
}
- if (drop->netchan.remoteAddress.type != NA_BOT) {
+ if ( !isBot ) {
// see if we already have a challenge for this ip
challenge = &svs.challenges[0];
@@ -556,7 +557,6 @@ void SV_DropClient( client_t *drop, const char *reason ) {
// tell everyone why they got dropped
SV_SendServerCommand( NULL, "print \"%s" S_COLOR_WHITE " %s\n\"", drop->name, reason );
-
if (drop->download) {
FS_FCloseFile( drop->download );
drop->download = 0;
@@ -569,15 +569,20 @@ void SV_DropClient( client_t *drop, const char *reason ) {
// add the disconnect command
SV_SendServerCommand( drop, "disconnect \"%s\"", reason);
- if ( drop->netchan.remoteAddress.type == NA_BOT ) {
+ if ( isBot ) {
SV_BotFreeClient( drop - svs.clients );
}
// nuke user info
SV_SetUserinfo( drop - svs.clients, "" );
- Com_DPrintf( "Going to CS_ZOMBIE for %s\n", drop->name );
- drop->state = CS_ZOMBIE; // become free in a few seconds
+ if ( isBot ) {
+ // bots shouldn't go zombie, as there's no real net connection.
+ drop->state = CS_FREE;
+ } else {
+ Com_DPrintf( "Going to CS_ZOMBIE for %s\n", drop->name );
+ drop->state = CS_ZOMBIE; // become free in a few seconds
+ }
// if this was the last client on the server, send a heartbeat
// to the master so it is known the server is empty