From 507d9d57a93536a633d8ac9a5b0c95b4a5b48009 Mon Sep 17 00:00:00 2001 From: faketruth Date: Thu, 26 Jan 2012 22:21:23 +0000 Subject: No longer hard coded Lua files in new plugin system git-svn-id: http://mc-server.googlecode.com/svn/trunk@173 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cPlugin_NewLua.cpp | 54 +++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 20 deletions(-) (limited to 'source/cPlugin_NewLua.cpp') diff --git a/source/cPlugin_NewLua.cpp b/source/cPlugin_NewLua.cpp index 90647e011..f81f2e95e 100644 --- a/source/cPlugin_NewLua.cpp +++ b/source/cPlugin_NewLua.cpp @@ -11,6 +11,12 @@ extern "C" #include "Bindings.h" #include "ManualBindings.h" +#ifdef _WIN32 +#include "wdirent.h" +#else +#include +#endif + extern bool report_errors(lua_State* lua, int status); cPlugin_NewLua::cPlugin_NewLua( const char* a_PluginName ) @@ -38,29 +44,37 @@ bool cPlugin_NewLua::Initialize() ManualBindings::Bind( m_LuaState ); } - std::string PluginFiles[] = { std::string("Plugins/") + m_Directory + "/tick.lua" - ,std::string("Plugins/") + m_Directory + "/main.lua" }; - + std::string PluginPath = std::string("Plugins/") + m_Directory + "/"; // Load all files for this plugin, and execute them - for( int i = 0; i < 2; ++i ) - { - int s = luaL_loadfile(m_LuaState, PluginFiles[i].c_str() ); - if( report_errors( m_LuaState, s ) ) - { - LOGERROR("Can't load plugin %s because of an error in file %s", m_Directory.c_str(), PluginFiles[i].c_str() ); - lua_close( m_LuaState ); - m_LuaState = 0; - return false; - } - - s = lua_pcall(m_LuaState, 0, LUA_MULTRET, 0); - if( report_errors( m_LuaState, s ) ) + DIR* dp; + struct dirent *entry; + if(dp = opendir( PluginPath.c_str() )) + { + while(entry = readdir(dp)) { - LOGERROR("Error in plugin %s in file %s", m_Directory.c_str(), PluginFiles[i].c_str() ); - lua_close( m_LuaState ); - m_LuaState = 0; - return false; + std::string FileName = entry->d_name; + if( FileName.find(".lua") != std::string::npos ) + { + std::string Path = PluginPath + FileName; + int s = luaL_loadfile(m_LuaState, Path.c_str() ); + if( report_errors( m_LuaState, s ) ) + { + LOGERROR("Can't load plugin %s because of an error in file %s", m_Directory.c_str(), Path.c_str() ); + lua_close( m_LuaState ); + m_LuaState = 0; + return false; + } + + s = lua_pcall(m_LuaState, 0, LUA_MULTRET, 0); + if( report_errors( m_LuaState, s ) ) + { + LOGERROR("Error in plugin %s in file %s", m_Directory.c_str(), Path.c_str() ); + lua_close( m_LuaState ); + m_LuaState = 0; + return false; + } + } } } -- cgit v1.2.3