Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Replace
- void ProtocolLogin::getCharacterList(const std::string& accountName, const std::string& password)
- {
- Account account;
- if (!IOLoginData::loginserverAuthentication(accountName, password, account)) {
- disconnectClient("Account name or password is not correct.");
- return;
- }
- OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
- if (output) {
- //Update premium days
- Game::updatePremium(account);
- //Add MOTD
- output->AddByte(0x14);
- std::ostringstream ss;
- ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD);
- output->AddString(ss.str());
- //Add char list
- output->AddByte(0x64);
- output->AddByte(1); // number of worlds
- output->AddByte(0); // world id
- output->AddString(g_config.getString(ConfigManager::SERVER_NAME));
- output->AddString(g_config.getString(ConfigManager::IP));
- output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
- output->AddByte(0);
- output->AddByte((uint8_t)account.charList.size());
- for (const std::string& characterName : account.charList) {
- output->AddByte(0);
- output->AddString(characterName);
- }
- //Add premium days
- if (g_config.getBoolean(ConfigManager::FREE_PREMIUM)) {
- output->add<uint16_t>(0xFFFF); //client displays free premium
- } else {
- output->add<uint16_t>(account.premiumDays);
- }
- OutputMessagePool::getInstance()->send(output);
- }
- getConnection()->closeConnection();
- }
- //With
- void ProtocolLogin::getCharacterList(const std::string& accountName, const std::string& password)
- {
- bool cast_login = false;
- if ((accountName.empty() && password.empty()) || (accountName.empty() && !password.empty()))
- {
- cast_login = true;
- }
- if (!cast_login && accountName.empty()) {
- disconnectClient("Invalid account name.");
- return;
- }
- Account account;
- if (!cast_login && !IOLoginData::loginserverAuthentication(accountName, password, account)) {
- disconnectClient("Account name or password is not correct.");
- return;
- }
- OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
- if (output) {
- //Update premium days
- if(!cast_login)
- Game::updatePremium(account);
- //Add MOTD
- output->AddByte(0x14);
- std::ostringstream ss;
- ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD);
- output->AddString(ss.str());
- //Add char list
- output->AddByte(0x64);
- if(cast_login) {
- std::vector<std::pair<uint32_t, std::string> > casts;
- cast_login = false;
- g_game.lockPlayers();
- for(const auto& it : g_game.getPlayers()) {
- const Player* player = it.second;
- if(player->cast.isCasting && (player->cast.password == "" || player->cast.password == password)) {
- casts.push_back(std::make_pair(player->getCastViewerCount(), player->getName()));
- cast_login = true;
- }
- }
- g_game.unlockPlayers();
- std::sort(casts.begin(), casts.end(),
- [](const std::pair<uint32_t, std::string>& lhs, const std::pair<uint32_t, std::string>& rhs) {
- return lhs.first > rhs.first;
- }
- );
- if(cast_login) {
- output->AddByte(casts.size()); // number of worlds
- int i = 0;
- for(auto it : casts)
- {
- int32_t count = it.first;
- output->AddByte(i); // world id
- std::ostringstream os;
- os << count;
- if (count == 1)
- os << " viewer";
- else
- os << " viewers";
- output->AddString(os.str());
- output->AddString(g_config.getString(ConfigManager::IP));
- output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
- output->AddByte(0);
- i++;
- }
- output->AddByte((uint8_t)casts.size());
- i = 0;
- for(auto it : casts)
- {
- output->AddByte(i);
- output->AddString(it.second);
- i++;
- }
- }
- }
- if(!cast_login) {
- output->AddByte(1); // number of worlds
- output->AddByte(0); // world id
- output->AddString(g_config.getString(ConfigManager::SERVER_NAME));
- output->AddString(g_config.getString(ConfigManager::IP));
- output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
- output->AddByte(0);
- output->AddByte((uint8_t)account.charList.size());
- for (const std::string& characterName : account.charList) {
- output->AddByte(0);
- output->AddString(characterName);
- }
- }
- //Add premium days
- if (g_config.getBoolean(ConfigManager::FREE_PREMIUM)) {
- output->add<uint16_t>(0xFFFF); //client displays free premium
- } else {
- output->add<uint16_t>(account.premiumDays);
- }
- OutputMessagePool::getInstance()->send(output);
- }
- getConnection()->closeConnection();
- }
- //After
- dispatchDisconnectClient(ss.str());
- //Delete
- return;
- }
- if (accountName.empty()) {
- dispatchDisconnectClient("Invalid account name.");
Advertisement
Add Comment
Please, Sign In to add comment