diff options
Diffstat (limited to 'src/account-server/accounthandler.cpp')
-rw-r--r-- | src/account-server/accounthandler.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/src/account-server/accounthandler.cpp b/src/account-server/accounthandler.cpp index 9cb32af1..6c1e10c8 100644 --- a/src/account-server/accounthandler.cpp +++ b/src/account-server/accounthandler.cpp @@ -281,17 +281,17 @@ void AccountHandler::computerDisconnected(NetComputer *comp) delete client; // ~AccountClient unsets the account } -static void sendCharacterData(MessageOut &charInfo, const CharacterData *ch) +static void sendCharacterData(MessageOut &charInfo, const CharacterData &ch) { - charInfo.writeInt8(ch->getCharacterSlot()); - charInfo.writeString(ch->getName()); - charInfo.writeInt8(ch->getGender()); - charInfo.writeInt8(ch->getHairStyle()); - charInfo.writeInt8(ch->getHairColor()); - charInfo.writeInt16(ch->getAttributePoints()); - charInfo.writeInt16(ch->getCorrectionPoints()); - - auto &possessions = ch->getPossessions(); + charInfo.writeInt8(ch.getCharacterSlot()); + charInfo.writeString(ch.getName()); + charInfo.writeInt8(ch.getGender()); + charInfo.writeInt8(ch.getHairStyle()); + charInfo.writeInt8(ch.getHairColor()); + charInfo.writeInt16(ch.getAttributePoints()); + charInfo.writeInt16(ch.getCorrectionPoints()); + + auto &possessions = ch.getPossessions(); auto &equipData = possessions.getEquipment(); auto &inventoryData = possessions.getInventory(); charInfo.writeInt8(equipData.size()); @@ -303,8 +303,8 @@ static void sendCharacterData(MessageOut &charInfo, const CharacterData *ch) charInfo.writeInt16(it->second.itemId); } - charInfo.writeInt8(ch->getAttributes().size()); - for (auto &it : ch->getAttributes()) + charInfo.writeInt8(ch.getAttributes().size()); + for (auto &it : ch.getAttributes()) { // {id, base value in 256ths, modified value in 256ths }* charInfo.writeInt32(it.first); @@ -318,7 +318,7 @@ static void sendFullCharacterData(AccountClient *client, { MessageOut msg(APMSG_CHAR_INFO); for (auto &charIt : chars) - sendCharacterData(msg, charIt.second); + sendCharacterData(msg, *charIt.second); client->send(msg); } @@ -501,7 +501,7 @@ void AccountHandler::handleLoginMessage(AccountClient &client, MessageIn &msg) sendFullCharacterData(&client, chars); } else { for (auto &charIt : chars) - sendCharacterData(reply, charIt.second); + sendCharacterData(reply, *charIt.second); client.send(reply); } @@ -853,7 +853,7 @@ void AccountHandler::handleCharacterCreateMessage(AccountClient &client, } else { - auto newCharacter = new CharacterData(name); + auto newCharacter = std::make_unique<CharacterData>(name); // Set the initial attributes provided by the client for (unsigned i = 0; i < mModifiableAttributes.size(); ++i) @@ -873,7 +873,11 @@ void AccountHandler::handleCharacterCreateMessage(AccountClient &client, Point startingPos(Configuration::getValue("char_startX", 1024), Configuration::getValue("char_startY", 1024)); newCharacter->setPosition(startingPos); - acc->addCharacter(newCharacter); + + reply.writeInt8(ERRMSG_OK); + sendCharacterData(reply, *newCharacter); + + acc->addCharacter(std::move(newCharacter)); LOG_INFO("Character " << name << " was created for " << acc->getName() << "'s account."); @@ -882,15 +886,12 @@ void AccountHandler::handleCharacterCreateMessage(AccountClient &client, // log transaction Transaction trans; - trans.mCharacterId = newCharacter->getDatabaseID(); + trans.mCharacterId = acc->getCharacter(slot)->getDatabaseID(); trans.mAction = TRANS_CHAR_CREATE; trans.mMessage = acc->getName() + " created character "; trans.mMessage.append("called " + name); storage->addTransaction(trans); - reply.writeInt8(ERRMSG_OK); - - sendCharacterData(reply, newCharacter); client.send(reply); return; } @@ -1116,7 +1117,7 @@ void AccountHandler::handleStellarLogin(const std::string &token, const std::str addServerInfo(reply); for (auto &charIt : acc->getCharacters()) - sendCharacterData(reply, charIt.second); + sendCharacterData(reply, *charIt.second); client->send(reply); |