From 41ba1a7642105ac21b67f4febac3eceef6a39f0a Mon Sep 17 00:00:00 2001 From: faketruth Date: Sat, 13 Oct 2012 23:34:47 +0000 Subject: Completely removed support for old style Lua plugins (can use both Plugin and NewPlugin in settings.ini for now) Removed cPlugin_Lua, obviously cPluginManager stores plugins by their (folder)name cPluginManager now scans the Plugins folder for potential plugins and adds them as non-loaded plugins Added a DisablePlugin and LoadPlugin to disable and load plugins on a per-plugin basis instead of all at once cPluginManager::FindPlugins refreshes the plugin list by removing non-existing plugins and adding new plugins Made it incredibly easy to use new plugins from the WebAdmin Exposed some food/hunger related functions in cPlayer to Lua git-svn-id: http://mc-server.googlecode.com/svn/trunk@959 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- MCServer/Plugins/Core/web_manageplugins.lua | 140 +++++--- MCServer/settings.ini | 8 +- VC2008/MCServer.vcproj | 8 - source/AllToLua.pkg | 1 - source/Bindings.cpp | 500 +++++++++++++++++++--------- source/Bindings.h | 2 +- source/LuaCommandBinder.cpp | 14 +- source/ManualBindings.cpp | 22 +- source/Player.h | 12 +- source/Plugin.cpp | 8 +- source/Plugin.h | 19 +- source/PluginManager.cpp | 233 ++++++------- source/PluginManager.h | 24 +- source/Plugin_Lua.cpp | 98 ------ source/Plugin_Lua.h | 38 --- source/Plugin_NewLua.cpp | 25 +- source/Plugin_NewLua.h | 6 +- source/Plugin_Squirrel.cpp | 1 + source/WebAdmin.cpp | 7 +- 19 files changed, 617 insertions(+), 549 deletions(-) delete mode 100644 source/Plugin_Lua.cpp delete mode 100644 source/Plugin_Lua.h diff --git a/MCServer/Plugins/Core/web_manageplugins.lua b/MCServer/Plugins/Core/web_manageplugins.lua index 3030efc7a..cd785ec53 100644 --- a/MCServer/Plugins/Core/web_manageplugins.lua +++ b/MCServer/Plugins/Core/web_manageplugins.lua @@ -2,31 +2,93 @@ local function Button_RemovePlugin( Name, Index ) return "
" end +local function Button_EnablePlugin( Name ) + return [[
]] +end + +local function Button_DisablePlugin( Name ) + return [[
]] +end + +local function FindPluginID( SettingsIni, PluginName ) + local KeyIdx = SettingsIni:FindKey("Plugins") + local NumValues = SettingsIni:GetNumValues( KeyIdx ) + + for i = 0, NumValues-1 do + LOGINFO( SettingsIni:GetValue(KeyIdx, i) ) + if( SettingsIni:GetValue(KeyIdx, i) == PluginName ) then + return i + end + end + + return nil +end + +local function RemovePluginFromIni( SettingsIni, PluginName ) + local KeyIdx = SettingsIni:FindKey("Plugins") + local PluginIdx = FindPluginID( SettingsIni, PluginName ) + + if( PluginIdx == nil ) then + LOGINFO("Got nil! NOOOO") + return false + end + + local Name = SettingsIni:GetValue( KeyIdx, PluginIdx ) + if( Name ~= PluginName ) then + LOGINFO("not the same name T_T '" .. Name .. "' '" .. PluginName .. "'") + end + if( (Name == PluginName) and (SettingsIni:DeleteValueByID( KeyIdx, PluginIdx ) == true) ) then + return SettingsIni:WriteFile() + end + + return false +end + +local function AddPluginToIni( SettingsIni, PluginName ) + RemovePluginFromIni( SettingsIni, PluginName ) -- Make sure there are no duplicates + + if( SettingsIni:SetValue("Plugins", "Plugin", PluginName, true ) == true ) then + return SettingsIni:WriteFile() + end + + return false +end + local function HandlePluginListChanges( Request, SettingsIni ) local Content = "" - if( Request.PostParams["RemovePlugin"] ~= nil - and Request.PostParams["PluginName"] ~= nil - and Request.PostParams["PluginIndex"] ~= nil ) then -- Removing a plugin + + if( Request.PostParams["EnablePlugin"] ~= nil + and Request.PostParams["PluginName"] ~= nil ) then - local KeyIdx = SettingsIni:FindKey("Plugins") - local PluginIdx = Request.PostParams["PluginIndex"] - - local PluginName = SettingsIni:GetValue( KeyIdx, PluginIdx ) - if( (PluginName == Request.PostParams["PluginName"]) and (SettingsIni:DeleteValueByID( KeyIdx, PluginIdx ) == true) ) then - SettingsIni:WriteFile() - Content = "Removed plugin '" .. PluginName .. "'" + local PluginName = Request.PostParams["PluginName"] + + local PM = cRoot:Get():GetPluginManager() + if( PM:LoadPlugin( PluginName ) == false ) then + Content = "Could not enable '".. PluginName .."'!" + end + + if( AddPluginToIni( SettingsIni, PluginName ) == true ) then + Content = "Enabled plugin '".. PluginName .."'" else - Content = "Whoops! Something went wrong!" + Content = "Enabled plugin '".. PluginName .."' but could not add it to settings.ini" end + + elseif( Request.PostParams["DisablePlugin"] ~= nil + and Request.PostParams["PluginName"] ~= nil ) then - elseif( Request.PostParams["AddPlugin"] ~= nil - and Request.PostParams["PluginName"] ~= nil ) then -- Add a plugin + local PluginName = Request.PostParams["PluginName"] + + local PM = cRoot:Get():GetPluginManager() + PM:DisablePlugin( PluginName ) + + if( RemovePluginFromIni( SettingsIni, PluginName ) == true ) then + Content = "Disabled plugin '".. PluginName .."'" + else + Content = "Disabled plugin '".. PluginName .."' but could not remove it from settings.ini" + end - SettingsIni:SetValue("Plugins", "NewPlugin", Request.PostParams["PluginName"], true ) - SettingsIni:WriteFile() - Content = "Added plugin '".. Request.PostParams["PluginName"] .."'" end @@ -47,45 +109,33 @@ function HandleRequest_ManagePlugins( Request ) return Content end + local SettingsIni = cIniFile("settings.ini") + if( SettingsIni:ReadFile() == true ) then + Content = Content .. HandlePluginListChanges( Request, SettingsIni ) + else + Content = Content .. "Cannot find/modify settings.ini" + end + local PluginManager = cRoot:Get():GetPluginManager() + PluginManager:FindPlugins() -- Refreshes the plugin list local PluginList = PluginManager:GetAllPlugins() - Content = Content .. "

Currently active plugins

" + Content = Content .. "

Currently installed plugins

" Content = Content .. "" for k, Plugin in pairs(PluginList) do - Content = Content .. "" - end - Content = Content .. "
" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "
" - - local SettingsIni = cIniFile("settings.ini") - if( SettingsIni:ReadFile() == true ) then - Content = Content .. "

Plugins according to settings.ini

" - - Content = Content .. HandlePluginListChanges( Request, SettingsIni ) - - Content = Content .. "" - - local KeyIdx = SettingsIni:FindKey("Plugins") - local NumValues = SettingsIni:GetNumValues( KeyIdx ) - for i = 0, NumValues-1 do - local ValueName = SettingsIni:GetValueName(KeyIdx, i ) - local PluginName = SettingsIni:GetValue(KeyIdx, i) - Content = Content .. "" - Content = Content .. "" - Content = Content .. "" - Content = Content .. "" + Content = Content .. "" + if( Plugin ) then + Content = Content .. "" + else + Content = Content .. "" end - Content = Content .. "
" .. ValueName .. ": " .. PluginName .. "" .. Button_RemovePlugin( PluginName, i ) .. "
".. k .."" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "" .. Button_DisablePlugin(k) .. "" .. Button_EnablePlugin(k) .. "
" + Content = Content .. "" end - - Content = Content .. "

Add plugin to settings.ini

" - Content = Content .. "
" - Content = Content .. "" - Content = Content .. "
" + Content = Content .. "" Content = Content .. "

Reload

" Content = Content .. "
" - Content = Content .. "

Click the reload button to reload all plugins!
" + Content = Content .. "

Click the reload button to reload all plugins according to settings.ini!" Content = Content .. "

" Content = Content .. "
" diff --git a/MCServer/settings.ini b/MCServer/settings.ini index debdc3918..7e545c86d 100644 --- a/MCServer/settings.ini +++ b/MCServer/settings.ini @@ -11,10 +11,10 @@ Description=MCServer - in C++ DefaultWorld=world [Plugins] -; NewPlugin=sTick -; NewPlugin=DiamondMover -NewPlugin=Core -NewPlugin=ChunkWorx +; Plugin=sTick +; Plugin=DiamondMover +Plugin=Core +Plugin=ChunkWorx [HelpPlugin] ShowPluginNames=1 diff --git a/VC2008/MCServer.vcproj b/VC2008/MCServer.vcproj index 5ef341980..0dc4b62f3 100644 --- a/VC2008/MCServer.vcproj +++ b/VC2008/MCServer.vcproj @@ -1431,14 +1431,6 @@ RelativePath="..\source\Plugin.h" > - - - - diff --git a/source/AllToLua.pkg b/source/AllToLua.pkg index 2f971c2a8..0913de9a2 100644 --- a/source/AllToLua.pkg +++ b/source/AllToLua.pkg @@ -24,7 +24,6 @@ $cfile "Player.h" $cfile "PluginManager.h" $cfile "Plugin.h" $cfile "Plugin_NewLua.h" -$cfile "Plugin_Lua.h" $cfile "Server.h" $cfile "World.h" $cfile "Inventory.h" diff --git a/source/Bindings.cpp b/source/Bindings.cpp index 35c002b7b..30dfbb8be 100644 --- a/source/Bindings.cpp +++ b/source/Bindings.cpp @@ -1,6 +1,6 @@ /* ** Lua binding: AllToLua -** Generated automatically by tolua++-1.0.92 on 10/13/12 10:55:10. +** Generated automatically by tolua++-1.0.92 on 10/14/12 01:26:59. */ #ifndef __cplusplus @@ -33,7 +33,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S); #include "PluginManager.h" #include "Plugin.h" #include "Plugin_NewLua.h" -#include "Plugin_Lua.h" #include "Server.h" #include "World.h" #include "Inventory.h" @@ -169,29 +168,28 @@ static void tolua_reg_types (lua_State* tolua_S) tolua_usertype(tolua_S,"cStringMap"); tolua_usertype(tolua_S,"cBlockArea"); tolua_usertype(tolua_S,"cLuaItems"); - tolua_usertype(tolua_S,"cCraftingGrid"); tolua_usertype(tolua_S,"cServer"); tolua_usertype(tolua_S,"cRoot"); - tolua_usertype(tolua_S,"cTCPLink"); + tolua_usertype(tolua_S,"cCraftingGrid"); + tolua_usertype(tolua_S,"cStairs"); tolua_usertype(tolua_S,"cGroup"); - tolua_usertype(tolua_S,"cTracer"); tolua_usertype(tolua_S,"cPlugin::CommandStruct"); tolua_usertype(tolua_S,"cPickup"); tolua_usertype(tolua_S,"cItems"); - tolua_usertype(tolua_S,"cMCLogger"); + tolua_usertype(tolua_S,"cTracer"); tolua_usertype(tolua_S,"cClientHandle"); - tolua_usertype(tolua_S,"cCuboid"); + tolua_usertype(tolua_S,"cMCLogger"); tolua_usertype(tolua_S,"cFurnaceRecipe"); - tolua_usertype(tolua_S,"Vector3i"); + tolua_usertype(tolua_S,"cCuboid"); tolua_usertype(tolua_S,"cChatColor"); - tolua_usertype(tolua_S,"cStairs"); + tolua_usertype(tolua_S,"Vector3i"); tolua_usertype(tolua_S,"cLuaChunk"); tolua_usertype(tolua_S,"Lua__cWebPlugin"); tolua_usertype(tolua_S,"Lua__cPawn"); - tolua_usertype(tolua_S,"Lua__cTCPLink"); + tolua_usertype(tolua_S,"cTCPLink"); tolua_usertype(tolua_S,"cItem"); tolua_usertype(tolua_S,"Vector3f"); - tolua_usertype(tolua_S,"cPlugin_Lua"); + tolua_usertype(tolua_S,"Lua__cTCPLink"); tolua_usertype(tolua_S,"cCraftingRecipes"); tolua_usertype(tolua_S,"Lua__cPlugin_NewLua"); tolua_usertype(tolua_S,"cGroupManager"); @@ -202,8 +200,8 @@ static void tolua_reg_types (lua_State* tolua_S) tolua_usertype(tolua_S,"cWebPlugin"); tolua_usertype(tolua_S,"cEntity"); tolua_usertype(tolua_S,"Lua__cPlugin"); - tolua_usertype(tolua_S,"HTTPFormData"); tolua_usertype(tolua_S,"cPluginManager"); + tolua_usertype(tolua_S,"HTTPFormData"); tolua_usertype(tolua_S,"cLadder"); tolua_usertype(tolua_S,"cWorld"); tolua_usertype(tolua_S,"Lua__cPlayer"); @@ -6825,6 +6823,203 @@ static int tolua_AllToLua_cPlayer_Heal00(lua_State* tolua_S) } #endif //#ifndef TOLUA_DISABLE +/* method: Feed of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_Feed00 +static int tolua_AllToLua_cPlayer_Feed00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnumber(tolua_S,2,0,&tolua_err) || + !tolua_isnumber(tolua_S,3,0,&tolua_err) || + !tolua_isnoobj(tolua_S,4,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); + short a_Food = ((short) tolua_tonumber(tolua_S,2,0)); + float a_Saturation = ((float) tolua_tonumber(tolua_S,3,0)); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'Feed'", NULL); +#endif + { + bool tolua_ret = (bool) self->Feed(a_Food,a_Saturation); + tolua_pushboolean(tolua_S,(bool)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'Feed'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: GetMaxFoodLevel of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_GetMaxFoodLevel00 +static int tolua_AllToLua_cPlayer_GetMaxFoodLevel00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetMaxFoodLevel'", NULL); +#endif + { + short tolua_ret = (short) self->GetMaxFoodLevel(); + tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetMaxFoodLevel'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: GetFoodLevel of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_GetFoodLevel00 +static int tolua_AllToLua_cPlayer_GetFoodLevel00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetFoodLevel'", NULL); +#endif + { + short tolua_ret = (short) self->GetFoodLevel(); + tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetFoodLevel'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: GetMaxFoodSaturationLevel of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_GetMaxFoodSaturationLevel00 +static int tolua_AllToLua_cPlayer_GetMaxFoodSaturationLevel00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetMaxFoodSaturationLevel'", NULL); +#endif + { + float tolua_ret = (float) self->GetMaxFoodSaturationLevel(); + tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetMaxFoodSaturationLevel'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: GetFoodSaturationLevel of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_GetFoodSaturationLevel00 +static int tolua_AllToLua_cPlayer_GetFoodSaturationLevel00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetFoodSaturationLevel'", NULL); +#endif + { + float tolua_ret = (float) self->GetFoodSaturationLevel(); + tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetFoodSaturationLevel'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: AddFoodExhaustion of class cPlayer */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_AddFoodExhaustion00 +static int tolua_AllToLua_cPlayer_AddFoodExhaustion00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"cPlayer",0,&tolua_err) || + !tolua_isnumber(tolua_S,2,0,&tolua_err) || + !tolua_isnoobj(tolua_S,3,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); + float a_Exhaustion = ((float) tolua_tonumber(tolua_S,2,0)); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'AddFoodExhaustion'", NULL); +#endif + { + self->AddFoodExhaustion(a_Exhaustion); + } + } + return 0; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'AddFoodExhaustion'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + /* method: TakeDamage of class cPlayer */ #ifndef TOLUA_DISABLE_tolua_AllToLua_cPlayer_TakeDamage00 static int tolua_AllToLua_cPlayer_TakeDamage00(lua_State* tolua_S) @@ -7395,9 +7590,9 @@ static int tolua_AllToLua_cPluginManager_GetPlugin00(lua_State* tolua_S) } #endif //#ifndef TOLUA_DISABLE -/* method: ReloadPlugins of class cPluginManager */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_ReloadPlugins00 -static int tolua_AllToLua_cPluginManager_ReloadPlugins00(lua_State* tolua_S) +/* method: FindPlugins of class cPluginManager */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_FindPlugins00 +static int tolua_AllToLua_cPluginManager_FindPlugins00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; @@ -7411,51 +7606,47 @@ static int tolua_AllToLua_cPluginManager_ReloadPlugins00(lua_State* tolua_S) { cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); #ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'ReloadPlugins'", NULL); + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'FindPlugins'", NULL); #endif { - self->ReloadPlugins(); + self->FindPlugins(); } } return 0; #ifndef TOLUA_RELEASE tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'ReloadPlugins'.",&tolua_err); + tolua_error(tolua_S,"#ferror in function 'FindPlugins'.",&tolua_err); return 0; #endif } #endif //#ifndef TOLUA_DISABLE -/* method: AddPlugin of class cPluginManager */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_AddPlugin00 -static int tolua_AllToLua_cPluginManager_AddPlugin00(lua_State* tolua_S) +/* method: ReloadPlugins of class cPluginManager */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_ReloadPlugins00 +static int tolua_AllToLua_cPluginManager_ReloadPlugins00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertype(tolua_S,1,"cPluginManager",0,&tolua_err) || - !tolua_isusertype(tolua_S,2,"cPlugin",0,&tolua_err) || - !tolua_isnoobj(tolua_S,3,&tolua_err) + !tolua_isnoobj(tolua_S,2,&tolua_err) ) goto tolua_lerror; else #endif { cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); - lua_State* a_LuaState = tolua_S; - cPlugin* a_Plugin = ((cPlugin*) tolua_tousertype(tolua_S,2,0)); #ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'AddPlugin'", NULL); + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'ReloadPlugins'", NULL); #endif { - bool tolua_ret = (bool) self->AddPlugin(a_LuaState,a_Plugin); - tolua_pushboolean(tolua_S,(bool)tolua_ret); + self->ReloadPlugins(); } } - return 1; + return 0; #ifndef TOLUA_RELEASE tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'AddPlugin'.",&tolua_err); + tolua_error(tolua_S,"#ferror in function 'ReloadPlugins'.",&tolua_err); return 0; #endif } @@ -7528,44 +7719,9 @@ static int tolua_AllToLua_cPluginManager_GetNumPlugins00(lua_State* tolua_S) } #endif //#ifndef TOLUA_DISABLE -/* method: RemovePlugin of class cPluginManager */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_RemovePlugin00 -static int tolua_AllToLua_cPluginManager_RemovePlugin00(lua_State* tolua_S) -{ -#ifndef TOLUA_RELEASE - tolua_Error tolua_err; - if ( - !tolua_isusertype(tolua_S,1,"cPluginManager",0,&tolua_err) || - !tolua_isusertype(tolua_S,2,"cPlugin",0,&tolua_err) || - !tolua_isboolean(tolua_S,3,1,&tolua_err) || - !tolua_isnoobj(tolua_S,4,&tolua_err) - ) - goto tolua_lerror; - else -#endif - { - cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); - cPlugin* a_Plugin = ((cPlugin*) tolua_tousertype(tolua_S,2,0)); - bool a_bDelete = ((bool) tolua_toboolean(tolua_S,3,false)); -#ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'RemovePlugin'", NULL); -#endif - { - self->RemovePlugin(a_Plugin,a_bDelete); - } - } - return 0; -#ifndef TOLUA_RELEASE - tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'RemovePlugin'.",&tolua_err); - return 0; -#endif -} -#endif //#ifndef TOLUA_DISABLE - -/* method: RemoveLuaPlugin of class cPluginManager */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_RemoveLuaPlugin00 -static int tolua_AllToLua_cPluginManager_RemoveLuaPlugin00(lua_State* tolua_S) +/* method: DisablePlugin of class cPluginManager */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_DisablePlugin00 +static int tolua_AllToLua_cPluginManager_DisablePlugin00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; @@ -7579,51 +7735,55 @@ static int tolua_AllToLua_cPluginManager_RemoveLuaPlugin00(lua_State* tolua_S) #endif { cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); - std::string a_FileName = ((std::string) tolua_tocppstring(tolua_S,2,0)); + AString a_PluginName = ((AString) tolua_tocppstring(tolua_S,2,0)); #ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'RemoveLuaPlugin'", NULL); + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'DisablePlugin'", NULL); #endif { - self->RemoveLuaPlugin(a_FileName); + bool tolua_ret = (bool) self->DisablePlugin(a_PluginName); + tolua_pushboolean(tolua_S,(bool)tolua_ret); + tolua_pushcppstring(tolua_S,(const char*)a_PluginName); } } - return 0; + return 2; #ifndef TOLUA_RELEASE tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'RemoveLuaPlugin'.",&tolua_err); + tolua_error(tolua_S,"#ferror in function 'DisablePlugin'.",&tolua_err); return 0; #endif } #endif //#ifndef TOLUA_DISABLE -/* method: GetLuaPlugin of class cPluginManager */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_GetLuaPlugin00 -static int tolua_AllToLua_cPluginManager_GetLuaPlugin00(lua_State* tolua_S) +/* method: LoadPlugin of class cPluginManager */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_LoadPlugin00 +static int tolua_AllToLua_cPluginManager_LoadPlugin00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertype(tolua_S,1,"cPluginManager",0,&tolua_err) || - !tolua_isnoobj(tolua_S,2,&tolua_err) + !tolua_iscppstring(tolua_S,2,0,&tolua_err) || + !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); - lua_State* a_State = tolua_S; + AString a_PluginName = ((AString) tolua_tocppstring(tolua_S,2,0)); #ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetLuaPlugin'", NULL); + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'LoadPlugin'", NULL); #endif { - cPlugin_Lua* tolua_ret = (cPlugin_Lua*) self->GetLuaPlugin(a_State); - tolua_pushusertype(tolua_S,(void*)tolua_ret,"cPlugin_Lua"); + bool tolua_ret = (bool) self->LoadPlugin(a_PluginName); + tolua_pushboolean(tolua_S,(bool)tolua_ret); + tolua_pushcppstring(tolua_S,(const char*)a_PluginName); } } - return 1; + return 2; #ifndef TOLUA_RELEASE tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'GetLuaPlugin'.",&tolua_err); + tolua_error(tolua_S,"#ferror in function 'LoadPlugin'.",&tolua_err); return 0; #endif } @@ -8709,6 +8869,70 @@ static int tolua_AllToLua_cPlugin_SetVersion00(lua_State* tolua_S) } #endif //#ifndef TOLUA_DISABLE +/* method: GetDirectory of class cPlugin */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlugin_GetDirectory00 +static int tolua_AllToLua_cPlugin_GetDirectory00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"const cPlugin",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + const cPlugin* self = (const cPlugin*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetDirectory'", NULL); +#endif + { + const AString tolua_ret = (const AString) self->GetDirectory(); + tolua_pushcppstring(tolua_S,(const char*)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetDirectory'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + +/* method: GetLocalDirectory of class cPlugin */ +#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlugin_GetLocalDirectory00 +static int tolua_AllToLua_cPlugin_GetLocalDirectory00(lua_State* tolua_S) +{ +#ifndef TOLUA_RELEASE + tolua_Error tolua_err; + if ( + !tolua_isusertype(tolua_S,1,"const cPlugin",0,&tolua_err) || + !tolua_isnoobj(tolua_S,2,&tolua_err) + ) + goto tolua_lerror; + else +#endif + { + const cPlugin* self = (const cPlugin*) tolua_tousertype(tolua_S,1,0); +#ifndef TOLUA_RELEASE + if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetLocalDirectory'", NULL); +#endif + { + AString tolua_ret = (AString) self->GetLocalDirectory(); + tolua_pushcppstring(tolua_S,(const char*)tolua_ret); + } + } + return 1; +#ifndef TOLUA_RELEASE + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'GetLocalDirectory'.",&tolua_err); + return 0; +#endif +} +#endif //#ifndef TOLUA_DISABLE + /* get function: Command of class CommandStruct */ #ifndef TOLUA_DISABLE_tolua_get_cPlugin__CommandStruct_Command static int tolua_get_cPlugin__CommandStruct_Command(lua_State* tolua_S) @@ -8733,7 +8957,7 @@ static int tolua_set_cPlugin__CommandStruct_Command(lua_State* tolua_S) if (!tolua_iscppstring(tolua_S,2,0,&tolua_err)) tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err); #endif - self->Command = ((std::string) tolua_tocppstring(tolua_S,2,0)) + self->Command = ((AString) tolua_tocppstring(tolua_S,2,0)) ; return 0; } @@ -8763,7 +8987,7 @@ static int tolua_set_cPlugin__CommandStruct_Description(lua_State* tolua_S) if (!tolua_iscppstring(tolua_S,2,0,&tolua_err)) tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err); #endif - self->Description = ((std::string) tolua_tocppstring(tolua_S,2,0)) + self->Description = ((AString) tolua_tocppstring(tolua_S,2,0)) ; return 0; } @@ -8793,7 +9017,7 @@ static int tolua_set_cPlugin__CommandStruct_Permission(lua_State* tolua_S) if (!tolua_iscppstring(tolua_S,2,0,&tolua_err)) tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err); #endif - self->Permission = ((std::string) tolua_tocppstring(tolua_S,2,0)) + self->Permission = ((AString) tolua_tocppstring(tolua_S,2,0)) ; return 0; } @@ -9223,7 +9447,7 @@ public: void cPlugin__SetName( const AString& a_Name) { return ( void )cPlugin::SetName(a_Name); }; - Lua__cPlugin( void ): cPlugin(){}; + Lua__cPlugin( const AString& a_PluginDirectory): cPlugin(a_PluginDirectory){}; }; /* method: tolua__set_instance of class Lua__cPlugin */ @@ -10189,18 +10413,21 @@ static int tolua_AllToLua_Lua__cPlugin_new00(lua_State* tolua_S) tolua_Error tolua_err; if ( !tolua_isusertable(tolua_S,1,"Lua__cPlugin",0,&tolua_err) || - !tolua_isnoobj(tolua_S,2,&tolua_err) + !tolua_iscppstring(tolua_S,2,0,&tolua_err) || + !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { + const AString a_PluginDirectory = ((const AString) tolua_tocppstring(tolua_S,2,0)); { - Lua__cPlugin* tolua_ret = (Lua__cPlugin*) Mtolua_new((Lua__cPlugin)()); + Lua__cPlugin* tolua_ret = (Lua__cPlugin*) Mtolua_new((Lua__cPlugin)(a_PluginDirectory)); tolua_pushusertype(tolua_S,(void*)tolua_ret,"Lua__cPlugin"); + tolua_pushcppstring(tolua_S,(const char*)a_PluginDirectory); } } - return 1; + return 2; #ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in function 'new'.",&tolua_err); @@ -10217,19 +10444,22 @@ static int tolua_AllToLua_Lua__cPlugin_new00_local(lua_State* tolua_S) tolua_Error tolua_err; if ( !tolua_isusertable(tolua_S,1,"Lua__cPlugin",0,&tolua_err) || - !tolua_isnoobj(tolua_S,2,&tolua_err) + !tolua_iscppstring(tolua_S,2,0,&tolua_err) || + !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { + const AString a_PluginDirectory = ((const AString) tolua_tocppstring(tolua_S,2,0)); { - Lua__cPlugin* tolua_ret = (Lua__cPlugin*) Mtolua_new((Lua__cPlugin)()); + Lua__cPlugin* tolua_ret = (Lua__cPlugin*) Mtolua_new((Lua__cPlugin)(a_PluginDirectory)); tolua_pushusertype(tolua_S,(void*)tolua_ret,"Lua__cPlugin"); tolua_register_gc(tolua_S,lua_gettop(tolua_S)); + tolua_pushcppstring(tolua_S,(const char*)a_PluginDirectory); } } - return 1; + return 2; #ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in function 'new'.",&tolua_err); @@ -10375,38 +10605,6 @@ static int tolua_AllToLua_cPlugin_NewLua_Tick00(lua_State* tolua_S) } #endif //#ifndef TOLUA_DISABLE -/* method: GetLocalDirectory of class cPlugin_NewLua */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlugin_NewLua_GetLocalDirectory00 -static int tolua_AllToLua_cPlugin_NewLua_GetLocalDirectory00(lua_State* tolua_S) -{ -#ifndef TOLUA_RELEASE - tolua_Error tolua_err; - if ( - !tolua_isusertype(tolua_S,1,"const cPlugin_NewLua",0,&tolua_err) || - !tolua_isnoobj(tolua_S,2,&tolua_err) - ) - goto tolua_lerror; - else -#endif - { - const cPlugin_NewLua* self = (const cPlugin_NewLua*) tolua_tousertype(tolua_S,1,0); -#ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetLocalDirectory'", NULL); -#endif - { - AString tolua_ret = (AString) self->GetLocalDirectory(); - tolua_pushcppstring(tolua_S,(const char*)tolua_ret); - } - } - return 1; -#ifndef TOLUA_RELEASE - tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'GetLocalDirectory'.",&tolua_err); - return 0; -#endif -} -#endif //#ifndef TOLUA_DISABLE - /* method: CreateWebPlugin of class cPlugin_NewLua */ #ifndef TOLUA_DISABLE_tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00 static int tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00(lua_State* tolua_S) @@ -10969,38 +11167,6 @@ static int tolua_AllToLua_Lua__cPlugin_NewLua_cPlugin_NewLua__Tick00(lua_State* } #endif //#ifndef TOLUA_DISABLE -/* method: GetFileName of class cPlugin_Lua */ -#ifndef TOLUA_DISABLE_tolua_AllToLua_cPlugin_Lua_GetFileName00 -static int tolua_AllToLua_cPlugin_Lua_GetFileName00(lua_State* tolua_S) -{ -#ifndef TOLUA_RELEASE - tolua_Error tolua_err; - if ( - !tolua_isusertype(tolua_S,1,"cPlugin_Lua",0,&tolua_err) || - !tolua_isnoobj(tolua_S,2,&tolua_err) - ) - goto tolua_lerror; - else -#endif - { - cPlugin_Lua* self = (cPlugin_Lua*) tolua_tousertype(tolua_S,1,0); -#ifndef TOLUA_RELEASE - if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetFileName'", NULL); -#endif - { - std::string tolua_ret = (std::string) self->GetFileName(); - tolua_pushcppstring(tolua_S,(const char*)tolua_ret); - } - } - return 1; -#ifndef TOLUA_RELEASE - tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'GetFileName'.",&tolua_err); - return 0; -#endif -} -#endif //#ifndef TOLUA_DISABLE - /* method: GetServer of class cServer */ #ifndef TOLUA_DISABLE_tolua_AllToLua_cServer_GetServer00 static int tolua_AllToLua_cServer_GetServer00(lua_State* tolua_S) @@ -22298,6 +22464,12 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S) tolua_function(tolua_S,"GetColor",tolua_AllToLua_cPlayer_GetColor00); tolua_function(tolua_S,"TossItem",tolua_AllToLua_cPlayer_TossItem00); tolua_function(tolua_S,"Heal",tolua_AllToLua_cPlayer_Heal00); + tolua_function(tolua_S,"Feed",tolua_AllToLua_cPlayer_Feed00); + tolua_function(tolua_S,"GetMaxFoodLevel",tolua_AllToLua_cPlayer_GetMaxFoodLevel00); + tolua_function(tolua_S,"GetFoodLevel",tolua_AllToLua_cPlayer_GetFoodLevel00); + tolua_function(tolua_S,"GetMaxFoodSaturationLevel",tolua_AllToLua_cPlayer_GetMaxFoodSaturationLevel00); + tolua_function(tolua_S,"GetFoodSaturationLevel",tolua_AllToLua_cPlayer_GetFoodSaturationLevel00); + tolua_function(tolua_S,"AddFoodExhaustion",tolua_AllToLua_cPlayer_AddFoodExhaustion00); tolua_function(tolua_S,"TakeDamage",tolua_AllToLua_cPlayer_TakeDamage00); tolua_function(tolua_S,"KilledBy",tolua_AllToLua_cPlayer_KilledBy00); tolua_function(tolua_S,"Respawn",tolua_AllToLua_cPlayer_Respawn00); @@ -22357,13 +22529,12 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S) tolua_constant(tolua_S,"E_PLUGIN_BLOCK_TO_DROPS",cPluginManager::E_PLUGIN_BLOCK_TO_DROPS); tolua_function(tolua_S,"GetPluginManager",tolua_AllToLua_cPluginManager_GetPluginManager00); tolua_function(tolua_S,"GetPlugin",tolua_AllToLua_cPluginManager_GetPlugin00); + tolua_function(tolua_S,"FindPlugins",tolua_AllToLua_cPluginManager_FindPlugins00); tolua_function(tolua_S,"ReloadPlugins",tolua_AllToLua_cPluginManager_ReloadPlugins00); - tolua_function(tolua_S,"AddPlugin",tolua_AllToLua_cPluginManager_AddPlugin00); tolua_function(tolua_S,"AddHook",tolua_AllToLua_cPluginManager_AddHook00); tolua_function(tolua_S,"GetNumPlugins",tolua_AllToLua_cPluginManager_GetNumPlugins00); - tolua_function(tolua_S,"RemovePlugin",tolua_AllToLua_cPluginManager_RemovePlugin00); - tolua_function(tolua_S,"RemoveLuaPlugin",tolua_AllToLua_cPluginManager_RemoveLuaPlugin00); - tolua_function(tolua_S,"GetLuaPlugin",tolua_AllToLua_cPluginManager_GetLuaPlugin00); + tolua_function(tolua_S,"DisablePlugin",tolua_AllToLua_cPluginManager_DisablePlugin00); + tolua_function(tolua_S,"LoadPlugin",tolua_AllToLua_cPluginManager_LoadPlugin00); tolua_endmodule(tolua_S); #ifdef __cplusplus tolua_cclass(tolua_S,"cPlugin","cPlugin","",tolua_collect_cPlugin); @@ -22400,6 +22571,8 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S) tolua_function(tolua_S,"SetName",tolua_AllToLua_cPlugin_SetName00); tolua_function(tolua_S,"GetVersion",tolua_AllToLua_cPlugin_GetVersion00); tolua_function(tolua_S,"SetVersion",tolua_AllToLua_cPlugin_SetVersion00); + tolua_function(tolua_S,"GetDirectory",tolua_AllToLua_cPlugin_GetDirectory00); + tolua_function(tolua_S,"GetLocalDirectory",tolua_AllToLua_cPlugin_GetLocalDirectory00); tolua_cclass(tolua_S,"CommandStruct","cPlugin::CommandStruct","",NULL); tolua_beginmodule(tolua_S,"CommandStruct"); tolua_variable(tolua_S,"Command",tolua_get_cPlugin__CommandStruct_Command,tolua_set_cPlugin__CommandStruct_Command); @@ -22449,7 +22622,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S) tolua_function(tolua_S,"OnDisable",tolua_AllToLua_cPlugin_NewLua_OnDisable00); tolua_function(tolua_S,"Initialize",tolua_AllToLua_cPlugin_NewLua_Initialize00); tolua_function(tolua_S,"Tick",tolua_AllToLua_cPlugin_NewLua_Tick00); - tolua_function(tolua_S,"GetLocalDirectory",tolua_AllToLua_cPlugin_NewLua_GetLocalDirectory00); tolua_function(tolua_S,"CreateWebPlugin",tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00); tolua_variable(tolua_S,"__cWebPlugin__",tolua_get_cPlugin_NewLua___cWebPlugin__,NULL); tolua_endmodule(tolua_S); @@ -22460,10 +22632,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S) tolua_function(tolua_S,"cPlugin_NewLua__Initialize",tolua_AllToLua_Lua__cPlugin_NewLua_cPlugin_NewLua__Initialize00); tolua_function(tolua_S,"cPlugin_NewLua__Tick",tolua_AllToLua_Lua__cPlugin_NewLua_cPlugin_NewLua__Tick00); tolua_endmodule(tolua_S); - tolua_cclass(tolua_S,"cPlugin_Lua","cPlugin_Lua","",NULL); - tolua_beginmodule(tolua_S,"cPlugin_Lua"); - tolua_function(tolua_S,"GetFileName",tolua_AllToLua_cPlugin_Lua_GetFileName00); - tolua_endmodule(tolua_S); tolua_cclass(tolua_S,"cServer","cServer","",NULL); tolua_beginmodule(tolua_S,"cServer"); tolua_function(tolua_S,"GetServer",tolua_AllToLua_cServer_GetServer00); diff --git a/source/Bindings.h b/source/Bindings.h index 69bd6b1e6..c0facfb83 100644 --- a/source/Bindings.h +++ b/source/Bindings.h @@ -1,6 +1,6 @@ /* ** Lua binding: AllToLua -** Generated automatically by tolua++-1.0.92 on 10/13/12 10:55:10. +** Generated automatically by tolua++-1.0.92 on 10/14/12 01:27:00. */ /* Exported function */ diff --git a/source/LuaCommandBinder.cpp b/source/LuaCommandBinder.cpp index 7a65cab7f..75c738124 100644 --- a/source/LuaCommandBinder.cpp +++ b/source/LuaCommandBinder.cpp @@ -4,7 +4,6 @@ #include "LuaCommandBinder.h" #include "Player.h" #include "Plugin.h" -#include "Plugin_Lua.h" #include "tolua++.h" @@ -12,7 +11,18 @@ -extern bool report_errors(lua_State* lua, int status); +bool report_errors(lua_State* lua, int status) +{ + if ( status!=0 ) + { + std::string s = lua_tostring(lua, -1); + LOGERROR("-- %s", s.c_str() ); + lua_pop(lua, 1); + return true; + } + return false; +} + cLuaCommandBinder::cLuaCommandBinder() { diff --git a/source/ManualBindings.cpp b/source/ManualBindings.cpp index dca4e0083..39677b7a8 100644 --- a/source/ManualBindings.cpp +++ b/source/ManualBindings.cpp @@ -521,17 +521,27 @@ static int tolua_cPluginManager_GetAllPlugins(lua_State* tolua_S) { cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0); - const cPluginManager::PluginList & AllPlugins = self->GetAllPlugins(); + const cPluginManager::PluginMap & AllPlugins = self->GetAllPlugins(); - lua_createtable(tolua_S, AllPlugins.size(), 0); + lua_newtable(tolua_S); + //lua_createtable(tolua_S, AllPlugins.size(), 0); int newTable = lua_gettop(tolua_S); int index = 1; - cPluginManager::PluginList::const_iterator iter = AllPlugins.begin(); + cPluginManager::PluginMap::const_iterator iter = AllPlugins.begin(); while(iter != AllPlugins.end()) { - const cPlugin* Plugin = *iter; - tolua_pushusertype( tolua_S, (void*)Plugin, "const cPlugin" ); - lua_rawseti(tolua_S, newTable, index); + const cPlugin* Plugin = iter->second; + tolua_pushstring( tolua_S, iter->first.c_str() ); + if( Plugin != NULL ) + { + tolua_pushusertype( tolua_S, (void*)Plugin, "const cPlugin" ); + } + else + { + tolua_pushboolean(tolua_S, 0); + } + //lua_rawseti(tolua_S, newTable, index); + lua_rawset(tolua_S, -3); ++iter; ++index; } diff --git a/source/Player.h b/source/Player.h index 3a5f346d5..0b0a0a12c 100644 --- a/source/Player.h +++ b/source/Player.h @@ -88,15 +88,15 @@ public: void Heal( int a_Health ); //tolua_export /// Returns true if any food has been consumed, false if player "full" - bool Feed(short a_Food, float a_Saturation); + bool Feed(short a_Food, float a_Saturation); //tolua_export - short GetMaxFoodLevel() { return m_MaxFoodLevel; } - short GetFoodLevel() { return m_FoodLevel; } + short GetMaxFoodLevel() { return m_MaxFoodLevel; } //tolua_export + short GetFoodLevel() { return m_FoodLevel; } //tolua_export - float GetMaxFoodSaturationLevel() { return m_MaxFoodSaturationLevel; } - float GetFoodSaturationLevel() { return m_FoodSaturationLevel; } + float GetMaxFoodSaturationLevel() { return m_MaxFoodSaturationLevel; } //tolua_export + float GetFoodSaturationLevel() { return m_FoodSaturationLevel; } //tolua_export - void AddFoodExhaustion(float a_Exhaustion) { m_FoodExhaustionLevel += a_Exhaustion; } + void AddFoodExhaustion(float a_Exhaustion) { m_FoodExhaustionLevel += a_Exhaustion; } //tolua_export void TakeDamage( int a_Damage, cEntity* a_Instigator ); //tolua_export void KilledBy( cEntity* a_Killer ); //tolua_export diff --git a/source/Plugin.cpp b/source/Plugin.cpp index 563e6237d..7a22f803e 100644 --- a/source/Plugin.cpp +++ b/source/Plugin.cpp @@ -7,10 +7,11 @@ -cPlugin::cPlugin() +cPlugin::cPlugin( const AString & a_PluginDirectory ) : m_Version( 0 ) , m_Language( E_CPP ) , m_bCanBindCommands( false ) + , m_Directory( a_PluginDirectory ) { } @@ -306,3 +307,8 @@ void cPlugin::AddCommand(const AString & a_Command, const AString & a_Descriptio + +AString cPlugin::GetLocalDirectory(void) const +{ + return std::string("Plugins/") + m_Directory; +} \ No newline at end of file diff --git a/source/Plugin.h b/source/Plugin.h index d88a26d4e..52508eb6a 100644 --- a/source/Plugin.h +++ b/source/Plugin.h @@ -28,7 +28,7 @@ class cCraftingRecipe; class cPlugin { public: - cPlugin(); + cPlugin( const AString & a_PluginDirectory ); virtual ~cPlugin(); virtual void OnDisable() {} @@ -70,18 +70,21 @@ public: int GetVersion() const { return m_Version; } void SetVersion( int a_Version ) { m_Version = a_Version; } + const AString & GetDirectory(void) const {return m_Directory; } + AString GetLocalDirectory(void) const; //tolua_export + struct CommandStruct { - std::string Command; - std::string Description; - std::string Permission; + AString Command; + AString Description; + AString Permission; }; void AddCommand(const AString & a_Command, const AString & a_Description, const AString & a_Permission); // tolua_end - typedef bool (FuncCommandHandler)( std::string & a_Command, std::vector< std::string > & a_Split ); - void BindCommand( FuncCommandHandler* a_Function, std::string & a_Command ); // >> EXPORTED IN MANUALBINDINGS << + typedef bool (FuncCommandHandler)( AString & a_Command, std::vector< std::string > & a_Split ); + void BindCommand( FuncCommandHandler* a_Function, AString & a_Command ); // >> EXPORTED IN MANUALBINDINGS << const std::vector< CommandStruct > & GetCommands() const { return m_Commands; } // >> EXPORTED IN MANUALBINDINGS << @@ -102,8 +105,10 @@ private: PluginLanguage m_Language; std::vector< CommandStruct > m_Commands; - std::string m_Name; + AString m_Name; int m_Version; + + AString m_Directory; }; //tolua_export diff --git a/source/PluginManager.cpp b/source/PluginManager.cpp index a76fc0442..1123f3615 100644 --- a/source/PluginManager.cpp +++ b/source/PluginManager.cpp @@ -2,7 +2,6 @@ #include "PluginManager.h" #include "Plugin.h" -#include "Plugin_Lua.h" #include "Plugin_NewLua.h" #include "WebAdmin.h" #include "Item.h" @@ -76,6 +75,45 @@ void cPluginManager::ReloadPlugins() +void cPluginManager::FindPlugins() +{ + AString PluginsPath = FILE_IO_PREFIX + AString( "Plugins/" ); + + // First get a clean list of only the currently running plugins, we don't want to mess those up + for( PluginMap::iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ) + { + if( itr->second == NULL ) + { + PluginMap::iterator thiz = itr; + ++thiz; + m_Plugins.erase( itr ); + itr = thiz; + continue; + } + ++itr; + } + + AStringList Files = GetDirectoryContents(PluginsPath.c_str()); + for (AStringList::const_iterator itr = Files.begin(); itr != Files.end(); ++itr) + { + if (itr->rfind(".") != AString::npos) + { + // Ignore files, we only want directories + continue; + } + + // Add plugin name/directory to the list + if( m_Plugins.find( *itr ) == m_Plugins.end() ) + { + m_Plugins[ *itr ] = NULL; + } + } +} + + + + + void cPluginManager::ReloadPluginsNow() { LOG("Loading plugins"); @@ -87,6 +125,8 @@ void cPluginManager::ReloadPluginsNow() OpenSquirrelVM(); #endif // USE_SQUIRREL + FindPlugins(); + cIniFile IniFile("settings.ini"); if (!IniFile.ReadFile() ) { @@ -100,34 +140,14 @@ void cPluginManager::ReloadPluginsNow() for(unsigned int i = 0; i < NumPlugins; i++) { AString ValueName = IniFile.GetValueName(KeyNum, i ); - if( ValueName.compare("Plugin") == 0 ) // It's a Lua plugin - { - AString PluginFile = IniFile.GetValue(KeyNum, i ); - if( !PluginFile.empty() ) - { - // allow for comma separated plugin list - // degrades and works fine for the plugin - // per line - AStringVector split = StringSplit( PluginFile, "," ); - for (unsigned int j = 0; j < split.size(); j++) - { - cPlugin_Lua* Plugin = new cPlugin_Lua( (split[j] + AString(".lua") ).c_str() ); - if( !AddLuaPlugin( Plugin ) ) - { - delete Plugin; - } - } - } - } - else if( ValueName.compare("NewPlugin") == 0 ) // New plugin style + if( (ValueName.compare("NewPlugin") == 0) || (ValueName.compare("Plugin") == 0) ) // New plugin style { AString PluginFile = IniFile.GetValue(KeyNum, i ); if( !PluginFile.empty() ) { - cPlugin_NewLua* Plugin = new cPlugin_NewLua( PluginFile.c_str() ); - if( !AddPlugin( Plugin ) ) + if( m_Plugins.find( PluginFile ) != m_Plugins.end() ) { - delete Plugin; + LoadPlugin( PluginFile ); } } } @@ -168,6 +188,12 @@ void cPluginManager::ReloadPluginsNow() void cPluginManager::Tick(float a_Dt) { + while( m_DisablePluginList.size() > 0 ) + { + RemovePlugin( m_DisablePluginList.front(), true ); + m_DisablePluginList.pop_front(); + } + if( m_bReloadPlugins ) { ReloadPluginsNow(); @@ -650,11 +676,12 @@ bool cPluginManager::CallHookHandshake(cClientHandle * a_ClientHandle, const ASt cPlugin* cPluginManager::GetPlugin( const AString & a_Plugin ) const { - for( PluginList::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr ) + for( PluginMap::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr ) { - if ((*itr)->GetName().compare(a_Plugin) == 0) + if (itr->second == NULL ) continue; + if (itr->second->GetName().compare(a_Plugin) == 0) { - return *itr; + return itr->second; } } return 0; @@ -664,7 +691,7 @@ cPlugin* cPluginManager::GetPlugin( const AString & a_Plugin ) const -const cPluginManager::PluginList & cPluginManager::GetAllPlugins() const +const cPluginManager::PluginMap & cPluginManager::GetAllPlugins() const { return m_Plugins; } @@ -677,22 +704,46 @@ void cPluginManager::UnloadPluginsNow() { m_Hooks.clear(); - while( m_LuaPlugins.size() > 0 ) + while( m_Plugins.size() > 0 ) + { + RemovePlugin( m_Plugins.begin()->second, true ); + } + + //SquirrelVM::Shutdown(); // This breaks shit +} + + + + + +bool cPluginManager::DisablePlugin( AString & a_PluginName ) +{ + PluginMap::iterator itr = m_Plugins.find( a_PluginName ); + if (itr != m_Plugins.end()) { - cPlugin_Lua* LuaPlugin = *m_LuaPlugins.begin(); - if( LuaPlugin ) + if (itr->first.compare( a_PluginName ) == 0) { - delete LuaPlugin; + m_DisablePluginList.push_back( itr->second ); + itr->second = NULL; // Get rid of this thing right away + return true; } - m_LuaPlugins.remove( LuaPlugin ); } + return false; +} - while( m_Plugins.size() > 0 ) + + + + +bool cPluginManager::LoadPlugin( AString & a_PluginName ) +{ + cPlugin_NewLua* Plugin = new cPlugin_NewLua( a_PluginName.c_str() ); + if( !AddPlugin( Plugin ) ) { - RemovePlugin( *m_Plugins.begin(), true ); + delete Plugin; + return false; } - - //SquirrelVM::Shutdown(); // This breaks shit + return true; } @@ -723,7 +774,7 @@ void cPluginManager::RemoveHooks( cPlugin* a_Plugin ) -void cPluginManager::RemovePlugin( cPlugin* a_Plugin, bool a_bDelete /* = false */ ) +void cPluginManager::RemovePlugin( cPlugin * a_Plugin, bool a_bDelete /* = false */ ) { if( a_bDelete ) { @@ -731,17 +782,20 @@ void cPluginManager::RemovePlugin( cPlugin* a_Plugin, bool a_bDelete /* = false #ifdef USE_SQUIRREL m_SquirrelCommandBinder->RemoveBindingsForPlugin( a_Plugin ); #endif - m_Plugins.remove( a_Plugin ); - RemoveHooks( a_Plugin ); - a_Plugin->OnDisable(); - delete a_Plugin; - } - else - { - for( LuaPluginList::iterator itr = m_LuaPlugins.begin(); itr != m_LuaPlugins.end(); ++itr ) + for( PluginMap::iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr ) + { + if( itr->second == a_Plugin ) + { + m_Plugins.erase( itr ); + break; + } + } + if( a_Plugin != NULL ) { - (*itr)->RemovePlugin( a_Plugin ); + RemoveHooks( a_Plugin ); + a_Plugin->OnDisable(); + delete a_Plugin; } } } @@ -755,8 +809,7 @@ bool cPluginManager::AddPlugin( cPlugin* a_Plugin ) a_Plugin->m_bCanBindCommands = true; if( a_Plugin->Initialize() ) { - m_Plugins.remove( a_Plugin ); - m_Plugins.push_back( a_Plugin ); + m_Plugins[ a_Plugin->GetDirectory() ] = a_Plugin; return true; } @@ -769,84 +822,6 @@ bool cPluginManager::AddPlugin( cPlugin* a_Plugin ) -bool cPluginManager::AddPlugin( lua_State* a_LuaState, cPlugin* a_Plugin ) -{ - a_Plugin->SetLanguage( cPlugin::E_LUA ); - cPlugin_Lua* LuaPlugin = GetLuaPlugin( a_LuaState ); - if( LuaPlugin == NULL ) - { - lua_Debug ar; - lua_getstack(a_LuaState, 1, &ar); - lua_getinfo(a_LuaState, "nSl", &ar); - LOGERROR("ERROR: Trying to add an 'old style' plugin from within a 'new style' plugin.\nIn file: %s at line: %i", ar.source, ar.currentline); - } - a_Plugin->m_bCanBindCommands = true; - if( LuaPlugin && a_Plugin->Initialize() ) - { - m_Plugins.remove( a_Plugin ); - m_Plugins.push_back( a_Plugin ); - LuaPlugin->AddPlugin( a_Plugin ); - return true; - } - - a_Plugin->m_bCanBindCommands = false; - return false; -} - - - - - -bool cPluginManager::AddLuaPlugin( cPlugin_Lua* a_Plugin ) -{ - m_LuaPlugins.push_back( a_Plugin ); // It HAS to be in here before calling Initialize, so it can be found by AddPlugin() - if(a_Plugin->Initialize() ) - { - return true; - } - LOG(">>>>>>> Could not initialize a plugin! "); - m_LuaPlugins.remove( a_Plugin ); - return false; -} - - - - - -void cPluginManager::RemoveLuaPlugin( std::string a_FileName ) -{ - for( LuaPluginList::iterator itr = m_LuaPlugins.begin(); itr != m_LuaPlugins.end(); ++itr ) - { - if( (*itr)->GetFileName() == a_FileName ) - { - cPlugin_Lua* Plugin = *itr; - m_LuaPlugins.remove( Plugin ); - delete Plugin; - return; - } - } -} - - - - - -cPlugin_Lua* cPluginManager::GetLuaPlugin( lua_State* a_State ) -{ - for( LuaPluginList::iterator itr = m_LuaPlugins.begin(); itr != m_LuaPlugins.end(); ++itr ) - { - if( (*itr)->GetLuaState() == a_State ) - { - return *itr; - } - } - return NULL; -} - - - - - void cPluginManager::AddHook( cPlugin* a_Plugin, PluginHook a_Hook ) { if( !a_Plugin ) @@ -874,9 +849,9 @@ unsigned int cPluginManager::GetNumPlugins() const bool cPluginManager::HasPlugin( cPlugin* a_Plugin ) const { - for( PluginList::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr ) + for( PluginMap::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr ) { - if( *itr == a_Plugin ) + if( itr->second == a_Plugin ) return true; } return false; diff --git a/source/PluginManager.h b/source/PluginManager.h index a62aa795a..8fc74c90c 100644 --- a/source/PluginManager.h +++ b/source/PluginManager.h @@ -7,7 +7,6 @@ struct lua_State; class cLuaCommandBinder; class cSquirrelCommandBinder; class cPlugin; -class cPlugin_Lua; // fwd: cWorld.h class cWorld; @@ -86,14 +85,14 @@ public: //tolua_export static cPluginManager * GetPluginManager(); //tolua_export + typedef std::map< AString, cPlugin * > PluginMap; typedef std::list< cPlugin * > PluginList; - cPlugin * GetPlugin( const AString & a_Plugin ) const; //tolua_export - const PluginList & GetAllPlugins() const; // >> EXPORTED IN MANUALBINDINGS << + cPlugin * GetPlugin( const AString & a_Plugin ) const; //tolua_export + const PluginMap & GetAllPlugins() const; // >> EXPORTED IN MANUALBINDINGS << + void FindPlugins(); //tolua_export void ReloadPlugins(); //tolua_export bool AddPlugin( cPlugin* a_Plugin ); - bool AddPlugin( lua_State* a_LuaState, cPlugin* a_Plugin ); //tolua_export - bool AddLuaPlugin( cPlugin_Lua* a_Plugin ); void AddHook( cPlugin* a_Plugin, PluginHook a_Hook ); //tolua_export unsigned int GetNumPlugins() const; //tolua_export @@ -117,10 +116,11 @@ public: //tolua_export bool CallHookWeatherChanged (cWorld * a_World); bool CallHookHandshake (cClientHandle * a_ClientHandle, const AString & a_Username); - void RemoveHooks( cPlugin* a_Plugin ); - void RemovePlugin( cPlugin* a_Plugin, bool a_bDelete = false ); //tolua_export - void RemoveLuaPlugin( std::string a_FileName ); //tolua_export - cPlugin_Lua* GetLuaPlugin( lua_State* a_State ); //tolua_export + bool DisablePlugin( AString & a_PluginName ); //tolua_export + bool LoadPlugin( AString & a_PluginName ); //tolua_export + + void RemoveHooks( cPlugin * a_Plugin ); + void RemovePlugin( cPlugin * a_Plugin, bool a_bDelete = false ); cLuaCommandBinder* GetLuaCommandBinder() const { return m_LuaCommandBinder; } @@ -132,11 +132,11 @@ private: cPluginManager(); ~cPluginManager(); - typedef std::list< cPlugin_Lua* > LuaPluginList; typedef std::map< cPluginManager::PluginHook, cPluginManager::PluginList > HookMap; - LuaPluginList m_LuaPlugins; - PluginList m_Plugins; + PluginList m_DisablePluginList; + + PluginMap m_Plugins; HookMap m_Hooks; void ReloadPluginsNow(); diff --git a/source/Plugin_Lua.cpp b/source/Plugin_Lua.cpp deleted file mode 100644 index 14258dd0d..000000000 --- a/source/Plugin_Lua.cpp +++ /dev/null @@ -1,98 +0,0 @@ - -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules - -#define LUA_USE_POSIX -#include "Plugin_Lua.h" -#include "PluginManager.h" -#include "Root.h" - -extern "C" -{ - #include "lualib.h" -} - -#include "tolua++.h" -#include "Bindings.h" -#include "ManualBindings.h" - -bool report_errors(lua_State* lua, int status) -{ - if ( status!=0 ) - { - std::string s = lua_tostring(lua, -1); - LOGERROR("-- %s", s.c_str() ); - lua_pop(lua, 1); - return true; - } - return false; -} - -cPlugin_Lua::~cPlugin_Lua() -{ - UnloadPlugins(); - if( m_LuaState ) - { - lua_close( m_LuaState ); - m_LuaState = 0; - } -} - -cPlugin_Lua::cPlugin_Lua(const char* a_Plugin) -: m_LuaState( 0 ) -{ - m_FileName.assign( a_Plugin ); -} - -bool cPlugin_Lua::Initialize() -{ - if( !m_LuaState ) - { - m_LuaState = lua_open(); - luaL_openlibs( m_LuaState ); - tolua_AllToLua_open(m_LuaState); - ManualBindings::Bind( m_LuaState ); - } - - int s = luaL_loadfile(m_LuaState, (std::string("Plugins/") + m_FileName ).c_str() ); - if( report_errors( m_LuaState, s ) ) - { - LOGERROR("Can't load plugin %s", m_FileName.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", m_FileName.c_str() ); - lua_close( m_LuaState ); - m_LuaState = 0; - return false; - } - return true; -} - -void cPlugin_Lua::AddPlugin( cPlugin* a_Plugin ) -{ - m_Plugins.push_back( a_Plugin ); -} - -void cPlugin_Lua::RemovePlugin( cPlugin* a_Plugin ) -{ - m_Plugins.remove( a_Plugin ); - cRoot::Get()->GetPluginManager()->RemovePlugin( a_Plugin, true ); -} - -void cPlugin_Lua::UnloadPlugins() -{ - while( m_Plugins.begin() != m_Plugins.end() ) - { - RemovePlugin( *m_Plugins.begin() ); - } -} - -lua_State* cPlugin_Lua::GetLuaState() -{ - return m_LuaState; -} \ No newline at end of file diff --git a/source/Plugin_Lua.h b/source/Plugin_Lua.h deleted file mode 100644 index 73787de0c..000000000 --- a/source/Plugin_Lua.h +++ /dev/null @@ -1,38 +0,0 @@ - -#pragma once - -class cPickup; -class cPlayer; -class cPlugin; - - - - - -class cPlugin_Lua //tolua_export -{ //tolua_export -public: - cPlugin_Lua(const char* a_Plugin); - ~cPlugin_Lua(); - - virtual bool Initialize(); - - std::string GetFileName() { return m_FileName; } //tolua_export - typedef struct lua_State lua_State; - lua_State* GetLuaState(); - - void AddPlugin( cPlugin* a_Plugin ); - void RemovePlugin( cPlugin* a_Plugin ); -private: - void UnloadPlugins(); - - std::string m_FileName; - lua_State* m_LuaState; - - typedef std::list< cPlugin* > PluginList; - PluginList m_Plugins; -}; //tolua_export - - - - diff --git a/source/Plugin_NewLua.cpp b/source/Plugin_NewLua.cpp index 866239b3a..55a04a88c 100644 --- a/source/Plugin_NewLua.cpp +++ b/source/Plugin_NewLua.cpp @@ -31,11 +31,11 @@ extern bool report_errors(lua_State* lua, int status); -cPlugin_NewLua::cPlugin_NewLua( const char* a_PluginName ) +cPlugin_NewLua::cPlugin_NewLua( const AString & a_PluginDirectory ) : m_LuaState( 0 ) , cWebPlugin() + , cPlugin( a_PluginDirectory ) { - m_Directory = a_PluginName; } @@ -82,7 +82,7 @@ bool cPlugin_NewLua::Initialize() 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() ); + LOGERROR("Can't load plugin %s because of an error in file %s", GetLocalDirectory().c_str(), Path.c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; @@ -91,7 +91,7 @@ bool cPlugin_NewLua::Initialize() 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() ); + LOGERROR("Error in plugin %s in file %s", GetLocalDirectory().c_str(), Path.c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; @@ -117,7 +117,7 @@ bool cPlugin_NewLua::Initialize() if( !lua_isboolean( m_LuaState, -1 ) ) { - LOGWARN("Error in plugin %s Initialize() must return a boolean value!", m_Directory.c_str() ); + LOGWARN("Error in plugin %s Initialize() must return a boolean value!", GetLocalDirectory().c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; @@ -131,15 +131,6 @@ bool cPlugin_NewLua::Initialize() -AString cPlugin_NewLua::GetLocalDirectory(void) const -{ - return std::string("Plugins/") + m_Directory; -} - - - - - void cPlugin_NewLua::OnDisable() { cCSLock Lock( m_CriticalSection ); @@ -699,7 +690,7 @@ bool cPlugin_NewLua::OnHandshake(cClientHandle * a_Client, const AString & a_Use cPlugin_NewLua * cPlugin_NewLua::CreateWebPlugin(lua_State * a_LuaState) { LOGWARN("WARNING: Using deprecated function CreateWebPlugin()! A Lua plugin is a WebPlugin by itself now. (plugin \"%s\" in folder \"%s\")", - cPlugin::GetName().c_str(), m_Directory.c_str() + cPlugin::GetName().c_str(), GetLocalDirectory().c_str() ); return this; } @@ -797,7 +788,7 @@ bool cPlugin_NewLua::PushFunction( const char* a_FunctionName, bool a_bLogError { if( a_bLogError ) { - LOGWARN("Error in plugin %s: Could not find function %s()", m_Directory.c_str(), a_FunctionName ); + LOGWARN("Error in plugin %s: Could not find function %s()", GetLocalDirectory().c_str(), a_FunctionName ); } lua_pop(m_LuaState,1); return false; @@ -810,7 +801,7 @@ bool cPlugin_NewLua::CallFunction( int a_NumArgs, int a_NumResults, const char* int s = lua_pcall(m_LuaState, a_NumArgs, a_NumResults, 0); if( report_errors( m_LuaState, s ) ) { - LOGWARN("Error in plugin %s calling function %s()", m_Directory.c_str(), a_FunctionName ); + LOGWARN("Error in plugin %s calling function %s()", GetLocalDirectory().c_str(), a_FunctionName ); return false; } return true; diff --git a/source/Plugin_NewLua.h b/source/Plugin_NewLua.h index 38e66e329..93df5f1c2 100644 --- a/source/Plugin_NewLua.h +++ b/source/Plugin_NewLua.h @@ -17,7 +17,7 @@ typedef struct lua_State lua_State; class cPlugin_NewLua : public cPlugin, public cWebPlugin //tolua_export { //tolua_export public: //tolua_export - cPlugin_NewLua( const char* a_PluginName ); + cPlugin_NewLua( const AString & a_PluginDirectory ); ~cPlugin_NewLua(); virtual void OnDisable(); //tolua_export @@ -46,9 +46,6 @@ public: //tolua_export virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player) override; virtual bool OnWeatherChanged (cWorld * a_World) override; virtual bool OnHandshake (cClientHandle * a_Client, const AString & a_Username) override; - - const AString & GetDirectory(void) const {return m_Directory; } - AString GetLocalDirectory(void) const; //tolua_export virtual void SetName( const AString & a_Name ) override { cPlugin::SetName(a_Name); } @@ -71,6 +68,5 @@ private: cCriticalSection m_CriticalSection; - std::string m_Directory; lua_State * m_LuaState; };//tolua_export \ No newline at end of file diff --git a/source/Plugin_Squirrel.cpp b/source/Plugin_Squirrel.cpp index 930c0cf11..e11dbc07b 100644 --- a/source/Plugin_Squirrel.cpp +++ b/source/Plugin_Squirrel.cpp @@ -6,6 +6,7 @@ cPlugin_Squirrel::cPlugin_Squirrel( const char* a_PluginName ) + : cPlugin( a_PluginName ) { SetLanguage( cPlugin::E_SQUIRREL ); m_PluginName = a_PluginName; diff --git a/source/WebAdmin.cpp b/source/WebAdmin.cpp index 577fbbd5f..7543f409b 100644 --- a/source/WebAdmin.cpp +++ b/source/WebAdmin.cpp @@ -216,11 +216,12 @@ void cWebAdmin::Request_Handler(webserver::http_request* r) cPluginManager* PM = cRoot::Get()->GetPluginManager(); if( PM ) { - const cPluginManager::PluginList & List = PM->GetAllPlugins(); - for( cPluginManager::PluginList::const_iterator itr = List.begin(); itr != List.end(); ++itr ) + const cPluginManager::PluginMap & List = PM->GetAllPlugins(); + for( cPluginManager::PluginMap::const_iterator itr = List.begin(); itr != List.end(); ++itr ) { + if( itr->second == NULL ) continue; AString VersionNum; - AppendPrintf(Content, "
  • %s V.%i
  • ", (*itr)->GetName().c_str(), (*itr)->GetVersion()); + AppendPrintf(Content, "
  • %s V.%i
  • ", itr->second->GetName().c_str(), itr->second->GetVersion()); } } Content += ""; -- cgit v1.2.3