|
|
@ -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);
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|