summaryrefslogtreecommitdiffstats
path: root/MCServer/Plugins/Core/help.lua
blob: 02ef25ebdfc157da2b458f145f9d63383d9529d2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function HandleHelpCommand( Split, Player )
	local PluginManager = cRoot:Get():GetPluginManager()
	
	local LinesPerPage = 9
	local CurrentPage = 1
	local CurrentLine = 0
	
	if( #Split == 2 ) then
		CurrentPage = tonumber(Split[2])
	end
	
	local Pages = {}

	local PluginList = PluginManager:GetAllPlugins()
	for i, Plugin in ipairs( PluginList ) do
		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
	
	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
	end
	
	return true
end