Интеграция консоли SF в Asi
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sampfuncs.h 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #ifndef SF_H
  2. #define SF_H
  3. #include <vector>
  4. #include <map>
  5. #include <string>
  6. #include <windows.h>
  7. #include <functional>
  8. #include <regex>
  9. typedef void(__stdcall *CommandProc) (std::string params);
  10. struct stCommandInfo
  11. {
  12. enum CommandType { NOPE, SCRIPT, PLUGIN };
  13. stCommandInfo(std::string n, CommandType t, void* o){
  14. name = n;
  15. type = t;
  16. owner = o;
  17. }
  18. std::string name;
  19. CommandType type;
  20. void *owner;
  21. };
  22. /// Болванка для скармливания некоторым функциям SF.
  23. class origSF
  24. {
  25. public:
  26. void *pPlugin;
  27. };
  28. /// Класс для взаимодействия с консолью SF.
  29. class SF
  30. {
  31. SF();
  32. ~SF();
  33. static SF *self;
  34. public:
  35. static SF *Instance();
  36. static void DeleteInstance();
  37. /// \return \b bool -> проверка, что SF загружен в игру.
  38. bool isLoaded();
  39. /**
  40. * \brief Логирование в консоль и в файл.
  41. * \param[in] format Формат строки.
  42. * \param[in] args Аргументы для форматирования строки.
  43. */
  44. void Log(const char*, ...);
  45. /**
  46. * \brief Логирование в консоль и в файл.
  47. * \param[in] string Строка.
  48. */
  49. void Log(const std::string &);
  50. /**
  51. * \brief Логирование только консоль.
  52. * \param[in] format Формат строки.
  53. * \param[in] args Аргументы для форматирования строки.
  54. */
  55. void LogConsole(const char*, ...);
  56. /**
  57. * \brief Логирование только в файл
  58. * \param[in] format Формат строки.
  59. * \param[in] args Аргументы для форматирования строки.
  60. */
  61. void LogFile(const char*, ...);
  62. /// \return \b unsigned -> Возвращает версию SFAPI.
  63. std::function<unsigned()> getAPIVersion;
  64. /// \return \b unsigned -> Возвращает версию SF.
  65. std::function<unsigned()> getSFVersion;
  66. /// \param[in] command Выполняет команду. Аргументы передаются вместе с командой.
  67. std::function<void(std::string)> execConsoleCommand;
  68. /// \return Возвращает вектор команд.
  69. std::function<std::vector<stCommandInfo>()> getConsoleCommands;
  70. /**
  71. * \brief Регистрация новой команды в консоле SF.
  72. * \param[in] command Команда.
  73. * \param[in] proc Функция, которая будет вызываться при вводе команды.
  74. */
  75. std::function<void(std::string, CommandProc)> registerConsoleCommand;
  76. /**
  77. * \brief Задает описание команде.
  78. * \param[in] command Команда.
  79. * \param [in] description Описание.
  80. */
  81. std::function<void(std::string, std::string)> setConsoleCommandDescription;
  82. /**
  83. * \brief Удаление команды из консоли SF.
  84. * \param[in] command Команда.
  85. */
  86. std::function<void(std::string)> unregisterConsoleCommand;
  87. /// \return \b bool -> Проверяет, открыта ли консоль.
  88. std::function<bool()> isConsoleOpened;
  89. private:
  90. HMODULE lib = 0;
  91. origSF *_SF;
  92. char format[102400];
  93. std::function<void(const char*)> _Log;
  94. std::function<void(const std::string &)> _Log_str;
  95. std::function<void(const char*)> _LogConsole;
  96. std::function<void(const char*)> _LogFile;
  97. };
  98. #endif // SF_H