From 4a1b9b79f5a86177e2aa1692f40762a8e48a6cdb Mon Sep 17 00:00:00 2001 From: stpohle Date: Wed, 28 Jan 2004 21:09:31 +0000 Subject: [PATCH] respawning on network players fixed, the Respawn and Death Flag wasn\'t set right --- include/packets.h | 1 + src/packets.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/packets.h b/include/packets.h index b4b45fc..cb222f7 100644 --- a/include/packets.h +++ b/include/packets.h @@ -240,6 +240,7 @@ struct pkg_respawn { signed char pl_nr; signed char x; signed char y; + unsigned char state; }; diff --git a/src/packets.c b/src/packets.c index 799d666..2d6f2e8 100644 --- a/src/packets.c +++ b/src/packets.c @@ -1332,6 +1332,7 @@ void send_respawn (_net_addr * addr, int plnr) { r_dat.h.len = HTON16 (sizeof (struct pkg_respawn)); r_dat.h.flags = PKGF_ackreq; r_dat.pl_nr = plnr; + r_dat.state = players[plnr].state; r_dat.x = players[plnr].pos.x; r_dat.y = players[plnr].pos.y; send_pkg ((struct pkg *) &r_dat, addr); @@ -1347,10 +1348,18 @@ void do_respawn (struct pkg_respawn *r_pkg, _net_addr *addr) { if (addr->pl_nr != bman.p_servnr && addr->pl_nr != r_pkg->pl_nr) return; - players[r_pkg->pl_nr].pos.x = r_pkg->x; - players[r_pkg->pl_nr].pos.y = r_pkg->y; - if (PS_IS_dead (players[r_pkg->pl_nr].state)) - players[r_pkg->pl_nr].state |= PSF_respawn; + if ((r_pkg->state & PSF_respawn) == PSF_respawn) { + players[r_pkg->pl_nr].pos.x = r_pkg->x; + players[r_pkg->pl_nr].pos.y = r_pkg->y; + if (PS_IS_dead (players[r_pkg->pl_nr].state)) + players[r_pkg->pl_nr].state |= PSF_respawn; + } + else if ((r_pkg->state & (PSF_respawn + PSF_alife)) == PSF_alife) { + players[r_pkg->pl_nr].pos.x = r_pkg->x; + players[r_pkg->pl_nr].pos.y = r_pkg->y; + players[r_pkg->pl_nr].state |= PSF_alife; + players[r_pkg->pl_nr].state &= (0xFF - PSF_alife); + } };