ProcessDBMsg.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:19k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "processdbmsg.h"
  3. #include <stdio.h>
  4. #include "../def/dbmgr.h"
  5. extern CWHQueue g_DBMsgQ;
  6. extern BOOL g_fTerminated;
  7. extern CWHList< GAMESERVERINFO * > g_xGameServerList;
  8. void SendSocket(SOCKET s, int nCertification, char *pszData1, char *pszData2, int nData2Len)
  9. {
  10. int nLen = nData2Len + DEFBLOCKSIZE + 6;
  11. LONG lCert = MAKELONG(nCertification ^ 0xAA, nLen);
  12. char szCert[24];
  13. char szEncodeMsg[8096];
  14. int nCertLen = fnEncode6BitBufA((unsigned char *)&lCert, szCert, sizeof(LONG), sizeof(szCert));
  15. szEncodeMsg[0] = '#';
  16. char *pszPos = ValToAnsiStr(nCertification, &szEncodeMsg[1]);
  17. *pszPos++ = '/';
  18. memmove(pszPos, pszData1, DEFBLOCKSIZE);
  19. pszPos += DEFBLOCKSIZE;
  20. memmove(pszPos, pszData2, nData2Len);
  21. pszPos += nData2Len;
  22. memmove(pszPos, szCert, nCertLen);
  23. pszPos += nCertLen;
  24. *pszPos++ = '!';
  25. *pszPos = '';
  26. int nSendLen = memlen(szEncodeMsg) - 1;
  27. send(s, szEncodeMsg, nSendLen, 0);
  28. }
  29. int GetHorseRcd(char *szName, _LPTHORSERCD lpTHorseRcd)
  30. {
  31. char szQuery[1024];
  32. sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_HORSE WHERE FLD_CHARNAME='%s'", szName );
  33. CRecordset *pRec = GetDBManager()->CreateRecordset();
  34. if ( pRec->Execute( szQuery ) && pRec->Fetch() )
  35. {
  36. strcpy( lpTHorseRcd->szHorseIndex, pRec->Get( "FLD_HORSEINDEX" ) );
  37. lpTHorseRcd->btHorseType = atoi( pRec->Get( "FLD_HORSETYPE" ) );
  38. }
  39. else
  40. {
  41. GetDBManager()->DestroyRecordset( pRec );
  42. return 0;
  43. }
  44. GetDBManager()->DestroyRecordset( pRec );
  45. return 1;
  46. }
  47. void GetHumanGenItemRcd(char *szName, CWHList<_LPTGENITEMRCD> *pxUserGenItemRcdList)
  48. {
  49. char szQuery[128];
  50. sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_GENITEM WHERE FLD_CHARNAME='%s'", szName );
  51. CRecordset *pRec = GetDBManager()->CreateRecordset();
  52. if ( pRec->Execute( szQuery ) )
  53. {
  54. while ( pRec->Fetch() )
  55. {
  56. _LPTGENITEMRCD pItemRcd = new _TGENITEMRCD;
  57. if ( pItemRcd )
  58. {
  59. strcpy( pItemRcd->szItem, pRec->Get( "FLD_ITEMINDEX" ) );
  60. pxUserGenItemRcdList->AddNewNode( pItemRcd );
  61. }
  62. }
  63. }
  64. GetDBManager()->DestroyRecordset( pRec );
  65. }
  66. void GetHumanMagicRcd(char *szName, CWHList<_LPTHUMANMAGICRCD> *pxUserMagicRcdList)
  67. {
  68. char szQuery[1024];
  69. sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_MAGIC WHERE FLD_CHARNAME='%s'", szName );
  70. CRecordset *pRec = GetDBManager()->CreateRecordset();
  71. if (pRec->Execute( szQuery ))
  72. {
  73. while (pRec->Fetch())
  74. {
  75. _LPTHUMANMAGICRCD lptUserMagicRcd = new _THUMANMAGICRCD;
  76. if (lptUserMagicRcd)
  77. {
  78. lptUserMagicRcd->btMagicID = atoi( pRec->Get( "FLD_MAGICID" ) );
  79. lptUserMagicRcd->btLevel = atoi( pRec->Get( "FLD_LEVEL" ) );
  80. lptUserMagicRcd->btUseKey = atoi( pRec->Get( "FLD_USEKEY" ) );
  81. lptUserMagicRcd->nCurrTrain = atoi( pRec->Get( "FLD_CURRTRAIN" ) );
  82. pxUserMagicRcdList->AddNewNode(lptUserMagicRcd);
  83. }
  84. }
  85. }
  86. GetDBManager()->DestroyRecordset( pRec );
  87. }
  88. void GetHumanItemRcd(char *szName, CWHList<_LPTUSERITEMRCD> *pxUserItemRcdList)
  89. {
  90. char szQuery[128];
  91. sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_ITEM WHERE FLD_CHARNAME='%s'", szName );
  92. CRecordset *pRec = GetDBManager()->CreateRecordset();
  93. if ( pRec->Execute( szQuery ) )
  94. {
  95. while ( pRec->Fetch() )
  96. {
  97. _LPTUSERITEMRCD pItem = new _TUSERITEMRCD;
  98. pItem->szMakeIndex[0] = *(pRec->Get( "FLD_STDTYPE" ));
  99. memmove( &pItem->szMakeIndex[1], pRec->Get( "FLD_MAKEDATE" ), 6 );
  100. memmove( &pItem->szMakeIndex[7], pRec->Get( "FLD_MAKEINDEX" ), 5 );
  101. pItem->nStdIndex = atoi( pRec->Get( "FLD_STDINDEX" ) );
  102. pItem->nDura = atoi( pRec->Get( "FLD_DURA" ) );
  103. pItem->nDuraMax = atoi( pRec->Get( "FLD_DURAMAX" ) );
  104. pItem->btValue[0] = atoi( pRec->Get( "FLD_VALUE1" ) );
  105. pItem->btValue[1] = atoi( pRec->Get( "FLD_VALUE2" ) );
  106. pItem->btValue[2] = atoi( pRec->Get( "FLD_VALUE3" ) );
  107. pItem->btValue[3] = atoi( pRec->Get( "FLD_VALUE4" ) );
  108. pItem->btValue[4] = atoi( pRec->Get( "FLD_VALUE5" ) );
  109. pItem->btValue[5] = atoi( pRec->Get( "FLD_VALUE6" ) );
  110. pItem->btValue[6] = atoi( pRec->Get( "FLD_VALUE7" ) );
  111. pItem->btValue[7] = atoi( pRec->Get( "FLD_VALUE8" ) );
  112. pItem->btValue[8] = atoi( pRec->Get( "FLD_VALUE9" ) );
  113. pItem->btValue[9] = atoi( pRec->Get( "FLD_VALUE10" ) );
  114. pItem->btValue[10] = atoi( pRec->Get( "FLD_VALUE11" ) );
  115. pItem->btValue[11] = atoi( pRec->Get( "FLD_VALUE12" ) );
  116. pItem->btValue[12] = atoi( pRec->Get( "FLD_VALUE13" ) );
  117. ZeroMemory(pItem->szPrefixName, sizeof(pItem->szPrefixName));
  118. strcpy( pItem->szPrefixName, pRec->Get( "FLD_PREFIXNAME") );
  119. pxUserItemRcdList->AddNewNode(pItem);
  120. }
  121. }
  122. GetDBManager()->DestroyRecordset( pRec );
  123. }
  124. BOOL GetHumanRcd(char *szName, _LPTHUMANRCD lptHumanRcd, _LPTLOADHUMAN lpLoadHuman)
  125. {
  126. char szQuery[1024];
  127. sprintf( szQuery, "SELECT * FROM TBL_CHARACTER WHERE FLD_CHARNAME='%s'", szName );
  128. CRecordset *pRec = GetDBManager()->CreateRecordset();
  129. if ( pRec->Execute( szQuery ) && pRec->Fetch() )
  130. {
  131. strcpy(lptHumanRcd->szUserID, pRec->Get( "FLD_LOGINID" ) );
  132. ChangeSpaceToNull(lptHumanRcd->szUserID);
  133. strcpy(lptHumanRcd->szCharName, pRec->Get( "FLD_CHARNAME" ) );
  134. ChangeSpaceToNull(lptHumanRcd->szCharName);
  135. lptHumanRcd->btJob = (BYTE)atoi( pRec->Get( "FLD_JOB" ) );
  136. lptHumanRcd->btGender = (BYTE)atoi( pRec->Get( "FLD_GENDER" ) );
  137. lptHumanRcd->szLevel = (BYTE)atoi( pRec->Get( "FLD_LEVEL" ) );
  138. lptHumanRcd->nDirection = (BYTE)atoi( pRec->Get( "FLD_DIRECTION" ) );
  139. lptHumanRcd->nCX = atoi( pRec->Get( "FLD_CX" ) );
  140. lptHumanRcd->nCY = atoi( pRec->Get( "FLD_CY" ) );
  141. lptHumanRcd->btAttackMode = atoi( pRec->Get( "FLD_ATTACKMODE" ) );
  142. lptHumanRcd->nExp = atoi( pRec->Get( "FLD_EXP" ) );
  143. strcpy( lptHumanRcd->szMapName, pRec->Get( "FLD_MAPNAME" ) );
  144. ChangeSpaceToNull( lptHumanRcd->szMapName );
  145. lptHumanRcd->dwGold = atoi( pRec->Get( "FLD_GOLD" ) );
  146. lptHumanRcd->szHair = atoi( pRec->Get( "FLD_HAIR" ) );
  147. memmove( lptHumanRcd->szTakeItem[0], pRec->Get( "FLD_DRESS_ID" ), 12 );
  148. memmove( lptHumanRcd->szTakeItem[1], pRec->Get( "FLD_WEAPON_ID" ), 12 );
  149. memmove( lptHumanRcd->szTakeItem[2], pRec->Get( "FLD_LEFTHAND_ID" ), 12 );
  150. memmove( lptHumanRcd->szTakeItem[3], pRec->Get( "FLD_RIGHTHAND_ID" ), 12 );
  151. memmove( lptHumanRcd->szTakeItem[4], pRec->Get( "FLD_HELMET_ID" ), 12 );
  152. memmove( lptHumanRcd->szTakeItem[5], pRec->Get( "FLD_NECKLACE_ID" ), 12 );
  153. memmove( lptHumanRcd->szTakeItem[6], pRec->Get( "FLD_ARMRINGL_ID" ), 12 );
  154. memmove( lptHumanRcd->szTakeItem[7], pRec->Get( "FLD_ARMRINGR_ID" ), 12 );
  155. memmove( lptHumanRcd->szTakeItem[8], pRec->Get( "FLD_RINGL_ID" ), 12 );
  156. memmove( lptHumanRcd->szTakeItem[9], pRec->Get( "FLD_RINGR_ID" ), 12 );
  157. lptHumanRcd->fIsAdmin = (BYTE)*pRec->Get( "FLD_ISADMIN" );
  158. }
  159. else
  160. {
  161. GetDBManager()->DestroyRecordset( pRec );
  162. return FALSE;
  163. }
  164. GetDBManager()->DestroyRecordset( pRec );
  165. return TRUE;
  166. }
  167. void GetLoadHumanRcd(CServerInfo* pServerInfo, _LPTLOADHUMAN lpLoadHuman, int nRecog)
  168. {
  169. if (!pServerInfo) return;
  170. _TDEFAULTMESSAGE DefMsg;
  171. char szEncodeMsg1[24];
  172. _THUMANRCD tHumanRcd;
  173. CWHList<_LPTUSERITEMRCD> xUserItemRcdList;
  174. CWHList<_LPTHUMANMAGICRCD> xUserMagicRcdList;
  175. CWHList<_LPTGENITEMRCD> xUserGenItemRcdList;
  176. _THORSERCD tHorseRcd;
  177. int nHorse = 0;
  178. char szEncodeMsg2[8096];
  179. if (GetHumanRcd(lpLoadHuman->szCharName, &tHumanRcd, lpLoadHuman)) // Fetch Character Data
  180. {
  181. GetHumanItemRcd(lpLoadHuman->szCharName, &xUserItemRcdList); // Fetch Item Data
  182. GetHumanMagicRcd(lpLoadHuman->szCharName, &xUserMagicRcdList); // Fetch Magic Data
  183. GetHumanGenItemRcd(lpLoadHuman->szCharName, &xUserGenItemRcdList); // Fetch General Item Data
  184. int nCount = xUserItemRcdList.GetCount();
  185. int nMagicCount = xUserMagicRcdList.GetCount();
  186. int nItemCount = xUserGenItemRcdList.GetCount();
  187. if (nCount)
  188. nHorse = GetHorseRcd(lpLoadHuman->szCharName, &tHorseRcd); // Fetch Horse Data
  189. if (nRecog)
  190. fnMakeDefMessageA(&DefMsg, DBR_LOADHUMANRCD, nRecog, MAKEWORD(nCount, nItemCount), nHorse, nMagicCount);
  191. else
  192. fnMakeDefMessageA(&DefMsg, DBR_LOADHUMANRCD2, nRecog, MAKEWORD(nCount, nItemCount), nHorse, nMagicCount);
  193. fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
  194. int nPos = fnEncode6BitBufA((unsigned char *)&tHumanRcd, szEncodeMsg2, sizeof(_THUMANRCD), sizeof(szEncodeMsg2));
  195. if (nItemCount)
  196. {
  197. PLISTNODE pListNode = xUserGenItemRcdList.GetHead();
  198. while (pListNode)
  199. {
  200. _LPTGENITEMRCD lptItemRcd = xUserGenItemRcdList.GetData(pListNode);
  201. if (lptItemRcd)
  202. {
  203. nPos += fnEncode6BitBufA((unsigned char *)lptItemRcd, &szEncodeMsg2[nPos], sizeof(_TGENITEMRCD), sizeof(szEncodeMsg2) - nPos);
  204. pListNode = xUserGenItemRcdList.RemoveNode(pListNode);
  205. delete lptItemRcd;
  206. }
  207. else 
  208. pListNode = xUserGenItemRcdList.GetNext(pListNode);
  209. }
  210. }
  211. if (nMagicCount)
  212. {
  213. PLISTNODE pListNode = xUserMagicRcdList.GetHead();
  214. while (pListNode)
  215. {
  216. _LPTHUMANMAGICRCD lptUserMagicRcd = xUserMagicRcdList.GetData(pListNode);
  217. if (lptUserMagicRcd)
  218. {
  219. nPos += fnEncode6BitBufA((unsigned char *)lptUserMagicRcd, &szEncodeMsg2[nPos], sizeof(_THUMANMAGICRCD), sizeof(szEncodeMsg2) - nPos);
  220. pListNode = xUserMagicRcdList.RemoveNode(pListNode);
  221. delete lptUserMagicRcd;
  222. }
  223. else 
  224. pListNode = xUserMagicRcdList.GetNext(pListNode);
  225. }
  226. }
  227. if (nCount)
  228. {
  229. PLISTNODE pListNode = xUserItemRcdList.GetHead();
  230. while (pListNode)
  231. {
  232. _LPTUSERITEMRCD lptUserItemRcd = xUserItemRcdList.GetData(pListNode);
  233. if (lptUserItemRcd)
  234. {
  235. nPos += fnEncode6BitBufA((unsigned char *)lptUserItemRcd, &szEncodeMsg2[nPos], sizeof(_TUSERITEMRCD), sizeof(szEncodeMsg2) - nPos);
  236. pListNode = xUserItemRcdList.RemoveNode(pListNode);
  237. delete lptUserItemRcd;
  238. }
  239. else 
  240. pListNode = xUserItemRcdList.GetNext(pListNode);
  241. }
  242. if (nHorse)
  243. nPos += fnEncode6BitBufA((unsigned char *)&tHorseRcd, &szEncodeMsg2[nPos], sizeof(_THORSERCD), sizeof(szEncodeMsg2) - nPos);
  244. }
  245. szEncodeMsg2[nPos] = '';
  246. SendSocket(pServerInfo->m_sock, lpLoadHuman->nCertification, szEncodeMsg1, szEncodeMsg2, nPos);
  247. }
  248. else
  249. {
  250. fnMakeDefMessageA(&DefMsg, DBR_FAIL, nRecog, 0, 0, 0);
  251. fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
  252. SendSocket(pServerInfo->m_sock, lpLoadHuman->nCertification, szEncodeMsg1, "Test", 4);
  253. }
  254. }
  255. char *SaveHumanMagicRcd(char *pszUserID, char *pszCharName, char *pszEncodeRcd, int nCount)
  256. {
  257. char szTmp[1024];
  258. // Delete Magic Data
  259. CRecordset *pRec = GetDBManager()->CreateRecordset();
  260. sprintf(szTmp, "DELETE FROM TBL_CHARACTER_MAGIC WHERE FLD_CHARNAME = '%s'", pszCharName);
  261. pRec->Execute(szTmp);
  262. GetDBManager()->DestroyRecordset( pRec );
  263. // Update Magic Data
  264. char *pszEncode = pszEncodeRcd;
  265. _THUMANMAGICRCD tUserMagicRcd;
  266. for (int i = 0; i < nCount; i++)
  267. {
  268. if ( memlen( pszEncode ) >= MAGICRCDBLOCKSIZE )
  269. {
  270. pRec = GetDBManager()->CreateRecordset();
  271. fnDecode6BitBufA( pszEncode, (char *) &tUserMagicRcd, sizeof( _THUMANMAGICRCD ) );
  272. sprintf(szTmp, "INSERT TBL_CHARACTER_MAGIC(FLD_LOGINID, FLD_CHARNAME, FLD_MAGICID, FLD_LEVEL, FLD_USEKEY, FLD_CURRTRAIN) VALUES "
  273. "( '%s', '%s', %d, %d, %d, %d )",
  274. pszUserID, pszCharName, tUserMagicRcd.btMagicID, tUserMagicRcd.btLevel, tUserMagicRcd.btUseKey, tUserMagicRcd.nCurrTrain);
  275. if ( !pRec->Execute( szTmp ) || pRec->GetRowCount() <= 0 )
  276. InsertLogMsg(_T("SaveHumanMagicRcd 盎脚 坷幅"));
  277. GetDBManager()->DestroyRecordset( pRec );
  278. pszEncode += MAGICRCDBLOCKSIZE + 1;
  279. }
  280. }
  281. return pszEncode;
  282. }
  283. void SaveGenItemRcd(char *pszUserID, char *pszCharName, char *pszEncodeRcd, int nCount)
  284. {
  285. char szTmp[1024];
  286. // Delete Magic Data
  287. CRecordset *pRec = GetDBManager()->CreateRecordset();
  288. sprintf(szTmp, "DELETE FROM TBL_CHARACTER_GENITEM WHERE FLD_CHARNAME = '%s'", pszCharName);
  289. pRec->Execute(szTmp);
  290. GetDBManager()->DestroyRecordset( pRec );
  291. // Update General Item Data
  292. sprintf( szTmp, "FLD_CHARNAME='%s'", pszCharName );
  293. CQueryManager query;
  294. char *pszEncode = pszEncodeRcd;
  295. _TGENITEMRCD tItemRcd;
  296. for (int i = 0; i < nCount; i++)
  297. {
  298. while ( memlen( pszEncode ) >= GENITEMRCDBLOCKSIZE )
  299. {
  300. pRec = GetDBManager()->CreateRecordset();
  301. ZeroMemory(&tItemRcd, sizeof(_TGENITEMRCD));
  302. fnDecode6BitBufA( pszEncode, (char *) &tItemRcd, sizeof( _TGENITEMRCD ) );
  303. sprintf(szTmp, "INSERT TBL_CHARACTER_GENITEM (FLD_LOGINID, FLD_CHARNAME, FLD_ITEMINDEX) VALUES "
  304. "( '%s', '%s', '%s' )", pszUserID, pszCharName, tItemRcd.szItem);
  305. if ( !pRec->Execute( szTmp ) || pRec->GetRowCount() <= 0 )
  306. InsertLogMsg(_T("SaveGenItemRcd 盎脚 坷幅"));
  307. GetDBManager()->DestroyRecordset( pRec );
  308. pszEncode += (GENITEMRCDBLOCKSIZE + 1);
  309. }
  310. }
  311. }
  312. BOOL SaveHumanRcd(CServerInfo* pServerInfo, _LPTLOADHUMAN lpLoadHuman, _LPTHUMANRCD lptHumanRcd, int nRecog)
  313. {
  314. char szSQL[1024];
  315. char szTakeItem[10][13];
  316. ZeroMemory(szTakeItem, sizeof(szTakeItem));
  317. for (int i = 0; i < 10; i++)
  318. memmove(szTakeItem[i], lptHumanRcd->szTakeItem[i], 12);
  319. sprintf(szSQL, "UPDATE TBL_CHARACTER SET FLD_JOB=%d, FLD_GENDER=%d, FLD_LEVEL=%d, FLD_DIRECTION=%d, FLD_CX=%d, FLD_CY=%d, "
  320. "FLD_MAPNAME='%s', FLD_GOLD=%d, FLD_HAIR=%d, FLD_DRESS_ID='%s', FLD_WEAPON_ID='%s', "
  321. "FLD_LEFTHAND_ID='%s', FLD_RIGHTHAND_ID='%s', FLD_HELMET_ID='%s', FLD_NECKLACE_ID='%s', "
  322. "FLD_ARMRINGL_ID='%s', FLD_ARMRINGR_ID='%s', FLD_RINGL_ID='%s', FLD_RINGR_ID='%s', FLD_EXP=%d "
  323. "WHERE FLD_CHARNAME='%s'",
  324. lptHumanRcd->btJob, lptHumanRcd->btGender, lptHumanRcd->szLevel, lptHumanRcd->nDirection,
  325. lptHumanRcd->nCX, lptHumanRcd->nCY, lptHumanRcd->szMapName, lptHumanRcd->dwGold,
  326. lptHumanRcd->szHair, szTakeItem[0], szTakeItem[1], szTakeItem[2], szTakeItem[3], szTakeItem[4], 
  327. szTakeItem[5], szTakeItem[6], szTakeItem[7], szTakeItem[8], szTakeItem[9], lptHumanRcd->nExp,
  328. lpLoadHuman->szCharName);
  329. CRecordset *pRec = GetDBManager()->CreateRecordset();
  330. if (!pRec->Execute( szSQL ) || pRec->GetRowCount() <= 0 )
  331. {
  332. InsertLogMsg(_T("SaveHumanRcd 盎脚 坷幅"));
  333. GetDBManager()->DestroyRecordset( pRec );
  334. return FALSE;
  335. }
  336. GetDBManager()->DestroyRecordset( pRec );
  337. return TRUE;
  338. }
  339. BOOL MakeNewItem(CServerInfo* pServerInfo, _LPTLOADHUMAN lpHumanLoad, _LPTMAKEITEMRCD lpMakeItemRcd, int nRecog)
  340. {
  341. static char  g_szYesterDay[24];
  342. static UINT  g_nItemIndexCnt = 0;
  343. CRecordset *pRec;
  344. char szQuery[1024];
  345. char szDate[24];
  346. GetDate( szDate );
  347. // if (strcmp(szDate, g_szYesterDay) != 0)
  348. // {
  349. sprintf( szQuery, 
  350. "SELECT * FROM TBL_CHARACTER_ITEM WHERE FLD_STDTYPE = '%c' AND "
  351. "FLD_MAKEDATE = '%s' ORDER BY FLD_MAKEINDEX DESC",
  352. lpMakeItemRcd->szStdType, szDate );
  353. pRec = GetDBManager()->CreateRecordset();
  354. if ( pRec->Execute( szQuery ) && pRec->Fetch() )
  355. {
  356. g_nItemIndexCnt = atoi( pRec->Get( "FLD_MAKEINDEX" ) ) + 1;
  357. }
  358. GetDBManager()->DestroyRecordset( pRec );
  359. strcpy( g_szYesterDay, szDate );
  360. // }
  361. // else
  362. // g_nItemIndexCnt++;
  363. char szUserID[32];
  364. char szCharName[32];
  365. if (lpHumanLoad)
  366. {
  367. strcpy(szUserID, lpHumanLoad->szUserID);
  368. strcpy(szCharName, lpHumanLoad->szCharName);
  369. }
  370. else
  371. {
  372. strcpy(szUserID, "0");
  373. strcpy(szCharName, "WEMADE");
  374. }
  375. sprintf(szQuery, "INSERT TBL_CHARACTER_ITEM (FLD_LOGINID, FLD_CHARNAME, FLD_STDTYPE, FLD_MAKEDATE, FLD_MAKEINDEX, "
  376. "FLD_STDINDEX, FLD_DURA, FLD_DURAMAX, FLD_VALUE1, FLD_VALUE2, FLD_VALUE3, FLD_VALUE4, FLD_VALUE5, "
  377. "FLD_VALUE6, FLD_VALUE7, FLD_VALUE8, FLD_VALUE9, FLD_VALUE10, FLD_VALUE11, FLD_VALUE12, FLD_VALUE13, "
  378. "FLD_VALUE14, FLD_LASTOWNER, FLD_LASTACTION, FLD_PREFIXNAME) "
  379. "VALUES( '%s', '%s', '%c', '%s', '%05d', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '%s', %d, '%s' )", 
  380. szUserID, szCharName, lpMakeItemRcd->szStdType, g_szYesterDay, g_nItemIndexCnt,
  381. lpMakeItemRcd->nStdIndex, lpMakeItemRcd->nDura, lpMakeItemRcd->nDuraMax, 
  382. lpMakeItemRcd->btValue[0], lpMakeItemRcd->btValue[1], lpMakeItemRcd->btValue[2], lpMakeItemRcd->btValue[3], 
  383. lpMakeItemRcd->btValue[5], lpMakeItemRcd->btValue[5], lpMakeItemRcd->btValue[6], lpMakeItemRcd->btValue[7], 
  384. lpMakeItemRcd->btValue[8], lpMakeItemRcd->btValue[9], lpMakeItemRcd->btValue[10], lpMakeItemRcd->btValue[11], 
  385. lpMakeItemRcd->btValue[12], lpMakeItemRcd->btValue[13], szCharName, 1, "");
  386. pRec = GetDBManager()->CreateRecordset();
  387. if ( !pRec->Execute( szQuery ) || pRec->GetRowCount() <= 0 )
  388. {
  389. GetDBManager()->DestroyRecordset( pRec );
  390. return FALSE;
  391. }
  392. GetDBManager()->DestroyRecordset( pRec );
  393. if ( pServerInfo )
  394. {
  395. // Send Packet to Game Server
  396. _TDEFAULTMESSAGE DefMsg;
  397. _TUSERITEMRCD UserItemRcd;
  398. char szEncodeMsg1[24];
  399. char szEncodeMsg2[128];
  400. int nPos = 0;
  401. if (lpHumanLoad)
  402. fnMakeDefMessageA(&DefMsg, DBR_MAKEITEMRCD, nRecog, 0, 0, 0);
  403. else
  404. fnMakeDefMessageA(&DefMsg, DBR_MAKEITEMRCD2, nRecog, 0, 0, 0);
  405. fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
  406. UserItemRcd.szMakeIndex[0] = lpMakeItemRcd->szStdType;
  407. memcpy( &UserItemRcd.szMakeIndex[1], g_szYesterDay, 6 );
  408. sprintf( &UserItemRcd.szMakeIndex[7], "%d", g_nItemIndexCnt );
  409. memcpy(&UserItemRcd.nStdIndex, &lpMakeItemRcd->nStdIndex, sizeof(_TUSERITEMRCD) - sizeof(UserItemRcd.szMakeIndex));
  410. nPos = fnEncode6BitBufA((unsigned char *)&UserItemRcd, szEncodeMsg2, sizeof(_TUSERITEMRCD), sizeof(szEncodeMsg2));
  411. SendSocket(pServerInfo->m_sock, 2, szEncodeMsg1, szEncodeMsg2, nPos);
  412. }
  413. return TRUE;
  414. }
  415. UINT WINAPI ProcessDBMsg(LPVOID lpParameter)
  416. {
  417. while (TRUE)
  418. {
  419. if (g_fTerminated) return 0L;
  420. _LPTSENDBUFF pSendBuff = (_LPTSENDBUFF)g_DBMsgQ.PopQ();
  421. if (pSendBuff)
  422. {
  423. switch (pSendBuff->DefMsg.wIdent)
  424. {
  425. case DB_LOADHUMANRCD:
  426. GetLoadHumanRcd(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, pSendBuff->DefMsg.nRecog);
  427. break;
  428. case DB_SAVEHUMANRCD:
  429. {
  430. SaveHumanRcd(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, (_LPTHUMANRCD)pSendBuff->lpbtAddData, pSendBuff->DefMsg.nRecog);
  431. char *pszData = SaveHumanMagicRcd(pSendBuff->HumanLoad.szUserID, pSendBuff->HumanLoad.szCharName, (char *)pSendBuff->lpbtAddData2, pSendBuff->DefMsg.wParam);
  432. SaveGenItemRcd(pSendBuff->HumanLoad.szUserID, pSendBuff->HumanLoad.szCharName, pszData, pSendBuff->DefMsg.wTag);
  433. break;
  434. }
  435. case DB_MAKEITEMRCD:
  436. MakeNewItem(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, (_LPTMAKEITEMRCD)pSendBuff->lpbtAddData, pSendBuff->DefMsg.nRecog);
  437. break;
  438. case DB_MAKEITEMRCD2:
  439. {
  440. _LPTUSERITEMRCD lptUserItemRcd = (_LPTUSERITEMRCD)pSendBuff->lpbtAddData;
  441. _TMAKEITEMRCD tMakeItemRcd;
  442. tMakeItemRcd.szStdType = lptUserItemRcd->szMakeIndex[0];
  443. tMakeItemRcd.nStdIndex = lptUserItemRcd->nStdIndex;
  444. tMakeItemRcd.nDura = lptUserItemRcd->nDura;
  445. tMakeItemRcd.nDuraMax = lptUserItemRcd->nDuraMax;
  446. memcpy(tMakeItemRcd.btValue, lptUserItemRcd->btValue, sizeof(lptUserItemRcd->btValue));
  447. MakeNewItem(pSendBuff->pServerInfo, NULL, &tMakeItemRcd, pSendBuff->DefMsg.nRecog);
  448. break;
  449. }
  450. } // switch
  451. delete pSendBuff;
  452. } // if (pSendBuff)
  453. SleepEx(1, TRUE);
  454. }
  455. return 0L;
  456. }