? diff ? diff2 ? client/gui-gtk/stZo2QSL ? common/bool.h Index: client/packhand.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/packhand.c,v retrieving revision 1.214 diff -u -r1.214 packhand.c --- client/packhand.c 2002/02/11 10:37:42 1.214 +++ client/packhand.c 2002/02/11 19:07:42 @@ -1232,6 +1232,7 @@ pplayer->is_connected=pinfo->is_connected; pplayer->ai.is_barbarian=pinfo->is_barbarian; + pplayer->ai.barbarian_type = 0; pplayer->revolution=pinfo->revolution; if(pplayer->ai.control!=pinfo->ai) { pplayer->ai.control=pinfo->ai; Index: common/player.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/common/player.c,v retrieving revision 1.78 diff -u -r1.78 player.c --- common/player.c 2002/02/11 11:59:54 1.78 +++ common/player.c 2002/02/11 19:07:52 @@ -572,5 +572,5 @@ **************************************************************************/ int is_barbarian(const struct player *pplayer) { - return (pplayer->ai.is_barbarian > 0); + return pplayer->ai.is_barbarian; } Index: common/player.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/common/player.h,v retrieving revision 1.69 diff -u -r1.69 player.h --- common/player.h 2002/01/11 11:11:51 1.69 +++ common/player.h 2002/02/11 19:07:52 @@ -112,6 +112,8 @@ int expand; /* percentage factor to value new cities */ int warmth; /* threat of global warming */ int is_barbarian; + int barbarian_type; /* server: LAND_BARBARIAN or SEA_BARBARIAN, + client: 0 */ }; /* Diplomatic states (how one player views another). Index: server/barbarian.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/barbarian.c,v retrieving revision 1.45 diff -u -r1.45 barbarian.c --- server/barbarian.c 2002/02/11 13:55:50 1.45 +++ server/barbarian.c 2002/02/11 19:07:58 @@ -62,12 +62,14 @@ int is_land_barbarian(struct player *pplayer) { - return (pplayer->ai.is_barbarian == LAND_BARBARIAN); + return (pplayer->ai.is_barbarian + && pplayer->ai.barbarian_type == LAND_BARBARIAN); } int is_sea_barbarian(struct player *pplayer) { - return (pplayer->ai.is_barbarian == SEA_BARBARIAN); + return (pplayer->ai.is_barbarian + && pplayer->ai.barbarian_type == SEA_BARBARIAN); } /************************************************************************** @@ -127,10 +129,12 @@ /* Do the ai */ barbarians->ai.control = TRUE; - if( land ) - barbarians->ai.is_barbarian = LAND_BARBARIAN; - else - barbarians->ai.is_barbarian = SEA_BARBARIAN; + barbarians->ai.is_barbarian = TRUE; + if (land) { + barbarians->ai.barbarian_type = LAND_BARBARIAN; + } else { + barbarians->ai.barbarian_type = SEA_BARBARIAN; + } set_ai_level_directer(barbarians, game.skill_level); init_tech(barbarians, game.tech); Index: server/savegame.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/savegame.c,v retrieving revision 1.55 diff -u -r1.55 savegame.c --- server/savegame.c 2002/02/11 13:55:52 1.55 +++ server/savegame.c 2002/02/11 19:08:12 @@ -573,8 +573,16 @@ server_player_init(plr, TRUE); - plr->ai.is_barbarian = secfile_lookup_int_default(file, 0, "player%d.ai.is_barbarian", - plrno); + i = secfile_lookup_int_default(file, 0, "player%d.ai.is_barbarian", plrno); + + if (i != 0) { + plr->ai.is_barbarian = TRUE; + plr->ai.barbarian_type = i; + } else { + plr->ai.is_barbarian = FALSE; + plr->ai.barbarian_type = 0; + } + if (is_barbarian(plr)) game.nbarbarians++; sz_strlcpy(plr->name, secfile_lookup_str(file, "player%d.name", plrno)); @@ -1261,7 +1269,13 @@ secfile_insert_int(file, plr->ai.tech_goal, "player%d.ai.tech_goal", plrno); secfile_insert_int(file, plr->ai.skill_level, "player%d.ai.skill_level", plrno); - secfile_insert_int(file, plr->ai.is_barbarian, "player%d.ai.is_barbarian", plrno); + if (plr->ai.is_barbarian) { + i = plr->ai.barbarian_type; + assert(i != 0); + } else { + i = 0; + } + secfile_insert_int(file, i, "player%d.ai.is_barbarian", plrno); secfile_insert_int(file, plr->economic.gold, "player%d.gold", plrno); secfile_insert_int(file, plr->economic.tax, "player%d.tax", plrno); secfile_insert_int(file, plr->economic.science, "player%d.science", plrno);