mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
now everything that should be sent gets sent
This commit is contained in:
parent
1029ad31bc
commit
57fc1eacb6
5 changed files with 53 additions and 43 deletions
|
@ -58,6 +58,7 @@ typedef struct client_s {
|
|||
int delta_sequence;
|
||||
|
||||
struct server_s *server;
|
||||
unsigned spec_track;
|
||||
|
||||
int connected;
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ typedef struct player_s {
|
|||
int ping;
|
||||
int pl;
|
||||
int frags;
|
||||
int time;
|
||||
|
||||
plent_state_t ent;
|
||||
} player_t;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue