Converted all of the Core plugin to the new plugin structure, except for the WebAdmin part
git-svn-id: http://mc-server.googlecode.com/svn/trunk@175 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
45e286fdcd
commit
4e8128b9d7
@ -1,12 +1,19 @@
|
|||||||
LOGINFO("main.lua!!")
|
---- Some settings -----
|
||||||
LOOLOL = "12345"
|
SHOW_PLUGIN_NAMES = true -- If true, plugin name will be shown before commands
|
||||||
PLUGIN = {}
|
-- This is overwritten in the Initialize() function
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
-- Global variables
|
||||||
|
PLUGIN = {} -- Reference to own plugin object
|
||||||
|
BannedPlayersIni = {}
|
||||||
|
WhiteListIni = {}
|
||||||
|
ItemsTable = {}
|
||||||
|
|
||||||
function Initialize( Plugin )
|
function Initialize( Plugin )
|
||||||
LOGINFO("Initialize in main.lua")
|
|
||||||
PLUGIN = Plugin
|
PLUGIN = Plugin
|
||||||
|
|
||||||
Plugin:SetName("LOLOL new plugin!")
|
Plugin:SetName( "NewCore" )
|
||||||
|
Plugin:SetVersion( 8 )
|
||||||
|
|
||||||
PluginManager = cRoot:Get():GetPluginManager()
|
PluginManager = cRoot:Get():GetPluginManager()
|
||||||
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_PLAYER_JOIN )
|
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_PLAYER_JOIN )
|
||||||
@ -14,43 +21,112 @@ function Initialize( Plugin )
|
|||||||
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_PLACE )
|
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_PLACE )
|
||||||
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_KILLED )
|
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_KILLED )
|
||||||
|
|
||||||
Plugin:AddCommand("/help", " - [Page] Show this message", "core.help")
|
Plugin:AddCommand("/help", " - [Page] Show this message", "core.help")
|
||||||
Plugin:AddCommand("/pluginlist", " - Show list of plugins", "core.pluginlist")
|
Plugin:AddCommand("/pluginlist", " - Show list of plugins", "core.pluginlist")
|
||||||
Plugin:AddCommand("/tp", " - [Player] - Teleport yourself to a player", "core.teleport")
|
Plugin:AddCommand("/tp", " - [Player] - Teleport yourself to a player", "core.teleport")
|
||||||
Plugin:AddCommand("/item", " - [ItemID/Name] <Amount> - Spawn an item for yourself", "core.item")
|
Plugin:AddCommand("/item", " - [ItemID/Name] <Amount> - Spawn an item for yourself", "core.item")
|
||||||
Plugin:AddCommand("/list", " - Shows list of connected players", "core.playerlist")
|
Plugin:AddCommand("/list", " - Shows list of connected players", "core.playerlist")
|
||||||
Plugin:AddCommand("/motd", " - Show message of the day", "core.motd")
|
Plugin:AddCommand("/motd", " - Show message of the day", "core.motd")
|
||||||
Plugin:AddCommand("/reload", " - Reload all plugins", "core.reload")
|
Plugin:AddCommand("/reload", " - Reload all plugins", "core.reload")
|
||||||
Plugin:AddCommand("/time", " - [Day/Night] - Sets the time of day", "core.time")
|
Plugin:AddCommand("/time", " - [Day/Night] - Sets the time of day", "core.time")
|
||||||
Plugin:AddCommand("/spawn", " - Return to the spawn", "core.spawn")
|
Plugin:AddCommand("/spawn", " - Return to the spawn", "core.spawn")
|
||||||
Plugin:AddCommand("/kick", " - [Player] - Kick a player", "core.kick")
|
Plugin:AddCommand("/kick", " - [Player] - Kick a player", "core.kick")
|
||||||
Plugin:AddCommand("/ban", " - [Player] - Ban a player", "core.ban")
|
Plugin:AddCommand("/ban", " - [Player] - Ban a player", "core.ban")
|
||||||
Plugin:AddCommand("/unban", " - [Player] - Unban a player", "core.unban")
|
Plugin:AddCommand("/unban", " - [Player] - Unban a player", "core.unban")
|
||||||
Plugin:AddCommand("/top", " - Teleport yourself to the top most block", "core.top")
|
Plugin:AddCommand("/top", " - Teleport yourself to the top most block", "core.top")
|
||||||
Plugin:AddCommand("/gm", " - [Gamemode (0|1)] - Change your gamemode", "core.changegm")
|
Plugin:AddCommand("/gm", " - [Gamemode (0|1)] - Change your gamemode", "core.changegm")
|
||||||
Plugin:AddCommand("/gotoworld", " - Move to a different world!", "core.gotoworld")
|
Plugin:AddCommand("/gotoworld", " - Move to a different world!", "core.gotoworld")
|
||||||
|
|
||||||
Plugin:BindCommand( "/help", "core.help", HandleHelpCommand )
|
Plugin:BindCommand( "/help", "core.help", HandleHelpCommand )
|
||||||
Plugin:BindCommand( "/pluginlist","core.pluginlist", HandlePluginListCommand )
|
Plugin:BindCommand( "/pluginlist", "core.pluginlist", HandlePluginListCommand )
|
||||||
Plugin:BindCommand( "/tp", "core.teleport", HandleTPCommand )
|
Plugin:BindCommand( "/tp", "core.teleport", HandleTPCommand )
|
||||||
Plugin:BindCommand( "/item", "core.item", HandleItemCommand )
|
Plugin:BindCommand( "/item", "core.item", HandleItemCommand )
|
||||||
Plugin:BindCommand( "/i", "core.item", HandleItemCommand )
|
Plugin:BindCommand( "/i", "core.item", HandleItemCommand )
|
||||||
Plugin:BindCommand( "/list", "core.playerlist", HandlePlayerListCommand )
|
Plugin:BindCommand( "/list", "core.playerlist", HandlePlayerListCommand )
|
||||||
Plugin:BindCommand( "/who", "core.playerlist", HandlePlayerListCommand )
|
Plugin:BindCommand( "/who", "core.playerlist", HandlePlayerListCommand )
|
||||||
Plugin:BindCommand( "/playerlist","core.playerlist", HandlePlayerListCommand )
|
Plugin:BindCommand( "/playerlist", "core.playerlist", HandlePlayerListCommand )
|
||||||
Plugin:BindCommand( "/motd", "core.motd", HandleMOTDCommand )
|
Plugin:BindCommand( "/motd", "core.motd", HandleMOTDCommand )
|
||||||
Plugin:BindCommand( "/reload", "core.reload", HandleReloadCommand )
|
Plugin:BindCommand( "/reload", "core.reload", HandleReloadCommand )
|
||||||
Plugin:BindCommand( "/time", "core.time", HandleTimeCommand )
|
Plugin:BindCommand( "/time", "core.time", HandleTimeCommand )
|
||||||
Plugin:BindCommand( "/spawn", "core.spawn", HandleSpawnCommand )
|
Plugin:BindCommand( "/spawn", "core.spawn", HandleSpawnCommand )
|
||||||
Plugin:BindCommand( "/home", "core.spawn", HandleSpawnCommand )
|
Plugin:BindCommand( "/home", "core.spawn", HandleSpawnCommand )
|
||||||
Plugin:BindCommand( "/kick", "core.kick", HandleKickCommand )
|
Plugin:BindCommand( "/kick", "core.kick", HandleKickCommand )
|
||||||
Plugin:BindCommand( "/ban", "core.ban", HandleBanCommand )
|
Plugin:BindCommand( "/ban", "core.ban", HandleBanCommand )
|
||||||
Plugin:BindCommand( "/unban", "core.unban", HandleUnbanCommand )
|
Plugin:BindCommand( "/unban", "core.unban", HandleUnbanCommand )
|
||||||
Plugin:BindCommand( "/top", "core.top", HandleTopCommand )
|
Plugin:BindCommand( "/top", "core.top", HandleTopCommand )
|
||||||
Plugin:BindCommand( "/gm", "core.changegm", HandleChangeGMCommand )
|
Plugin:BindCommand( "/gm", "core.changegm", HandleChangeGMCommand )
|
||||||
Plugin:BindCommand( "/gotoworld", "core.gotoworld", HandleGotoWorldCommand )
|
Plugin:BindCommand( "/gotoworld", "core.gotoworld", HandleGotoWorldCommand )
|
||||||
|
|
||||||
LOGINFO("Plugin name is: " .. Plugin:GetName() )
|
|
||||||
|
|
||||||
|
local IniFile = cIniFile("settings.ini")
|
||||||
|
if ( IniFile:ReadFile() == true ) then
|
||||||
|
SHOW_PLUGIN_NAMES = IniFile:GetValueB("HelpPlugin", "ShowPluginNames", true )
|
||||||
|
end
|
||||||
|
|
||||||
|
local itemsINI = cIniFile("items.ini")
|
||||||
|
if ( itemsINI:ReadFile() == true ) then
|
||||||
|
local KeyID = itemsINI:FindKey('Items')
|
||||||
|
|
||||||
|
LOGINFO("Core: loaded " .. itemsINI:GetNumValues( KeyID ) .. " item names.")
|
||||||
|
|
||||||
|
for i = 0, itemsINI:GetNumValues('Items') do
|
||||||
|
local ItemName = itemsINI:GetValueName( KeyID, i )
|
||||||
|
local ItemSyntax = itemsINI:GetValue(KeyID, i, "0")
|
||||||
|
|
||||||
|
local ItemData = StringSplit(ItemSyntax, ":") -- [1] = ID, [2] = perhaps meta/dmg
|
||||||
|
--LOGINFO( "#ItemData: " .. #ItemData )
|
||||||
|
if( #ItemData > 0 ) then
|
||||||
|
--LOGINFO("ItemData[0]: "..ItemData[1])
|
||||||
|
local ItemID = tonumber( ItemData[1] )
|
||||||
|
if( ItemID > 0 ) then
|
||||||
|
local ItemMeta = 0
|
||||||
|
if( #ItemData > 1 ) then
|
||||||
|
ItemMeta = tonumber( ItemData[2] )
|
||||||
|
end
|
||||||
|
ItemsTable[ ItemName ] = cItem( ItemID, 1, ItemMeta )
|
||||||
|
LOGINFO("Got item: " .. ItemName .. "-> " .. ItemsTable[ ItemName ].m_ItemID ..":" .. ItemsTable[ ItemName ].m_ItemHealth )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HAVE_ITEM_NAMES = true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Load whitelist, and add default values and stuff
|
||||||
|
WhiteListIni = cIniFile("whitelist.ini")
|
||||||
|
if ( WhiteListIni:ReadFile() == true ) then
|
||||||
|
if( WhiteListIni:GetValueB("WhiteListSettings", "WhiteListOn", false) == true ) then
|
||||||
|
if( WhiteListIni:GetNumValues("WhiteList") > 0 ) then
|
||||||
|
LOGINFO("Core: loaded " .. WhiteListIni:GetNumValues('WhiteList') .. " whitelisted players.")
|
||||||
|
else
|
||||||
|
LOGWARN("WARNING: WhiteList is on, but there are no people in the whitelist!")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
WhiteListIni:SetValueB("WhiteListSettings", "WhiteListOn", false )
|
||||||
|
WhiteListIni:SetValue("WhiteList", "", "") -- So it adds an empty header
|
||||||
|
WhiteListIni:DeleteValue("WhiteList", "") -- And remove the value
|
||||||
|
WhiteListIni:KeyComment("WhiteList", "PlayerName=1")
|
||||||
|
if( WhiteListIni:WriteFile() == false ) then
|
||||||
|
LOGWARN("WARNING: Could not write to whitelist.ini")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Load banned players, and add default values and stuff
|
||||||
|
BannedPlayersIni = cIniFile("banned.ini")
|
||||||
|
if ( BannedPlayersIni:ReadFile() == true ) then
|
||||||
|
if( BannedPlayersIni:GetNumValues("Banned") > 0 ) then
|
||||||
|
LOGINFO("Core: loaded " .. BannedPlayersIni:GetNumValues("Banned") .. " banned players.")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
BannedPlayersIni:SetValue("Banned", "", "") -- So it adds an empty header
|
||||||
|
BannedPlayersIni:DeleteValue("Banned", "") -- And remove the value
|
||||||
|
BannedPlayersIni:KeyComment("Banned", "PlayerName=1")
|
||||||
|
if( BannedPlayersIni:WriteFile() == false ) then
|
||||||
|
LOGWARN("WARNING: Could not write to banned.ini")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LOG( "Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion() )
|
||||||
return true
|
return true
|
||||||
end
|
end
|
60
Plugins/NewTest/onblockplace.lua
Normal file
60
Plugins/NewTest/onblockplace.lua
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
function OnBlockPlace( Block, Player )
|
||||||
|
|
||||||
|
-- dont check if the direction is in the air
|
||||||
|
if Block.m_Direction ~= -1 then
|
||||||
|
|
||||||
|
local X = Block.m_PosX
|
||||||
|
local Y = Block.m_PosY
|
||||||
|
local Z = Block.m_PosZ
|
||||||
|
X, Y, Z = AddDirection( X, Y, Z, Block.m_Direction )
|
||||||
|
if( Y >= 128 or Y < 0 ) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local collision = false
|
||||||
|
local World = Player:GetWorld()
|
||||||
|
local PlayerList = World:GetAllPlayers()
|
||||||
|
|
||||||
|
-- check if a player occupies the placement location
|
||||||
|
for i, Player in ipairs( PlayerList ) do
|
||||||
|
|
||||||
|
-- drop the decimals, we only care about the full block X,Y,Z
|
||||||
|
local PlayerX = math.floor(Player:GetPosX(), 0)
|
||||||
|
local PlayerY = math.floor(Player:GetPosY(), 0)
|
||||||
|
local PlayerZ = math.floor(Player:GetPosZ(), 0)
|
||||||
|
|
||||||
|
local BlockX = Block.m_PosX
|
||||||
|
local BlockY = Block.m_PosY
|
||||||
|
local BlockZ = Block.m_PosZ
|
||||||
|
|
||||||
|
-- player height is 2 blocks, so we check the position and then offset it up one
|
||||||
|
-- so they can't place a block on there face
|
||||||
|
|
||||||
|
if Block.m_Direction == 0 then if PlayerY == BlockY-2 and PlayerX == BlockX and PlayerZ == BlockZ then collision = true end end
|
||||||
|
if Block.m_Direction == 1 then if PlayerY == BlockY+1 and PlayerX == BlockX and PlayerZ == BlockZ then collision = true end end
|
||||||
|
|
||||||
|
if Block.m_Direction == 2 then if PlayerY == BlockY and PlayerX == BlockX and PlayerZ == BlockZ-1 then collision = true end end
|
||||||
|
if Block.m_Direction == 2 then if PlayerY+1 == BlockY and PlayerX == BlockX and PlayerZ == BlockZ-1 then collision = true end end
|
||||||
|
|
||||||
|
if Block.m_Direction == 3 then if PlayerY == BlockY and PlayerX == BlockX and PlayerZ == BlockZ+1 then collision = true end end
|
||||||
|
if Block.m_Direction == 3 then if PlayerY+1 == BlockY and PlayerX == BlockX and PlayerZ == BlockZ+1 then collision = true end end
|
||||||
|
|
||||||
|
if Block.m_Direction == 4 then if PlayerY == BlockY and PlayerX == BlockX-1 and PlayerZ == BlockZ then collision = true end end
|
||||||
|
if Block.m_Direction == 4 then if PlayerY+1 == BlockY and PlayerX == BlockX-1 and PlayerZ == BlockZ then collision = true end end
|
||||||
|
|
||||||
|
if Block.m_Direction == 5 then if PlayerY == BlockY and PlayerX == BlockX+1 and PlayerZ == BlockZ then collision = true end end
|
||||||
|
if Block.m_Direction == 5 then if PlayerY+1 == BlockY and PlayerX == BlockX+1 and PlayerZ == BlockZ then collision = true end end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
if collision then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
|
||||||
|
end
|
24
Plugins/NewTest/onkilled.lua
Normal file
24
Plugins/NewTest/onkilled.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
function OnKilled( Killed, Killer )
|
||||||
|
if( Killer == nil ) then
|
||||||
|
local KilledPlayer = tolua.cast( Killed, "cPlayer")
|
||||||
|
if( not KilledPlayer:IsA("cPlayer") or KilledPlayer == nil ) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local Server = cRoot:Get():GetServer()
|
||||||
|
Server:SendMessage( cChatColor.Red .. KilledPlayer:GetName() .. " died" )
|
||||||
|
else
|
||||||
|
local KilledPlayer = tolua.cast( Killed, "cPlayer")
|
||||||
|
if( not KilledPlayer:IsA("cPlayer") or KilledPlayer == nil ) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local KillerPlayer = tolua.cast( Killer, "cPlayer")
|
||||||
|
if( not KillerPlayer:IsA("cPlayer") or KillerPlayer == nil ) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local Server = cRoot:Get():GetServer()
|
||||||
|
Server:SendMessage( cChatColor.Red .. KilledPlayer:GetName() .. " was killed by " .. KillerPlayer:GetName() .. "!" )
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
20
Plugins/NewTest/onlogin.lua
Normal file
20
Plugins/NewTest/onlogin.lua
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
function OnLogin( PacketData )
|
||||||
|
if( PacketData.m_Username ~= "" ) then
|
||||||
|
if( BannedPlayersIni:GetValueB("Banned", PacketData.m_Username, false) == true ) then
|
||||||
|
local Server = cRoot:Get():GetServer()
|
||||||
|
Server:SendMessage( PacketData.m_Username .. " tried to join, but is banned!" )
|
||||||
|
LOGINFO( PacketData.m_Username .. " tried to join, but is banned!")
|
||||||
|
return true -- Player is banned, return true to deny access
|
||||||
|
end
|
||||||
|
if( WhiteListIni:GetValueB("WhiteListSettings", "WhiteListOn", false ) == true ) then
|
||||||
|
if( WhiteListIni:GetValueB("WhiteList", PacketData.m_Username, false ) == false ) then -- not on whitelist
|
||||||
|
local Server = cRoot:Get():GetServer()
|
||||||
|
Server:SendMessage( PacketData.m_Username .. " tried to join, but is not on the whitelist." )
|
||||||
|
LOGINFO( PacketData.m_Username .. " tried to join, but is not on the whitelist." )
|
||||||
|
return true -- Deny access to the server
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
4
Plugins/NewTest/onplayerjoin.lua
Normal file
4
Plugins/NewTest/onplayerjoin.lua
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
function OnPlayerJoin( Player )
|
||||||
|
ShowMOTDTo( Player )
|
||||||
|
return false
|
||||||
|
end
|
@ -80,11 +80,8 @@ bool cPlugin_NewLua::Initialize()
|
|||||||
|
|
||||||
|
|
||||||
// Call intialize function
|
// Call intialize function
|
||||||
lua_getglobal(m_LuaState, "Initialize");
|
if( !PushFunction("Initialize") )
|
||||||
if(!lua_isfunction(m_LuaState,-1))
|
|
||||||
{
|
{
|
||||||
LOGWARN("Error in plugin %s: Could not find function Initialize()", m_Directory.c_str() );
|
|
||||||
lua_pop(m_LuaState,1);
|
|
||||||
lua_close( m_LuaState );
|
lua_close( m_LuaState );
|
||||||
m_LuaState = 0;
|
m_LuaState = 0;
|
||||||
return false;
|
return false;
|
||||||
@ -92,11 +89,9 @@ bool cPlugin_NewLua::Initialize()
|
|||||||
|
|
||||||
tolua_pushusertype(m_LuaState, this, "cPlugin_NewLua");
|
tolua_pushusertype(m_LuaState, this, "cPlugin_NewLua");
|
||||||
|
|
||||||
// do the call (1 arguments, 1 result)
|
|
||||||
int s = lua_pcall(m_LuaState, 1, 1, 0);
|
if( !CallFunction(1, 1, "Initialize") )
|
||||||
if( report_errors( m_LuaState, s ) )
|
|
||||||
{
|
{
|
||||||
LOGWARN("Error in plugin %s calling function Initialize()", m_Directory.c_str() );
|
|
||||||
lua_close( m_LuaState );
|
lua_close( m_LuaState );
|
||||||
m_LuaState = 0;
|
m_LuaState = 0;
|
||||||
return false;
|
return false;
|
||||||
@ -116,20 +111,95 @@ bool cPlugin_NewLua::Initialize()
|
|||||||
|
|
||||||
void cPlugin_NewLua::Tick(float a_Dt)
|
void cPlugin_NewLua::Tick(float a_Dt)
|
||||||
{
|
{
|
||||||
lua_getglobal(m_LuaState, "Tick");
|
if( !PushFunction("Tick") )
|
||||||
if(!lua_isfunction(m_LuaState,-1))
|
|
||||||
{
|
|
||||||
LOGWARN("Error in plugin %s: Could not find function Tick()", m_Directory.c_str() );
|
|
||||||
lua_pop(m_LuaState,1);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
tolua_pushnumber( m_LuaState, a_Dt );
|
tolua_pushnumber( m_LuaState, a_Dt );
|
||||||
|
|
||||||
// do the call (1 arguments, 0 result)/
|
CallFunction(1, 0, "Tick");
|
||||||
int s = lua_pcall(m_LuaState, 1, 0, 0);
|
}
|
||||||
|
|
||||||
|
bool cPlugin_NewLua::OnPlayerJoin( cPlayer* a_Player )
|
||||||
|
{
|
||||||
|
if( !PushFunction("OnPlayerJoin") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
||||||
|
|
||||||
|
if( !CallFunction(1, 1, "OnPlayerJoin") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool bRetVal = (tolua_toboolean( m_LuaState, -1, 0) > 0);
|
||||||
|
return bRetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cPlugin_NewLua::OnLogin( cPacket_Login* a_PacketData )
|
||||||
|
{
|
||||||
|
if( !PushFunction("OnLogin") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_PacketData, "cPacket_Login");
|
||||||
|
|
||||||
|
if( !CallFunction(1, 1, "OnLogin") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool bRetVal = (tolua_toboolean( m_LuaState, -1, 0) > 0);
|
||||||
|
return bRetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cPlugin_NewLua::OnBlockPlace( cPacket_BlockPlace* a_PacketData, cPlayer* a_Player )
|
||||||
|
{
|
||||||
|
if( !PushFunction("OnBlockPlace") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_PacketData, "cPacket_BlockPlace");
|
||||||
|
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
||||||
|
|
||||||
|
if( !CallFunction(2, 1, "OnBlockPlace") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool bRetVal = (tolua_toboolean( m_LuaState, -1, 0) > 0);
|
||||||
|
return bRetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cPlugin_NewLua::OnKilled( cPawn* a_Killed, cEntity* a_Killer )
|
||||||
|
{
|
||||||
|
if( !PushFunction("OnKilled") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_Killed, "cPawn");
|
||||||
|
tolua_pushusertype(m_LuaState, a_Killer, "cEntity");
|
||||||
|
|
||||||
|
if( !CallFunction(2, 1, "OnKilled") )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool bRetVal = (tolua_toboolean( m_LuaState, -1, 0) > 0);
|
||||||
|
return bRetVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Helper functions
|
||||||
|
bool cPlugin_NewLua::PushFunction( const char* a_FunctionName )
|
||||||
|
{
|
||||||
|
lua_getglobal(m_LuaState, a_FunctionName);
|
||||||
|
if(!lua_isfunction(m_LuaState,-1))
|
||||||
|
{
|
||||||
|
LOGWARN("Error in plugin %s: Could not find function %s()", m_Directory.c_str(), a_FunctionName );
|
||||||
|
lua_pop(m_LuaState,1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cPlugin_NewLua::CallFunction( int a_NumArgs, int a_NumResults, const char* a_FunctionName )
|
||||||
|
{
|
||||||
|
int s = lua_pcall(m_LuaState, a_NumArgs, a_NumResults, 0);
|
||||||
if( report_errors( m_LuaState, s ) )
|
if( report_errors( m_LuaState, s ) )
|
||||||
{
|
{
|
||||||
LOGWARN("Error in plugin %s calling function Tick()", m_Directory.c_str() );
|
LOGWARN("Error in plugin %s calling function %s()", m_Directory.c_str(), a_FunctionName );
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
@ -5,16 +5,23 @@
|
|||||||
|
|
||||||
typedef struct lua_State lua_State;
|
typedef struct lua_State lua_State;
|
||||||
|
|
||||||
class cPlugin_NewLua : public cPlugin //tolua_export
|
class cPlugin_NewLua : public cPlugin //tolua_export
|
||||||
{ //tolua_export
|
{ //tolua_export
|
||||||
public: //tolua_export
|
public: //tolua_export
|
||||||
cPlugin_NewLua( const char* a_PluginName );
|
cPlugin_NewLua( const char* a_PluginName );
|
||||||
~cPlugin_NewLua();
|
~cPlugin_NewLua();
|
||||||
|
|
||||||
virtual bool Initialize(); //tolua_export
|
virtual bool Initialize(); //tolua_export
|
||||||
virtual void Tick(float a_Dt); //tolua_export
|
virtual void Tick(float a_Dt); //tolua_export
|
||||||
|
virtual bool OnPlayerJoin( cPlayer* a_Player ); //tolua_export
|
||||||
|
virtual bool OnLogin( cPacket_Login* a_PacketData ); //tolua_export
|
||||||
|
virtual bool OnBlockPlace( cPacket_BlockPlace* a_PacketData, cPlayer* a_Player ); // tolua_export
|
||||||
|
virtual bool OnKilled( cPawn* a_Killed, cEntity* a_Killer ); //tolua_export
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool PushFunction( const char* a_FunctionName );
|
||||||
|
bool CallFunction( int a_NumArgs, int a_NumResults, const char* a_FunctionName ); // a_FunctionName is only used for error messages, nothing else
|
||||||
|
|
||||||
std::string m_Directory;
|
std::string m_Directory;
|
||||||
lua_State* m_LuaState;
|
lua_State* m_LuaState;
|
||||||
};//tolua_export
|
};//tolua_export
|
Loading…
Reference in New Issue
Block a user