the client sends the prespawn, spawn, and begin commands in the correct order.
This stops several interesting cheats in TF as well as the posibility of avoiding the map
checksum.
that's useful to the client or the players. This should solve the problem
with QW clients' tiny setinfo buffers once and for all. Note, you can
still use setinfo to set your user info, but if it's not in the
"need-to-know" list, the server won't send it back to you. I will probably
make this optional with a server Cvar if there are problems.
cl_parse.c: Fixed the white body issue taniwha found, finally!
pr_edict.c: From misty, server cvar qwprogs, use it to set the
qwprogs.dat to something else.
sv_user.c: Don't send the r_skyname command, the clients pickup the info
line.
list is likely to keep growing, I've re-written SV_ExecuteUserCommand to check
a flag in the user command entry to see wheter output should be redirected or
not. Also, the ucmds table is now qsorted on init and bsearched in
SV_ExecuteUserCommand for both speed and code cleanliness.
strings (skybox and *progs). skybox is easy to take care of (aditional parse
functions), but I haven't yet decided what to do with *progs. Also, progs code
needs a bit of a cleanup, but that will come later.
progs engine no longer refers to any global vars. This alows for multiple progs
being loaded (NOTE: NOT multiple mods, but (eg) for various protocol
extensions) and, once the last couple of issues are taken care of, CSQC.
strncat is not the maximum length of the destination string, but of the SOURCE
string, thus strncat (dest, src, sizeof (dest)) is incorrect. It should be
strncat (dest, src, sizeof (text) - strlen (dest)). Even then, no terminating
nul will be written if src is too long, but at least it won't crash the stack:)
player connects immediately after a timekick sample, their time WILL be
off, so don't look at them the first sample.
sv_user.c: Another location to enforce sv_maxrate, make sv_timekick and
friends ignore a user's time if it's -1, and apply double fuzz to times
lower than we expect -- it's way too sensitive otherwise. Also, some
whitespace changes.
sv_minqfversion: Set to the minimum allowable QuakeForge version you want
to allow on a server. QF clients prior to current CVS _will_not_work_ with
this cvar, as the QF version was not reported previously.
sv_maxrate: Change maximum rate algorithm; if sv_maxrate is nonzero, it is
the maximum rate allowed by the server. If it is unset, the maximum is
10000 like it used to be. The rate is silently capped, so it won't kick.
Cvar fixed: sv_timekick and friends; Now kicks on too little time passed
as well.
Functionality removed: "Last message repeated X times". It causes too much
trouble.
both support this. The client tells the server it can support compressed
downloads by setting the z flag in the *cap userinfo. If the server detects
that the client supports compression, and the file to be downloaded is
compressed (more accurately, has the .gz extension), the server sends a special
download packet with a size of -2 (-1 indicates error),, percent of 0, followed
by the new name of the file (eg maps/foo.bsp.gz for maps/foo.bsp). The client
WILL NOT accept a new filename that doesn not match the old name for the length
of the old name. The client also will not accept a new name if there are . or
.. path components. If the client rejects the new name, it prints a warning
message and aborts that download.
code.
Then we have the completely purge of treating 'unsigned' as a type, it
is NOT a type, it is a TYPE MODIFIER!
Under gcc for x86 it happens to try and do something sane, just treat it
as a unsigned int, but that is EVIL, it is a MODIFIER and if ANYONE adds
code which uses unsigned as a type in itself I /WILL/ harm them!!!
split up the headerfiles and such. common.[ch] and qwsvdef.h no longer exist. More work still needs to be done (esp for windows) but this should be a major improvement.