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

Database2.h 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #pragma once
  2. #define MYSQL_CONNECT_TIMEOUT 3
  3. typedef char** SQLResultRow_t;
  4. class CSQLResult
  5. {
  6. public:
  7. CSQLResult() { }
  8. virtual ~CSQLResult() { }
  9. virtual SQLResultRow_t FetchRow() = 0;
  10. virtual uint64_t ResultRows() = 0;
  11. };
  12. class CMYSQLResult : public CSQLResult
  13. {
  14. public:
  15. CMYSQLResult(MYSQL_RES *);
  16. virtual ~CMYSQLResult();
  17. virtual void Free();
  18. virtual SQLResultRow_t FetchRow() override;
  19. virtual uint64_t ResultRows() override;
  20. private:
  21. MYSQL_RES *m_Result;
  22. };
  23. class CSQLConnection
  24. {
  25. public:
  26. virtual ~CSQLConnection() { }
  27. virtual void Close() = 0;
  28. virtual bool Query(const char *query) = 0;
  29. virtual unsigned int LastError() = 0;
  30. virtual CSQLResult *GetResult() = 0;
  31. static int s_NumConnectAttempts;
  32. };
  33. class CMYSQLConnection : public CSQLConnection
  34. {
  35. public:
  36. virtual ~CMYSQLConnection();
  37. static CMYSQLConnection *Create(const char *host, unsigned int port, const char *user, const char *password, const char *defaultdatabase);
  38. virtual void Close() override;
  39. virtual bool Query(const char *query);
  40. virtual unsigned int LastError();
  41. virtual CSQLResult *GetResult();
  42. private:
  43. CMYSQLConnection(MYSQL *connection);
  44. MYSQL *m_InternalConnection;
  45. };
  46. class CDatabase2
  47. {
  48. public:
  49. CDatabase2();
  50. virtual ~CDatabase2();
  51. virtual bool Query(const char *format, ...);
  52. virtual void Tick();
  53. virtual CSQLResult *GetResult();
  54. protected:
  55. CSQLConnection *m_pConnection;
  56. };
  57. class CMYSQLDatabase : public CDatabase2
  58. {
  59. public:
  60. CMYSQLDatabase(const char *host, unsigned int port, const char *user, const char *password, const char *defaultdatabasename);
  61. virtual ~CMYSQLDatabase();
  62. protected:
  63. virtual void Tick() override;
  64. private:
  65. void RefreshConnection();
  66. std::string m_DatabaseHost;
  67. unsigned int m_DatabasePort;
  68. std::string m_DatabaseUser;
  69. std::string m_DatabasePassword;
  70. std::string m_DatabaseName;
  71. double m_fLastRefresh;
  72. bool m_bDisabled;
  73. };
  74. #include "ModelInfo.h"
  75. #include "PhysicsDesc.h"
  76. #include "PublicWeenieDesc.h"
  77. class CCapturedWorldObjectInfo
  78. {
  79. public:
  80. CCapturedWorldObjectInfo() {
  81. m_ObjData = NULL;
  82. m_ObjDataLen = 0;
  83. }
  84. ~CCapturedWorldObjectInfo() {
  85. Free();
  86. }
  87. void Free() {
  88. if (m_ObjData)
  89. {
  90. delete[] m_ObjData;
  91. m_ObjData = NULL;
  92. }
  93. }
  94. std::string m_ObjName;
  95. BYTE *m_ObjData;
  96. unsigned m_ObjDataLen;
  97. DWORD guid;
  98. ModelInfo appearance;
  99. PhysicsDesc physics;
  100. PublicWeenieDesc weenie;
  101. std::map<DWORD, DWORD> dwordProperties;
  102. std::map<DWORD, UINT64> qwordProperties;
  103. std::map<DWORD, DWORD> boolProperties;
  104. std::map<DWORD, double> floatProperties;
  105. std::map<DWORD, std::string> stringProperties;
  106. std::map<DWORD, DWORD> dataIDProperties;
  107. ModelInfo wornAppearance;
  108. };
  109. class CGameDatabase
  110. {
  111. public:
  112. CGameDatabase();
  113. virtual ~CGameDatabase();
  114. void Init();
  115. bool LoadedPortals() { return m_bLoadedPortals; }
  116. CCapturedWorldObjectInfo *GetCapturedMonsterData(const char *name);
  117. CCapturedWorldObjectInfo *GetCapturedItemData(const char *name);
  118. CCapturedWorldObjectInfo *GetCapturedArmorData(const char *name);
  119. CCapturedWorldObjectInfo *GetRandomCapturedMonsterData();
  120. CCapturedWorldObjectInfo *GetRandomCapturedItemData();
  121. CCapturedWorldObjectInfo *GetRandomCapturedArmorData();
  122. void SpawnAerfalle();
  123. class CPhysicsObj *CreateFromCapturedData(CCapturedWorldObjectInfo *pObjectInfo);
  124. protected:
  125. std::string ConvertNameForLookup(std::string name);
  126. void LoadPortals();
  127. void LoadAerfalle();
  128. void LoadCapturedMonsterData();
  129. void LoadCapturedItemData();
  130. void LoadCapturedArmorData();
  131. void LoadMonsterTemplates();
  132. void LoadTeleTownList();
  133. void LoadStaticsData();
  134. bool m_bLoadedPortals;
  135. std::list<CCapturedWorldObjectInfo *> m_CapturedStaticsData;
  136. std::list<CCapturedWorldObjectInfo *> m_CapturedAerfalleData;
  137. std::map<std::string, CCapturedWorldObjectInfo *> m_CapturedMonsterData;
  138. std::vector<CCapturedWorldObjectInfo *> m_CapturedMonsterDataList;
  139. std::map<std::string, CCapturedWorldObjectInfo *> m_CapturedItemData;
  140. std::vector<CCapturedWorldObjectInfo *> m_CapturedItemDataList;
  141. std::map<std::string, CCapturedWorldObjectInfo *> m_CapturedArmorData;
  142. std::vector<CCapturedWorldObjectInfo *> m_CapturedArmorDataList;
  143. };
  144. extern CGameDatabase *g_pGameDatabase;