aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorAscathor <Break_the_Chain@web.de>2013-04-28 00:04:55 +0200
committerAscathor <Break_the_Chain@web.de>2013-04-28 00:04:55 +0200
commit1c2d617c18b028d6b0c12a04105a9ff2caa71060 (patch)
tree9bf0c50005eb31b1a2e9b5d96ae93e1abdefc862 /src/server/game/Entities
parent7bead2d15102975167a9d4da7ca11ad63716a7f3 (diff)
Core/Player: CharDelete.Heroic.MinLevel as seperated unlink requirement for Heroic classes
Also added documentation for GetCharacterNameData
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Player/Player.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4114dd6109f..60dbb7651d0 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4688,20 +4688,33 @@ TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell
*/
void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmChars, bool deleteFinally)
{
- // for not existed account avoid update realm
+ // Avoid realm-update for non-existing account
if (accountId == 0)
updateRealmChars = false;
+ // Convert guid to low GUID for CharacterNameData, but also other methods on success
+ uint32 guid = GUID_LOPART(playerguid);
+
+ // To avoid a query, we select loaded data. If it doesn't exist, return.
+ CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid);
+ if (!nameData)
+ {
+ sLog->outError(LOG_FILTER_PLAYER, "Invalid call on information for guid (%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(CONFIG_CHARDELETE_MIN_LEVEL);
+ uint32 charDelete_minLvl = sWorld->getIntConfig(playerClass != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL);
- // if we want to finally delete the character or the character does not meet the level requirement,
+ // 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 || Player::GetLevelFromDB(playerguid) < charDelete_minLvl)
+ if (deleteFinally || playerLevel < charDelete_minLvl)
charDelete_method = CHAR_DELETE_REMOVE;
- uint32 guid = GUID_LOPART(playerguid);
-
// 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
sObjectAccessor->ConvertCorpseForPlayer(playerguid);