<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

Reply via email to