pc_groups.hpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef PC_GROUPS_HPP
  4. #define PC_GROUPS_HPP
  5. #include <bitset>
  6. #include <map>
  7. #include <vector>
  8. #include <common/cbasetypes.hpp>
  9. #include <common/database.hpp>
  10. // Forward declaration from atcommands.hpp
  11. enum AtCommandType : uint8;
  12. void pc_group_pc_load(class map_session_data *sd);
  13. void do_init_pc_groups(void);
  14. void do_final_pc_groups(void);
  15. void pc_groups_reload(void);
  16. enum e_pc_permission : uint32 {
  17. PC_PERM_TRADE = 0,
  18. PC_PERM_PARTY,
  19. PC_PERM_ALL_SKILL,
  20. PC_PERM_USE_ALL_EQUIPMENT,
  21. PC_PERM_SKILL_UNCONDITIONAL,
  22. PC_PERM_JOIN_ALL_CHAT,
  23. PC_PERM_NO_CHAT_KICK,
  24. PC_PERM_HIDE_SESSION,
  25. PC_PERM_WHO_DISPLAY_AID,
  26. PC_PERM_RECEIVE_HACK_INFO,
  27. PC_PERM_WARP_ANYWHERE,
  28. PC_PERM_VIEW_HPMETER,
  29. PC_PERM_VIEW_EQUIPMENT,
  30. PC_PERM_USE_CHECK,
  31. PC_PERM_USE_CHANGEMAPTYPE,
  32. PC_PERM_USE_ALL_COMMANDS,
  33. PC_PERM_RECEIVE_REQUESTS,
  34. PC_PERM_SHOW_BOSS,
  35. PC_PERM_DISABLE_PVM,
  36. PC_PERM_DISABLE_PVP,
  37. PC_PERM_DISABLE_CMD_DEAD,
  38. PC_PERM_CHANNEL_ADMIN,
  39. PC_PERM_TRADE_BOUNDED,
  40. PC_PERM_ITEM_UNCONDITIONAL,
  41. PC_PERM_ENABLE_COMMAND,
  42. PC_PERM_BYPASS_STAT_ONCLONE,
  43. PC_PERM_BYPASS_MAX_STAT,
  44. PC_PERM_ATTENDANCE,
  45. PC_PERM_MACRO_DETECT,
  46. PC_PERM_MACRO_REGISTER,
  47. PC_PERM_TRADE_UNCONDITIONAL,
  48. //.. add other here
  49. PC_PERM_MAX,
  50. };
  51. static const struct s_pcg_permission_name {
  52. const char *name;
  53. enum e_pc_permission permission;
  54. } pc_g_permission_name[PC_PERM_MAX] = {
  55. { "can_trade", PC_PERM_TRADE },
  56. { "can_party", PC_PERM_PARTY },
  57. { "all_skill", PC_PERM_ALL_SKILL },
  58. { "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
  59. { "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
  60. { "join_chat", PC_PERM_JOIN_ALL_CHAT },
  61. { "kick_chat", PC_PERM_NO_CHAT_KICK },
  62. { "hide_session", PC_PERM_HIDE_SESSION },
  63. { "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
  64. { "hack_info", PC_PERM_RECEIVE_HACK_INFO },
  65. { "any_warp", PC_PERM_WARP_ANYWHERE },
  66. { "view_hpmeter", PC_PERM_VIEW_HPMETER },
  67. { "view_equipment", PC_PERM_VIEW_EQUIPMENT },
  68. { "use_check", PC_PERM_USE_CHECK },
  69. { "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
  70. { "all_commands", PC_PERM_USE_ALL_COMMANDS },
  71. { "receive_requests", PC_PERM_RECEIVE_REQUESTS },
  72. { "show_bossmobs", PC_PERM_SHOW_BOSS },
  73. { "disable_pvm", PC_PERM_DISABLE_PVM },
  74. { "disable_pvp", PC_PERM_DISABLE_PVP },
  75. { "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
  76. { "channel_admin", PC_PERM_CHANNEL_ADMIN },
  77. { "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
  78. { "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
  79. { "command_enable",PC_PERM_ENABLE_COMMAND },
  80. { "bypass_stat_onclone",PC_PERM_BYPASS_STAT_ONCLONE },
  81. { "bypass_max_stat",PC_PERM_BYPASS_MAX_STAT },
  82. { "attendance",PC_PERM_ATTENDANCE },
  83. { "macro_detect",PC_PERM_MACRO_DETECT },
  84. { "macro_register",PC_PERM_MACRO_REGISTER },
  85. { "trade_unconditional",PC_PERM_TRADE_UNCONDITIONAL },
  86. };
  87. struct s_player_group{
  88. uint32 id;
  89. std::string name;
  90. uint32 level;
  91. bool log_commands;
  92. std::vector<std::string> commands;
  93. std::vector<std::string> char_commands;
  94. std::bitset<PC_PERM_MAX> permissions;
  95. uint32 index;
  96. public:
  97. bool can_use_command( const std::string& command, AtCommandType type );
  98. bool has_permission( e_pc_permission permission );
  99. bool should_log_commands();
  100. };
  101. class PlayerGroupDatabase : public TypesafeYamlDatabase<uint32, s_player_group>{
  102. private:
  103. std::map<uint32, std::vector<std::string>> inheritance;
  104. bool parseCommands( const ryml::NodeRef& node, std::vector<std::string>& commands );
  105. public:
  106. PlayerGroupDatabase() : TypesafeYamlDatabase( "PLAYER_GROUP_DB", 1 ){
  107. }
  108. const std::string getDefaultLocation() override;
  109. uint64 parseBodyNode( const ryml::NodeRef& node ) override;
  110. void loadingFinished() override;
  111. };
  112. extern PlayerGroupDatabase player_group_db;
  113. #endif /* PC_GROUPS_HPP */