mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Core/Player: Wait for correct transaction on character creation
This commit is contained in:
@@ -20170,6 +20170,17 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
|
||||
/*********************************************************/
|
||||
|
||||
void Player::SaveToDB(bool create /*=false*/)
|
||||
{
|
||||
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
LoginDatabaseTransaction loginTransaction = LoginDatabase.BeginTransaction();
|
||||
|
||||
SaveToDB(loginTransaction, trans, create);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
LoginDatabase.CommitTransaction(loginTransaction);
|
||||
}
|
||||
|
||||
void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDatabaseTransaction trans, bool create /* = false */)
|
||||
{
|
||||
// delay auto save at any saves (manual, in code, or autosave)
|
||||
m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
|
||||
@@ -20190,7 +20201,6 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
if (!create)
|
||||
sScriptMgr->OnPlayerSave(this);
|
||||
|
||||
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
CharacterDatabasePreparedStatement* stmt = nullptr;
|
||||
uint8 index = 0;
|
||||
|
||||
@@ -20540,10 +20550,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
if (m_session->isLogingOut() || !sWorld->getBoolConfig(CONFIG_STATS_SAVE_ONLY_ON_LOGOUT))
|
||||
_SaveStats(trans);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
// TODO: Move this out
|
||||
LoginDatabaseTransaction loginTransaction = LoginDatabase.BeginTransaction();
|
||||
GetSession()->GetCollectionMgr()->SaveAccountToys(loginTransaction);
|
||||
GetSession()->GetBattlePetMgr()->SaveToDB(loginTransaction);
|
||||
GetSession()->GetCollectionMgr()->SaveAccountHeirlooms(loginTransaction);
|
||||
@@ -20566,8 +20573,6 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
loginStmt->setUInt32(6, time(nullptr));
|
||||
loginTransaction->Append(loginStmt);
|
||||
|
||||
LoginDatabase.CommitTransaction(loginTransaction);
|
||||
|
||||
// save pet (hunter pet level and experience and all type pets health/mana).
|
||||
if (Pet* pet = GetPet())
|
||||
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
|
||||
|
||||
@@ -1468,6 +1468,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
/*********************************************************/
|
||||
|
||||
void SaveToDB(bool create = false);
|
||||
void SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDatabaseTransaction trans, bool create = false);
|
||||
void SaveInventoryAndGoldToDB(CharacterDatabaseTransaction& trans); // fast save function for item/money cheating preventing
|
||||
void SaveGoldToDB(CharacterDatabaseTransaction& trans) const;
|
||||
|
||||
|
||||
@@ -748,12 +748,13 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
|
||||
|
||||
newChar->SetAtLoginFlag(AT_LOGIN_FIRST); // First login
|
||||
|
||||
// Player created, save it now
|
||||
newChar->SaveToDB(true);
|
||||
createInfo->CharCount += 1;
|
||||
|
||||
CharacterDatabaseTransaction characterTransaction = CharacterDatabase.BeginTransaction();
|
||||
LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
|
||||
|
||||
// Player created, save it now
|
||||
newChar->SaveToDB(trans, characterTransaction, true);
|
||||
createInfo->CharCount += 1;
|
||||
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM);
|
||||
stmt->setUInt32(0, GetAccountId());
|
||||
stmt->setUInt32(1, realm.Id.Realm);
|
||||
@@ -765,7 +766,9 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
|
||||
stmt->setUInt32(2, realm.Id.Realm);
|
||||
trans->Append(stmt);
|
||||
|
||||
AddTransactionCallback(LoginDatabase.AsyncCommitTransaction(trans)).AfterComplete([this, newChar = std::move(newChar)](bool success)
|
||||
LoginDatabase.CommitTransaction(trans);
|
||||
|
||||
AddTransactionCallback(CharacterDatabase.AsyncCommitTransaction(characterTransaction)).AfterComplete([this, newChar = std::move(newChar)](bool success)
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user