Author: cazfi
Date: Sat May 20 13:41:36 2017
New Revision: 35677

URL: http://svn.gna.org/viewcvs/freeciv?rev=35677&view=rev
Log:
Add initial support for optional luadata.txt datafile

See hrm Feature #661635

Added:
    trunk/server/scripting/api_server_luadata.c
    trunk/server/scripting/api_server_luadata.h
Modified:
    trunk/common/game.c
    trunk/common/game.h
    trunk/server/ruleset.c
    trunk/server/scripting/Makefile.am
    trunk/server/scripting/tolua_server.pkg

Modified: trunk/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=35677&r1=35676&r2=35677&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Sat May 20 13:41:36 2017
@@ -530,6 +530,7 @@
   multipliers_init();
 
   if (is_server()) {
+    game.server.luadata = NULL;
     game.server.ruledit.nationlist = NULL;
     game.server.ruledit.embedded_nations = NULL;
     game.server.ruledit.embedded_nations_count = 0;
@@ -598,6 +599,9 @@
   }
 
   if (is_server()) {
+    if (game.server.luadata != NULL) {
+      secfile_destroy(game.server.luadata);
+    }
     if (game.server.ruledit.description_file != NULL) {
       free(game.server.ruledit.description_file);
       game.server.ruledit.description_file = NULL;

Modified: trunk/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.h?rev=35677&r1=35676&r2=35677&view=diff
==============================================================================
--- trunk/common/game.h (original)
+++ trunk/common/game.h Sat May 20 13:41:36 2017
@@ -233,6 +233,8 @@
 
       struct rgbcolor_list *plr_colors;
 
+      struct section_file *luadata;
+
       struct {
         int turns;
         int max_size;

Modified: trunk/server/ruleset.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=35677&r1=35676&r2=35677&view=diff
==============================================================================
--- trunk/server/ruleset.c      (original)
+++ trunk/server/ruleset.c      Sat May 20 13:41:36 2017
@@ -221,7 +221,8 @@
 **************************************************************************/
 static const char *valid_ruleset_filename(const char *subdir,
                                           const char *name,
-                                          const char *extension)
+                                          const char *extension,
+                                          bool optional)
 {
   char filename[512];
   const char *dfilename;
@@ -250,7 +251,7 @@
   dfilename = fileinfoname(get_data_dirs(), filename);
   if (dfilename) {
     return dfilename;
-  } else {
+  } else if (!optional) {
     ruleset_error(LOG_ERROR,
                   /* TRANS: message about an installation error. */
                   _("Could not find a readable \"%s.%s\" ruleset file."),
@@ -277,7 +278,7 @@
 {
   char sfilename[512];
   const char *dfilename = valid_ruleset_filename(rsdir, whichset,
-                                                 RULES_SUFFIX);
+                                                 RULES_SUFFIX, FALSE);
   struct section_file *secfile;
 
   if (dfilename == NULL) {
@@ -304,7 +305,7 @@
                                  char **buffer)
 {
   const char *dfilename = valid_ruleset_filename(rsdir, whichset,
-                                                 SCRIPT_SUFFIX);
+                                                 SCRIPT_SUFFIX, FALSE);
 
   if (dfilename == NULL) {
     return FALSE;
@@ -322,6 +323,33 @@
   }
 
   return TRUE;
+}
+
+/**************************************************************************
+  Load optional luadata.txt
+**************************************************************************/
+static struct section_file *openload_luadata_file(const char *rsdir)
+{
+  struct section_file *secfile;
+  char sfilename[512];
+  const char *dfilename = valid_ruleset_filename(rsdir, "luadata",
+                                                 "txt", TRUE);
+
+  if (dfilename == NULL) {
+    return NULL;
+  }
+
+  /* Need to save a copy of the filename for following message, since
+     section_file_load() may call datafilename() for includes. */
+  sz_strlcpy(sfilename, dfilename);
+  secfile = secfile_load(sfilename, FALSE);
+
+  if (secfile == NULL) {
+    ruleset_error(LOG_ERROR, "Could not load luadata '%s':\n%s",
+                  sfilename, secfile_error());
+  }
+
+  return secfile;
 }
 
 /**************************************************************************
@@ -8006,6 +8034,7 @@
   nationfile = openload_ruleset_file("nations", rsdir);
   effectfile = openload_ruleset_file("effects", rsdir);
   gamefile = openload_ruleset_file("game", rsdir);
+  game.server.luadata = openload_luadata_file(rsdir);
 
   if (techfile == NULL
       || buildfile  == NULL

Modified: trunk/server/scripting/Makefile.am
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/scripting/Makefile.am?rev=35677&r1=35676&r2=35677&view=diff
==============================================================================
--- trunk/server/scripting/Makefile.am  (original)
+++ trunk/server/scripting/Makefile.am  Sat May 20 13:41:36 2017
@@ -25,6 +25,8 @@
        api_server_edit.h       \
        api_server_game_methods.c       \
        api_server_game_methods.h       \
+       api_server_luadata.c    \
+       api_server_luadata.h    \
        api_server_notify.c     \
        api_server_notify.h     \
        script_server.c         \

Added: trunk/server/scripting/api_server_luadata.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/scripting/api_server_luadata.c?rev=35677&view=auto
==============================================================================
--- trunk/server/scripting/api_server_luadata.c (added)
+++ trunk/server/scripting/api_server_luadata.c Sat May 20 13:41:36 2017
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ Freeciv - Copyright (C) 2005 - The Freeciv Project
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <fc_config.h>
+#endif
+
+/* utility */
+#include "registry_ini.h"
+
+/* common */
+#include "game.h"
+
+/* common/scriptcore */
+#include "luascript.h"
+
+/* server/scripting */
+#include "script_server.h"
+
+#include "api_server_luadata.h"
+
+/*****************************************************************************
+  Get string value from luadata.
+*****************************************************************************/
+const char *api_luadata_get_str(lua_State *L, const char *field)
+{
+  LUASCRIPT_CHECK_STATE(L, NULL);
+
+  if (game.server.luadata == NULL) {
+    return NULL;
+  }
+
+  return secfile_lookup_str_default(game.server.luadata, NULL, "%s", field);
+}

Added: trunk/server/scripting/api_server_luadata.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/scripting/api_server_luadata.h?rev=35677&view=auto
==============================================================================
--- trunk/server/scripting/api_server_luadata.h (added)
+++ trunk/server/scripting/api_server_luadata.h Sat May 20 13:41:36 2017
@@ -0,0 +1,21 @@
+/*****************************************************************************
+ Freeciv - Copyright (C) 2005 - The Freeciv Project
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+*****************************************************************************/
+
+#ifndef FC__API_SERVER_LUADATA_H
+#define FC__API_SERVER_LUADATA_H
+
+struct lua_State;
+
+const char *api_luadata_get_str(lua_State *L, const char *field);
+
+#endif /* API_SERVER_LUADATA_H */

Modified: trunk/server/scripting/tolua_server.pkg
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/scripting/tolua_server.pkg?rev=35677&r1=35676&r2=35677&view=diff
==============================================================================
--- trunk/server/scripting/tolua_server.pkg     (original)
+++ trunk/server/scripting/tolua_server.pkg     Sat May 20 13:41:36 2017
@@ -34,6 +34,7 @@
 /* server/scripting */
 $#include "api_server_edit.h"
 $#include "api_server_base.h"
+$#include "api_server_luadata.h"
 $#include "api_server_notify.h"
 $#include "api_server_game_methods.h"
 $#include "script_server.h"
@@ -184,6 +185,12 @@
     @ add_player_history(lua_State *L, Player *self, int amount);
 }
 
+/* Luadata module. */
+module luadata {
+  const char *api_luadata_get_str
+    @ get_str(lua_State *L, const char *field);
+}
+
 $[
 -- Compatibility functions
 -- These top-level functions were exposed prior to Freeciv 2.4. Since then


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to