diff server/maphand.c server/maphand.c --- server/maphand.c Sat Aug 26 17:48:47 2000 +++ server/maphand.c Tue Sep 5 09:30:09 2000 @@ -626,7 +626,19 @@ ***************************************************************/ void map_change_seen(int x, int y, int playerid, int change) { - map_get_player_tile(x, y, playerid)->seen += change; + struct player_tile *ptile; + + ptile = map_get_player_tile(x, y, playerid); + if (map_get_known_and_seen(x, y, playerid) && + ptile->seen + change == 0 ) { + struct packet_generic_integer rpacket; + unit_list_iterate(map_get_tile(x, y)->units, punit) { + rpacket.value = punit->id; + lsend_packet_generic_integer(&game.players[playerid].connections, + PACKET_REMOVE_UNIT, &rpacket); + } unit_list_iterate_end; + } + ptile->seen += change; } /*************************************************************** diff server/unitfunc.c server/unitfunc.c --- server/unitfunc.c Mon Sep 4 18:25:25 2000 +++ server/unitfunc.c Tue Sep 5 09:30:09 2000 @@ -2937,6 +2937,7 @@ { struct packet_unit_info info; struct packet_enemy_unit einfo; + struct packet_generic_integer rpacket; if (dest==NULL) dest = &game.game_connections; @@ -2952,8 +2953,13 @@ if ((pplayer && pplayer->player_no == punit->owner) || (!pplayer && pconn->observer)) send_packet_unit_info(pconn, &info); - else + else { send_packet_enemy_unit(pconn, &einfo); + if (!map_get_known_and_seen(info.x, info.y, pplayer->player_no)) { + rpacket.value = punit->id; + send_packet_generic_integer(pconn, PACKET_REMOVE_UNIT, &rpacket); + } + } } } conn_list_iterate_end;