diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-12-19 20:02:57 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-12-19 20:02:57 +0100 |
commit | 15611810daa19c2fbcccf6a4d8f7ba95d7ff7a06 (patch) | |
tree | 59125ac52f1c59afdaa08dfc8ed769291fd0bc52 /src | |
parent | ad0fa5ab4a3627f46645eb1ab4d1a19d9a76cc2f (diff) |
Core/Players: Fixed worgen character creation
Closes #25731
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 70d54661a19..d09920fb960 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -974,6 +974,11 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul if (ChrCustomizationChoiceEntry const* customizationChoice = sChrCustomizationChoiceStore.LookupEntry(reqChoice->ChrCustomizationChoiceID)) _chrCustomizationRequiredChoices[reqChoice->ChrCustomizationReqID][customizationChoice->ChrCustomizationOptionID].push_back(reqChoice->ChrCustomizationChoiceID); + std::unordered_map<uint32, uint32> parentRaces; + for (ChrRacesEntry const* chrRace : sChrRacesStore) + if (chrRace->UnalteredVisualRaceID) + parentRaces[chrRace->UnalteredVisualRaceID] = chrRace->ID; + for (ChrRaceXChrModelEntry const* raceModel : sChrRaceXChrModelStore) { if (ChrModelEntry const* model = sChrModelStore.LookupEntry(raceModel->ChrModelID)) @@ -981,7 +986,16 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul _chrModelsByRaceAndGender[{ uint8(raceModel->ChrRacesID), uint8(model->Sex) }] = model; if (std::vector<ChrCustomizationOptionEntry const*> const* customizationOptionsForModel = Trinity::Containers::MapGetValuePtr(customizationOptionsByModel, model->ID)) - _chrCustomizationOptionsByRaceAndGender[{ uint8(raceModel->ChrRacesID), uint8(model->Sex) }] = *customizationOptionsForModel; + { + std::vector<ChrCustomizationOptionEntry const*>& raceOptions = _chrCustomizationOptionsByRaceAndGender[{ uint8(raceModel->ChrRacesID), uint8(model->Sex) }]; + raceOptions.insert(raceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end()); + + if (uint32 const* parentRace = Trinity::Containers::MapGetValuePtr(parentRaces, raceModel->ChrRacesID)) + { + std::vector<ChrCustomizationOptionEntry const*>& parentRaceOptions = _chrCustomizationOptionsByRaceAndGender[{ uint8(*parentRace), uint8(model->Sex) }]; + parentRaceOptions.insert(parentRaceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end()); + } + } // link shapeshift displays to race/gender/form for (std::pair<uint32 const, std::pair<uint32, uint8>> const& shapeshiftOptionsForModel : Trinity::Containers::MapEqualRange(shapeshiftFormByModel, model->ID)) |