Date: Thursday May 10, 2001 @ 18:19
Author: cameron
Update of /home/netrek/cvsroot/Vanilla/ntserv
In directory swashbuckler.fortress.real-time.com:/var/tmp/cvs-serv8865/ntserv
Modified Files:
genspkt.c redraw.c
Log Message:
Trent Piepho's observer status patch as per vanilla-list.
****************************************
Index: Vanilla/ntserv/genspkt.c
diff -u Vanilla/ntserv/genspkt.c:1.20 Vanilla/ntserv/genspkt.c:1.21
--- Vanilla/ntserv/genspkt.c:1.20 Fri Apr 27 20:37:25 2001
+++ Vanilla/ntserv/genspkt.c Thu May 10 18:19:46 2001
@@ -307,37 +307,37 @@
inline static int
sndFlags( struct flags_spacket *flags, struct player *pl, int howmuch)
{
-/*#define FLAGMASK (PFSHIELD|PFBOMB|PFORBIT|PFCLOAK|PFROBOT|PFBEAMUP|PFBEAMDOWN|PFPRACTR|PFDOCK|PFTRACT|PFPRESS|PFDOCKOK) atm mask */
+/*#define FLAGMASK (PFSHIELD|PFBOMB|PFORBIT|PFCLOAK|PFROBOT|PFBEAMUP|PFBEAMDOWN|PFPRACTR|PFDOCK|PFTRACT|PFPRESS|PFDOCKOK) aieee, too much. 7/27/91 TC */
+/*#define FLAGMASK (PFSHIELD|PFBOMB|PFORBIT|PFCLOAK|PFROBOT| PFPRACTR|PFDOCK|PFTRACT|PFPRESS|PFDOCKOK) still more than needed */
-/* #define FLAGMASK (PFSHIELD|PFBOMB|PFORBIT|PFCLOAK|PFROBOT|PFBEAMUP|PFBEAMDOWN|PFPRACTR|PFDOCK|PFTRACT|PFPRESS|PFDOCKOK) aieee, too much. 7/27/91 TC */
+/* Flags we get to know about players not seen */
+#define INVISOMASK (PFCLOAK|PFROBOT|PFPRACTR|PFDOCKOK|PFOBSERV)
+/* Flags we get to know about players who are seen */
+#define FLAGMASK (PFSHIELD | INVISOMASK)
-#define FLAGMASK (PFSHIELD|PFBOMB|PFORBIT|PFCLOAK|PFROBOT|PFPRACTR|PFDOCK|PFTRACT|PFPRESS|PFDOCKOK)
-#define INVISOMASK (PFCLOAK|PFROBOT|PFPRACTR|PFDOCKOK)
-
int mask;
int tractor = (F_show_all_tractors && pl->p_flags&PFTRACT)?
(pl->p_tractor|0x40):0;
- if (howmuch == UPDT_ALL)
+ if (howmuch == UPDT_ALL) {
mask = FLAGMASK;
- else
- mask = INVISOMASK | (F_show_all_tractors?PFTRACT|PFPRESS:0);
+ if(F_show_all_tractors) mask |= PFTRACT|PFPRESS;
+ } else
+ mask = INVISOMASK;
+
+ /* With short packets 2 flag sampling, these don't need to be sent */
+ if (send_short>1 && pl->p_no<32)
+ mask &= ~(PFSHIELD|PFCLOAK);
+
- if (flags->flags==htonl(mask&pl->p_flags) &&
- flags->tractor==tractor )
+ if ((ntohl(flags->flags)&mask) == (pl->p_flags&mask) &&
+ flags->tractor==tractor)
/* Nothing has changed, don't send a packet */
return FALSE;
flags->type=SP_FLAGS;
flags->pnum=pl->p_no;
flags->flags=htonl(mask & pl->p_flags);
-
- if (send_short>1 && pl->p_ship.s_type!=STARBASE &&
- flags->tractor==tractor &&
- !(pl->p_flags&PFROBOT) && pl->p_no<32)
- /* S_P2 flags already sent, so don't send anything */
- return FALSE;
-
flags->tractor = tractor;
sendClientPacket(flags);
Index: Vanilla/ntserv/redraw.c
diff -u Vanilla/ntserv/redraw.c:1.9 Vanilla/ntserv/redraw.c:1.10
--- Vanilla/ntserv/redraw.c:1.9 Tue Sep 21 00:06:25 1999
+++ Vanilla/ntserv/redraw.c Thu May 10 18:19:46 2001
@@ -124,12 +124,12 @@
if (!Observer) return;
if (me->p_status != POBSERV) {
- if (me->p_status == PDEAD || me->p_status == PEXPLODE) {
+ if (me->p_status == PDEAD || me->p_status == PEXPLODE) {
death ();
return;
}else{
if (me->p_status == PFREE){
- ERROR(1,("check_observs: changing a PFREE!\n"));
+ ERROR(1,("check_observs: changing a PFREE!\n"));
}
me->p_status = POBSERV;
}
@@ -170,6 +170,7 @@
return;
}
+ me->p_flags |= PFOBSERV; /* future clients may understand this */
/* Check if I am locked onto a player */
if (me->p_flags & PFPLOCK) {
if ( (me->p_playerl < 0) || (me->p_playerl >= MAXPLAYER) ){
@@ -208,13 +209,13 @@
me->p_fuel = pl->p_fuel;
me->p_wtemp = pl->p_wtemp;
me->p_etemp = pl->p_etemp;
- me->p_flags = (pl->p_flags & ~(PFSELFDEST | PFPLOCK | PFPLLOCK)) |
- (me->p_flags & (PFSELFDEST | PFPLOCK | PFPLLOCK));
+ /* These flags shouldn't be propagated to observers */
+#define NOOBSMASK (PFSELFDEST|PFPLOCK|PFPLLOCK|PFOBSERV)
+ me->p_flags = (pl->p_flags & ~NOOBSMASK) | (me->p_flags & NOOBSMASK);
/* always cloaked, state of person watched will be obvious */
/* me->p_flags |= PFCLOAK; */
me->p_dir = pl->p_dir;
- me->p_flags |= PFOBSERV; /* future clients may understand this */
me->p_tractor = pl->p_tractor;
me->p_speed = pl->p_speed;