fix(Core/World): edge case when last Char on realm was deleted (#20864)
This commit is contained in:
@@ -2884,27 +2884,27 @@ void World::UpdateRealmCharCount(uint32 accountId)
|
|||||||
{
|
{
|
||||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
|
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
|
||||||
stmt->SetData(0, accountId);
|
stmt->SetData(0, accountId);
|
||||||
_queryProcessor.AddCallback(CharacterDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&World::_UpdateRealmCharCount, this, std::placeholders::_1)));
|
_queryProcessor.AddCallback(CharacterDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&World::_UpdateRealmCharCount, this, std::placeholders::_1,accountId)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
|
void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount,uint32 accountId)
|
||||||
{
|
{
|
||||||
|
uint8 charCount{0};
|
||||||
if (resultCharCount)
|
if (resultCharCount)
|
||||||
{
|
{
|
||||||
Field* fields = resultCharCount->Fetch();
|
Field* fields = resultCharCount->Fetch();
|
||||||
uint32 accountId = fields[0].Get<uint32>();
|
charCount = uint8(fields[1].Get<uint64>());
|
||||||
uint8 charCount = uint8(fields[1].Get<uint64>());
|
|
||||||
|
|
||||||
LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
|
|
||||||
|
|
||||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS);
|
|
||||||
stmt->SetData(0, charCount);
|
|
||||||
stmt->SetData(1, accountId);
|
|
||||||
stmt->SetData(2, realm.Id.Realm);
|
|
||||||
trans->Append(stmt);
|
|
||||||
|
|
||||||
LoginDatabase.CommitTransaction(trans);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
|
||||||
|
|
||||||
|
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS);
|
||||||
|
stmt->SetData(0, charCount);
|
||||||
|
stmt->SetData(1, accountId);
|
||||||
|
stmt->SetData(2, realm.Id.Realm);
|
||||||
|
trans->Append(stmt);
|
||||||
|
|
||||||
|
LoginDatabase.CommitTransaction(trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::InitWeeklyQuestResetTime()
|
void World::InitWeeklyQuestResetTime()
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void _UpdateGameTime();
|
void _UpdateGameTime();
|
||||||
// callback for UpdateRealmCharacters
|
// callback for UpdateRealmCharacters
|
||||||
void _UpdateRealmCharCount(PreparedQueryResult resultCharCount);
|
void _UpdateRealmCharCount(PreparedQueryResult resultCharCount,uint32 accountId);
|
||||||
|
|
||||||
void InitDailyQuestResetTime();
|
void InitDailyQuestResetTime();
|
||||||
void InitWeeklyQuestResetTime();
|
void InitWeeklyQuestResetTime();
|
||||||
|
|||||||
Reference in New Issue
Block a user