[Freeciv-Dev] Re: (PR#2728) Game ends after Tech is researched
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
On Mon, Jan 27, 2003 at 02:22:47PM -0800, Jason Short via RT wrote:
> ue80@xxxxxxxxxxxxxxxxxxxxx via RT wrote:
> > On Mon, Jan 13, 2003 at 06:03:44PM -0800, Jason Short via RT wrote:
>
> > Even if Per said thumbs down i updated it ...
>
> Use A_LAST instead of 200. And I suggest using A_UNSET instead of -1 as
> the "special case" of no endtech.
Ok, think that makes my patch better, but don't think that that changes
something in pers opinion :-)
Thomas
--
Thomas Strub *** eMail ue80@xxxxxxxxxxxxxxxxxxxxx
Wenn Du nicht programmieren kannst und Dir für Arbeit zu schade bist:
Werde Berater, Analyst oder organisiere Kongresse.
Index: common/game.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/common/game.c,v
retrieving revision 1.155
diff -u -r1.155 game.c
--- common/game.c 2003/01/09 02:36:37 1.155
+++ common/game.c 2003/01/27 22:35:53
@@ -656,6 +656,8 @@
game.pingtimeout = GAME_DEFAULT_PINGTIMEOUT;
game.pingtime = GAME_DEFAULT_PINGTIME;
game.end_year = GAME_DEFAULT_END_YEAR;
+ game.end_tech_id = GAME_DEFAULT_END_TECH_ID;
+ sz_strlcpy(game.end_tech,"");
game.year = GAME_START_YEAR;
game.turn = 0;
game.min_players = GAME_DEFAULT_MIN_PLAYERS;
Index: common/game.h
===================================================================
RCS file: /home/freeciv/CVS/freeciv/common/game.h,v
retrieving revision 1.118
diff -u -r1.118 game.h
--- common/game.h 2003/01/05 23:24:52 1.118
+++ common/game.h 2003/01/27 22:35:53
@@ -75,6 +75,8 @@
int pingtime;
time_t turn_start;
int end_year;
+ char end_tech[MAX_LEN_NAME];
+ Tech_Type_id end_tech_id;
int year;
int turn;
int researchcost; /* Multiplier on cost of new research */
@@ -289,6 +291,8 @@
#define GAME_DEFAULT_END_YEAR 2000
#define GAME_MIN_END_YEAR GAME_START_YEAR
#define GAME_MAX_END_YEAR 5000
+
+#define GAME_DEFAULT_END_TECH_ID A_UNSET
#define GAME_DEFAULT_MIN_PLAYERS 1
#define GAME_MIN_MIN_PLAYERS 1
Index: server/savegame.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/server/savegame.c,v
retrieving revision 1.105
diff -u -r1.105 savegame.c
--- server/savegame.c 2003/01/16 18:23:36 1.105
+++ server/savegame.c 2003/01/27 22:35:54
@@ -1774,6 +1774,10 @@
secfile_lookup_int_default(file, 1, "game.timeoutcounter");
game.end_year = secfile_lookup_int(file, "game.end_year");
+ game.end_tech_id =
+ secfile_lookup_int_default(file, GAME_DEFAULT_END_TECH_ID,
+ "game.end_tech_id");
+
game.researchcost = secfile_lookup_int_default(file, 0,
"game.researchcost");
if (game.researchcost == 0)
game.researchcost = secfile_lookup_int(file, "game.techlevel");
@@ -2163,6 +2167,7 @@
secfile_insert_int(file, game.timeoutincmult, "game.timeoutincmult");
secfile_insert_int(file, game.timeoutcounter, "game.timeoutcounter");
secfile_insert_int(file, game.end_year, "game.end_year");
+ secfile_insert_int(file, game.end_tech_id, "game.end_tech_id");
secfile_insert_int(file, game.year, "game.year");
secfile_insert_int(file, game.turn, "game.turn");
secfile_insert_int(file, game.researchcost, "game.researchcost");
Index: server/srv_main.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/server/srv_main.c,v
retrieving revision 1.112
diff -u -r1.112 srv_main.c
--- server/srv_main.c 2003/01/05 23:24:52 1.112
+++ server/srv_main.c 2003/01/27 22:35:55
@@ -204,6 +204,17 @@
return TRUE;
}
+ /* we end the game after someone has the tech from tech_end */
+ players_iterate(pplayer) {
+ /* tech??? */
+ if ((game.end_tech_id >= 0) &&
+ (base_total_bulbs_required(pplayer,game.end_tech_id) <= 0))
+ {
+ freelog(LOG_ERROR,"Endyear: %d, %d",game.year, game.end_tech_id);
+ return TRUE;
+ }
+ } players_iterate_end;
+
/* count barbarians */
players_iterate(pplayer) {
if (is_barbarian(pplayer)) {
@@ -2111,6 +2122,16 @@
} players_iterate_end;
}
+ /* Because we can't lookup this before the game has been started we do it
+ * here */
+ game.end_tech_id = find_tech_by_name(game.end_tech);
+ if (game.end_tech_id == A_LAST) {
+ game.end_tech_id = A_UNSET;
+ }
+ if (game.end_tech_id != A_UNSET) {
+ sz_strlcpy(game.end_tech,get_tech_name(NULL,game.end_tech_id));
+ }
+
/* We want to reset the timer as late as possible but before the info is
* sent to the clients */
game.turn_start = time(NULL);
Index: server/stdinhand.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/server/stdinhand.c,v
retrieving revision 1.270
diff -u -r1.270 stdinhand.c
--- server/stdinhand.c 2003/01/20 15:44:28 1.270
+++ server/stdinhand.c 2003/01/27 22:35:57
@@ -691,7 +691,11 @@
GEN_INT("endyear", game.end_year, SSET_META, SSET_TO_CLIENT,
N_("Year the game ends"), "", NULL,
GAME_MIN_END_YEAR, GAME_MAX_END_YEAR, GAME_DEFAULT_END_YEAR)
-
+/*
+ GEN_INT("endtechid", game.end_tech_id, SSET_META, SSET_TO_CLIENT,
+ N_("Tech with that the game ends"), "",
+ NULL, A_UNSET, A_LAST, GAME_DEFAULT_END_TECH_ID)
+*/
#ifndef NDEBUG
GEN_INT( "timeout", game.timeout, SSET_META, SSET_TO_CLIENT,
N_("Maximum seconds per turn"),
@@ -959,6 +963,7 @@
CMD_METAINFO,
CMD_METACONN,
CMD_METASERVER,
+ CMD_ENDTECH,
CMD_AITOGGLE,
CMD_CREATE,
CMD_EASY,
@@ -1124,6 +1129,12 @@
N_("metaserver <address>"),
N_("Set address for metaserver to report to."), NULL
},
+ {"endtech",ALLOW_CTRL,
+ /* TRANS: translate text between <> only */
+ N_("endtech techname"),
+ N_("Set the tech with that the game will end.\n"
+ "It must be written like the Rulesettechname."), NULL
+ },
{"aitoggle", ALLOW_CTRL,
/* TRANS: translate text between <> only */
N_("aitoggle <player-name>"),
@@ -1740,6 +1751,28 @@
}
/**************************************************************************
+This function gets the Name of a written tech.
+Only works after the game has been started.
+**************************************************************************/
+static void set_end_tech(struct connection *caller, char *arg)
+{
+ sz_strlcpy(game.end_tech, arg);
+ game.end_tech_id = find_tech_by_name(game.end_tech);
+ freelog(LOG_VERBOSE,"Endtech_id %d from %s",game.end_tech_id, game.end_tech);
+ if (game.end_tech_id == A_LAST) {
+ game.end_tech_id = A_UNSET;
+ }
+ if (game.end_tech_id != A_UNSET) {
+ sz_strlcpy(game.end_tech,get_tech_name(NULL,game.end_tech_id));
+ cmd_reply(CMD_ENDTECH, caller, C_OK,
+ _("Endtech set to: %s."), game.end_tech);
+ } else {
+ cmd_reply(CMD_ENDTECH, caller, C_OK,
+ _("Error finding endtech: %s. (Could be because techs.ruleset
isn't loaded already)"), game.end_tech);
+ }
+}
+
+/**************************************************************************
...
**************************************************************************/
static void create_ai_player(struct connection *caller, char *arg)
@@ -3195,6 +3228,9 @@
break;
case CMD_LIST:
show_list(caller, arg);
+ break;
+ case CMD_ENDTECH:
+ set_end_tech(caller, arg);
break;
case CMD_AITOGGLE:
toggle_ai_player(caller,arg);
|
|