From 57fc1eacb6a2b2f25808ec847d56b08e0539fb12 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Mon, 9 May 2005 14:49:54 +0000 Subject: [PATCH] now everything that should be sent gets sent --- qtv/include/client.h | 1 + qtv/include/server.h | 1 + qtv/source/client.c | 19 +++++++++-- qtv/source/server.c | 2 ++ qtv/source/sv_parse.c | 73 +++++++++++++++++++------------------------ 5 files changed, 53 insertions(+), 43 deletions(-) diff --git a/qtv/include/client.h b/qtv/include/client.h index f79127d92..66ed8b1ff 100644 --- a/qtv/include/client.h +++ b/qtv/include/client.h @@ -58,6 +58,7 @@ typedef struct client_s { int delta_sequence; struct server_s *server; + unsigned spec_track; int connected; diff --git a/qtv/include/server.h b/qtv/include/server.h index e6fe12ddf..3346ab695 100644 --- a/qtv/include/server.h +++ b/qtv/include/server.h @@ -45,6 +45,7 @@ typedef struct player_s { int ping; int pl; int frags; + int time; plent_state_t ent; } player_t; diff --git a/qtv/source/client.c b/qtv/source/client.c index 3f76f56ba..abcb00afa 100644 --- a/qtv/source/client.c +++ b/qtv/source/client.c @@ -211,13 +211,13 @@ cl_spawn_f (client_t *cl, void *unused) MSG_WriteShort (msg, pl->frags); MSG_WriteByte (msg, svc_updateping); MSG_WriteByte (msg, i); - MSG_WriteShort (msg, 333/*XXX*/); + MSG_WriteShort (msg, pl->ping); MSG_WriteByte (msg, svc_updatepl); MSG_WriteByte (msg, i); - MSG_WriteByte (msg, 0/*XXX*/); + MSG_WriteByte (msg, pl->pl); MSG_WriteByte (msg, svc_updateentertime); MSG_WriteByte (msg, i); - MSG_WriteFloat (msg, 0/*XXX*/); + MSG_WriteFloat (msg, pl->time); info = pl->info ? Info_MakeString (pl->info, 0) : ""; MSG_WriteByte (msg, svc_updateuserinfo); MSG_WriteByte (msg, i); @@ -322,6 +322,19 @@ cl_nextdl_f (client_t *cl, void *unused) static void cl_ptrack_f (client_t *cl, void *unused) { + int i; + + if (Cmd_Argc () != 2) { + cl->spec_track = 0; + return; + } + i = atoi (Cmd_Argv (1)); + if (i < 0 || i >= MAX_CLIENTS) { + cl->spec_track = 0; + qtv_printf ("Invalid client to track\n"); + return; + } + cl->spec_track = 1 << i; } static void diff --git a/qtv/source/server.c b/qtv/source/server.c index afe661bf4..f79c94978 100644 --- a/qtv/source/server.c +++ b/qtv/source/server.c @@ -554,6 +554,8 @@ Server_Broadcast (server_t *sv, int reliable, byte *msg, int len) svc = *msg++; len--; for (cl = sv->clients; cl; cl = cl->next) { + if ((sv->player_mask != ~0u) && !(sv->player_mask & cl->spec_track)) + continue; if (reliable) { MSG_ReliableWrite_Begin (&cl->backbuf, svc, len + 1); MSG_ReliableWrite_SZ (&cl->backbuf, msg, len); diff --git a/qtv/source/sv_parse.c b/qtv/source/sv_parse.c index 55d453c7b..367dd811f 100644 --- a/qtv/source/sv_parse.c +++ b/qtv/source/sv_parse.c @@ -55,6 +55,7 @@ static __attribute__ ((unused)) const char rcsid[] = #include "QF/sys.h" #include "QF/va.h" +#include "qw/bothdefs.h" #include "qw/msg_ucmd.h" #include "qw/protocol.h" @@ -546,11 +547,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg) dstring_t *key = dstring_newstr (); dstring_t *value = dstring_newstr (); player_t *pl; - byte *data; - int len; - - len = msg->readcount - 1; - data = msg->message->data + len; slot = MSG_ReadByte (msg); dstring_copystr (key, MSG_ReadString (msg)); @@ -567,8 +563,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg) } dstring_delete (key); dstring_delete (value); - len = msg->readcount - len; - Server_Broadcast (sv, 1, data, len); } static void @@ -577,11 +571,6 @@ sv_updateuserinfo (server_t *sv, qmsg_t *msg) int slot, uid; const char *info; player_t *pl; - byte *data; - int len; - - len = msg->readcount - 1; - data = msg->message->data + len; slot = MSG_ReadByte (msg); uid = MSG_ReadLong (msg); @@ -597,8 +586,6 @@ sv_updateuserinfo (server_t *sv, qmsg_t *msg) pl->info = Info_ParseString (info, MAX_INFO_STRING, 0); pl->uid = uid; } - len = msg->readcount - len; - Server_Broadcast (sv, 1, data, len); } static void @@ -641,14 +628,9 @@ sv_update_net (server_t *sv, qmsg_t *msg, int ping) static void sv_sound (server_t *sv, qmsg_t *msg, int stop) { - // XXX int c; vec3_t v; - byte *data; - int len; - len = msg->readcount - 1; - data = msg->message->data + len; if (stop) { MSG_ReadShort (msg); } else { @@ -660,8 +642,6 @@ sv_sound (server_t *sv, qmsg_t *msg, int stop) MSG_ReadByte (msg); MSG_ReadCoordV (msg, v); } - len = msg->readcount - len; - Server_Broadcast (sv, 0, data, len); } static void @@ -744,11 +724,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg) { vec3_t pos; int type; - byte *data; - int len; - - len = msg->readcount - 1; - data = msg->message->data + len; type = MSG_ReadByte (msg); switch (type) { @@ -799,8 +774,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg) MSG_ReadCoordV (msg, pos); break; } - len = msg->readcount - len; - Server_Broadcast (sv, 0, data, len); } static void @@ -820,15 +793,8 @@ sv_nails (server_t *sv, qmsg_t *msg, int nails2) static void sv_print (server_t *sv, qmsg_t *msg) { - byte *data; - int len; - - len = msg->readcount - 1; - data = msg->message->data + len; MSG_ReadByte (msg); qtv_printf ("%s", MSG_ReadString (msg)); - len = msg->readcount - len; - Server_Broadcast (sv, 1, data, len); } static void @@ -844,6 +810,21 @@ sv_lightstyle (server_t *sv, qmsg_t *msg) sv->lightstyles[ind] = strdup (style); } +static void +sv_updateentertime (server_t *sv, qmsg_t *msg) +{ + int slot = MSG_ReadByte (msg); + int time = MSG_ReadFloat (msg); + player_t *pl; + + if (slot >= MAX_SV_PLAYERS) { + qtv_printf ("bogus player: %d\n", slot); + return; + } + pl = sv->players + slot; + pl->time = time; +} + static void save_signon (server_t *sv, qmsg_t *msg, int start) { @@ -868,6 +849,10 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) int signon_saved = 0; while (1) { + int bc_len = msg->readcount; + byte *bc_data = msg->message->data + bc_len; + int send = 1; + svc = MSG_ReadByte (msg); if (svc == -1) break; @@ -878,6 +863,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) Sys_Quit (); return; case svc_nop: + send = 0; break; //case svc_setview: // break; @@ -889,6 +875,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) break; case svc_setangle: sv_setangle (sv, msg); + send = 0; break; case svc_updatefrags: sv_updatefrags (sv, msg); @@ -916,11 +903,11 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) break; case svc_killedmonster: for (pl = sv->players; pl; pl = pl->next) - pl->stats[14]++; //FIXME STAT_MONSTERS + pl->stats[STAT_MONSTERS]++; break; case svc_foundsecret: for (pl = sv->players; pl; pl = pl->next) - pl->stats[13]++; //FIXME STAT_SECRETS + pl->stats[STAT_SECRETS]++; break; case svc_intermission: //XXX @@ -945,9 +932,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) //XXX break; case svc_updateentertime: - //XXX - MSG_ReadByte (msg); - MSG_ReadFloat (msg); + sv_updateentertime (sv, msg); break; case svc_updatestat: case svc_updatestatlong: @@ -962,16 +947,20 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) break; case svc_playerinfo: sv_playerinfo (sv, msg); + send = 0; break; case svc_nails: case svc_nails2: sv_nails (sv, msg, svc == svc_nails2); + send = 0; break; case svc_packetentities: sv_packetentities (sv, msg, 0); + send = 0; break; case svc_deltapacketentities: sv_packetentities (sv, msg, 1); + send = 0; break; case svc_maxspeed: //XXX @@ -1033,6 +1022,10 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable) sv_lightstyle (sv, msg); break; } + if (send) { + bc_len = msg->readcount - bc_len; + Server_Broadcast (sv, reliable, bc_data, bc_len); + } } if (sv->signon && !signon_saved) { save_signon (sv, msg, start);