mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-05-31 08:41:11 +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;
|
int delta_sequence;
|
||||||
|
|
||||||
struct server_s *server;
|
struct server_s *server;
|
||||||
|
unsigned spec_track;
|
||||||
|
|
||||||
int connected;
|
int connected;
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ typedef struct player_s {
|
||||||
int ping;
|
int ping;
|
||||||
int pl;
|
int pl;
|
||||||
int frags;
|
int frags;
|
||||||
|
int time;
|
||||||
|
|
||||||
plent_state_t ent;
|
plent_state_t ent;
|
||||||
} player_t;
|
} player_t;
|
||||||
|
|
|
@ -211,13 +211,13 @@ cl_spawn_f (client_t *cl, void *unused)
|
||||||
MSG_WriteShort (msg, pl->frags);
|
MSG_WriteShort (msg, pl->frags);
|
||||||
MSG_WriteByte (msg, svc_updateping);
|
MSG_WriteByte (msg, svc_updateping);
|
||||||
MSG_WriteByte (msg, i);
|
MSG_WriteByte (msg, i);
|
||||||
MSG_WriteShort (msg, 333/*XXX*/);
|
MSG_WriteShort (msg, pl->ping);
|
||||||
MSG_WriteByte (msg, svc_updatepl);
|
MSG_WriteByte (msg, svc_updatepl);
|
||||||
MSG_WriteByte (msg, i);
|
MSG_WriteByte (msg, i);
|
||||||
MSG_WriteByte (msg, 0/*XXX*/);
|
MSG_WriteByte (msg, pl->pl);
|
||||||
MSG_WriteByte (msg, svc_updateentertime);
|
MSG_WriteByte (msg, svc_updateentertime);
|
||||||
MSG_WriteByte (msg, i);
|
MSG_WriteByte (msg, i);
|
||||||
MSG_WriteFloat (msg, 0/*XXX*/);
|
MSG_WriteFloat (msg, pl->time);
|
||||||
info = pl->info ? Info_MakeString (pl->info, 0) : "";
|
info = pl->info ? Info_MakeString (pl->info, 0) : "";
|
||||||
MSG_WriteByte (msg, svc_updateuserinfo);
|
MSG_WriteByte (msg, svc_updateuserinfo);
|
||||||
MSG_WriteByte (msg, i);
|
MSG_WriteByte (msg, i);
|
||||||
|
@ -322,6 +322,19 @@ cl_nextdl_f (client_t *cl, void *unused)
|
||||||
static void
|
static void
|
||||||
cl_ptrack_f (client_t *cl, void *unused)
|
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
|
static void
|
||||||
|
|
|
@ -554,6 +554,8 @@ Server_Broadcast (server_t *sv, int reliable, byte *msg, int len)
|
||||||
svc = *msg++;
|
svc = *msg++;
|
||||||
len--;
|
len--;
|
||||||
for (cl = sv->clients; cl; cl = cl->next) {
|
for (cl = sv->clients; cl; cl = cl->next) {
|
||||||
|
if ((sv->player_mask != ~0u) && !(sv->player_mask & cl->spec_track))
|
||||||
|
continue;
|
||||||
if (reliable) {
|
if (reliable) {
|
||||||
MSG_ReliableWrite_Begin (&cl->backbuf, svc, len + 1);
|
MSG_ReliableWrite_Begin (&cl->backbuf, svc, len + 1);
|
||||||
MSG_ReliableWrite_SZ (&cl->backbuf, msg, len);
|
MSG_ReliableWrite_SZ (&cl->backbuf, msg, len);
|
||||||
|
|
|
@ -55,6 +55,7 @@ static __attribute__ ((unused)) const char rcsid[] =
|
||||||
#include "QF/sys.h"
|
#include "QF/sys.h"
|
||||||
#include "QF/va.h"
|
#include "QF/va.h"
|
||||||
|
|
||||||
|
#include "qw/bothdefs.h"
|
||||||
#include "qw/msg_ucmd.h"
|
#include "qw/msg_ucmd.h"
|
||||||
#include "qw/protocol.h"
|
#include "qw/protocol.h"
|
||||||
|
|
||||||
|
@ -546,11 +547,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg)
|
||||||
dstring_t *key = dstring_newstr ();
|
dstring_t *key = dstring_newstr ();
|
||||||
dstring_t *value = dstring_newstr ();
|
dstring_t *value = dstring_newstr ();
|
||||||
player_t *pl;
|
player_t *pl;
|
||||||
byte *data;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = msg->readcount - 1;
|
|
||||||
data = msg->message->data + len;
|
|
||||||
|
|
||||||
slot = MSG_ReadByte (msg);
|
slot = MSG_ReadByte (msg);
|
||||||
dstring_copystr (key, MSG_ReadString (msg));
|
dstring_copystr (key, MSG_ReadString (msg));
|
||||||
|
@ -567,8 +563,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg)
|
||||||
}
|
}
|
||||||
dstring_delete (key);
|
dstring_delete (key);
|
||||||
dstring_delete (value);
|
dstring_delete (value);
|
||||||
len = msg->readcount - len;
|
|
||||||
Server_Broadcast (sv, 1, data, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -577,11 +571,6 @@ sv_updateuserinfo (server_t *sv, qmsg_t *msg)
|
||||||
int slot, uid;
|
int slot, uid;
|
||||||
const char *info;
|
const char *info;
|
||||||
player_t *pl;
|
player_t *pl;
|
||||||
byte *data;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = msg->readcount - 1;
|
|
||||||
data = msg->message->data + len;
|
|
||||||
|
|
||||||
slot = MSG_ReadByte (msg);
|
slot = MSG_ReadByte (msg);
|
||||||
uid = MSG_ReadLong (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->info = Info_ParseString (info, MAX_INFO_STRING, 0);
|
||||||
pl->uid = uid;
|
pl->uid = uid;
|
||||||
}
|
}
|
||||||
len = msg->readcount - len;
|
|
||||||
Server_Broadcast (sv, 1, data, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -641,14 +628,9 @@ sv_update_net (server_t *sv, qmsg_t *msg, int ping)
|
||||||
static void
|
static void
|
||||||
sv_sound (server_t *sv, qmsg_t *msg, int stop)
|
sv_sound (server_t *sv, qmsg_t *msg, int stop)
|
||||||
{
|
{
|
||||||
// XXX
|
|
||||||
int c;
|
int c;
|
||||||
vec3_t v;
|
vec3_t v;
|
||||||
byte *data;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = msg->readcount - 1;
|
|
||||||
data = msg->message->data + len;
|
|
||||||
if (stop) {
|
if (stop) {
|
||||||
MSG_ReadShort (msg);
|
MSG_ReadShort (msg);
|
||||||
} else {
|
} else {
|
||||||
|
@ -660,8 +642,6 @@ sv_sound (server_t *sv, qmsg_t *msg, int stop)
|
||||||
MSG_ReadByte (msg);
|
MSG_ReadByte (msg);
|
||||||
MSG_ReadCoordV (msg, v);
|
MSG_ReadCoordV (msg, v);
|
||||||
}
|
}
|
||||||
len = msg->readcount - len;
|
|
||||||
Server_Broadcast (sv, 0, data, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -744,11 +724,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg)
|
||||||
{
|
{
|
||||||
vec3_t pos;
|
vec3_t pos;
|
||||||
int type;
|
int type;
|
||||||
byte *data;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = msg->readcount - 1;
|
|
||||||
data = msg->message->data + len;
|
|
||||||
|
|
||||||
type = MSG_ReadByte (msg);
|
type = MSG_ReadByte (msg);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -799,8 +774,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg)
|
||||||
MSG_ReadCoordV (msg, pos);
|
MSG_ReadCoordV (msg, pos);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
len = msg->readcount - len;
|
|
||||||
Server_Broadcast (sv, 0, data, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -820,15 +793,8 @@ sv_nails (server_t *sv, qmsg_t *msg, int nails2)
|
||||||
static void
|
static void
|
||||||
sv_print (server_t *sv, qmsg_t *msg)
|
sv_print (server_t *sv, qmsg_t *msg)
|
||||||
{
|
{
|
||||||
byte *data;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = msg->readcount - 1;
|
|
||||||
data = msg->message->data + len;
|
|
||||||
MSG_ReadByte (msg);
|
MSG_ReadByte (msg);
|
||||||
qtv_printf ("%s", MSG_ReadString (msg));
|
qtv_printf ("%s", MSG_ReadString (msg));
|
||||||
len = msg->readcount - len;
|
|
||||||
Server_Broadcast (sv, 1, data, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -844,6 +810,21 @@ sv_lightstyle (server_t *sv, qmsg_t *msg)
|
||||||
sv->lightstyles[ind] = strdup (style);
|
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
|
static void
|
||||||
save_signon (server_t *sv, qmsg_t *msg, int start)
|
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;
|
int signon_saved = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
int bc_len = msg->readcount;
|
||||||
|
byte *bc_data = msg->message->data + bc_len;
|
||||||
|
int send = 1;
|
||||||
|
|
||||||
svc = MSG_ReadByte (msg);
|
svc = MSG_ReadByte (msg);
|
||||||
if (svc == -1)
|
if (svc == -1)
|
||||||
break;
|
break;
|
||||||
|
@ -878,6 +863,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
Sys_Quit ();
|
Sys_Quit ();
|
||||||
return;
|
return;
|
||||||
case svc_nop:
|
case svc_nop:
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
//case svc_setview:
|
//case svc_setview:
|
||||||
// break;
|
// break;
|
||||||
|
@ -889,6 +875,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
break;
|
break;
|
||||||
case svc_setangle:
|
case svc_setangle:
|
||||||
sv_setangle (sv, msg);
|
sv_setangle (sv, msg);
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
case svc_updatefrags:
|
case svc_updatefrags:
|
||||||
sv_updatefrags (sv, msg);
|
sv_updatefrags (sv, msg);
|
||||||
|
@ -916,11 +903,11 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
break;
|
break;
|
||||||
case svc_killedmonster:
|
case svc_killedmonster:
|
||||||
for (pl = sv->players; pl; pl = pl->next)
|
for (pl = sv->players; pl; pl = pl->next)
|
||||||
pl->stats[14]++; //FIXME STAT_MONSTERS
|
pl->stats[STAT_MONSTERS]++;
|
||||||
break;
|
break;
|
||||||
case svc_foundsecret:
|
case svc_foundsecret:
|
||||||
for (pl = sv->players; pl; pl = pl->next)
|
for (pl = sv->players; pl; pl = pl->next)
|
||||||
pl->stats[13]++; //FIXME STAT_SECRETS
|
pl->stats[STAT_SECRETS]++;
|
||||||
break;
|
break;
|
||||||
case svc_intermission:
|
case svc_intermission:
|
||||||
//XXX
|
//XXX
|
||||||
|
@ -945,9 +932,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
//XXX
|
//XXX
|
||||||
break;
|
break;
|
||||||
case svc_updateentertime:
|
case svc_updateentertime:
|
||||||
//XXX
|
sv_updateentertime (sv, msg);
|
||||||
MSG_ReadByte (msg);
|
|
||||||
MSG_ReadFloat (msg);
|
|
||||||
break;
|
break;
|
||||||
case svc_updatestat:
|
case svc_updatestat:
|
||||||
case svc_updatestatlong:
|
case svc_updatestatlong:
|
||||||
|
@ -962,16 +947,20 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
break;
|
break;
|
||||||
case svc_playerinfo:
|
case svc_playerinfo:
|
||||||
sv_playerinfo (sv, msg);
|
sv_playerinfo (sv, msg);
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
case svc_nails:
|
case svc_nails:
|
||||||
case svc_nails2:
|
case svc_nails2:
|
||||||
sv_nails (sv, msg, svc == svc_nails2);
|
sv_nails (sv, msg, svc == svc_nails2);
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
case svc_packetentities:
|
case svc_packetentities:
|
||||||
sv_packetentities (sv, msg, 0);
|
sv_packetentities (sv, msg, 0);
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
case svc_deltapacketentities:
|
case svc_deltapacketentities:
|
||||||
sv_packetentities (sv, msg, 1);
|
sv_packetentities (sv, msg, 1);
|
||||||
|
send = 0;
|
||||||
break;
|
break;
|
||||||
case svc_maxspeed:
|
case svc_maxspeed:
|
||||||
//XXX
|
//XXX
|
||||||
|
@ -1033,6 +1022,10 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
|
||||||
sv_lightstyle (sv, msg);
|
sv_lightstyle (sv, msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (send) {
|
||||||
|
bc_len = msg->readcount - bc_len;
|
||||||
|
Server_Broadcast (sv, reliable, bc_data, bc_len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sv->signon && !signon_saved) {
|
if (sv->signon && !signon_saved) {
|
||||||
save_signon (sv, msg, start);
|
save_signon (sv, msg, start);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue