Guest User

Untitled

a guest
Nov 19th, 2014
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. //Replace
  2.  
  3. void ProtocolLogin::getCharacterList(const std::string& accountName, const std::string& password)
  4. {
  5. Account account;
  6. if (!IOLoginData::loginserverAuthentication(accountName, password, account)) {
  7. disconnectClient("Account name or password is not correct.");
  8. return;
  9. }
  10.  
  11. OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
  12. if (output) {
  13. //Update premium days
  14. Game::updatePremium(account);
  15.  
  16. //Add MOTD
  17. output->AddByte(0x14);
  18.  
  19. std::ostringstream ss;
  20. ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD);
  21. output->AddString(ss.str());
  22.  
  23. //Add char list
  24. output->AddByte(0x64);
  25.  
  26. output->AddByte(1); // number of worlds
  27.  
  28. output->AddByte(0); // world id
  29. output->AddString(g_config.getString(ConfigManager::SERVER_NAME));
  30. output->AddString(g_config.getString(ConfigManager::IP));
  31. output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
  32. output->AddByte(0);
  33.  
  34. output->AddByte((uint8_t)account.charList.size());
  35. for (const std::string& characterName : account.charList) {
  36. output->AddByte(0);
  37. output->AddString(characterName);
  38. }
  39.  
  40. //Add premium days
  41. if (g_config.getBoolean(ConfigManager::FREE_PREMIUM)) {
  42. output->add<uint16_t>(0xFFFF); //client displays free premium
  43. } else {
  44. output->add<uint16_t>(account.premiumDays);
  45. }
  46.  
  47. OutputMessagePool::getInstance()->send(output);
  48. }
  49.  
  50. getConnection()->closeConnection();
  51. }
  52.  
  53. //With
  54.  
  55. void ProtocolLogin::getCharacterList(const std::string& accountName, const std::string& password)
  56. {
  57.  
  58. bool cast_login = false;
  59. if ((accountName.empty() && password.empty()) || (accountName.empty() && !password.empty()))
  60. {
  61. cast_login = true;
  62. }
  63. if (!cast_login && accountName.empty()) {
  64. disconnectClient("Invalid account name.");
  65. return;
  66. }
  67.  
  68. Account account;
  69. if (!cast_login && !IOLoginData::loginserverAuthentication(accountName, password, account)) {
  70. disconnectClient("Account name or password is not correct.");
  71. return;
  72. }
  73.  
  74. OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
  75. if (output) {
  76. //Update premium days
  77. if(!cast_login)
  78. Game::updatePremium(account);
  79.  
  80. //Add MOTD
  81. output->AddByte(0x14);
  82.  
  83. std::ostringstream ss;
  84. ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD);
  85. output->AddString(ss.str());
  86.  
  87. //Add char list
  88. output->AddByte(0x64);
  89.  
  90. if(cast_login) {
  91. std::vector<std::pair<uint32_t, std::string> > casts;
  92. cast_login = false;
  93.  
  94. g_game.lockPlayers();
  95. for(const auto& it : g_game.getPlayers()) {
  96. const Player* player = it.second;
  97. if(player->cast.isCasting && (player->cast.password == "" || player->cast.password == password)) {
  98. casts.push_back(std::make_pair(player->getCastViewerCount(), player->getName()));
  99. cast_login = true;
  100. }
  101. }
  102. g_game.unlockPlayers();
  103.  
  104. std::sort(casts.begin(), casts.end(),
  105. [](const std::pair<uint32_t, std::string>& lhs, const std::pair<uint32_t, std::string>& rhs) {
  106. return lhs.first > rhs.first;
  107. }
  108. );
  109.  
  110. if(cast_login) {
  111. output->AddByte(casts.size()); // number of worlds
  112. int i = 0;
  113. for(auto it : casts)
  114. {
  115. int32_t count = it.first;
  116. output->AddByte(i); // world id
  117. std::ostringstream os;
  118. os << count;
  119. if (count == 1)
  120. os << " viewer";
  121. else
  122. os << " viewers";
  123.  
  124. output->AddString(os.str());
  125. output->AddString(g_config.getString(ConfigManager::IP));
  126. output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
  127. output->AddByte(0);
  128. i++;
  129. }
  130.  
  131.  
  132. output->AddByte((uint8_t)casts.size());
  133. i = 0;
  134. for(auto it : casts)
  135. {
  136. output->AddByte(i);
  137. output->AddString(it.second);
  138. i++;
  139. }
  140.  
  141. }
  142. }
  143.  
  144. if(!cast_login) {
  145. output->AddByte(1); // number of worlds
  146. output->AddByte(0); // world id
  147. output->AddString(g_config.getString(ConfigManager::SERVER_NAME));
  148. output->AddString(g_config.getString(ConfigManager::IP));
  149. output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
  150. output->AddByte(0);
  151.  
  152. output->AddByte((uint8_t)account.charList.size());
  153. for (const std::string& characterName : account.charList) {
  154. output->AddByte(0);
  155. output->AddString(characterName);
  156. }
  157. }
  158.  
  159. //Add premium days
  160. if (g_config.getBoolean(ConfigManager::FREE_PREMIUM)) {
  161. output->add<uint16_t>(0xFFFF); //client displays free premium
  162. } else {
  163. output->add<uint16_t>(account.premiumDays);
  164. }
  165.  
  166. OutputMessagePool::getInstance()->send(output);
  167. }
  168.  
  169. getConnection()->closeConnection();
  170. }
  171.  
  172. //After
  173.  
  174. dispatchDisconnectClient(ss.str());
  175.  
  176. //Delete
  177.  
  178. return;
  179. }
  180.  
  181. if (accountName.empty()) {
  182. dispatchDisconnectClient("Invalid account name.");
Advertisement
Add Comment
Please, Sign In to add comment