diff --git a/include/packets.h b/include/packets.h index c651931..cee2613 100644 --- a/include/packets.h +++ b/include/packets.h @@ -1,4 +1,4 @@ -/* $Id: packets.h,v 1.29 2004/11/30 14:30:36 stpohle Exp $ +/* $Id: packets.h,v 1.30 2004/12/24 03:13:49 stpohle Exp $ * network packets.. */ #ifndef _PACKETS_H_ @@ -14,9 +14,9 @@ * are between all clients so they will be forwarded. */ enum _network_data { PKG_error = 0, - PKG_joingame, - PKG_contest, // every packet below here will checked + PKG_joingame, // every packet below here will checked // if it comes from a orginal player + PKG_contest, PKG_playerid, PKG_servermode, PKG_pingreq, diff --git a/src/packets.c b/src/packets.c index bb9cf7d..c6c6ed7 100644 --- a/src/packets.c +++ b/src/packets.c @@ -180,12 +180,13 @@ do_joingame (struct pkg_joingame *p_jg, _net_addr * addr) addr->pl_nr = i; - /* Send all connected players the new PlayerID, except to the new player */ + /* Send all connected players the new PlayerID, except to the new player for (i = 0; i < MAX_PLAYERS; i++) if (NET_CANSEND(i) && addr->pl_nr != i) send_playerid (&players[i].net.addr, pl->name, pl->net.addr.host, pl->net.addr.port, pl->net.addr.pl_nr, pl->gfx_nr, pl->team_nr, pl->net.flags); + */ } else if (GS_WAITRUNNING) { @@ -304,6 +305,13 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr) * check if we have to send the whole playerlist to a client */ if (GT_MP_PTPM && p_id->pl_nr == -1) { + /* Send all connected players the new PlayerID, except to the new player */ + for (i = 0; i < MAX_PLAYERS; i++) + if (NET_CANSEND(i) && addr->pl_nr != i) + send_playerid (&players[i].net.addr, pl->name, pl->net.addr.host, + pl->net.addr.port, pl->net.addr.pl_nr, pl->gfx_nr, + pl->team_nr, pl->net.flags); + for (i = 0; i < MAX_PLAYERS; i++) send_playerid (addr, players[i].name, players[i].net.addr.host, players[i].net.addr.port, i, players[i].gfx_nr, players[i].team_nr, players[i].net.flags); } @@ -336,7 +344,7 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr) /* Check if we have to make a network test.. only client to client * we won't check 2 players too because i't won't be possible to send - * something to them. */ + * something to them. Start the timer for the connection test. */ if (GT_MP_PTPS && !(PS_IS_netplayer (pl->state)) && (PS_IS_netplayer (p_id->state)) && p_id->pl_nr != bman.p_servnr && p_id->pl_nr != bman.p_nr && !(pl->net.flags & NETF_local2) && p_id->pl_nr != bman.p2_nr) { @@ -1664,9 +1672,9 @@ do_pkg (struct pkg *packet, _net_addr * addr) /* get the addr and set the ping timeout value * check if the packet is from a player in the game and not from someone else - * this exception is only for PKG_joingame, PKG_error and PKG_contest */ + * this exception is only for PKG_joingame, PKG_error */ addr->pl_nr = get_player_nr (addr->host, addr->port); - if ((addr->pl_nr < 0 || addr->pl_nr >= MAX_PLAYERS) && packet->h.typ > PKG_contest && PS_IS_netplayer (players[addr->pl_nr].state)) { + if ((addr->pl_nr < 0 || addr->pl_nr >= MAX_PLAYERS) && packet->h.typ > PKG_joingame && PS_IS_netplayer (players[addr->pl_nr].state)) { d_printf ("do_pkg: error addr->pl_nr out of range\n"); return 0; }