diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-05-07 19:55:16 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-05-07 19:55:16 +0200 |
commit | 77d4acc776a23ffd81b8c8a2653042ee3f279841 (patch) | |
tree | 565cdbb4a3aa292567d20163b32fdd758ea2527c | |
parent | 27ceee92fbfdb0021b9e6e852d5097b7195e9e11 (diff) |
Core/Players: Fixed deleting characters unlinked from accounts
Closes #9764
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7117fd3bbc0..8283285342f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4677,7 +4677,7 @@ TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell /** * Deletes a character from the database * - * The way, how the characters will be deleted is decided based on the config option. + * The way characters will be deleted is decided based on the config option. * * @see Player::DeleteOldCharacters * @@ -4694,26 +4694,26 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC // Convert guid to low GUID for CharacterNameData, but also other methods on success uint32 guid = GUID_LOPART(playerguid); + uint32 charDelete_method = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD); - // To avoid a query, we select loaded data. If it doesn't exist, return. - CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid); - if (!nameData) + if (deleteFinally) + charDelete_method = CHAR_DELETE_REMOVE; + else if (CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid)) // To avoid a query, we select loaded data. If it doesn't exist, return. { - sLog->outError(LOG_FILTER_PLAYER, "Invalid call on information for guid (%u) from account (%u). Could not delete character.", guid, accountId); - return; - } + if (!nameData) + { + sLog->outError(LOG_FILTER_PLAYER, "Cannot find CharacterNameData entry for player %u from account %u. Could not delete character.", guid, accountId); + return; + } - // Selecting the required pieces of information - uint8 playerClass = nameData->m_class; - uint8 playerLevel = nameData->m_level; - // Define the required variables - uint32 charDelete_method = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD); - uint32 charDelete_minLvl = sWorld->getIntConfig(playerClass != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); + // Define the required variables + uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->m_class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); - // if we want to finalize the character removal or the character does not meet the level requirement of either heroic or non-heroic settings, - // we set it to mode CHAR_DELETE_REMOVE - if (deleteFinally || playerLevel < charDelete_minLvl) - charDelete_method = CHAR_DELETE_REMOVE; + // if we want to finalize the character removal or the character does not meet the level requirement of either heroic or non-heroic settings, + // we set it to mode CHAR_DELETE_REMOVE + if (nameData->m_level < charDelete_minLvl) + charDelete_method = CHAR_DELETE_REMOVE; + } // convert corpse to bones if exist (to prevent exiting Corpse in World without DB entry) // bones will be deleted by corpse/bones deleting thread shortly |