core/CConCmdManager.h
author David Anderson <dvander@alliedmods.net>
Mon Feb 26 09:21:08 2007 +0000 (2007-02-26)
changeset 539 fa7e8a232a18
parent 514 4c02b38c26ed
permissions -rw-r--r--
fixed stupid export
dvander@498
     1
/**
dvander@498
     2
 * vim: set ts=4 :
dvander@498
     3
 * ===============================================================
dvander@498
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@498
     5
 * ===============================================================
dvander@498
     6
 *
dvander@498
     7
 * This file is not open source and may not be copied without explicit
dvander@498
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@498
     9
 * in whole or significant part.
dvander@498
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@498
    11
 *
dvander@498
    12
 * Version: $Id$
dvander@498
    13
 */
dvander@498
    14
dvander@498
    15
#ifndef _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
    16
#define _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
    17
dvander@498
    18
#include "sm_globals.h"
dvander@498
    19
#include "sourcemm_api.h"
dvander@498
    20
#include "ForwardSys.h"
dvander@498
    21
#include "sm_trie.h"
dvander@513
    22
#include "sm_memtable.h"
dvander@498
    23
#include <sh_list.h>
dvander@513
    24
#include <sh_string.h>
dvander@498
    25
#include <IRootConsoleMenu.h>
dvander@513
    26
#include <IAdminSystem.h>
dvander@498
    27
dvander@498
    28
using namespace SourceHook;
dvander@498
    29
dvander@498
    30
enum CmdType
dvander@498
    31
{
dvander@498
    32
	Cmd_Server,
dvander@498
    33
	Cmd_Console,
dvander@513
    34
	Cmd_Admin,
dvander@513
    35
};
dvander@513
    36
dvander@513
    37
struct AdminCmdInfo
dvander@513
    38
{
dvander@513
    39
	AdminCmdInfo()
dvander@513
    40
	{
dvander@513
    41
		cmdGrpId = -1;
dvander@513
    42
		flags = 0;
dvander@513
    43
		eflags = 0;
dvander@513
    44
	}
dvander@513
    45
	int cmdGrpId;			/* index into cmdgroup string table */
dvander@513
    46
	FlagBits flags;			/* default flags */
dvander@513
    47
	FlagBits eflags;		/* effective flags */
dvander@513
    48
};
dvander@513
    49
dvander@513
    50
struct CmdHook
dvander@513
    51
{
dvander@513
    52
	CmdHook()
dvander@513
    53
	{
dvander@513
    54
		pf = NULL;
dvander@513
    55
		pAdmin = NULL;
dvander@513
    56
	}
dvander@513
    57
	IPluginFunction *pf;	/* function hook */
dvander@513
    58
	String helptext;		/* help text */
dvander@513
    59
	AdminCmdInfo *pAdmin;	/* admin requirements, if any */
dvander@498
    60
};
dvander@498
    61
dvander@498
    62
struct ConCmdInfo
dvander@498
    63
{
dvander@498
    64
	ConCmdInfo()
dvander@498
    65
	{
dvander@498
    66
		sourceMod = false;
dvander@498
    67
		pCmd = NULL;
dvander@498
    68
	}
dvander@498
    69
	bool sourceMod;					/**< Determines whether or not concmd was created by a SourceMod plugin */
dvander@498
    70
	ConCommand *pCmd;				/**< Pointer to the command itself */
dvander@513
    71
	List<CmdHook *> srvhooks;		/**< Hooks as a server command */
dvander@513
    72
	List<CmdHook *> conhooks;		/**< Hooks as a console command */
dvander@498
    73
};
dvander@498
    74
dvander@498
    75
class CConCmdManager :
dvander@498
    76
	public SMGlobalClass,
dvander@498
    77
	public IRootConsoleCommand,
dvander@498
    78
	public IPluginsListener
dvander@498
    79
{
dvander@498
    80
	friend void CommandCallback();
dvander@498
    81
public:
dvander@498
    82
	CConCmdManager();
dvander@498
    83
	~CConCmdManager();
dvander@498
    84
public: //SMGlobalClass
dvander@498
    85
	void OnSourceModAllInitialized();
dvander@498
    86
	void OnSourceModShutdown();
dvander@498
    87
public: //IPluginsListener
dvander@498
    88
	void OnPluginDestroyed(IPlugin *plugin);
dvander@498
    89
public: //IRootConsoleCommand
dvander@498
    90
	void OnRootConsoleCommand(const char *command, unsigned int argcount);
dvander@498
    91
public:
dvander@498
    92
	void AddServerCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
dvander@500
    93
	void AddConsoleCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
dvander@513
    94
	bool AddAdminCommand(IPluginFunction *pFunction, 
dvander@513
    95
						 const char *name, 
dvander@513
    96
						 const char *group,
dvander@513
    97
						 int adminflags,
dvander@513
    98
						 const char *description, 
dvander@513
    99
						 int flags);
dvander@500
   100
	ResultType DispatchClientCommand(int client, ResultType type);
dvander@514
   101
	void UpdateAdminCmdFlags(const char *cmd, OverrideType type, FlagBits bits);
dvander@498
   102
private:
dvander@498
   103
	void InternalDispatch();
dvander@513
   104
	ResultType RunAdminCommand(ConCmdInfo *pInfo, int client, int args);
dvander@498
   105
	ConCmdInfo *AddOrFindCommand(const char *name, const char *description, int flags);
dvander@498
   106
	void SetCommandClient(int client);
dvander@498
   107
	void AddToCmdList(ConCmdInfo *info);
dvander@498
   108
	void RemoveConCmd(ConCmdInfo *info);
dvander@513
   109
	void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
dvander@514
   110
	bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
dvander@498
   111
private:
dvander@513
   112
	Trie *m_pCmds;					/* command lookup */
dvander@513
   113
	Trie *m_pCmdGrps;				/* command group lookup */
dvander@514
   114
	List<ConCmdInfo *> m_CmdList;	/* command list */
dvander@513
   115
	int m_CmdClient;				/* current client */
dvander@513
   116
	BaseStringTable m_Strings;		/* string table */
dvander@498
   117
};
dvander@498
   118
dvander@498
   119
extern CConCmdManager g_ConCmds;
dvander@498
   120
dvander@498
   121
#endif // _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
   122