diff options
| author | Ascathor <Break_the_Chain@web.de> | 2013-04-28 00:04:55 +0200 |
|---|---|---|
| committer | Ascathor <Break_the_Chain@web.de> | 2013-04-28 00:04:55 +0200 |
| commit | 1c2d617c18b028d6b0c12a04105a9ff2caa71060 (patch) | |
| tree | 9bf0c50005eb31b1a2e9b5d96ae93e1abdefc862 /src/server/game/Entities | |
| parent | 7bead2d15102975167a9d4da7ca11ad63716a7f3 (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.cpp | 25 |
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); |
