<URL: http://bugs.freeciv.org/Ticket/Display.html?id=11517 >
On 10/08/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote: > > Showing that 'restarting for lack of players in xx seconds' message > when game is actually running and everything is ok is quite bad thing. > That for I will probably backport this patch to S2_0 too. Here is S2_0 version. Already committed to trunk and S2_1. - ML
diff -Nurd -X.diff_ignore freeciv/common/game.c freeciv/common/game.c --- freeciv/common/game.c 2007-08-04 04:27:37.000000000 +0300 +++ freeciv/common/game.c 2007-08-11 18:50:27.000000000 +0300 @@ -294,6 +294,9 @@ game.player_idx=0; game.player_ptr=&game.players[0]; terrain_control.river_help_text[0] = '\0'; + + game.meta_info.user_message_set = FALSE; + game.meta_info.user_message[0] = '\0'; } /*************************************************************** diff -Nurd -X.diff_ignore freeciv/common/game.h freeciv/common/game.h --- freeciv/common/game.h 2007-03-05 19:15:59.000000000 +0200 +++ freeciv/common/game.h 2007-08-11 18:51:36.000000000 +0300 @@ -245,6 +245,12 @@ int work_veteran_chance[MAX_VET_LEVELS]; int veteran_chance[MAX_VET_LEVELS]; int revolution_length; /* 0=> random length, else the fixated length */ + + struct { + bool user_message_set; + char user_message[256]; + } meta_info; + }; /* Unused? */ diff -Nurd -X.diff_ignore freeciv/server/commands.c freeciv/server/commands.c --- freeciv/server/commands.c 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/commands.c 2007-08-11 18:50:27.000000000 +0300 @@ -150,7 +150,11 @@ {"metamessage", ALLOW_CTRL, ALLOW_INFO, /* TRANS: translate text between <> only */ N_("metainfo <meta-line>"), - N_("Set metaserver info line."), NULL + N_("Set metaserver info line."), + N_("Set user defined metaserver info line. If parameter is omitted,\n" + "previously set metamessage will be removed. For most of the time\n" + "user defined metamessage will be used instead of automatically\n" + "generated messages, if it is available.") }, {"metatopic", ALLOW_CTRL, ALLOW_INFO, /* TRANS: translate text between <> only */ diff -Nurd -X.diff_ignore freeciv/server/connecthand.c freeciv/server/connecthand.c --- freeciv/server/connecthand.c 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/connecthand.c 2007-08-11 18:52:23.000000000 +0300 @@ -163,6 +163,12 @@ send_conn_info(dest, &game.est_connections); conn_list_insert_back(&game.est_connections, pconn); + if (conn_list_size(&game.est_connections) == 1) { + /* First connection + * Replace "restarting in x seconds" meta message */ + maybe_automatic_meta_message(default_meta_message_string()); + (void) send_server_info_to_metaserver(META_INFO); + } send_conn_info(&game.est_connections, dest); (void) send_server_info_to_metaserver(META_INFO); } diff -Nurd -X.diff_ignore freeciv/server/meta.c freeciv/server/meta.c --- freeciv/server/meta.c 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/meta.c 2007-08-11 18:50:27.000000000 +0300 @@ -85,20 +85,18 @@ /************************************************************************* Return static string with default info line to send to metaserver. - This is a function (instead of a define) to keep meta.h clean of - including config.h and version.h *************************************************************************/ const char *default_meta_message_string(void) { #if IS_BETA_VERSION return "unstable pre-" NEXT_STABLE_VERSION ": beware"; -#else +#else /* IS_BETA_VERSION */ #if IS_DEVEL_VERSION return "development version: beware"; -#else +#else /* IS_DEVEL_VERSION */ return "(default)"; -#endif -#endif +#endif /* IS_DEVEL_VERSION */ +#endif /* IS_BETA_VERSION */ } /************************************************************************* @@ -126,6 +124,41 @@ } /************************************************************************* + The metaserver message set by user +*************************************************************************/ +const char *get_user_meta_message_string(void) +{ + if (game.meta_info.user_message_set) { + return game.meta_info.user_message; + } + + return NULL; +} + +/************************************************************************* + Update meta message. Set it to user meta message, if it is available. + Otherwise use provided message. + It is ok to call this with NULL message. Then it only replaces current + meta message with user meta message if available. +*************************************************************************/ +void maybe_automatic_meta_message(const char *automatic) +{ + const char *user_message; + + user_message = get_user_meta_message_string(); + + if (user_message == NULL) { + /* No user message */ + if (automatic != NULL) { + set_meta_message_string(automatic); + } + return; + } + + set_meta_message_string(user_message); +} + +/************************************************************************* set the metaserver patches string *************************************************************************/ void set_meta_patches_string(const char *string) @@ -150,6 +183,23 @@ } /************************************************************************* + set user defined metaserver message string +*************************************************************************/ +void set_user_meta_message_string(const char *string) +{ + if (string != NULL && string[0] != '\0') { + sz_strlcpy(game.meta_info.user_message, string); + game.meta_info.user_message_set = TRUE; + set_meta_message_string(string); + } else { + /* Remove user meta message. We will use automatic messages instead */ + game.meta_info.user_message[0] = '\0'; + game.meta_info.user_message_set = FALSE; + set_meta_message_string(default_meta_message_string()); + } +} + +/************************************************************************* ... *************************************************************************/ char *meta_addr_port(void) diff -Nurd -X.diff_ignore freeciv/server/meta.h freeciv/server/meta.h --- freeciv/server/meta.h 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/meta.h 2007-08-11 18:53:19.000000000 +0300 @@ -33,10 +33,14 @@ const char *get_meta_patches_string(void); const char *get_meta_topic_string(void); const char *get_meta_message_string(void); +const char *get_user_meta_message_string(void); + +void maybe_automatic_meta_message(const char *automatic); void set_meta_patches_string(const char *string); void set_meta_topic_string(const char *string); void set_meta_message_string(const char *string); +void set_user_meta_message_string(const char *string); char *meta_addr_port(void); diff -Nurd -X.diff_ignore freeciv/server/savegame.c freeciv/server/savegame.c --- freeciv/server/savegame.c 2007-08-06 16:42:30.000000000 +0300 +++ freeciv/server/savegame.c 2007-08-11 18:58:13.000000000 +0300 @@ -3129,12 +3129,19 @@ set_meta_patches_string(secfile_lookup_str_default(file, default_meta_patches_string(), "game.metapatches")); + game.meta_info.user_message_set = + secfile_lookup_bool_default(file, FALSE, "game.user_metamessage"); + if (game.meta_info.user_message_set) { + set_user_meta_message_string(secfile_lookup_str_default(file, + default_meta_message_string(), + "game.metamessage")); + } else { + /* To avoid warnings when loading pre-2.0.10 savegames */ + secfile_lookup_str_default(file, "", "game.metamessage"); + } set_meta_topic_string(secfile_lookup_str_default(file, default_meta_topic_string(), "game.metatopic")); - set_meta_message_string(secfile_lookup_str_default(file, - default_meta_message_string(), - "game.metamessage")); sz_strlcpy(srvarg.metaserver_addr, secfile_lookup_str_default(file, DEFAULT_META_SERVER_ADDR, @@ -3652,6 +3659,7 @@ int version; char options[512]; char temp[B_LAST+1]; + const char *user_message; version = MAJOR_VERSION *10000 + MINOR_VERSION *100 + PATCH_VERSION; secfile_insert_int(file, version, "game.version"); @@ -3665,7 +3673,12 @@ secfile_insert_str(file, get_meta_patches_string(), "game.metapatches"); secfile_insert_str(file, get_meta_topic_string(), "game.metatopic"); - secfile_insert_str(file, get_meta_message_string(), "game.metamessage"); + secfile_insert_bool(file, game.meta_info.user_message_set, + "game.user_metamessage"); + user_message = get_user_meta_message_string(); + if (user_message != NULL) { + secfile_insert_str(file, user_message, "game.metamessage"); + } secfile_insert_str(file, meta_addr_port(), "game.metaserver"); sz_strlcpy(options, SAVEFILE_OPTIONS); diff -Nurd -X.diff_ignore freeciv/server/stdinhand.c freeciv/server/stdinhand.c --- freeciv/server/stdinhand.c 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/stdinhand.c 2007-08-11 18:50:27.000000000 +0300 @@ -639,7 +639,7 @@ return TRUE; } - set_meta_message_string(arg); + set_user_meta_message_string(arg); if (is_metaserver_open()) { send_server_info_to_metaserver(META_INFO); notify_conn(NULL, _("Metaserver message string set to '%s'."), arg);
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev