<URL: http://bugs.freeciv.org/Ticket/Display.html?id=39393 >
The server option Diplocost is broken, when you exchange tech and have your tech set to NONE you never get any tech penalty. This is a small patch that fixes this. It is fixed in warserver. I was told this is an issue in 2.1 as well. Now that I look over the code again I'm guessing all of these functions need to be fixed. +void do_dipl_cost(struct player *pplayer, Tech_Type_id new_tech); void do_free_cost(struct player *pplayer); void do_conquer_cost(struct player *pplayer);
diff -X diff_ignore -ru freeciv-2.0.8/server/diplhand.c ../freeciv-2.0.8/server/diplhand.c --- freeciv-2.0.8/server/diplhand.c 2005-10-13 09:43:53.000000000 +0200 +++ ../freeciv-2.0.8/server/diplhand.c 2007-06-13 15:18:16.000000000 +0200 @@ -360,7 +360,8 @@ gamelog(GAMELOG_TECH, pdest, pgiver, pclause->value, "acquire"); gamelog(GAMELOG_TREATY, GL_TECH, pgiver, pdest); - do_dipl_cost(pdest); + + do_dipl_cost(pdest,pclause->value); found_new_tech(pdest, pclause->value, FALSE, TRUE, A_NONE); break; diff -X diff_ignore -ru freeciv-2.0.8/server/plrhand.c ../freeciv-2.0.8/server/plrhand.c --- freeciv-2.0.8/server/plrhand.c 2005-10-26 10:20:44.000000000 +0200 +++ ../freeciv-2.0.8/server/plrhand.c 2007-06-08 18:57:16.000000000 +0200 @@ -70,10 +70,10 @@ /************************************************************************** ... **************************************************************************/ -void do_dipl_cost(struct player *pplayer) +void do_dipl_cost(struct player *pplayer, Tech_Type_id new_tech) { pplayer->research.bulbs_researched -= - (total_bulbs_required(pplayer) * game.diplcost) / 100; + (base_total_bulbs_required(pplayer,new_tech) * game.diplcost) / 100; pplayer->research.changed_from = -1; } diff -X diff_ignore -ru freeciv-2.0.8/server/plrhand.h ../freeciv-2.0.8/server/plrhand.h --- freeciv-2.0.8/server/plrhand.h 2006-03-02 07:33:38.000000000 +0100 +++ ../freeciv-2.0.8/server/plrhand.h 2007-06-08 18:55:11.000000000 +0200 @@ -78,7 +78,7 @@ void send_player_turn_notifications(struct conn_list *dest); -void do_dipl_cost(struct player *pplayer); +void do_dipl_cost(struct player *pplayer, Tech_Type_id new_tech); void do_free_cost(struct player *pplayer); void do_conquer_cost(struct player *pplayer);
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev