diff options
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 0f2c5f6432e..3ed1240bdba 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -438,6 +438,9 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder* holder) WorldPackets::Character::EnumCharactersResult::RaceUnlock raceUnlock; raceUnlock.RaceID = requirement.first; raceUnlock.HasExpansion = GetAccountExpansion() >= requirement.second.Expansion; + raceUnlock.HasAchievement = requirement.second.AchievementId != 0 + && (sWorld->getBoolConfig(CONFIG_CHARACTER_CREATING_DISABLE_ALLIED_RACE_ACHIEVEMENT_REQUIREMENT) + /* || HasAccountAchievement(requirement.second.AchievementId)*/); charEnum.RaceUnlockData.push_back(raceUnlock); } @@ -1125,19 +1128,32 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) { pCurrChar->setCinematic(1); - if (ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(pCurrChar->getClass())) + if (PlayerInfo const* playerInfo = sObjectMgr->GetPlayerInfo(pCurrChar->getRace(), pCurrChar->getClass())) { - if (pCurrChar->getClass() == CLASS_DEMON_HUNTER) /// @todo: find a more generic solution - pCurrChar->SendMovieStart(469); - else if (cEntry->CinematicSequenceID) - pCurrChar->SendCinematicStart(cEntry->CinematicSequenceID); - else if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace())) - pCurrChar->SendCinematicStart(rEntry->CinematicSequenceID); - - // send new char string if not empty - if (!sWorld->GetNewCharString().empty()) - chH.PSendSysMessage("%s", sWorld->GetNewCharString().c_str()); + switch (pCurrChar->GetCreateMode()) + { + case PlayerCreateMode::Normal: + if (playerInfo->introMovieId) + pCurrChar->SendMovieStart(playerInfo->introMovieId.get()); + else if (playerInfo->introSceneId) + pCurrChar->GetSceneMgr().PlayScene(*playerInfo->introSceneId); + else if (sChrClassesStore.AssertEntry(pCurrChar->getClass())->CinematicSequenceID) + pCurrChar->SendCinematicStart(sChrClassesStore.AssertEntry(pCurrChar->getClass())->CinematicSequenceID); + else if (sChrRacesStore.AssertEntry(pCurrChar->getRace())->CinematicSequenceID) + pCurrChar->SendCinematicStart(sChrRacesStore.AssertEntry(pCurrChar->getRace())->CinematicSequenceID); + break; + case PlayerCreateMode::NPE: + if (playerInfo->introSceneIdNPE) + pCurrChar->GetSceneMgr().PlayScene(*playerInfo->introSceneIdNPE); + break; + default: + break; + } } + + // send new char string if not empty + if (!sWorld->GetNewCharString().empty()) + chH.PSendSysMessage("%s", sWorld->GetNewCharString().c_str()); } if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar)) |