|
|
|
@ -1154,6 +1154,53 @@ do_pkgack (struct pkg_pkgack *p_ack, _net_addr * addr)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
*** Packettype: dropitems
|
|
|
|
|
*** send a generated list of drop items
|
|
|
|
|
***/
|
|
|
|
|
void send_dropitems (_net_addr *addr, int pl_nr, _flyingitem **fitems, int cnt) {
|
|
|
|
|
char outdata[BUF_SIZE]; // this should be enough memory for the outgoin data
|
|
|
|
|
struct pkg_dropitem *dipkg = (struct pkg_dropitem *) outdata; // set the pointer to outdata
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
dipkg->h.typ = PKG_dropitem;
|
|
|
|
|
dipkg->h.len = HTON16 (sizeof (struct pkg_dropitem) + cnt*sizeof (struct pkgdropitemelemt));
|
|
|
|
|
dipkg->h.flags = PKGF_ackreq;
|
|
|
|
|
dipkg->pl_nr = pl_nr;
|
|
|
|
|
dipkg->from.x = HTON16 (FTOI16 (players[pl_nr].pos.x));
|
|
|
|
|
dipkg->from.y = HTON16 (FTOI16 (players[pl_nr].pos.y));
|
|
|
|
|
dipkg->count = cnt;
|
|
|
|
|
|
|
|
|
|
for (i = 0; (i < cnt && fitems[i] != NULL); i++) {
|
|
|
|
|
dipkg->items[i].x = (int)fitems[i]->to.x;
|
|
|
|
|
dipkg->items[i].y = (int)fitems[i]->to.y;
|
|
|
|
|
dipkg->items[i].typ = (int)fitems[i]->type;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
send_pkg ((struct pkg*)dipkg, addr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void do_dropitems (struct pkg_dropitem *di_pkg, _net_addr *addr) {
|
|
|
|
|
int i;
|
|
|
|
|
_pointf from;
|
|
|
|
|
_point to;
|
|
|
|
|
|
|
|
|
|
d_printf ("do_dropitems from:%d (pl_nr %d, cnt %d)\n", addr->pl_nr, di_pkg->pl_nr, di_pkg->count);
|
|
|
|
|
if (addr->pl_nr == -1)
|
|
|
|
|
return;
|
|
|
|
|
from.x = I16TOF (NTOH16 (di_pkg->from.x));
|
|
|
|
|
from.y = I16TOF (NTOH16 (di_pkg->from.y));
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < di_pkg->count; i++) {
|
|
|
|
|
to.x = di_pkg->items[i].x;
|
|
|
|
|
to.y = di_pkg->items[i].y;
|
|
|
|
|
flitems_additem (from, to, di_pkg->items[i].typ);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
*** Packettype: special
|
|
|
|
|
*** moves/bombs... whatever will be send as we use it
|
|
|
|
@ -1444,6 +1491,9 @@ do_pkg (struct pkg *packet, _net_addr * addr)
|
|
|
|
|
case (PKG_joingame):
|
|
|
|
|
do_joingame ((struct pkg_joingame *) packet, addr);
|
|
|
|
|
break;
|
|
|
|
|
case (PKG_dropitem):
|
|
|
|
|
do_dropitems ((struct pkg_dropitem *) packet, addr);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
send_error (addr, "BomberClone: unknown data packet");
|
|
|
|
|
break;
|
|
|
|
|