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