diff options
-rw-r--r-- | scripts/lua/libmana.lua | 12 | ||||
-rw-r--r-- | src/game-server/mapcomposite.cpp | 2 | ||||
-rw-r--r-- | src/scripting/luascript.cpp | 1 |
3 files changed, 11 insertions, 4 deletions
diff --git a/scripts/lua/libmana.lua b/scripts/lua/libmana.lua index d133e574..0636e491 100644 --- a/scripts/lua/libmana.lua +++ b/scripts/lua/libmana.lua @@ -87,9 +87,11 @@ local function mapupdate(mapid) check_schedule(mapid) end --- Registers a function so that is is executed during map initialization. +-- Registers a function so that it is executed during map initialization. function atinit(f) - init_fun[#init_fun + 1] = f + local map_id = get_map_id() + init_fun[map_id] = init_fun[map_id] or {} + table.insert(init_fun[map_id], f) end -- Called by the game for creating NPCs embedded into maps. @@ -105,10 +107,12 @@ end -- Called during map initialization, for each map. -- Executes all the functions registered by atinit. local function map_initialize() - for i,f in ipairs(init_fun) do + local functions = init_fun[get_map_id()] + if not functions then return end + for i,f in ipairs(functions) do f() end - init_fun = {} + init_fun[get_map_id()] = nil end diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index 8dd0503e..c3df7202 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -799,6 +799,7 @@ void MapComposite::initializeContent() if (npcId && !scriptText.empty()) { Script *script = ScriptManager::currentState(); + script->setMap(this); script->loadNPC(object->getName(), npcId, ManaServ::getGender(gender), object->getX(), object->getY(), @@ -815,6 +816,7 @@ void MapComposite::initializeContent() std::string scriptText = object->getProperty("TEXT"); Script *script = ScriptManager::currentState(); + script->setMap(this); if (!scriptFilename.empty()) { diff --git a/src/scripting/luascript.cpp b/src/scripting/luascript.cpp index bdff6a12..e2b127f7 100644 --- a/src/scripting/luascript.cpp +++ b/src/scripting/luascript.cpp @@ -234,6 +234,7 @@ void LuaScript::load(const char *prog, const char *name) << lua_tostring(mRootState, -1)); lua_pop(mRootState, 1); } + setMap(0); } void LuaScript::processDeathEvent(Being *entity) |