diff server/plrhand.c server/plrhand.c --- server/plrhand.c Thu Dec 21 16:30:54 2000 +++ server/plrhand.c Thu Dec 21 22:59:25 2000 @@ -904,6 +904,15 @@ **************************************************************************/ void send_player_info_c(struct player *src, struct conn_list *dest) { + send_player_info_min_level(src, dest, INFO_MINIMUM); +} + +/************************************************************************** + ... +**************************************************************************/ +void send_player_info_min_level(struct player *src, struct conn_list *dest, + enum plr_info_level min_level) +{ players_iterate(pplayer) { if(!src || pplayer==src) { struct packet_player_info info; @@ -918,11 +927,11 @@ /* Client not yet attached to player. */ else if (!pconn->player) - package_player_info(pplayer, &info, 0, INFO_MINIMUM); + package_player_info(pplayer, &info, 0, min_level); /* Player clients (including one player observers) */ else - package_player_info(pplayer, &info, pconn->player, INFO_MINIMUM); + package_player_info(pplayer, &info, pconn->player, min_level); send_packet_player_info(pconn, &info); } conn_list_iterate_end; @@ -940,7 +949,8 @@ **************************************************************************/ void send_player_info(struct player *src, struct player *dest) { - send_player_info_c(src, (dest ? &dest->connections : &game.est_connections)); + send_player_info_min_level(src, (dest ? &dest->connections : &game.est_connections), + INFO_MINIMUM); } /************************************************************************** @@ -993,12 +1003,17 @@ if (info_level < min_info_level) info_level = min_info_level; + if (info_level >= INFO_INVESTIGATE) { + packet->government = plr->government; + } else { + packet->government = G_MAGIC; + } + if (info_level >= INFO_MEETING) { packet->gold = plr->economic.gold; for(i=0; iinventions[i] = plr->research.inventions[i]+'0'; packet->inventions[i] = '\0'; - packet->government = plr->government; } else { packet->gold = 0; for(i=0; iinventions[city_styles[get_player_city_style(plr)].techreq] = '1'; - packet->government = G_MAGIC; } if (info_level >= INFO_EMBASSY) { diff server/plrhand.h server/plrhand.h --- server/plrhand.h Thu Dec 21 00:47:51 2000 +++ server/plrhand.h Thu Dec 21 22:59:24 2000 @@ -21,7 +21,8 @@ struct connection; struct conn_list; -enum plr_info_level { INFO_MINIMUM, INFO_MEETING, INFO_EMBASSY, INFO_FULL }; +enum plr_info_level { INFO_MINIMUM, INFO_INVESTIGATE, INFO_MEETING, + INFO_EMBASSY, INFO_FULL }; void server_player_init(struct player *pplayer, int initmap); void server_remove_player(struct player *pplayer); @@ -90,5 +91,7 @@ enum plr_info_level player_info_level(struct player *plr, struct player *receiver); +void send_player_info_min_level(struct player *src, struct conn_list *dest, + enum plr_info_level min_level); #endif /* FC__PLRHAND_H */ diff server/unitfunc.c server/unitfunc.c --- server/unitfunc.c Thu Dec 21 16:30:55 2000 +++ server/unitfunc.c Thu Dec 21 23:47:59 2000 @@ -198,6 +198,10 @@ lsend_packet_unit_info(&pplayer->connections, &unit_packet); first_packet = FALSE; } unit_list_iterate_end; + + if (player_info_level(cplayer, pplayer) < INFO_INVESTIGATE) + send_player_info_min_level(cplayer, &pplayer->connections, INFO_INVESTIGATE); + /* Send city info to investigator's player. As this is a special case we bypass send_city_info. */ package_city(pcity, &city_packet, TRUE);