|
|
|
@ -1325,21 +1325,32 @@ do_mapinfo (struct pkg_mapinfo *map_pkg, _net_addr * addr)
|
|
|
|
|
/***
|
|
|
|
|
*** Respawn Date Handling
|
|
|
|
|
***/
|
|
|
|
|
void send_respawn (_net_addr * addr, int plnr, _point pos) {
|
|
|
|
|
void send_respawn (_net_addr * addr, int plnr) {
|
|
|
|
|
struct pkg_respawn r_dat;
|
|
|
|
|
|
|
|
|
|
r_dat.h.typ = PKG_respawn;
|
|
|
|
|
r_dat.h.len = HTON16 (sizeof (struct pkg_respawn));
|
|
|
|
|
r_dat.h.flags = PKGF_ackreq;
|
|
|
|
|
r_dat.pl_nr = plnr;
|
|
|
|
|
r_dat.x = pos.x;
|
|
|
|
|
r_dat.y = pos.y;
|
|
|
|
|
r_dat.x = players[plnr].pos.x;
|
|
|
|
|
r_dat.y = players[plnr].pos.y;
|
|
|
|
|
send_pkg ((struct pkg *) &r_dat, addr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void do_respawn (struct pkg_respawn *r_pkg, _net_addr *addr) {
|
|
|
|
|
|
|
|
|
|
d_printf ("do_respawn (addr %d, pl_nr %d, pos %d,%d)\n", addr->pl_nr, r_pkg->pl_nr, r_pkg->x, r_pkg->y);
|
|
|
|
|
if (addr->pl_nr == -1 || r_pkg->pl_nr == -1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* check if the right player is sending the information */
|
|
|
|
|
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;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1524,6 +1535,9 @@ do_pkg (struct pkg *packet, _net_addr * addr)
|
|
|
|
|
case (PKG_dropitem):
|
|
|
|
|
do_dropitems ((struct pkg_dropitem *) packet, addr);
|
|
|
|
|
break;
|
|
|
|
|
case (PKG_respawn):
|
|
|
|
|
do_respawn ((struct pkg_respawn *) packet, addr);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
send_error (addr, "BomberClone: unknown data packet");
|
|
|
|
|
break;
|
|
|
|
|