tidy up SV_Serverinfo_f, move Cvar_Info from sv_cver.c to sv_ccmds.c and

make the client no_pogo_stick cvar properly reflect the serverinfo
This commit is contained in:
Bill Currie 2002-09-17 05:11:28 +00:00
parent d6a2b54252
commit 6fa4205675
5 changed files with 44 additions and 87 deletions

View file

@ -76,10 +76,10 @@ else
syssv_SRC= sv_sys_unix.c
endif
libserver_a_SOURCES= crudefile.c sv_ccmds.c sv_cvar.c sv_ents.c \
sv_init.c sv_main.c sv_move.c \
sv_nchan.c sv_phys.c sv_pr_cmds.c sv_progs.c sv_send.c \
sv_user.c world.c $(syssv_SRC)
libserver_a_SOURCES= \
crudefile.c sv_ccmds.c sv_ents.c sv_init.c sv_main.c sv_move.c \
sv_nchan.c sv_phys.c sv_pr_cmds.c sv_progs.c sv_send.c sv_user.c \
world.c $(syssv_SRC)
qf_server_LIBS= \
$(SERVER_PLUGIN_STATIC_LIBS) \

View file

@ -1547,9 +1547,6 @@ Host_Frame (float time)
// fetch results from server
CL_ReadPackets ();
if (cl.no_pogo_stick && !no_pogo_stick->int_val)
Cvar_Set (no_pogo_stick, "1");
// send intentions now
// resend a connection request if necessary
if (cls.state == ca_disconnected) {

View file

@ -1044,7 +1044,8 @@ CL_ServerInfo (void)
} else if (strequal (key, "cshifts")) {
cl.sv_cshifts = atoi (value);
} else if (strequal (key, "no_pogo_stick")) {
cl.no_pogo_stick = atoi (value);
Cvar_Set (no_pogo_stick, value);
cl.no_pogo_stick = no_pogo_stick->int_val;
} else if (strequal (key, "teamplay")) {
cl.teamplay = atoi (value);
Sbar_DMO_Init_f (cl_showscoresuid); // HUD setup, cl.teamplay changed

View file

@ -813,6 +813,39 @@ SV_SendServerInfoChange (const char *key, const char *value)
MSG_WriteString (&sv.reliable_datagram, value);
}
/*
Cvar_Info
Sets a given cvar (key,value) into svs.info (serverinfo)
high char filtering is performed according to sv_highchars.value
*/
void
Cvar_Info (cvar_t *var)
{
if (var->flags & CVAR_SERVERINFO) {
unsigned char info[1024], *p;
const unsigned char *c;
if (!sv_highchars || !sv_highchars->int_val) {
for (p = info, c = var->string;
*c && (p - info < sizeof (info) - 1);) {
if ((*c & 0x7f) >= 32)
*p++ = *c & 0x7f;
c++;
}
*p = 0;
Info_SetValueForKey (svs.info, var->name, info,
(sv_highchars && !sv_highchars->int_val));
} else
Info_SetValueForKey (svs.info, var->name, var->string,
(sv_highchars && !sv_highchars->int_val));
SV_SendServerInfoChange (var->name, var->string);
}
}
/*
SV_Serverinfo_f
@ -838,18 +871,17 @@ SV_Serverinfo_f (void)
SV_Printf ("Star variables cannot be changed.\n");
return;
}
Info_SetValueForKey (svs.info, Cmd_Argv (1), Cmd_Argv (2),
!sv_highchars->int_val);
// if this is a cvar, change it too
var = Cvar_FindVar (Cmd_Argv (1));
if (var)
if (var && (var->flags & CVAR_SERVERINFO)) {
Cvar_Set (var, Cmd_Argv (2));
if (!var || !(var->flags & CVAR_SERVERINFO))
// Cvar_Set will send the change if CVAR_SERVERINFO is set
} else {
Info_SetValueForKey (svs.info, Cmd_Argv (1), Cmd_Argv (2),
!sv_highchars->int_val);
SV_SendServerInfoChange (Cmd_Argv (1), Cmd_Argv (2));
}
}
/*
SV_Serverinfo_f

View file

@ -1,73 +0,0 @@
/*
sv_cvar.c
(description)
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
*/
static const char rcsid[] =
"$Id$";
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "QF/cvar.h"
#include "server.h"
void SV_SendServerInfoChange (const char *key, const char *value);
/*
Cvar_Info
Sets a given cvar (key,value) into svs.info (serverinfo)
high char filtering is performed according to sv_highchars.value
*/
void
Cvar_Info (cvar_t *var)
{
if (var->flags & CVAR_SERVERINFO) {
unsigned char info[1024], *p;
const unsigned char *c;
if (!sv_highchars || !sv_highchars->int_val) {
for (p = info, c = var->string;
*c && (p - info < sizeof (info) - 1);) {
if ((*c & 0x7f) >= 32)
*p++ = *c & 0x7f;
c++;
}
*p = 0;
Info_SetValueForKey (svs.info, var->name, info,
(sv_highchars && !sv_highchars->int_val));
} else
Info_SetValueForKey (svs.info, var->name, var->string,
(sv_highchars && !sv_highchars->int_val));
SV_SendServerInfoChange (var->name, var->string);
// SV_BroadcastCommand ("fullserverinfo \"%s\"\n", svs.info);
}
}