Moved command API into cPluginManager.

As specified in http://forum.mc-server.org/showthread.php?tid=765 , commands are now bound using a single function, cPluginManager:BindCommand().

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1183 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com
2013-02-01 19:55:42 +00:00
parent 71bbf2d44b
commit 019c8b5bc7
15 changed files with 685 additions and 687 deletions
+30 -46
View File
@@ -1,56 +1,40 @@
function HandleHelpCommand( Split, Player )
function HandleHelpCommand(Split, Player)
local PluginManager = cRoot:Get():GetPluginManager()
local LinesPerPage = 9
local CurrentPage = 1
local CurrentLine = 0
local LinesPerPage = 9;
local CurrentPage = 1;
local CurrentLine = 0;
local PageRequested = 1;
local Output = {};
if( #Split == 2 ) then
CurrentPage = tonumber(Split[2])
if (#Split == 2) then
PageRequested = tonumber(Split[2]);
end
local Pages = {}
local Process = function(Command, Permission, HelpString)
if not(Player:HasPermission(Permission)) then
return false;
end;
if (HelpString == "") then
return false;
end;
local PluginList = PluginManager:GetAllPlugins()
for k, Plugin in pairs(PluginList) do
if( Plugin ) then
local Commands = Plugin:GetCommands()
for i, v in ipairs( Commands ) do
if( Player:HasPermission( v.Permission ) ) then
local PageNum = math.floor( CurrentLine/LinesPerPage )+1
if( Pages[ PageNum ] == nil ) then Pages[ PageNum ] = {} end -- Create page
if( Pages[ PageNum ].ShownName ~= Plugin:GetName() and SHOW_PLUGIN_NAMES == true ) then
if( CurrentLine == LinesPerPage * PageNum -1 ) then -- Don't add if it's the last line of the page, it looks silly
-- Add it to the next page instead
CurrentLine = CurrentLine+1
PageNum = math.floor( CurrentLine/LinesPerPage )+1
if( Pages[ PageNum ] == nil ) then Pages[ PageNum ] = {} end -- Create page
table.insert( Pages[ PageNum ], cChatColor.Gold .. Plugin:GetName() )
else
Pages[ PageNum ].ShownName = Plugin:GetName()
table.insert( Pages[ PageNum ], cChatColor.Gold .. Plugin:GetName() )
end
CurrentLine = CurrentLine+1
PageNum = math.floor( CurrentLine/LinesPerPage )+1
if( Pages[ PageNum ] == nil ) then Pages[ PageNum ] = {} end -- Create page
end
local Message = cChatColor.Blue .. v.Command .. v.Description;
table.insert( Pages[ PageNum ], Message )
CurrentLine = CurrentLine+1
end
end
end
end
Player:SendMessage( cChatColor.Purple .. "- All commands - " .. cChatColor.Gold .. "[Page " .. (CurrentPage) .."/"..#Pages.."]" )
if( Pages[CurrentPage] ~= nil ) then
for i, v in ipairs(Pages[CurrentPage]) do
Player:SendMessage( v )
end
CurrentLine = CurrentLine + 1;
CurrentPage = math.floor(CurrentLine / LinesPerPage) + 1;
if (CurrentPage ~= PageRequested) then
return false;
end;
table.insert(Output, cChatColor.Blue .. Command .. HelpString);
end
PluginManager:ForEachCommand(Process);
-- CurrentPage now contains the total number of pages, and Output has the individual help lines to be sent
Player:SendMessage(cChatColor.Purple .. "- All commands - " .. cChatColor.Gold .. "[Page " .. PageRequested .. " / " .. CurrentPage .. "]");
for idx, msg in ipairs(Output) do
Player:SendMessage(msg);
end;
return true
end