diff server/cityhand.c server/cityhand.c --- server/cityhand.c Tue Aug 22 04:21:14 2000 +++ server/cityhand.c Tue Aug 22 04:24:46 2000 @@ -1098,7 +1098,8 @@ } if ((pcity = map_get_city(x,y)) && pcity->id == pdcity->id && - city_got_building(pcity, B_PALACE)) + city_got_building(pcity, B_PALACE) && + player_has_embassy(pplayer, &pplayer[pdcity->owner])) packet->capital=1; else packet->capital=0; diff server/diplhand.c server/diplhand.c --- server/diplhand.c Sat Aug 19 23:29:50 2000 +++ server/diplhand.c Tue Aug 22 05:28:52 2000 @@ -74,6 +74,7 @@ { struct Treaty *ptreaty; struct player *plr0, *plr1, *pgiver, *pdest; + int *giver_accept; plr0=&game.players[packet->plrno0]; plr1=&game.players[packet->plrno1]; @@ -81,9 +82,29 @@ if((ptreaty=find_treaty(plr0, plr1)) && pgiver==pplayer) { if(ptreaty->plr0==pgiver) - ptreaty->accept0=!ptreaty->accept0; + giver_accept = &ptreaty->accept0; else - ptreaty->accept1=!ptreaty->accept1; + giver_accept = &ptreaty->accept1; + + if (! *giver_accept) { /* Accepts now. */ + struct genlist_iterator myiter; + genlist_iterator_init(&myiter, &ptreaty->clauses, 0); + + for(;ITERATOR_PTR(myiter); ITERATOR_NEXT(myiter)) { + struct Clause *pclause=(struct Clause *)ITERATOR_PTR(myiter); + if(pclause->type == CLAUSE_CITY) { + struct city *pcity = find_city_by_id(pclause->value); + if (pcity && pcity->improvements[B_PALACE] && + pcity->owner == pplayer->player_no) { + notify_player(pplayer, + _("Game: You can't accept treaty that gives your capital away.")); + return; + } + } + } + } + + *giver_accept = ! *giver_accept; lsend_packet_diplomacy_info(&plr0->connections, PACKET_DIPLOMACY_ACCEPT_TREATY,