1. #ifndef PREMIUM_SYSTEM_H
  2. #define PREMIUM_SYSTEM_H
  3. #include <unordered_map>
  4. struct PremiumElements
  5. {
  6. uint32 id;
  7. uint8 premium;
  8. uint32 hp;
  9. uint32 power_max;
  10. uint64 time;
  11. bool chat;
  12. uint64 chat_time;
  13. std::string last_message;
  14. };
  15. struct PremiumItemElements
  16. {
  17. uint32 id;
  18. uint8 premium;
  19. };
  20. struct PremiumLocationElements
  21. {
  22. uint8 id;
  23. uint32 map_id;
  24. float x;
  25. float y;
  26. float z;
  27. float o;
  28. };
  29. struct PremiumPlayerLocationElements
  30. {
  31. uint32 guid;
  32. uint32 map_id;
  33. float x;
  34. float y;
  35. float z;
  36. float o;
  37. };
  38. struct PremiumTeamLocationElements
  39. {
  40. uint8 team;
  41. uint32 map_id;
  42. float x;
  43. float y;
  44. float z;
  45. float o;
  46. };
  47. class PremiumSystemMgr
  48. {
  49. private:
  50. PremiumSystemMgr();
  51. ~PremiumSystemMgr();
  52. public:
  53. static PremiumSystemMgr* instance();
  54. uint8 GetPremiumType() { return premiumType; }
  55. uint8 GetChatTeam() { return premiumChatTeam; }
  56. uint8 GetGMMinRank() { return premiumGMMinRank; }
  57. float GetModifier() { return premiumMod; }
  58. bool IsTimed() { return premiumTimerEnabled != 0; }
  59. bool CanWaterBreathe() { return premiumWaterBreathe != 0; }
  60. bool CanDecreaseSpellCost() { return premiumSpellCostDecrease != 0; }
  61. bool IsItemsEnabled() { return premiumItemsEnabled != 0; }
  62. bool IsTalentPointBonusEnabled() { return premiumTPEnabled != 0; }
  63. bool IsHealthPointBonusEnabled() { return premiumHPEnabled != 0; }
  64. bool IsManaPointBonusEnabled() { return premiumManaEnabled != 0; }
  65. bool IsRagePointBonusEnabled() { return premiumRageEnabled != 0; }
  66. uint64 GetDurationInSeconds() { return premiumTimerDuration; }
  67. uint32 GetDurationInDays() { return ((((premiumTimerDuration) / 60) / 60) / 24); }
  68. uint32 GetTalentPointBonus() { return premiumTPBonus; }
  69. uint32 GetUpgradeItem() { return premiumUpgradeItem; }
  70. uint32 GetTitleId() { return premiumTitleId; }
  71. uint32 GetTitleMaskId() { return premiumTitleMaskId; }
  72. uint32 GetChatDelay() { return premiumChatDelay; }
  73. void SetPremiumType(uint8 v) { premiumType = v; }
  74. void SetTimerEnabled(bool v) { premiumTimerEnabled = v; }
  75. void SetTimerDuration(uint64 v) { premiumTimerDuration *= v; }
  76. void SetGMMinRank(uint8 v) { premiumGMMinRank = v; }
  77. void SetItemEnabled(bool v) { premiumItemsEnabled = v; }
  78. void SetModifier(float v) { premiumMod = v; }
  79. void SetChatDelay(uint32 v) { premiumChatDelay = v; }
  80. void SetChatTeam(uint8 v) { premiumChatTeam = v; }
  81. void SetTPEnabled(bool v) { premiumTPEnabled = v; }
  82. void SetTPBonus(uint32 v) { premiumTPBonus = v; }
  83. void SetHPEnabled(bool v) { premiumHPEnabled = v; }
  84. void SetManaEnabled(bool v) { premiumManaEnabled = v; }
  85. void SetRageEnabled(bool v) { premiumRageEnabled = v; }
  86. void SetTitleId(uint32 v) { premiumTitleId = v; }
  87. void SetTitleMaskId(uint32 v) { premiumTitleMaskId = v; }
  88. void SetWaterBreathe(uint8 v) { premiumWaterBreathe = v; }
  89. void SetSpellCostDecrease(uint8 v) { premiumSpellCostDecrease = v; }
  90. void SetUpgradeItem(uint32 v) { premiumUpgradeItem = v; }
  91. // Player
  92. uint32 GetPlayerPremiumId(Player* player);
  93. uint32 GetPlayerPremiumTimeInDays(Player* player);
  94. uint32 IncreaseValueWithModifier(Player* player, uint32 value);
  95. uint32 DecreaseValueWithModifier(Player* player, uint32 value);
  96. uint64 GetPlayerPremiumStartTimeInSeconds(Player* player);
  97. uint64 GetPlayerPremiumRemainingTimeInSeconds(Player* player);
  98. std::string GetPlayerPremiumTimeLeftInString(Player* player);
  99. bool IsPlayerPremium(Player* player);
  100. void UpdatePlayerCustomHomeTeleport(uint32 guid, uint32 map_id, float x, float y, float z, float o);
  101. void DepositGoldToPlayerGuildBank(Player* player, uint32 amount);
  102. void AddPremiumToPlayer(Player* player);
  103. void RemovePremiumFromPlayer(Player* player);
  104. void UpdatePlayerPremiumValue(Player* player, uint8 value, uint64 time);
  105. // Item
  106. bool IsItemPremium(Item* item);
  107. void UpdateItemPremiumValue(uint32 item_id, uint8 value);
  108. void RemoveItem(uint32 id, Player* player);
  109. // Misc
  110. void DeletePremium(Player* player);
  111. uint64 ConvertStringToNumber(std::string arg);
  112. std::string ConvertNumberToString(uint64 numberX);
  113. std::string GetAmountInString(uint32 amount);
  114. bool CheckIfPlayerInCombatOrDead(Player* player);
  115. void TeleportPlayer(Player* player, uint8 id);
  116. std::unordered_map<uint32, PremiumElements> Premium;
  117. std::unordered_map<uint32, PremiumItemElements> PremiumItem;
  118. std::unordered_map<uint32, PremiumLocationElements> PremiumLocations;
  119. std::unordered_map<uint32, PremiumLocationElements> PremiumMallLocations;
  120. std::unordered_map<uint32, PremiumLocationElements> PremiumPublicMallLocations;
  121. std::unordered_map<uint32, PremiumPlayerLocationElements> PremiumPlayerLocations;
  122. std::unordered_map<uint32, PremiumTeamLocationElements> PremiumTeamLocations;
  123. private:
  124. uint8 premiumType;
  125. uint8 premiumTimerEnabled;
  126. uint8 premiumItemsEnabled;
  127. uint8 premiumTPEnabled;
  128. uint8 premiumHPEnabled;
  129. uint8 premiumManaEnabled;
  130. uint8 premiumRageEnabled;
  131. uint8 premiumGMMinRank;
  132. uint8 premiumChatTeam;
  133. uint8 premiumWaterBreathe;
  134. uint8 premiumSpellCostDecrease;
  135. uint32 premiumTitleId;
  136. uint32 premiumTitleMaskId;
  137. uint32 premiumTPBonus;
  138. uint32 premiumUpgradeItem;
  139. uint32 premiumChatDelay;
  140. uint64 premiumTimerDuration;
  141. float premiumMod;
  142. };
  143. #define sPremiumSystemMgr PremiumSystemMgr::instance()
  144. #endif