diff options
-rw-r--r-- | src/game-server/mapreader.cpp | 3 | ||||
-rw-r--r-- | src/scripting/luascript.cpp | 10 | ||||
-rw-r--r-- | src/scripting/luascript.hpp | 2 | ||||
-rw-r--r-- | src/scripting/script.cpp | 4 | ||||
-rw-r--r-- | src/scripting/script.hpp | 5 |
5 files changed, 14 insertions, 10 deletions
diff --git a/src/game-server/mapreader.cpp b/src/game-server/mapreader.cpp index 80a0646d..16e4660e 100644 --- a/src/game-server/mapreader.cpp +++ b/src/game-server/mapreader.cpp @@ -369,7 +369,8 @@ Map* MapReader::readMap(xmlNodePtr node, const std::string &path, } else if (!scriptText.empty()) { - s->load(scriptText.c_str()); + const std::string name = "'" + objName + "'' in " + path; + s->load(scriptText.c_str(), name.c_str()); } else { diff --git a/src/scripting/luascript.cpp b/src/scripting/luascript.cpp index ee727060..23e4fdb9 100644 --- a/src/scripting/luascript.cpp +++ b/src/scripting/luascript.cpp @@ -19,14 +19,14 @@ * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>. */ -#include <cassert> - #include "luascript.hpp" #include "game-server/being.hpp" - #include "utils/logger.h" +#include <cassert> +#include <cstring> + LuaScript::~LuaScript() { lua_close(mState); @@ -83,9 +83,9 @@ int LuaScript::execute() mCurFunction = ""; } -void LuaScript::load(const char *prog) +void LuaScript::load(const char *prog, const char *name) { - int res = luaL_loadstring(mState, prog); + int res = luaL_loadbuffer(mState, prog, std::strlen(prog), name); if (res) { switch (res) { diff --git a/src/scripting/luascript.hpp b/src/scripting/luascript.hpp index 5e4deea1..292c35ad 100644 --- a/src/scripting/luascript.hpp +++ b/src/scripting/luascript.hpp @@ -45,7 +45,7 @@ class LuaScript: public Script */ ~LuaScript(); - void load(const char *); + void load(const char *prog, const char *name); void prepare(const std::string &); diff --git a/src/scripting/script.cpp b/src/scripting/script.cpp index 3d16a7d1..334895c3 100644 --- a/src/scripting/script.cpp +++ b/src/scripting/script.cpp @@ -88,7 +88,7 @@ bool Script::loadFile(const std::string &name) if (buffer) { mScriptFile = name; - load(skipPotentialBom(buffer)); + load(skipPotentialBom(buffer), name.c_str()); free(buffer); return true; } else { @@ -99,7 +99,7 @@ bool Script::loadFile(const std::string &name) void Script::loadNPC(const std::string &name, int id, int x, int y, const char *prog) { - load(prog); + load(prog, name.c_str()); prepare("create_npc_delayed"); push(name); push(id); diff --git a/src/scripting/script.hpp b/src/scripting/script.hpp index dfba06f0..6f5dded6 100644 --- a/src/scripting/script.hpp +++ b/src/scripting/script.hpp @@ -61,8 +61,11 @@ class Script /** * Loads a chunk of text into script context and executes its global * statements. + * + * @param prog the program text to load + * @param name the name of the text, used for error reporting */ - virtual void load(const char *) = 0; + virtual void load(const char *prog, const char *name) = 0; /** * Loads a text file into script context and executes its global |