#ifndef USERMANAGER_H #define USERMANAGER_H #define _VARIADIC_MAX 10 #include #include #include "RakNetTypes.h" #include class User; namespace WorldPackets { struct CharacterCreateRequest; struct CharacterDeleteRequest; struct CharacterRenameRequest; } class UserManager { public: static UserManager* Instance() { if (!m_Address) { m_Address = new UserManager(); } return m_Address; } void Initialize(); ~UserManager(); User* CreateUser(const SystemAddress& sysAddr, const std::string& username, const std::string& sessionKey); User* GetUser(const SystemAddress& sysAddr); User* GetUser(const std::string& username); std::vector GetUsersForAccount(uint32_t accountId); bool DeleteUser(const SystemAddress& sysAddr); //Returns true on succesful deletion void DeletePendingRemovals(); std::string GetPredefinedName(uint32_t firstNameIndex, uint32_t middleNameIndex, uint32_t lastNameIndex); bool IsNamePreapproved(const std::string& requestedName); void RequestCharacterList(const SystemAddress& sysAddr); void CreateCharacter(const SystemAddress& sysAddr, const WorldPackets::CharacterCreateRequest& request); void DeleteCharacter(const SystemAddress& sysAddr, const WorldPackets::CharacterDeleteRequest& request); void RenameCharacter(const SystemAddress& sysAddr, const WorldPackets::CharacterRenameRequest& request); void LoginCharacter(const SystemAddress& sysAddr, LWOOBJID playerID); void SaveAllActiveCharacters(); size_t GetUserCount() const { return m_Users.size(); } // Everyone connected, by address (character selection moves them one by one in a live update) const std::map& GetUsers() const { return m_Users; } // Access cached config values bool GetMuteAutoRejectNames() const { return m_MuteAutoRejectNames; } bool GetMuteRestrictTrade() const { return m_MuteRestrictTrade; } bool GetMuteRestrictMail() const { return m_MuteRestrictMail; } private: static UserManager* m_Address; //Singleton std::map m_Users; std::vector m_UsersToDelete; std::vector m_FirstNames; std::vector m_MiddleNames; std::vector m_LastNames; std::vector m_PreapprovedNames; // Cached config values that can change on config reload bool m_MuteAutoRejectNames = false; bool m_MuteRestrictTrade = false; bool m_MuteRestrictMail = false; }; #endif // USERMANAGER_H