Clone of PhatAC @ https://github.com/floaterxk/PhatAC

ClientCommands.h 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using namespace std;
  2. class CBasePlayer;
  3. class CommandBase;
  4. class ClientCommand;
  5. class ServerCommand;
  6. //Note: Server commands don't require a source player.
  7. typedef bool(*pfnCommandCallback)(class CBasePlayer* player, char* argv[], int argc);
  8. enum {
  9. BASIC_ACCESS = 1,
  10. PRIVILEGED_ACCESS,
  11. ADMIN_ACCESS,
  12. SERVER_ACCESS,
  13. DUMMY_ACCESS
  14. };
  15. #define MAX_ARGUMENTS 12
  16. struct CommandEntry {
  17. const char* name;
  18. const char* args;
  19. const char* help;
  20. pfnCommandCallback func;
  21. int access;
  22. bool source;
  23. };
  24. typedef map<string, CommandEntry> CommandMap;
  25. class CommandBase
  26. {
  27. friend class ClientCommand;
  28. friend class ServerCommand;
  29. public:
  30. static bool Execute(char* szCommand, CBasePlayer* pSource, int iAccessLevel);
  31. protected:
  32. static void Create(const char* szName, const char* szArguments, const char* szHelp, pfnCommandCallback pCallback, int iAccessLevel, bool bSource);
  33. static const char* Info(CommandEntry* pCommand);
  34. static CommandEntry* FindCommand(const char* szName, int iAccessLevel = -1);
  35. static CommandMap m_mCommands;
  36. };
  37. class ClientCommand : CommandBase
  38. {
  39. friend class CommandBase;
  40. public:
  41. ClientCommand(const char* szName, const char* szArguments, const char* szHelp, pfnCommandCallback pCallback, int iAccessLevel);
  42. };
  43. class ServerCommand : CommandBase
  44. {
  45. friend class CommandBase;
  46. public:
  47. ServerCommand(const char* szName, const char* szArguments, const char* szHelp, pfnCommandCallback pCallback, int iAccessLevel);
  48. };
  49. #define CLIENT_COMMAND( name, args, help, access ) \
  50. static bool name(CBasePlayer* pPlayer, char* argv[], int argc); \
  51. static ClientCommand name##_command( #name, args, help, name, access ); \
  52. static bool name(CBasePlayer* pPlayer, char* argv[], int argc)
  53. #define SERVER_COMMAND( name, args, help, access ) \
  54. static bool name(CBasePlayer* pPlayer, char* argv[], int argc); \
  55. static ServerCommand name##_command( #name, args, help, name, access ); \
  56. static bool name(CBasePlayer* pPlayer, char* argv[], int argc)