<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

Reply via email to