respawn test 1

origin
stpohle 22 years ago
parent 9979e58eed
commit a2cb79c9d8

@ -1,4 +1,4 @@
/* $Id: map.h,v 1.10 2004/01/25 14:10:29 stpohle Exp $ */ /* $Id: map.h,v 1.11 2004/01/27 21:58:05 stpohle Exp $ */
/* map.h */ /* map.h */
#ifndef _MAP_H_ #ifndef _MAP_H_
@ -71,6 +71,7 @@ extern void map_new (char *filename);
extern void map_set_playerposition (int usermap); extern void map_set_playerposition (int usermap);
extern void map_load (FILE * fmap); extern void map_load (FILE * fmap);
extern void map_set_player_way (int pl); extern void map_set_player_way (int pl);
extern void map_set_player_way1 (int pl);
extern void map_set_player_way2 (int pl, int hardway); extern void map_set_player_way2 (int pl, int hardway);

@ -1,4 +1,4 @@
/* $Id: network.h,v 1.12 2004/01/27 21:13:42 stpohle Exp $ /* $Id: network.h,v 1.13 2004/01/27 21:58:05 stpohle Exp $
* network.h file... for everything what have to do with the network stuff * network.h file... for everything what have to do with the network stuff
*/ */
@ -110,7 +110,7 @@ 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, int ex_nr); extern void net_game_send_special (int pl_nr, int ex_nr);
extern void net_game_send_dropitems (int pl_nr, _flyingitem **fiptr, int cnt); extern void net_game_send_dropitems (int pl_nr, _flyingitem **fiptr, int cnt);
extern void net_game_send_respawn (int pl_nr, _point pos); extern void net_game_send_respawn (int pl_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);

@ -356,7 +356,7 @@ extern void send_special (_net_addr *addr, int p_nr, int typ, int ex_nr);
extern void send_mapinfo (_net_addr *addr); extern void send_mapinfo (_net_addr *addr);
extern void send_tunneldata (_net_addr *addr, int tunnelnr, int x, int y); extern void send_tunneldata (_net_addr *addr, int tunnelnr, int x, int y);
extern void send_dropitems (_net_addr *addr, int pl_nr, _flyingitem **fitems, int cnt); extern void send_dropitems (_net_addr *addr, int pl_nr, _flyingitem **fitems, int cnt);
extern void send_respawn (_net_addr * addr, int plnr, _point pos); extern void send_respawn (_net_addr * addr, int plnr);
extern void fwd_pkg (struct pkg *packet, _net_addr *addr); extern void fwd_pkg (struct pkg *packet, _net_addr *addr);

@ -1,4 +1,4 @@
/* $Id: network.c,v 1.56 2004/01/27 21:13:44 stpohle Exp $ */ /* $Id: network.c,v 1.57 2004/01/27 21:58:06 stpohle Exp $ */
/* /*
network routines. network routines.
*/ */
@ -844,15 +844,15 @@ void send_ogc_update () {
/* send the respawn data to all clients and with the new position of the player */ /* send the respawn data to all clients and with the new position of the player */
void net_game_send_respawn (int pl_nr, _point pos) { void net_game_send_respawn (int pl_nr) {
int pl; int pl;
d_printf ("Send Respawn Data %d New Position (%d,%d)\n", pl_nr, pos.x, pos.y); d_printf ("Send Respawn Data %d New Position (%d,%d)\n", pl_nr);
if (pl_nr < 0 || pl_nr >= MAX_PLAYERS) if (pl_nr < 0 || pl_nr >= MAX_PLAYERS)
return; return;
for (pl = 0; pl < MAX_PLAYERS; pl++) for (pl = 0; pl < MAX_PLAYERS; pl++)
if (!PS_IS_aiplayer (players[pl].state) && PS_IS_netplayer (players[pl].state) && pl != pl_nr && NET_CANSEND(pl)) if (!PS_IS_aiplayer (players[pl].state) && PS_IS_netplayer (players[pl].state) && pl != pl_nr && NET_CANSEND(pl))
send_respawn (&players[pl].net.addr, pl_nr, pos); send_respawn (&players[pl].net.addr, pl_nr);
}; };

@ -1325,21 +1325,32 @@ do_mapinfo (struct pkg_mapinfo *map_pkg, _net_addr * addr)
/*** /***
*** Respawn Date Handling *** 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; struct pkg_respawn r_dat;
r_dat.h.typ = PKG_respawn; r_dat.h.typ = PKG_respawn;
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.x = pos.x; r_dat.x = players[plnr].pos.x;
r_dat.y = pos.y; r_dat.y = players[plnr].pos.y;
send_pkg ((struct pkg *) &r_dat, addr); send_pkg ((struct pkg *) &r_dat, addr);
}; };
void do_respawn (struct pkg_respawn *r_pkg, _net_addr *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): case (PKG_dropitem):
do_dropitems ((struct pkg_dropitem *) packet, addr); do_dropitems ((struct pkg_dropitem *) packet, addr);
break; break;
case (PKG_respawn):
do_respawn ((struct pkg_respawn *) packet, addr);
break;
default: default:
send_error (addr, "BomberClone: unknown data packet"); send_error (addr, "BomberClone: unknown data packet");
break; break;

@ -1,4 +1,4 @@
/* $Id: player.c,v 1.69 2004/01/27 21:13:45 stpohle Exp $ /* $Id: player.c,v 1.70 2004/01/27 21:58:06 stpohle Exp $
* player.c - everything what have to do with the player */ * player.c - everything what have to do with the player */
#include <SDL.h> #include <SDL.h>
@ -861,5 +861,24 @@ player_findfreebomb (_player * player)
/* check if a player died and check if we have to respawn */ /* check if a player died and check if we have to respawn */
void player_checkdeath (int pnr) { void player_checkdeath (int pnr) {
_player *player = &players[pnr];
int trypos;
/* check for respawn */
if (bman.gametype == GT_deathmatch && PS_IS_dead (player->state) && player->frame >= gfx.dead.frames) {
/* check new position */
trypos = 0;
do {
map_set_player_way1 (pnr);
trypos++;
} while (trypos < 100 && (player->pos.x == -1 || player->pos.y == -1));
if (player->pos.x != -1 && player->pos.y != -1) {
player->frame = 0;
player->state |= PSF_respawn;
if (GT_MP)
net_game_send_respawn (pnr);
}
}
}; };

Loading…
Cancel
Save