cvar_t noaim = {CVAR_USERINFO | CVAR_SAVE, "noaim", "1", "QW option to disable vertical autoaim"};
qboolean allowcheats = false;
+extern qboolean host_shuttingdown;
+
/*
==================
Host_Quit_f
void Host_Quit_f (void)
{
- Sys_Quit (0);
+ if(host_shuttingdown)
+ Con_Printf("shutting down already!\n");
+ else
+ Sys_Quit (0);
}
-
/*
==================
Host_Status_f
print ("version: %s build %s\n", gamename, buildstring);
print ("protocol: %i (%s)\n", Protocol_NumberForEnum(sv.protocol), Protocol_NameForEnum(sv.protocol));
print ("map: %s\n", sv.name);
+ print ("timing: %s\n", Host_TimingReport());
print ("players: %i active (%i max)\n\n", players, svs.maxclients);
for (j = 0, client = svs.clients;j < svs.maxclients;j++, client++)
{
}
else
hours = 0;
- print ("#%-3u %-16.16s^%i %3i %2i:%02i:%02i\n", j+1, client->name, STRING_COLOR_DEFAULT, client->frags, hours, minutes, seconds);
+ print ("#%-3u %-16.16s %3i %2i:%02i:%02i\n", j+1, client->name, client->frags, hours, minutes, seconds);
print (" %s\n", client->netconnection ? client->netconnection->address : "botclient");
}
}
}
// now call the Pings command also, which will send a report that contains packet loss for the scoreboard (as well as a simpler ping report)
- Host_Pings_f();
+ // actually, don't, it confuses old clients (resulting in "unknown command pingplreport" flooding the console)
+ //Host_Pings_f();
}
/*
}
// version
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
version = atoi(com_token);
if (version != SAVEGAME_VERSION)
{
}
// description
- // this is a little hard to parse, as : is a separator in COM_ParseToken,
- // so use the console parser instead
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
for (i = 0;i < NUM_SPAWN_PARMS;i++)
{
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
spawn_parms[i] = atof(com_token);
}
// skill
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
// this silliness is so we can load 1.06 save files, which have float skill values
current_skill = (int)(atof(com_token) + 0.5);
Cvar_SetValue ("skill", (float)current_skill);
// mapname
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
strlcpy (mapname, com_token, sizeof(mapname));
// time
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
time = atof(com_token);
allowcheats = sv_cheats.integer != 0;
{
// light style
oldt = t;
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
// if this is a 64 lightstyle savegame produced by Quake, stop now
// we have to check this because darkplaces saves 256 lightstyle savegames
if (com_token[0] == '{')
for(;;)
{
oldt = t;
- COM_ParseTokenConsole(&t);
+ COM_ParseToken_Simple(&t, false);
if (com_token[0] == '{')
{
t = oldt;
for (;;)
{
start = t;
- while (COM_ParseTokenConsole(&t))
+ while (COM_ParseToken_Simple(&t, false))
if (!strcmp(com_token, "}"))
break;
- if (!COM_ParseTokenConsole(&start))
+ if (!COM_ParseToken_Simple(&start, false))
{
// end of file
break;
Host_Error("Host_PerformLoadGame: too many edicts in save file (reached MAX_EDICTS %i)", MAX_EDICTS);
}
while (entnum >= prog->max_edicts)
- //SV_IncreaseEdicts();
PRVM_MEM_IncreaseEdicts();
ent = PRVM_EDICT_NUM(entnum);
memset (ent->fields.server, 0, prog->progs->entityfields * 4);
else
strlcpy (newName, Cmd_Args(), sizeof (newName));
- for (i = 0, j = 0;newName[i];i++)
- if (newName[i] != '\r' && newName[i] != '\n')
- newName[j++] = newName[i];
- newName[j] = 0;
-
if (cmd_source == src_command)
{
Cvar_Set ("_cl_name", newName);
// point the string back at updateclient->name to keep it safe
strlcpy (host_client->name, newName, sizeof (host_client->name));
+ for (i = 0, j = 0;host_client->name[i];i++)
+ if (host_client->name[i] != '\r' && host_client->name[i] != '\n')
+ host_client->name[j++] = host_client->name[i];
+ host_client->name[j] = 0;
+
COM_StringLengthNoColors(host_client->name, 0, &valid_colors);
if(!valid_colors) // NOTE: this also proves the string is not empty, as "" is a valid colored string
{
}
}
+ // find the last color tag offset and decide if we need to add a reset tag
+ for (i = 0, j = -1;host_client->name[i];i++)
+ {
+ if (host_client->name[i] == STRING_COLOR_TAG)
+ {
+ if (host_client->name[i+1] >= '0' && host_client->name[i+1] <= '9')
+ {
+ j = i;
+ // if this happens to be a reset tag then we don't need one
+ if (host_client->name[i+1] == '0' + STRING_COLOR_DEFAULT)
+ j = -1;
+ i++;
+ continue;
+ }
+ if (host_client->name[i+1] == STRING_COLOR_TAG)
+ {
+ i++;
+ continue;
+ }
+ }
+ }
+ // does not end in the default color string, so add it
+ if (j >= 0 && strlen(host_client->name) < sizeof(host_client->name) - 2)
+ memcpy(host_client->name + strlen(host_client->name), STRING_COLOR_DEFAULT_STR, strlen(STRING_COLOR_DEFAULT_STR) + 1);
+
host_client->edict->fields.server->netname = PRVM_SetEngineString(host_client->name);
if (strcmp(host_client->old_name, host_client->name))
{
if (host_client->spawned)
- SV_BroadcastPrintf("%s^%i changed name to %s\n", host_client->old_name, STRING_COLOR_DEFAULT, host_client->name);
+ SV_BroadcastPrintf("%s changed name to %s\n", host_client->old_name, host_client->name);
strlcpy(host_client->old_name, host_client->name, sizeof(host_client->old_name));
// send notification to all clients
MSG_WriteByte (&sv.reliable_datagram, svc_updatename);
}
// note this uses the chat prefix \001
if (!fromServer && !teamonly)
- dpsnprintf (text, sizeof(text), "\001%s" STRING_COLOR_DEFAULT_STR ": %s", host_client->name, p1);
+ dpsnprintf (text, sizeof(text), "\001%s: %s", host_client->name, p1);
else if (!fromServer && teamonly)
- dpsnprintf (text, sizeof(text), "\001(%s" STRING_COLOR_DEFAULT_STR "): %s", host_client->name, p1);
+ dpsnprintf (text, sizeof(text), "\001(%s): %s", host_client->name, p1);
else if(*(sv_adminnick.string))
- dpsnprintf (text, sizeof(text), "\001<%s" STRING_COLOR_DEFAULT_STR "> %s", sv_adminnick.string, p1);
+ dpsnprintf (text, sizeof(text), "\001<%s> %s", sv_adminnick.string, p1);
else
- dpsnprintf (text, sizeof(text), "\001<%s" STRING_COLOR_DEFAULT_STR "> %s", hostname.string, p1);
+ dpsnprintf (text, sizeof(text), "\001<%s> %s", hostname.string, p1);
p2 = text + strlen(text);
while ((const char *)p2 > (const char *)text && (p2[-1] == '\r' || p2[-1] == '\n' || (p2[-1] == '\"' && quoted)))
{
Host_Color(-1, atoi(Cmd_Argv(1)));
}
-cvar_t cl_rate = {CVAR_SAVE | CVAR_NQUSERINFOHACK, "_cl_rate", "10000", "internal storage cvar for current rate (changed by rate command)"};
+cvar_t cl_rate = {CVAR_SAVE | CVAR_NQUSERINFOHACK, "_cl_rate", "20000", "internal storage cvar for current rate (changed by rate command)"};
void Host_Rate_f(void)
{
int rate;
SZ_Write (&host_client->netconnection->message, sv.signon.data, sv.signon.cursize);
MSG_WriteByte (&host_client->netconnection->message, svc_signonnum);
MSG_WriteByte (&host_client->netconnection->message, 2);
+ host_client->sendsignon = 0; // enable unlimited sends again
}
// reset the name change timer because the client will send name soon
PRVM_ExecuteProgram (prog->globals.server->ClientConnect, "QC function ClientConnect is missing");
if (svs.maxclients > 1 || cls.state == ca_dedicated)
- Con_Printf("%s^%i entered the game\n", host_client->name, STRING_COLOR_DEFAULT);
+ Con_Printf("%s entered the game\n", host_client->name);
PRVM_ExecuteProgram (prog->globals.server->PutClientInServer, "QC function PutClientInServer is missing");
}
if (Cmd_Argc() > 2)
{
message = Cmd_Args();
- COM_ParseTokenConsole(&message);
+ COM_ParseToken_Simple(&message, false);
if (byNumber)
{
message++; // skip the #
{
int i, c;
- if (cls.state == ca_dedicated || COM_CheckParm("-listen") || COM_CheckParm("-benchmark") || COM_CheckParm("-demo"))
+ if (cls.state == ca_dedicated || COM_CheckParm("-listen") || COM_CheckParm("-benchmark") || COM_CheckParm("-demo") || COM_CheckParm("-capturedemo"))
return;
c = Cmd_Argc() - 1;
// LordHavoc: if there is no such cvar or if it is private, send a
// reply indicating that it has no value
if(!c || (c->flags & CVAR_PRIVATE))
- Cmd_ForwardStringToServer(va("sentcvar %s\n", cvarname));
+ Cmd_ForwardStringToServer(va("sentcvar %s", cvarname));
else
- Cmd_ForwardStringToServer(va("sentcvar %s \"%s\"\n", c->name, c->string));
+ Cmd_ForwardStringToServer(va("sentcvar %s \"%s\"", c->name, c->string));
return;
}
if(!sv.active)// || !prog->funcoffsets.SV_ParseClientCommand)