summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--source/AllToLua.pkg1
-rw-r--r--source/Bindings.cpp500
-rw-r--r--source/Bindings.h2
-rw-r--r--source/LuaCommandBinder.cpp14
-rw-r--r--source/ManualBindings.cpp22
-rw-r--r--source/Player.h12
-rw-r--r--source/Plugin.cpp8
-rw-r--r--source/Plugin.h19
-rw-r--r--source/PluginManager.cpp233
-rw-r--r--source/PluginManager.h24
-rw-r--r--source/Plugin_Lua.cpp98
-rw-r--r--source/Plugin_Lua.h38
-rw-r--r--source/Plugin_NewLua.cpp25
-rw-r--r--source/Plugin_NewLua.h6
-rw-r--r--source/Plugin_Squirrel.cpp1
-rw-r--r--source/WebAdmin.cpp7
16 files changed, 518 insertions, 492 deletions
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, "<li>%s V.%i</li>", (*itr)->GetName().c_str(), (*itr)->GetVersion());
+ AppendPrintf(Content, "<li>%s V.%i</li>", itr->second->GetName().c_str(), itr->second->GetVersion());
}
}
Content += "</ul>";