diff --git a/src/network.c b/src/network.c index 296d40c..76a9f1b 100644 --- a/src/network.c +++ b/src/network.c @@ -1,4 +1,4 @@ -/* $Id: network.c,v 1.23 2003/05/13 22:48:32 stpohle Exp $ */ +/* $Id: network.c,v 1.24 2003/05/15 04:56:15 stpohle Exp $ */ /* network routines. */ @@ -782,9 +782,11 @@ net_new_game () -/* send special use elements into the network */ +/* send special use elements into the network, + to make sure nothing bad happens with explosions + we send the ex_nr number too */ void -net_game_send_special (int pl_nr) +net_game_send_special (int pl_nr, int ex_nr) { int pl; @@ -795,5 +797,5 @@ net_game_send_special (int pl_nr) for (pl = 0; pl < MAX_PLAYERS; pl++) if (PS_IS_netplayer (bman.players[pl].state) && pl != pl_nr) - send_special (&bman.players[pl].net.addr, pl_nr, bman.players[pl_nr].special); + send_special (&bman.players[pl].net.addr, pl_nr, bman.players[pl_nr].special, ex_nr); }; diff --git a/src/network.h b/src/network.h index 233c298..e408ec0 100644 --- a/src/network.h +++ b/src/network.h @@ -74,7 +74,7 @@ extern void net_game_send_player (int p_nr); extern void net_game_send_playermove (int p_nr, int mustsend); extern void net_game_send_bomb (int p, int b); extern void net_game_send_field (int x, int y); -extern void net_game_send_special (int pl_nr); +extern void net_game_send_special (int pl_nr, int ex_nr); extern void net_game_fillsockaddr (); extern void net_game_send_ill (int p_nr); extern void net_delplayer (int pl_nr); diff --git a/src/packets.c b/src/packets.c index 922adf3..5c19f78 100644 --- a/src/packets.c +++ b/src/packets.c @@ -914,19 +914,20 @@ void do_special (struct pkg_special *sp_pkg, _net_addr *addr) { return; bman.players[sp_pkg->pl_nr].special = sp_pkg->typ; + bman.last_ex_nr = sp_pkg->ex_nr; special_use (sp_pkg->pl_nr); }; -void send_special (_net_addr *addr, int p_nr, int typ) { +void send_special (_net_addr *addr, int p_nr, int typ, int ex_nr) { struct pkg_special sp_dat; sp_dat.h.typ = PKG_special; sp_dat.h.len = sizeof (struct pkg_special); + sp_dat.h.flags = PKGF_ackreq; sp_dat.pl_nr = p_nr; sp_dat.typ = typ; - sp_dat.h.flags = PKGF_ackreq; - + sp_dat.ex_nr = ex_nr; send_pkg ((struct pkg *) &sp_dat, addr); }; diff --git a/src/packets.h b/src/packets.h index 2d3913a..f3afd5e 100644 --- a/src/packets.h +++ b/src/packets.h @@ -227,6 +227,7 @@ struct _inpkg_index { struct pkg_special { struct pkgheader h; signed char pl_nr; + int ex_nr; unsigned char typ; }; @@ -268,7 +269,7 @@ extern void send_playerstatus (_net_addr *addr, int pl_nr, int net_istep, int st extern void send_pkgack (_net_addr *addr, unsigned char typ, short int id); extern void send_chat (_net_addr *addr, char *text); extern void send_ill (_net_addr *addr, int p_nr, _player *pl); -extern void send_special (_net_addr *addr, int p_nr, int typ); +extern void send_special (_net_addr *addr, int p_nr, int typ, int ex_nr); extern int get_player_nr (char *host, char *port); extern int inpkg_check (unsigned char typ, short int id, _net_addr *addr); diff --git a/src/special.c b/src/special.c index 70a8ef8..bf353f9 100644 --- a/src/special.c +++ b/src/special.c @@ -8,15 +8,24 @@ void special_trigger (int p_nr) { int i, - z=0; + z=0, + ex_nr = bman.last_ex_nr; + _player *p = &bman.players[p_nr]; + // all ticking bombs will explode for (i = 0; i < MAX_BOMBS; i++) if (p->bombs[i].state == BS_trigger) { - bomb_explode (p_nr, i,0);z++;} + p->bombs[i].ex_nr = ex_nr + 5; // we take the next 5 number to be shure + bomb_explode (p_nr, i,0); // no other explosion interfear with it. + z++; + } if (p_nr == bman.p_nr && GT_MP_PTP && z) - net_game_send_special (p_nr); + net_game_send_special (p_nr, ex_nr); + + if (z) + bman.last_ex_nr = ex_nr + 6; } void