aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-05-07 19:55:16 +0200
committerShauren <shauren.trinity@gmail.com>2013-05-07 19:55:16 +0200
commit77d4acc776a23ffd81b8c8a2653042ee3f279841 (patch)
tree565cdbb4a3aa292567d20163b32fdd758ea2527c
parent27ceee92fbfdb0021b9e6e852d5097b7195e9e11 (diff)
Core/Players: Fixed deleting characters unlinked from accounts
Closes #9764
-rw-r--r--src/server/game/Entities/Player/Player.cpp34
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