Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. /*
  2. * PLAYER CREATE
  3. */
  4. void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerCreatePacket* packet)
  5. {
  6. char queryStr[QUERY_MAX_LEN];
  7. int queryLen;
  8. int player_id;
  9.  
  10. // ÇÑ °èÁ¤¿¡ XÃÊ ³»·Î ij¸¯ÅÍ »ý¼ºÀ» ÇÒ ¼ö ¾ø´Ù.
  11. time_by_id_map_t::iterator it = s_createTimeByAccountID.find(packet->account_id);
  12.  
  13. if (it != s_createTimeByAccountID.end())
  14. {
  15. time_t curtime = time(0);
  16.  
  17. if (curtime - it->second < 30)
  18. {
  19. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  20. return;
  21. }
  22. }
  23.  
  24. queryLen = snprintf(queryStr, sizeof(queryStr),
  25. "SELECT pid%u FROM player_index%s WHERE id=%d", packet->account_index + 1, GetTablePostfix(), packet->account_id);
  26.  
  27. std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr));
  28.  
  29. if (pMsg0->Get()->uiNumRows != 0)
  30. {
  31. if (!pMsg0->Get()->pSQLResult)
  32. {
  33. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  34. return;
  35. }
  36.  
  37. MYSQL_ROW row = mysql_fetch_row(pMsg0->Get()->pSQLResult);
  38.  
  39. DWORD dwPID = 0; str_to_number(dwPID, row[0]);
  40. if (row[0] && dwPID > 0)
  41. {
  42. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
  43. sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
  44. return;
  45. }
  46. }
  47. else
  48. {
  49. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  50. return;
  51. }
  52.  
  53.  
  54. snprintf(queryStr, sizeof(queryStr),
  55. "SELECT COUNT(*) as count FROM player%s WHERE name='%s'", GetTablePostfix(), packet->player_table.name);
  56.  
  57. std::unique_ptr<SQLMsg> pMsg1(CDBManager::instance().DirectQuery(queryStr));
  58.  
  59. if (pMsg1->Get()->uiNumRows)
  60. {
  61. if (!pMsg1->Get()->pSQLResult)
  62. {
  63. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  64. return;
  65. }
  66.  
  67. MYSQL_ROW row = mysql_fetch_row(pMsg1->Get()->pSQLResult);
  68.  
  69. if (*row[0] != '0')
  70. {
  71. sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
  72. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
  73. return;
  74. }
  75. }
  76. else
  77. {
  78. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  79. return;
  80. }
  81.  
  82. queryLen = snprintf(queryStr, sizeof(queryStr),
  83. "INSERT INTO player%s "
  84. "(id, account_id, name, level, st, ht, dx, iq, "
  85. "job, voice, dir, x, y, z, "
  86. "hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, gold, playtime, "
  87. "skill_level, quickslot) "
  88. "VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "
  89. "%d, %d, %d, %d, %d, %d, %ld, "
  90. "%ld, %d, %d, %d, %d, %d, %d, 0, "
  91. "%lld, "
  92. "0, ",
  93. GetTablePostfix(),
  94. packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq,
  95. packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
  96. packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold);
  97.  
  98. sys_log(0, "PlayerCreate accountid %d name %s level %d gold %lld, st %d ht %d job %d",
  99. packet->account_id,
  100. packet->player_table.name,
  101. packet->player_table.level,
  102. packet->player_table.gold,
  103. packet->player_table.st,
  104. packet->player_table.ht,
  105. packet->player_table.job);
  106.  
  107. static char text[4096 + 1];
  108.  
  109. CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
  110. queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
  111. if (g_test_server)
  112. sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
  113.  
  114. CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
  115. queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
  116.  
  117. std::unique_ptr<SQLMsg> pMsg2(CDBManager::instance().DirectQuery(queryStr));
  118. if (g_test_server)
  119. sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
  120.  
  121. if (pMsg2->Get()->uiAffectedRows <= 0)
  122. {
  123. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
  124. sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
  125. return;
  126. }
  127.  
  128. player_id = pMsg2->Get()->uiInsertID;
  129.  
  130. snprintf(queryStr, sizeof(queryStr), "UPDATE player_index%s SET pid%d=%d WHERE id=%d",
  131. GetTablePostfix(), packet->account_index + 1, player_id, packet->account_id);
  132. std::unique_ptr<SQLMsg> pMsg3(CDBManager::instance().DirectQuery(queryStr));
  133.  
  134. if (pMsg3->Get()->uiAffectedRows <= 0)
  135. {
  136. sys_err("QUERY_ERROR: %s", queryStr);
  137.  
  138. snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
  139. CDBManager::instance().DirectQuery(queryStr);
  140.  
  141. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
  142. return;
  143. }
  144.  
  145. TPacketDGCreateSuccess pack;
  146. memset(&pack, 0, sizeof(pack));
  147.  
  148. pack.bAccountCharacterIndex = packet->account_index;
  149.  
  150. pack.player.dwID = player_id;
  151. strlcpy(pack.player.szName, packet->player_table.name, sizeof(pack.player.szName));
  152. pack.player.byJob = packet->player_table.job;
  153. pack.player.byLevel = 1;
  154. pack.player.dwPlayMinutes = 0;
  155. pack.player.byST = packet->player_table.st;
  156. pack.player.byHT = packet->player_table.ht;
  157. pack.player.byDX = packet->player_table.dx;
  158. pack.player.byIQ = packet->player_table.iq;
  159. pack.player.wMainPart = packet->player_table.part_base;
  160. pack.player.x = packet->player_table.x;
  161. pack.player.y = packet->player_table.y;
  162.  
  163. peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
  164. peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
  165.  
  166. sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
  167.  
  168. s_createTimeByAccountID[packet->account_id] = time(0);
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement