S3DBInterface.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:16k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //#include "kstdafx.h"
  2. #ifndef S3DBINTERFACE_H
  3. #define S3DBINTERFACE_H
  4. //#define IN
  5. //#define OUT
  6. //#include <map>
  7. //#include <string>
  8. //#include <vector>
  9. #include "KProtocol.h"
  10. #include <time.h>
  11. //#define SAVE_ITEM_MAGICATTRIB_TO_DB
  12. class KTabFileCtrl;
  13. class KIniFile;
  14. #pragma pack( push, 1 )
  15. enum ROLE_LOG
  16. {
  17. log_create_role = 1,
  18. log_begin_game,
  19. log_save_game,
  20. };
  21. enum 
  22. {
  23. create_role,  //if already have this rolename then msg error!;
  24. save_role,   //if havent this rolename in db ,then msg error!
  25. };
  26. enum
  27. {
  28. must_norole,
  29. must_haverole,
  30. nolimited,
  31. };
  32. struct TIntDBValue
  33. {
  34. BYTE btUnitType;
  35. };
  36. struct TRoleBaseInfo
  37. {
  38. //RoleBaseInfo
  39. DWORD dwId;
  40. char szName[32];
  41. bool bSex;
  42. char szAlias[32];
  43. char caccname[32];
  44. BYTE nFirstSect;
  45. BYTE nSect;
  46. BYTE cFightMode;
  47. BYTE cUseRevive;
  48. BYTE cIsExchange;
  49. // --------------------- add by spe 2003/07/19 -----------------------
  50. BYTE cPkStatus;
  51. // -------------------------------------------------------------------
  52. int ijoincount;
  53. int isectrole;
  54. int igroupcode;
  55. int igrouprole;
  56. int irevivalid;
  57. int irevivalx;
  58. int irevivaly;
  59. int ientergameid;
  60. int ientergamex;
  61. int ientergamey;
  62. char cpartnercode[32];
  63. int isavemoney;
  64. int imoney;
  65. int ifiveprop;
  66. int iteam;
  67. int ifightlevel;
  68. int fightexp;
  69. int ileadlevel;
  70. int ileadexp;
  71. int iliveexp;
  72. int ipower;
  73. int iagility;
  74. int iouter;
  75. int iinside;
  76. int iluck;
  77. int imaxlife;
  78. int imaxstamina;
  79. int imaxinner;
  80. // --------------------- add by spe 2003/07/19 -----------------------
  81. int icurlife;
  82. int icurstamina;
  83. int icurinner;
  84. int ipkvalue;
  85. // -------------------------------------------------------------------
  86. int ileftprop;
  87. int ileftfight;
  88. int ileftlife;
  89. int ifinishgame;
  90. short iarmorres;
  91. short iweaponres;
  92. short ihelmres;
  93. };
  94. struct TRoleData
  95. {
  96. TRoleBaseInfo BaseInfo;
  97. bool bBaseNeedUpdate;//通知是否需要更新
  98. //当存取时如果Offset等于-1,表示不更新该数据
  99. //Additional Info
  100. short nFightSkillCount;
  101. short nLiveSkillCount;
  102. BYTE nTaskCount;
  103. short nItemCount;
  104. short nFriendCount;
  105. int dwTaskOffset;
  106. int dwLSkillOffset;
  107. int dwFSkillOffset;
  108. int dwItemOffset;
  109. int dwFriendOffset;
  110. int dwDataLen;
  111. BYTE pBuffer[1];
  112. };
  113. struct TDBTaskData
  114. {
  115. BYTE m_nTaskId;
  116. int m_nTaskValue;
  117. };
  118. struct TDBItemData
  119. {
  120. //BaseInfo
  121. int iid;
  122. int iequipclasscode;
  123. int ilocal;
  124. int ix;
  125. int iy;
  126. int iequipcode;
  127. int idetailtype;
  128. int iparticulartype;
  129. int ilevel;
  130. int iseries;
  131. int iequipversion;
  132. int irandseed;
  133. int iparam2;
  134. int iparam3;
  135. int iparam5;
  136. int iparam4;
  137. int iparam6;
  138. int iparam1;
  139. int ilucky;
  140. int iidentify;
  141. };
  142. struct TDBFriendsData
  143. {
  144. short FriendCount;
  145. void * pBuffer;
  146. short Offset[1];
  147. };
  148. struct TDBSkillData
  149. {
  150. short m_nSkillId;
  151. short m_nSkillLevel;
  152. };
  153. enum 
  154. {
  155. /*==============================================================*/
  156. /* Table: EquipBaseInfo                                         */
  157. /*==============================================================*/
  158.    EQUIPBASEINFO_IID                                             ,
  159.    EQUIPBASEINFO_IMAINID                                        ,
  160.    EQUIPBASEINFO_ICLASS                                      ,
  161.    EQUIPBASEINFO_IVALUE1                        ,
  162.    EQUIPBASEINFO_IVALUE2                        ,
  163.    EQUIPBASEINFO_IVALUE3                        ,
  164. /*==============================================================*/
  165. /* TABLE: EQUIPEFFICINFO_                                        */
  166. /*==============================================================*/
  167.    EQUIPEFFICINFO_IID                                             ,
  168.    EQUIPEFFICINFO_IMAINID                                        ,
  169.    EQUIPEFFICINFO_ICLASS                                      ,
  170.    EQUIPEFFICINFO_IVALUE1                        ,
  171.    EQUIPEFFICINFO_IVALUE2                        ,
  172.    EQUIPEFFICINFO_IVALUE3                        ,
  173. /*==============================================================*/
  174. /* TABLE: EQUIPREQUIREINFO_                                     */
  175. /*==============================================================*/
  176.    EQUIPREQUIREINFO_IID                                             ,
  177.    EQUIPREQUIREINFO_IMAINID                                        ,
  178.    EQUIPREQUIREINFO_ICLASS                                      ,
  179.    EQUIPREQUIREINFO_IVALUE1                        ,
  180.    EQUIPREQUIREINFO_IVALUE2                        ,
  181.    EQUIPREQUIREINFO_IVALUE3                        ,
  182. /*==============================================================*/
  183. /* TABLE: EQUIPMENTS                                            */
  184. /*==============================================================*/
  185.    EQUIPMENTS_IID                                             ,
  186.    EQUIPMENTS_CUSERCODE                                         ,
  187.    EQUIPMENTS_IEQUIPCLASSCODE                                   ,
  188.    EQUIPMENTS_ILOCAL                                      ,
  189.    EQUIPMENTS_IX                                            ,
  190.    EQUIPMENTS_IY                                            ,
  191.    EQUIPMENTS_IEQUIPCODE                                     ,
  192.    EQUIPMENTS_IDETAILTYPE                    ,
  193.    EQUIPMENTS_IPARTICULARTYPE                ,
  194.    EQUIPMENTS_ILEVEL                         ,
  195.    EQUIPMENTS_ISERIES                        ,
  196.    EQUIPMENTS_IEQUIPVERSION                  ,
  197.    EQUIPMENTS_IRANDSEED                      ,
  198.    EQUIPMENTS_IPARAM2                        ,
  199.    EQUIPMENTS_IPARAM3                        ,
  200.    EQUIPMENTS_IPARAM5                        ,
  201.    EQUIPMENTS_IPARAM4                        ,
  202.    EQUIPMENTS_IPARAM6                        ,
  203.    EQUIPMENTS_IPARAM1                        ,
  204.    EQUIPMENTS_ILUCKY                         ,
  205.  
  206. /*==============================================================*/
  207. /* TABLE: FIGHTSKILL                                            */
  208. /*==============================================================*/
  209.    FIGHTSKILL_IID                                             ,
  210.    FIGHTSKILL_CUSERCODE                                         ,
  211.    FIGHTSKILL_IFIGHTSKILL                                 ,
  212.    FIGHTSKILL_IFIGHTSKILLLEVEL                            ,
  213. /*==============================================================*/
  214. /* TABLE: FRIENDLIST_                                           */
  215. /*==============================================================*/
  216.    FRIENDLIST_IID                                             ,
  217.    FRIENDLIST_CUSERCODE                                         ,
  218.    FRIENDLIST_CFRIENDCODE                                       ,
  219. /*==============================================================*/
  220. /* TABLE: LIFESKILL                                             */
  221. /*==============================================================*/
  222.    LIFESKILL_IID                                             ,
  223.    LIFESKILL_CUSERCODE                                         ,
  224.    LIFESKILL_ILIFESKILL                                  ,
  225.    LIFESKILL_ILIFESKILLLEVEL                             ,
  226. /*==============================================================*/
  227. /* TABLE: ROLEINFO                                             */
  228. /*==============================================================*/
  229.    ROLEINFO_IID                                             ,
  230.    ROLEINFO_CUSERCODE                                         ,
  231.    ROLEINFO_BSEX                                            ,
  232.    ROLEINFO_CALIAS                         ,
  233.    ROLEINFO_IFIRSTSECT                     ,
  234.    ROLEINFO_ISECT                          ,
  235.    ROLEINFO_IJOINCOUNT                     ,
  236.    ROLEINFO_ISECTROLE                      ,
  237.    ROLEINFO_IGROUPCODE                     ,
  238.    ROLEINFO_IGROUPROLE                     ,
  239.    ROLEINFO_IREVIVALID                     ,
  240.    ROLEINFO_CPARTNERCODE                   ,
  241.    ROLEINFO_ISAVEMONEY                                     ,
  242.    ROLEINFO_IMONEY                                         ,
  243.    ROLEINFO_IFIVEPROP                      ,
  244.    ROLEINFO_ITEAM                          ,
  245.    ROLEINFO_IFIGHTLEVEL                    ,
  246.    ROLEINFO_FIGHTEXP                      ,
  247.    ROLEINFO_ILEADLEVEL                     ,
  248.    ROLEINFO_ILEADEXP                       ,
  249.    ROLEINFO_ILIVEEXP                       ,
  250.    ROLEINFO_IPOWER                         ,
  251.    ROLEINFO_IAGILITY                       ,
  252.    ROLEINFO_IOUTER                         ,
  253.    ROLEINFO_IINSIDE                        ,
  254.    ROLEINFO_ILUCK                          ,
  255.    ROLEINFO_IMAXLIFE                       ,
  256.    ROLEINFO_IMAXSTAMINA                    ,
  257.    ROLEINFO_IMAXINNER                      ,
  258.    ROLEINFO_ILEFTPROP                      ,
  259.    ROLEINFO_ILEFTFIGHT                     ,
  260.    ROLEINFO_ILEFTLIFE                      ,
  261.    ROLEINFO_CACCNAME                       ,
  262.    ROLEINFO_IFINISHGAME                    ,
  263.    ROLEINFO_DLOGINTIME                     ,
  264.    ROLEINFO_DBEGINDATE                     ,
  265.    ROLEINFO_DENDDATE                       ,
  266.    ROLEINFO_IREVIVALX                      ,
  267.    ROLEINFO_IREVIVALY                      ,
  268.    ROLEINFO_IARMORRES                      ,
  269.    ROLEINFO_IWEAPONRES                     ,
  270.    ROLEINFO_IHELMRES                       ,
  271. /*==============================================================*/
  272. /* TABLE: TASKLIST                                             */
  273. /*==============================================================*/
  274.    TASKLIST_IID                                             ,
  275.    TASKLIST_CUSERCODE                                         ,
  276.    TASKLIST_ITASKCODE                                   ,
  277.    TASKLIST_IDEGREE                                     ,
  278. };
  279. // Ini文件各字段定义---------------------------------------------------
  280. #define SECTION_ROLE "ROLE"
  281. #define SECTION_ITEMLIST "ITEMS"
  282. #define SECTION_ITEM "ITEM" // + id
  283. #define KEY_COUNT "COUNT"
  284. #define KEY_BASELIST "BLISTS"
  285. #define KEY_EFFICLIST "ELISTS"
  286. #define KEY_REQUIRELIST "RLISTS"
  287. #define SECTION_BASEINFO "IB" //IB1_2
  288. #define SECTION_EFFICEINFO "IE"
  289. #define SECTION_REQUIREINFO "IR"
  290. #define SECTION_FRIENDLIST "FRIENDS"
  291. #define KEY_FRIEND "F" // + id
  292. #define SECTION_TASKLIST "TASKS"
  293. #define KEY_TASKID "T" // + id
  294. #define KEY_TASKVALUE "V" // + id
  295. #define SECTION_FIGHTSKILLLIST "FSKILLS"
  296. #define KEY_FIGHTSKILL "S"
  297. #define KEY_FIGHTSKILLLEVEL "L"
  298. #define SECTION_LIFESKILLLIST "LSKILLS"
  299. #define KEY_LIFESKILL "S" // + id
  300. #define KEY_LIFESKILLLEVEL "L" // + id
  301. //------------------------------------------------------------------------------
  302. #pragma warning (disable: 4512)
  303. #pragma warning (disable: 4786)
  304. #ifndef __linux
  305. #ifdef S3DBINTERFACE_EXPORTS
  306. #define S3DBI_API __declspec(dllexport)
  307. #else
  308. #define S3DBI_API __declspec(dllimport)
  309. #endif
  310. #else
  311. #define S3DBI_API
  312. #endif
  313. //改回使用corekprotocol.h里的S3DBI_RoleBaseInfo
  314. /*struct S3DBI_RoleBaseInfo
  315. {
  316. char szRoleName[32];
  317. int  nSex;
  318. int  nHelmType;
  319. int  nArmorType;
  320. int  nWeaponType;
  321. int  nLevel;
  322. };*/
  323. struct S3DBI_DATAS
  324. {
  325. char * strNames;
  326. char * strValues;
  327. int    nDataNum;
  328. };
  329. enum  S3DBI_TABLENAME
  330. {
  331. TABLE_ACCOUNT,
  332. TABLE_CARD,
  333. TABLE_EQUIPBASEINFO,
  334. TABLE_EQUIPEFFICINFO,
  335. TABLE_EQUIPMENT,
  336. TABLE_EQUIPREQUIREINFO,
  337. TABLE_FIGHTSKILL,
  338. TABLE_FRIEND,
  339. TABLE_LIFESKILL,
  340. TABLE_LIST,
  341. TABLE_ROLE,
  342. TABLE_TASK,
  343. TABLE_TASK_LIST,
  344. };
  345. enum S3DBI_LISTNAME
  346. {
  347. LIST_TASK,
  348. LIST_FRIEND,
  349. LIST_FIGHT,
  350. LIST_LIFESKILL,
  351. LIST_EQUIPMENT,
  352. LIST_EQUIPMENTREQINFO,
  353. LIST_EQUIPMENTBASEINFO,
  354. LIST_EQUIPMENTEFFICINFO,
  355. };
  356. /*
  357. extern DBTableKeyMap  g_RoleTableKeyMap;
  358. typedef std::map<std::string, int> DBTableKeyMap;
  359. typedef std::map<int, std::string> DBStringMap;
  360. typedef std::map<int, int> DBIntegerMap;
  361. */
  362. /*struct TDBTaskData
  363. {
  364. int m_nTaskId;
  365. int m_nTaskValue;
  366. };
  367. struct TDBTableData
  368. {
  369. DBStringMap m_StringDatas;
  370. DBIntegerMap m_IntegerDatas;
  371. };
  372. struct TDBEquiptData;
  373. typedef std::vector<KMagicAttrib> TMagicAttribArray;
  374. typedef std::vector<TDBEquiptData> TDBEquiptArray;
  375. typedef std::vector<TDBSkillData> TDBSkillArray;
  376. typedef std::vector<std::string> TDBFriendArray;
  377. typedef std::vector<TDBTaskData> TDBTaskArray;
  378. extern DBTableKeyMap g_TableIntegerKeyMap;
  379. extern DBTableKeyMap g_TableStringKeyMap;
  380. struct TDBEquiptData : TDBTableData
  381. {
  382. TMagicAttribArray m_mapRequestInfo;
  383. TMagicAttribArray m_mapBaseInfo;
  384. TMagicAttribArray m_mapEfficInfo;
  385. };
  386. struct TDBPlayerData :TDBTableData
  387. {
  388. TDBEquiptArray m_mapEquipt;
  389. TDBSkillArray m_mapFightSkill;
  390. TDBSkillArray m_mapLiveSkill;
  391. TDBFriendArray m_mapFriend;
  392. TDBTaskArray m_mapTask;
  393. };
  394. */
  395. #define S3_DB_TABLENAME  S3DBI_TABLENAME
  396. S3DBI_API int S3DBI_InitDBInterface(); //初始化数据库引擎
  397. S3DBI_API void S3DBI_ReleaseDBInterface(); //释放数据库引擎
  398. //获得角色的信息并以Ini文件的格式放置
  399. //S3DBI_API int S3DBI_GetRoleInfo(IN char * strUser, IN OUT KIniFile * pIniFile);
  400. S3DBI_API void * S3DBI_GetRoleInfo(IN OUT BYTE * pRoleBuffer, IN char * strUser, IN OUT int &nBufLen);
  401. //保存角色的信息,如果数据库不存在该玩家,则增加该玩家
  402. //bAutoInsertWhenNoExistUser 设为TRUE时表示,如果需要保存的该玩家在数据库中并不存在则自动加入到数据库中,FALSE则不增加直接返回错误
  403. //注意INI文件只须存放将需要改动的数据,不需改动的数据将自动保存原状。
  404. S3DBI_API int S3DBI_SaveRoleInfo(IN BYTE * pRoleBuffer, IN char * strUser, BOOL bAutoInsertWhenNoExistUser);
  405. S3DBI_API void S3DBI_ShowDebugInfo(IN BYTE * pRoleBuffer, char * pShowString);
  406. S3DBI_API BOOL S3DBI_IsRoleNameExisted(char * strUser);
  407. S3DBI_API void S3DBI_SaveRoleLogData(const char * strUser, ROLE_LOG eLogType, time_t logtime = 0);
  408. S3DBI_API time_t S3DBI_GetDataBaseSysTime();
  409. //  eLogType标识日志的类型
  410. // log_create_role , 记录角色建立的时间
  411. // log_begin_game,   记录角色本次游戏登入的时间
  412. // log_save_game,   记录角色本次游戏过程中上一次存档的时间
  413. //  数据库保存存档的时间的目的是为了
  414. S3DBI_API int S3DBI_GetRoleListOfAccount(char * szAccountName, S3DBI_RoleBaseInfo * RoleBaseList, int nMaxCount);
  415. //删除角色
  416. S3DBI_API int S3DBI_DeleteRole(char * strUser);
  417. S3DBI_API void* S3DBI_GetList(S3DBI_LISTNAME listname,  char * strUser);
  418. S3DBI_API void* S3DBI_GetList(S3DBI_LISTNAME listname,  int iid);
  419. //S3DBI_API int S3DBI_GetListData(S3DBI_LISTNAME listname, void * pList, int i , ColumnAndValue &cav);
  420. S3DBI_API int S3DBI_GetCountOfList(S3DBI_LISTNAME listname, void * pList);
  421. //S3DBI_API int S3DBI_UpdateDataAtList(S3DBI_LISTNAME listname, void * pList, int i , ColumnAndValue &cav);
  422. S3DBI_API int S3DBI_DeleteDataAtList(S3DBI_LISTNAME listname, void * pList, int i );
  423. //S3DBI_API int S3DBI_InsertDataAtList(S3DBI_LISTNAME listname, void * pList, ColumnAndValue cav);
  424. S3DBI_API void S3DBI_ReleaseListBuffer(S3DBI_LISTNAME listname, void * pList);
  425. S3DBI_API int S3DBI_ClearList(S3DBI_LISTNAME listname, void * pList);
  426. //S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, int nId, ColumnAndValue *pcav);
  427. //S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, char * strUser , ColumnAndValue * pCav);
  428. //S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, int nId, ColumnAndValue *pcav);
  429. //S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, char * strUser, ColumnAndValue *pcav);
  430. S3DBI_API int S3DBI_DeleteData(S3_DB_TABLENAME tablename, int nId);
  431. S3DBI_API int S3DBI_DeleteData(S3_DB_TABLENAME tablename, char * strUser);
  432. //S3DBI_API int S3DBI_InsertData(S3_DB_TABLENAME tablename, int nId, ColumnAndValue cav);
  433. //S3DBI_API int S3DBI_InsertData(S3_DB_TABLENAME tablename, char * strUser, ColumnAndValue cav);
  434. S3DBI_API int S3DBI_GetListData(S3DBI_LISTNAME listname, void * pList, int i , KTabFileCtrl *pTabFile);
  435. S3DBI_API int S3DBI_DeleteDataAtList(S3DBI_LISTNAME listname, void * pList, int i );
  436. S3DBI_API int S3DBI_InsertDataAtList(S3DBI_LISTNAME listname, void * pList, KTabFileCtrl *pTabFile);
  437. S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, int nId, KTabFileCtrl *pTabFile);
  438. S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, char * strUser, KTabFileCtrl * pTabFile);
  439. S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, int nId, KTabFileCtrl *pTabFile);
  440. S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, char * strUser, KTabFileCtrl *pTabFile);
  441. S3DBI_API int S3DBI_InsertData(S3_DB_TABLENAME tablename,  KTabFileCtrl *pTabFile);
  442. #pragma pack( pop )
  443. #endif