aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/CharacterHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 29b39902a5e..706384c9b55 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1670,6 +1670,7 @@ void WorldSession::HandleCharFactionOrRaceChangeCallback(std::shared_ptr<Charact
uint32 atLoginFlags = fields[0].GetUInt16();
std::string knownTitlesStr = fields[1].GetString();
uint32 groupId = !fields[2].IsNull() ? fields[2].GetUInt32() : 0;
+ uint32 mapId = fields[3].GetUInt16();
uint32 usedLoginFlag = (factionChangeInfo->FactionChange ? AT_LOGIN_CHANGE_FACTION : AT_LOGIN_CHANGE_RACE);
if (!(atLoginFlags & usedLoginFlag))
@@ -1678,6 +1679,18 @@ void WorldSession::HandleCharFactionOrRaceChangeCallback(std::shared_ptr<Charact
return;
}
+ if (level < 10)
+ {
+ SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get());
+ return;
+ }
+
+ if (playerClass == CLASS_DEATH_KNIGHT && (level < 60 || mapId == 609))
+ {
+ SendCharFactionChange(CHAR_CREATE_RESTRICTED_RACECLASS, factionChangeInfo.get());
+ return;
+ }
+
uint32 newTeam = Player::TeamForRace(factionChangeInfo->Race);
if (factionChangeInfo->FactionChange == (Player::TeamForRace(oldRace) == newTeam))
{