From 44f466ac72d34d3188822997bc706df6ecea4ca6 Mon Sep 17 00:00:00 2001 From: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> Date: Sun, 24 Sep 2023 00:55:54 -0700 Subject: [PATCH] fix: deleting last character still shows the character (#1123) * Fix deleting last character Fix an issue where deleting your last character caused the character to still show up on the character selection screen. Tested that deleting my final character results in an empty character selection scene. * Update UserManager.cpp --- dGame/UserManager.cpp | 54 +++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/dGame/UserManager.cpp b/dGame/UserManager.cpp index e0951405..4bbf8bd4 100644 --- a/dGame/UserManager.cpp +++ b/dGame/UserManager.cpp @@ -204,40 +204,38 @@ void UserManager::RequestCharacterList(const SystemAddress& sysAddr) { stmt->setUInt(1, u->GetAccountID()); sql::ResultSet* res = stmt->executeQuery(); - if (res->rowsCount() > 0) { - std::vector& chars = u->GetCharacters(); - - for (size_t i = 0; i < chars.size(); ++i) { - if (chars[i]->GetEntity() == nullptr) // We don't have entity data to save - { - delete chars[i]; - - continue; - } - - auto* skillComponent = chars[i]->GetEntity()->GetComponent(); - - if (skillComponent != nullptr) { - skillComponent->Reset(); - } - - Game::entityManager->DestroyEntity(chars[i]->GetEntity()); - - chars[i]->SaveXMLToDatabase(); - - chars[i]->GetEntity()->SetCharacter(nullptr); + std::vector& chars = u->GetCharacters(); + for (size_t i = 0; i < chars.size(); ++i) { + if (chars[i]->GetEntity() == nullptr) // We don't have entity data to save + { delete chars[i]; + + continue; } - chars.clear(); + auto* skillComponent = chars[i]->GetEntity()->GetComponent(); - while (res->next()) { - LWOOBJID objID = res->getUInt64(1); - Character* character = new Character(uint32_t(objID), u); - character->SetIsNewLogin(); - chars.push_back(character); + if (skillComponent != nullptr) { + skillComponent->Reset(); } + + Game::entityManager->DestroyEntity(chars[i]->GetEntity()); + + chars[i]->SaveXMLToDatabase(); + + chars[i]->GetEntity()->SetCharacter(nullptr); + + delete chars[i]; + } + + chars.clear(); + + while (res->next()) { + LWOOBJID objID = res->getUInt64(1); + Character* character = new Character(uint32_t(objID), u); + character->SetIsNewLogin(); + chars.push_back(character); } delete res;