respawning on network players fixed, the Respawn and Death Flag wasn\'t set right

origin
stpohle 22 years ago
parent 4c84a21b23
commit 4a1b9b79f5

@ -240,6 +240,7 @@ struct pkg_respawn {
signed char pl_nr; signed char pl_nr;
signed char x; signed char x;
signed char y; signed char y;
unsigned char state;
}; };

@ -1332,6 +1332,7 @@ void send_respawn (_net_addr * addr, int plnr) {
r_dat.h.len = HTON16 (sizeof (struct pkg_respawn)); r_dat.h.len = HTON16 (sizeof (struct pkg_respawn));
r_dat.h.flags = PKGF_ackreq; r_dat.h.flags = PKGF_ackreq;
r_dat.pl_nr = plnr; r_dat.pl_nr = plnr;
r_dat.state = players[plnr].state;
r_dat.x = players[plnr].pos.x; r_dat.x = players[plnr].pos.x;
r_dat.y = players[plnr].pos.y; r_dat.y = players[plnr].pos.y;
send_pkg ((struct pkg *) &r_dat, addr); 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) if (addr->pl_nr != bman.p_servnr && addr->pl_nr != r_pkg->pl_nr)
return; return;
if ((r_pkg->state & PSF_respawn) == PSF_respawn) {
players[r_pkg->pl_nr].pos.x = r_pkg->x; 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].pos.y = r_pkg->y;
if (PS_IS_dead (players[r_pkg->pl_nr].state)) if (PS_IS_dead (players[r_pkg->pl_nr].state))
players[r_pkg->pl_nr].state |= PSF_respawn; 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);
}
}; };

Loading…
Cancel
Save