special_trigger needs to sync the bomb ex_nr number on all network clients.

origin
stpohle 23 years ago
parent 4ceea6fd4a
commit 91aa088ac4

@ -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. 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 void
net_game_send_special (int pl_nr) net_game_send_special (int pl_nr, int ex_nr)
{ {
int pl; int pl;
@ -795,5 +797,5 @@ net_game_send_special (int pl_nr)
for (pl = 0; pl < MAX_PLAYERS; pl++) for (pl = 0; pl < MAX_PLAYERS; pl++)
if (PS_IS_netplayer (bman.players[pl].state) && pl != pl_nr) 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);
}; };

@ -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_playermove (int p_nr, int mustsend);
extern void net_game_send_bomb (int p, int b); 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_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_fillsockaddr ();
extern void net_game_send_ill (int p_nr); extern void net_game_send_ill (int p_nr);
extern void net_delplayer (int pl_nr); extern void net_delplayer (int pl_nr);

@ -914,19 +914,20 @@ void do_special (struct pkg_special *sp_pkg, _net_addr *addr) {
return; return;
bman.players[sp_pkg->pl_nr].special = sp_pkg->typ; bman.players[sp_pkg->pl_nr].special = sp_pkg->typ;
bman.last_ex_nr = sp_pkg->ex_nr;
special_use (sp_pkg->pl_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; struct pkg_special sp_dat;
sp_dat.h.typ = PKG_special; sp_dat.h.typ = PKG_special;
sp_dat.h.len = sizeof (struct pkg_special); sp_dat.h.len = sizeof (struct pkg_special);
sp_dat.h.flags = PKGF_ackreq;
sp_dat.pl_nr = p_nr; sp_dat.pl_nr = p_nr;
sp_dat.typ = typ; sp_dat.typ = typ;
sp_dat.h.flags = PKGF_ackreq; sp_dat.ex_nr = ex_nr;
send_pkg ((struct pkg *) &sp_dat, addr); send_pkg ((struct pkg *) &sp_dat, addr);
}; };

@ -227,6 +227,7 @@ struct _inpkg_index {
struct pkg_special { struct pkg_special {
struct pkgheader h; struct pkgheader h;
signed char pl_nr; signed char pl_nr;
int ex_nr;
unsigned char typ; 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_pkgack (_net_addr *addr, unsigned char typ, short int id);
extern void send_chat (_net_addr *addr, char *text); extern void send_chat (_net_addr *addr, char *text);
extern void send_ill (_net_addr *addr, int p_nr, _player *pl); 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 get_player_nr (char *host, char *port);
extern int inpkg_check (unsigned char typ, short int id, _net_addr *addr); extern int inpkg_check (unsigned char typ, short int id, _net_addr *addr);

@ -8,15 +8,24 @@ void
special_trigger (int p_nr) special_trigger (int p_nr)
{ {
int i, int i,
z=0; z=0,
ex_nr = bman.last_ex_nr;
_player *p = &bman.players[p_nr]; _player *p = &bman.players[p_nr];
// all ticking bombs will explode // all ticking bombs will explode
for (i = 0; i < MAX_BOMBS; i++) for (i = 0; i < MAX_BOMBS; i++)
if (p->bombs[i].state == BS_trigger) { 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) 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 void

Loading…
Cancel
Save