1
0
Fork 0

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
This commit is contained in:
faketruth 2012-10-13 23:34:47 +00:00
parent b4ca06b9d9
commit 41ba1a7642
19 changed files with 638 additions and 570 deletions

View File

@ -2,31 +2,93 @@ local function Button_RemovePlugin( Name, Index )
return "<form method='POST'><input type='hidden' name='PluginName' value='"..Name.."'><input type='hidden' name='PluginIndex' value='"..Index.."'><input type='submit' name='RemovePlugin' value='Remove'></form>"
end
local function Button_EnablePlugin( Name )
return [[<form method="POST"><input type="hidden" name="PluginName", value="]].. Name ..[["><input type="submit" name="EnablePlugin" value="Enable"></form>]]
end
local function Button_DisablePlugin( Name )
return [[<form method="POST"><input type="hidden" name="PluginName", value="]].. Name ..[["><input type="submit" name="DisablePlugin" value="Disable"></form>]]
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
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
elseif( Request.PostParams["AddPlugin"] ~= nil
and Request.PostParams["PluginName"] ~= nil ) then -- Add a plugin
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 .. "<h4>Currently active plugins</h4>"
Content = Content .. "<h4>Currently installed plugins</h4>"
Content = Content .. "<table>"
for k, Plugin in pairs(PluginList) do
Content = Content .. "<tr><td>" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "</td></tr>"
Content = Content .. "<tr><td>".. k .."</td>"
if( Plugin ) then
Content = Content .. "<td>" .. Plugin:GetName() .. " V. " .. Plugin:GetVersion() .. "</td><td>" .. Button_DisablePlugin(k) .. "</td>"
else
Content = Content .. "<td></td><td>" .. Button_EnablePlugin(k) .. "</td>"
end
Content = Content .. "</tr>"
end
Content = Content .. "</table>"
local SettingsIni = cIniFile("settings.ini")
if( SettingsIni:ReadFile() == true ) then
Content = Content .. "<h4>Plugins according to settings.ini</h4>"
Content = Content .. HandlePluginListChanges( Request, SettingsIni )
Content = Content .. "<table>"
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 .. "<tr>"
Content = Content .. "<td>" .. ValueName .. ": " .. PluginName .. "</td>"
Content = Content .. "<td>" .. Button_RemovePlugin( PluginName, i ) .. "</td>"
Content = Content .. "</tr>"
end
Content = Content .. "</table>"
end
Content = Content .. "<h4>Add plugin to settings.ini</h4>"
Content = Content .. "<form method='POST'>"
Content = Content .. "<input type='text' name='PluginName'><input type='submit' name='AddPlugin' value='Add Plugin'>"
Content = Content .. "</form>"
Content = Content .. "<h4>Reload</h4>"
Content = Content .. "<form method='POST'>"
Content = Content .. "<p>Click the reload button to reload all plugins!<br>"
Content = Content .. "<p>Click the reload button to reload all plugins according to <strong>settings.ini</strong>!"
Content = Content .. "<input type='submit' name='reload' value='Reload!'></p>"
Content = Content .. "</form>"

View File

@ -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

View File

@ -1431,14 +1431,6 @@
RelativePath="..\source\Plugin.h"
>
</File>
<File
RelativePath="..\source\Plugin_Lua.cpp"
>
</File>
<File
RelativePath="..\source\Plugin_Lua.h"
>
</File>
<File
RelativePath="..\source\Plugin_NewLua.cpp"
>

View File

@ -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"

View File

@ -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,6 +7590,37 @@ static int tolua_AllToLua_cPluginManager_GetPlugin00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
/* 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;
if (
!tolua_isusertype(tolua_S,1,"cPluginManager",0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0);
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'FindPlugins'", NULL);
#endif
{
self->FindPlugins();
}
}
return 0;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'FindPlugins'.",&tolua_err);
return 0;
#endif
}
#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)
@ -7426,41 +7652,6 @@ static int tolua_AllToLua_cPluginManager_ReloadPlugins00(lua_State* tolua_S)
}
#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)
{
#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)
)
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);
#endif
{
bool tolua_ret = (bool) self->AddPlugin(a_LuaState,a_Plugin);
tolua_pushboolean(tolua_S,(bool)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'AddPlugin'.",&tolua_err);
return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE
/* method: AddHook of class cPluginManager */
#ifndef TOLUA_DISABLE_tolua_AllToLua_cPluginManager_AddHook00
static int tolua_AllToLua_cPluginManager_AddHook00(lua_State* tolua_S)
@ -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);

View File

@ -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 */

View File

@ -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()
{

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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,19 +704,9 @@ void cPluginManager::UnloadPluginsNow()
{
m_Hooks.clear();
while( m_LuaPlugins.size() > 0 )
{
cPlugin_Lua* LuaPlugin = *m_LuaPlugins.begin();
if( LuaPlugin )
{
delete LuaPlugin;
}
m_LuaPlugins.remove( LuaPlugin );
}
while( m_Plugins.size() > 0 )
{
RemovePlugin( *m_Plugins.begin(), true );
RemovePlugin( m_Plugins.begin()->second, true );
}
//SquirrelVM::Shutdown(); // This breaks shit
@ -699,6 +716,40 @@ void cPluginManager::UnloadPluginsNow()
bool cPluginManager::DisablePlugin( AString & a_PluginName )
{
PluginMap::iterator itr = m_Plugins.find( a_PluginName );
if (itr != m_Plugins.end())
{
if (itr->first.compare( a_PluginName ) == 0)
{
m_DisablePluginList.push_back( itr->second );
itr->second = NULL; // Get rid of this thing right away
return true;
}
}
return false;
}
bool cPluginManager::LoadPlugin( AString & a_PluginName )
{
cPlugin_NewLua* Plugin = new cPlugin_NewLua( a_PluginName.c_str() );
if( !AddPlugin( Plugin ) )
{
delete Plugin;
return false;
}
return true;
}
void cPluginManager::RemoveHooks( cPlugin* a_Plugin )
{
m_Hooks[ E_PLUGIN_TICK].remove ( a_Plugin );
@ -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 )
{
(*itr)->RemovePlugin( a_Plugin );
if( itr->second == a_Plugin )
{
m_Plugins.erase( itr );
break;
}
}
if( a_Plugin != NULL )
{
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;

View File

@ -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();

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -6,6 +6,7 @@
cPlugin_Squirrel::cPlugin_Squirrel( const char* a_PluginName )
: cPlugin( a_PluginName )
{
SetLanguage( cPlugin::E_SQUIRREL );
m_PluginName = a_PluginName;

View File

@ -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>";