31#include <boost/filesystem/operations.hpp>
438 std::array<HotfixBlobMap, TOTAL_LOCALES> _hotfixBlob;
440 std::array<std::map<HotfixBlobKey, std::vector<DB2Manager::HotfixOptionalData>>,
TOTAL_LOCALES> _hotfixOptionalData;
448 std::vector<AzeriteItemMilestonePowerEntry const*> _azeriteItemMilestonePowers;
449 std::array<AzeriteItemMilestonePowerEntry const*, MAX_AZERITE_ESSENCE_SLOT> _azeriteItemMilestonePowerByEssenceSlot;
450 std::unordered_map<
uint32 , std::vector<AzeritePowerSetMemberEntry const*>> _azeritePowers;
451 std::unordered_map<std::pair<
uint32 ,
ItemContext>, std::array<uint8, MAX_AZERITE_EMPOWERED_TIER>> _azeriteTierUnlockLevels;
453 std::array<ChrClassUIDisplayEntry const*, MAX_CLASSES> _uiDisplayByClass;
454 std::array<std::array<uint32, MAX_POWERS>,
MAX_CLASSES> _powersByClass;
455 std::unordered_map<
uint32 , std::vector<ChrCustomizationChoiceEntry const*>> _chrCustomizationChoicesByOption;
456 std::unordered_map<std::pair<uint8, uint8>,
ChrModelEntry const*> _chrModelsByRaceAndGender;
458 std::unordered_map<std::pair<
uint8 ,
uint8>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender;
459 std::unordered_map<
uint32 , std::vector<std::pair<
uint32 , std::vector<uint32>>>> _chrCustomizationRequiredChoices;
461 std::unordered_map<int32, ConditionalChrModelEntry const*> _conditionalChrModelsByChrModelId;
462 std::unordered_multimap<uint32, ConditionalContentTuningEntry const*> _conditionalContentTuning;
463 std::unordered_set<std::pair<uint32, int32>> _contentTuningLabels;
464 std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers;
468 std::unordered_map<
uint32 , std::vector<ContentTuningXExpectedEntry const*>> _expectedStatModsByContentTuning;
470 std::unordered_map<uint32, std::set<FriendshipRepReactionEntry const*, DB2Manager::FriendshipRepReactionEntryComparator>> _friendshipRepReactions;
476 std::unordered_set<uint32> _itemsWithCurrencyCost;
481 std::vector<JournalTierEntry const*> _journalTiersByIndex;
483 std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions;
484 std::unordered_map<uint32, MountEntry const*> _mountsBySpellId;
489 std::unordered_map<uint32, ParagonReputationEntry const*> _paragonReputations;
492 std::unordered_map<uint32, uint8> _pvpItemBonus;
494 std::unordered_map<uint32, std::vector<QuestLineXQuestEntry const*>> _questsByQuestLine;
496 std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes;
497 std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems;
498 std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine;
499 std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill;
503 std::unordered_set<std::pair<int32, uint32>> _specsBySpecSet;
504 std::unordered_set<uint8> _spellFamilyNames;
506 std::unordered_map<int32, std::vector<SpellVisualMissileEntry const*>> _spellVisualMissilesBySet;
508 std::unordered_map<std::pair<uint32, uint32>,
TaxiPathEntry const*> _taxiPaths;
510 std::unordered_map<uint32, TransmogIllusionEntry const*> _transmogIllusionsByEnchantmentId;
511 std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance;
512 std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet;
513 std::unordered_map<int32, UiMapBounds> _uiMapBounds;
514 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByMap[
MAX_UI_MAP_SYSTEM];
515 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByArea[
MAX_UI_MAP_SYSTEM];
516 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoDoodadPlacement[
MAX_UI_MAP_SYSTEM];
517 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoGroup[
MAX_UI_MAP_SYSTEM];
518 std::unordered_set<int32> _uiMapPhases;
520 std::unordered_map<uint32, std::unordered_set<uint32>> _pvpStatIdsByMap;
523void LoadDB2(std::bitset<TOTAL_LOCALES>& availableDb2Locales, std::vector<std::string>& errlist,
StorageMap& stores,
DB2StorageBase* storage, std::string
const& db2Path,
529 std::string clientMetaString, ourMetaString;
536 clientMetaString += char(
FT_INT);
545 ourMetaString += char(loadInfo->
Fields[i].
Type);
547 ASSERT(clientMetaString == ourMetaString,
548 "%s C++ structure fields %s do not match generated types from the client %s",
549 storage->
GetFileName().c_str(), ourMetaString.c_str(), clientMetaString.c_str());
553 "Size of '%s' set by format string (%u) not equal size of C++ structure (" SZFMTD ").",
559 storage->
Load(db2Path +
localeNames[defaultLocale] +
'/', defaultLocale);
561 catch (std::system_error
const& e)
563 if (e.code() == std::errc::no_such_file_or_directory)
570 catch (std::exception
const& e)
572 errlist.emplace_back(e.what());
581 if (defaultLocale == i || !availableDb2Locales[i])
588 catch (std::system_error
const& e)
590 if (e.code() != std::errc::no_such_file_or_directory)
595 catch (std::exception
const& e)
597 errlist.emplace_back(e.what());
602 if (availableDb2Locales[i])
618 std::string db2Path = dataPath +
"dbc/";
620 std::vector<std::string> loadErrors;
621 std::bitset<TOTAL_LOCALES> availableDb2Locales = [&]()
623 std::bitset<TOTAL_LOCALES> foundLocales;
624 boost::filesystem::directory_iterator db2PathItr(db2Path), end;
625 while (db2PathItr != end)
629 foundLocales[locale] =
true;
636 if (!availableDb2Locales[defaultLocale])
641 LoadDB2(availableDb2Locales, loadErrors, _stores, &store, db2Path, defaultLocale,
sizeof(T));
982 if (!loadErrors.empty())
984 sLog->SetSynchronous();
986 for (std::string
const& error : loadErrors)
1001 TC_LOG_ERROR(
"misc",
"You have _outdated_ DB2 files. Please extract correct versions from current using client.");
1006 _areaGroupMembers[areaGroupMember->AreaGroupID].push_back(areaGroupMember->AreaID);
1011 "PLAYER_EXPLORED_ZONES_SIZE must be at least %d", (areaTable->AreaBit + 63) / 64);
1015 _artifactPowers[artifactPower->ArtifactID].push_back(artifactPower);
1019 _artifactPowerLinks[artifactPowerLink->PowerA].push_back(artifactPowerLink->PowerB);
1020 _artifactPowerLinks[artifactPowerLink->PowerB].push_back(artifactPowerLink->PowerA);
1024 _artifactPowerRanks[std::pair<uint32, uint8>{ artifactPowerRank->ArtifactPowerID, artifactPowerRank->RankIndex }] = artifactPowerRank;
1027 _azeriteEmpoweredItems[azeriteEmpoweredItem->ItemID] = azeriteEmpoweredItem;
1030 _azeriteEssencePowersByIdAndRank[std::pair<uint32, uint32>{ azeriteEssencePower->AzeriteEssenceID, azeriteEssencePower->Tier }] = azeriteEssencePower;
1033 _azeriteItemMilestonePowers.push_back(azeriteItemMilestonePower);
1037 return a1->RequiredLevel < a2->RequiredLevel;
1041 uint32 azeriteEssenceSlot = 0;
1048 _azeriteItemMilestonePowerByEssenceSlot[azeriteEssenceSlot] = azeriteItemMilestonePower;
1049 ++azeriteEssenceSlot;
1056 _azeritePowers[azeritePowerSetMember->AzeritePowerSetID].push_back(azeritePowerSetMember);
1059 _azeriteTierUnlockLevels[std::pair<uint32, ItemContext>{ azeriteTierUnlock->AzeriteTierUnlockSetID,
ItemContext(azeriteTierUnlock->ItemCreationContext) }][azeriteTierUnlock->Tier] = azeriteTierUnlock->AzeriteLevel;
1063 if (battlemaster->MaxLevel < battlemaster->MinLevel)
1065 TC_LOG_ERROR(
"db2.hotfix.battlemaster_list",
"Battlemaster ({}) contains bad values for MinLevel ({}) and MaxLevel ({}). Swapping values.", battlemaster->ID, battlemaster->MinLevel, battlemaster->MaxLevel);
1068 if (battlemaster->MaxPlayers < battlemaster->MinPlayers)
1070 TC_LOG_ERROR(
"db2.hotfix.battlemaster_list",
"Battlemaster ({}) contains bad values for MinPlayers ({}) and MaxPlayers ({}). Swapping values.", battlemaster->ID, battlemaster->MinPlayers, battlemaster->MaxPlayers);
1071 int8 minPlayers = battlemaster->MinPlayers;
1079 _broadcastTextDurations[{ broadcastTextDuration->BroadcastTextID,
CascLocaleBit(broadcastTextDuration->Locale) }] = broadcastTextDuration->Duration;
1084 _uiDisplayByClass[uiDisplay->ChrClassesID] = uiDisplay;
1088 std::set<ChrClassesXPowerTypesEntry const*, ChrClassesXPowerTypesEntryComparator> powers;
1090 powers.insert(power);
1092 for (std::size_t i = 0; i < _powersByClass.size(); ++i)
1099 if (_powersByClass[power->ClassID][j] !=
MAX_POWERS)
1104 _powersByClass[power->ClassID][power->PowerType] = index;
1109 _chrCustomizationChoicesByOption[customizationChoice->ChrCustomizationOptionID].push_back(customizationChoice);
1111 std::unordered_multimap<uint32, std::pair<uint32, uint8>> shapeshiftFormByModel;
1112 std::unordered_map<uint32, ChrCustomizationDisplayInfoEntry const*> displayInfoByCustomizationChoice;
1121 displayInfoByCustomizationChoice[customizationElement->ChrCustomizationChoiceID] = customizationDisplayInfo;
1123 shapeshiftFormByModel.emplace(customizationOption->ChrModelID, std::make_pair(customizationOption->ID,
uint8(customizationDisplayInfo->ShapeshiftFormID)));
1128 std::unordered_map<uint32, std::vector<ChrCustomizationOptionEntry const*>> customizationOptionsByModel;
1130 customizationOptionsByModel[customizationOption->ChrModelID].push_back(customizationOption);
1136 std::vector<std::pair<uint32, std::vector<uint32>>>& requiredChoicesForReq = _chrCustomizationRequiredChoices[reqChoice->ChrCustomizationReqID];
1137 std::vector<uint32>* choices =
nullptr;
1138 for (std::pair<
uint32, std::vector<uint32>>& choicesForOption : requiredChoicesForReq)
1140 if (
int32(choicesForOption.first) == customizationChoice->ChrCustomizationOptionID)
1142 choices = &choicesForOption.second;
1148 std::pair<uint32, std::vector<uint32>>& choicesForReq = requiredChoicesForReq.emplace_back();
1149 choicesForReq.first = customizationChoice->ChrCustomizationOptionID;
1150 choices = &choicesForReq.second;
1152 choices->push_back(reqChoice->ChrCustomizationChoiceID);
1156 std::unordered_map<uint32, uint32> parentRaces;
1158 if (chrRace->UnalteredVisualRaceID)
1159 parentRaces[chrRace->UnalteredVisualRaceID] = chrRace->ID;
1165 _chrModelsByRaceAndGender[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex) }] = model;
1169 std::vector<ChrCustomizationOptionEntry const*>& raceOptions = _chrCustomizationOptionsByRaceAndGender[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex) }];
1170 raceOptions.insert(raceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end());
1174 std::vector<ChrCustomizationOptionEntry const*>& parentRaceOptions = _chrCustomizationOptionsByRaceAndGender[{
uint8(*parentRace),
uint8(raceModel->Sex) }];
1175 parentRaceOptions.insert(parentRaceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end());
1182 ShapeshiftFormModelData& data = _chrCustomizationChoicesForShapeshifts[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex), shapeshiftOptionsForModel.second.second }];
1183 data.
OptionID = shapeshiftOptionsForModel.second.first;
1188 for (std::size_t i = 0; i < data.
Choices->size(); ++i)
1195 memset(_chrSpecializationsByIndex, 0,
sizeof(_chrSpecializationsByIndex));
1201 uint32 storageIndex = chrSpec->ClassID;
1204 ASSERT(!chrSpec->ClassID);
1208 _chrSpecializationsByIndex[storageIndex][chrSpec->OrderIndex] = chrSpec;
1212 _conditionalChrModelsByChrModelId[conditionalChrModel->ChrModelID] = conditionalChrModel;
1215 _conditionalContentTuning.emplace(conditionalContentTuning->ParentContentTuningID, conditionalContentTuning);
1219 _expectedStatModsByContentTuning[contentTuningXExpectedStat->ContentTuningID].push_back(contentTuningXExpectedStat);
1222 _contentTuningLabels.emplace(contentTuningXLabel->ContentTuningID, contentTuningXLabel->LabelID);
1225 _currencyContainers.emplace(currencyContainer->CurrencyTypesID, currencyContainer);
1228 std::unordered_map<
uint32 , std::vector<CurvePointEntry const*>> unsortedPoints;
1231 unsortedPoints[curvePoint->CurveID].push_back(curvePoint);
1233 for (
auto& [curveId, curvePoints] : unsortedPoints)
1235 std::sort(curvePoints.begin(), curvePoints.end(), [](
CurvePointEntry const* point1,
CurvePointEntry const* point2) { return point1->OrderIndex < point2->OrderIndex; });
1236 std::vector<DBCPosition2D>& points = _curvePoints[curveId];
1237 points.resize(curvePoints.size());
1238 std::transform(curvePoints.begin(), curvePoints.end(), points.begin(), [](
CurvePointEntry const* point) { return point->Pos; });
1243 _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextID, emoteTextSound->RaceID, emoteTextSound->SexID, emoteTextSound->ClassID)] = emoteTextSound;
1246 _expectedStatsByLevel[std::make_pair(expectedStat->Lvl, expectedStat->ExpansionID)] = expectedStat;
1249 if (faction->ParentFactionID)
1250 _factionTeams[faction->ParentFactionID].push_back(faction->ID);
1253 _friendshipRepReactions[friendshipRepReaction->FriendshipRepID].insert(friendshipRepReaction);
1257 if (gameObjectDisplayInfo->GeoBoxMax.X < gameObjectDisplayInfo->GeoBoxMin.X)
1259 if (gameObjectDisplayInfo->GeoBoxMax.Y < gameObjectDisplayInfo->GeoBoxMin.Y)
1261 if (gameObjectDisplayInfo->GeoBoxMax.Z < gameObjectDisplayInfo->GeoBoxMin.Z)
1266 _heirlooms[heirloom->ItemID] = heirloom;
1269 _glyphBindableSpells[glyphBindableSpell->GlyphPropertiesID].push_back(glyphBindableSpell->SpellID);
1272 _glyphRequiredSpecs[glyphRequiredSpec->GlyphPropertiesID].push_back(
ChrSpecialization(glyphRequiredSpec->ChrSpecializationID));
1276 ASSERT(_itemChildEquipment.find(itemChildEquipment->ParentItemID) == _itemChildEquipment.end(),
"Item must have max 1 child item.");
1277 _itemChildEquipment[itemChildEquipment->ParentItemID] = itemChildEquipment;
1282 ASSERT(itemClass->ClassID <
int32(_itemClassByOldEnum.size()));
1283 ASSERT(!_itemClassByOldEnum[itemClass->ClassID]);
1284 _itemClassByOldEnum[itemClass->ClassID] = itemClass;
1288 _itemsWithCurrencyCost.insert(itemCurrencyCost->ItemID);
1291 _itemCategoryConditions[condition->ParentItemLimitCategoryID].push_back(condition);
1295 ASSERT(appearanceMod->ItemID <= 0xFFFFFF);
1296 _itemModifiedAppearancesByItem[appearanceMod->ItemID | (appearanceMod->ItemAppearanceModifierID << 24)] = appearanceMod;
1300 _itemSetSpells[itemSetSpell->ItemSetID].push_back(itemSetSpell);
1303 _itemSpecOverrides[itemSpecOverride->ItemID].push_back(itemSpecOverride);
1306 _journalTiersByIndex.push_back(journalTier);
1309 _mapDifficulties[entry->MapID][entry->DifficultyID] = entry;
1311 std::vector<MapDifficultyXConditionEntry const*> mapDifficultyConditions;
1314 mapDifficultyConditions.push_back(mapDifficultyCondition);
1318 return left->OrderIndex < right->OrderIndex;
1323 _mapDifficultyConditions[mapDifficultyCondition->MapDifficultyID].emplace_back(mapDifficultyCondition->ID, playerCondition);
1326 _mountsBySpellId[mount->SourceSpellID] = mount;
1329 _mountCapabilitiesByType[mountTypeCapability->MountTypeID].insert(mountTypeCapability);
1332 _mountDisplays[mountDisplay->MountID].push_back(mountDisplay);
1335 _nameGenData[nameGen->RaceID][nameGen->Sex].push_back(nameGen);
1341 bool conversionResult =
Utf8toWStr(namesProfanity->Name, name);
1342 ASSERT(conversionResult);
1343 if (namesProfanity->Language != -1)
1344 _nameValidators[namesProfanity->Language].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1352 _nameValidators[i].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1360 bool conversionResult =
Utf8toWStr(namesReserved->Name, name);
1361 ASSERT(conversionResult);
1362 _nameValidators[
TOTAL_LOCALES].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1369 bool conversionResult =
Utf8toWStr(namesReserved->Name, name);
1370 ASSERT(conversionResult);
1376 if (namesReserved->LocaleMask & (1 << i))
1377 _nameValidators[i].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1383 _paragonReputations[paragonReputation->FactionID] = paragonReputation;
1387 _phasesByGroup[group->PhaseGroupID].push_back(phase->ID);
1392 ASSERT(!_powerTypes[powerType->PowerTypeEnum]);
1394 _powerTypes[powerType->PowerTypeEnum] = powerType;
1403 _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta;
1410 if (talentUnlock->Slot & (1 << i))
1412 ASSERT(!_pvpTalentSlotUnlock[i]);
1413 _pvpTalentSlotUnlock[i] = talentUnlock;
1419 _questsByQuestLine[questLineQuest->QuestLineID].push_back(questLineQuest);
1424 _questPackages[questPackageItem->PackageID].first.push_back(questPackageItem);
1426 _questPackages[questPackageItem->PackageID].second.push_back(questPackageItem);
1430 _rewardPackCurrencyTypes[rewardPackXCurrencyType->RewardPackID].push_back(rewardPackXCurrencyType);
1433 _rewardPackItems[rewardPackXItem->RewardPackID].push_back(rewardPackXItem);
1436 if (skill->ParentSkillLineID)
1437 _skillLinesByParentSkillLine[skill->ParentSkillLineID].push_back(skill);
1440 _skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility);
1444 _skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry));
1447 _soulbindConduitRanks[{ soulbindConduitRank->SoulbindConduitID, soulbindConduitRank->RankIndex }] = soulbindConduitRank;
1450 _specializationSpellsBySpec[specSpells->SpecID].push_back(specSpells);
1453 _specsBySpecSet.insert(std::make_pair(specSetMember->SpecSetID,
uint32(specSetMember->ChrSpecializationID)));
1456 _spellFamilyNames.insert(classOption->SpellClassSet);
1459 _spellProcsPerMinuteMods[ppmMod->SpellProcsPerMinuteID].push_back(ppmMod);
1462 _spellVisualMissilesBySet[spellVisualMissile->SpellVisualMissileSetID].push_back(spellVisualMissile);
1467 ASSERT(talentInfo->TierID <
MAX_TALENT_TIERS,
"MAX_TALENT_TIERS must be at least %u", talentInfo->TierID + 1);
1468 ASSERT(talentInfo->ColumnIndex <
MAX_TALENT_COLUMNS,
"MAX_TALENT_COLUMNS must be at least %u", talentInfo->ColumnIndex + 1);
1470 _talentsByPosition[talentInfo->ClassID][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo);
1474 _taxiPaths[{ entry->FromTaxiNode, entry->ToTaxiNode }] = entry;
1479 std::vector<uint32> pathLength;
1480 pathLength.resize(pathCount);
1482 if (pathLength[entry->PathID] < entry->NodeIndex + 1u)
1483 pathLength[entry->PathID] = entry->NodeIndex + 1u;
1495 _toys.insert(toy->ItemID);
1498 _transmogIllusionsByEnchantmentId[transmogIllusion->SpellItemEnchantmentID] = transmogIllusion;
1506 _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set);
1507 _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem);
1510 std::unordered_multimap<int32, UiMapAssignmentEntry const*> uiMapAssignmentByUiMap;
1513 uiMapAssignmentByUiMap.emplace(uiMapAssignment->UiMapID, uiMapAssignment);
1517 if (uiMapAssignment->MapID >= 0)
1518 _uiMapAssignmentByMap[uiMap->System].emplace(uiMapAssignment->MapID, uiMapAssignment);
1519 if (uiMapAssignment->AreaID)
1520 _uiMapAssignmentByArea[uiMap->System].emplace(uiMapAssignment->AreaID, uiMapAssignment);
1521 if (uiMapAssignment->WmoDoodadPlacementID)
1522 _uiMapAssignmentByWmoDoodadPlacement[uiMap->System].emplace(uiMapAssignment->WmoDoodadPlacementID, uiMapAssignment);
1523 if (uiMapAssignment->WmoGroupID)
1524 _uiMapAssignmentByWmoGroup[uiMap->System].emplace(uiMapAssignment->WmoGroupID, uiMapAssignment);
1528 std::unordered_map<std::pair<int32, uint32>,
UiMapLinkEntry const*> uiMapLinks;
1530 uiMapLinks[std::make_pair(uiMapLink->ParentUiMapID,
uint32(uiMapLink->ChildUiMapID))] = uiMapLink;
1534 UiMapBounds& bounds = _uiMapBounds[uiMap->ID];
1535 memset(&bounds, 0,
sizeof(bounds));
1545 if (uiMapAssignmentForMap.second->MapID >= 0 &&
1546 uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 &&
1547 uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0)
1549 uiMapAssignment = uiMapAssignmentForMap.second;
1554 if (!uiMapAssignment)
1557 for (std::pair<int32 const, UiMapAssignmentEntry const*>
const& uiMapAssignmentForMap :
Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ParentUiMapID))
1559 if (uiMapAssignmentForMap.second->MapID == uiMapAssignment->
MapID &&
1560 uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 &&
1561 uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0)
1563 parentUiMapAssignment = uiMapAssignmentForMap.second;
1568 if (!parentUiMapAssignment)
1571 float parentXsize = parentUiMapAssignment->
Region[1].X - parentUiMapAssignment->
Region[0].X;
1572 float parentYsize = parentUiMapAssignment->
Region[1].Y - parentUiMapAssignment->
Region[0].Y;
1573 float bound0scale = (uiMapAssignment->
Region[1].X - parentUiMapAssignment->
Region[0].X) / parentXsize;
1574 float bound0 = ((1.0f - bound0scale) * parentUiMapAssignment->
UiMax.
Y) + (bound0scale * parentUiMapAssignment->
UiMin.
Y);
1575 float bound2scale = (uiMapAssignment->
Region[0].X - parentUiMapAssignment->
Region[0].X) / parentXsize;
1576 float bound2 = ((1.0f - bound2scale) * parentUiMapAssignment->
UiMax.
Y) + (bound2scale * parentUiMapAssignment->
UiMin.
Y);
1577 float bound1scale = (uiMapAssignment->
Region[1].Y - parentUiMapAssignment->
Region[0].Y) / parentYsize;
1578 float bound1 = ((1.0f - bound1scale) * parentUiMapAssignment->
UiMax.
X) + (bound1scale * parentUiMapAssignment->
UiMin.
X);
1579 float bound3scale = (uiMapAssignment->
Region[0].Y - parentUiMapAssignment->
Region[0].Y) / parentYsize;
1580 float bound3 = ((1.0f - bound3scale) * parentUiMapAssignment->
UiMax.
X) + (bound3scale * parentUiMapAssignment->
UiMin.
X);
1581 if ((bound3 - bound1) > 0.0f || (bound2 - bound0) > 0.0f)
1583 bounds.Bounds[0] = bound0;
1584 bounds.Bounds[1] = bound1;
1585 bounds.Bounds[2] = bound2;
1586 bounds.Bounds[3] = bound3;
1587 bounds.IsUiAssignment =
true;
1593 bounds.IsUiAssignment =
false;
1594 bounds.IsUiLink =
true;
1595 bounds.Bounds[0] = uiMapLink->UiMin.Y;
1596 bounds.Bounds[1] = uiMapLink->UiMin.X;
1597 bounds.Bounds[2] = uiMapLink->UiMax.Y;
1598 bounds.Bounds[3] = uiMapLink->UiMax.X;
1603 if (uiMapArt->PhaseID)
1604 _uiMapPhases.insert(uiMapArt->PhaseID);
1607 _wmoAreaTableLookup[
WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry;
1618 if (!node->IsPartOfTaxiNetwork())
1635 if (uiMapId == 985 || uiMapId == 986)
1640 _pvpStatIdsByMap[pvpStat->MapID].insert(pvpStat->ID);
1644 return availableDb2Locales.to_ulong();
1649 auto itr = _stores.find(type);
1650 if (itr != _stores.end())
1660 QueryResult result =
HotfixDatabase.Query(
"SELECT Id, UniqueId, TableHash, RecordId, Status FROM hotfix_data ORDER BY Id");
1664 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix info entries.");
1670 std::map<std::pair<uint32, int32>,
bool> deletedRecords;
1674 Field* fields = result->Fetch();
1681 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1685 for (std::size_t locale = 0; locale <
TOTAL_LOCALES; ++locale)
1687 if (!availableDb2Locales[locale])
1690 if (!_hotfixBlob[locale].contains(key))
1691 availableDb2Locales[locale] =
false;
1694 if (availableDb2Locales.none())
1696 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_data` references unknown DB2 store by hash 0x{:X} and has no reference to `hotfix_blob` in hotfix id {} with RecordID: {}", tableHash,
id, recordId);
1710 push.
Records.push_back(hotfixRecord);
1716 }
while (result->NextRow());
1718 for (
auto itr = deletedRecords.begin(); itr != deletedRecords.end(); ++itr)
1721 store->EraseRecord(itr->first.second);
1730 QueryResult result =
HotfixDatabase.Query(
"SELECT TableHash, RecordId, locale, `Blob` FROM hotfix_blob ORDER BY TableHash");
1734 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix blob entries.");
1738 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1739 uint32 hotfixBlobCount = 0;
1742 Field* fields = result->Fetch();
1745 auto storeItr = _stores.find(tableHash);
1746 if (storeItr != _stores.end())
1748 TC_LOG_ERROR(
"sql.sql",
"Table hash 0x{:X} points to a loaded DB2 store {}, fill related table instead of hotfix_blob",
1749 tableHash, storeItr->second->GetFileName());
1754 std::string localeName = fields[2].
GetString();
1759 TC_LOG_ERROR(
"sql.sql",
"`hotfix_blob` contains invalid locale: {} at TableHash: 0x{:X} and RecordID: {}", localeName, tableHash, recordId);
1763 if (!availableDb2Locales[locale])
1766 _hotfixBlob[locale][std::make_pair(tableHash, recordId)] = fields[3].
GetBinary();
1768 }
while (result->NextRow());
1775 return data.size() == 8 + 16;
1785 QueryResult result =
HotfixDatabase.Query(
"SELECT TableHash, RecordId, locale, `Key`, `Data` FROM hotfix_optional_data ORDER BY TableHash");
1789 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix optional data records.");
1793 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1794 uint32 hotfixOptionalDataCount = 0;
1797 Field* fields = result->Fetch();
1801 if (allowedHotfixes.begin() == allowedHotfixes.end())
1803 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` references DB2 store by hash 0x{:X} that is not allowed to have optional data", tableHash);
1808 auto storeItr = _stores.find(tableHash);
1809 if (storeItr == _stores.end())
1811 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` references unknown DB2 store by hash 0x{:X} with RecordID: {}", tableHash, recordId);
1815 std::string localeName = fields[2].
GetString();
1820 TC_LOG_ERROR(
"sql.sql",
"`hotfix_optional_data` contains invalid locale: {} at TableHash: 0x{:X} and RecordID: {}", localeName, tableHash, recordId);
1824 if (!availableDb2Locales[locale])
1829 auto allowedHotfixItr = std::find_if(allowedHotfixes.begin(), allowedHotfixes.end(), [&](std::pair<uint32 const, AllowedHotfixOptionalData>
const& v)
1831 return v.second.first == optionalData.Key;
1833 if (allowedHotfixItr == allowedHotfixes.end())
1835 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` references non-allowed optional data key 0x{:X} for DB2 store by hash 0x{:X} and RecordID: {}",
1836 optionalData.
Key, tableHash, recordId);
1841 if (!allowedHotfixItr->second.second(optionalData.
Data))
1843 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` contains invalid data for DB2 store 0x{:X}, RecordID: {} and Key: 0x{:X}",
1844 tableHash, recordId, optionalData.
Key);
1848 _hotfixOptionalData[locale][std::make_pair(tableHash, recordId)].push_back(std::move(optionalData));
1849 hotfixOptionalDataCount++;
1850 }
while (result->NextRow());
1852 TC_LOG_INFO(
"server.loading",
">> Loaded {} hotfix optional data records in {} ms", hotfixOptionalDataCount,
GetMSTimeDiffToNow(oldMSTime));
1857 return _hotfixData.size();
1894 push.
Records.push_back(hotfixRecord);
1900 auto itr = _areaGroupMembers.find(areaGroupId);
1901 if (itr != _areaGroupMembers.end())
1904 return std::vector<uint32>();
1911 if (objectAreaId == areaId)
1919 }
while (objectAreaId);
1931 return contentTuning;
1942 auto itr = _artifactPowers.find(artifactId);
1943 if (itr != _artifactPowers.end())
1946 return std::vector<ArtifactPowerEntry const*>{};
1977 return _azeriteItemMilestonePowers;
1983 return _azeriteItemMilestonePowerByEssenceSlot[slot];
1997 if (std::array<uint8, MAX_AZERITE_EMPOWERED_TIER>
const* levels =
Trinity::Containers::MapGetValuePtr(_azeriteTierUnlockLevels, std::make_pair(azeriteUnlockSetId, context)))
1998 return (*levels)[tier];
2003 return (*levels)[tier];
2012 if (broadcastText->
Text1[locale][0] !=
'\0')
2013 return broadcastText->
Text1[locale];
2018 if (broadcastText->
Text[locale][0] !=
'\0')
2019 return broadcastText->
Text[locale];
2032 return _uiDisplayByClass[unitClass];
2041 if (classEntry->
Name[locale][0] !=
'\0')
2042 return classEntry->
Name[locale];
2049 return _powersByClass[classId][power];
2083 if (raceEntry->
Name[locale][0] !=
'\0')
2084 return raceEntry->
Name[locale];
2091 return _chrSpecializationsByIndex[class_][index];
2102 if (conditionalContentTuning->RedirectFlag & redirectFlag)
2103 return conditionalContentTuning->RedirectContentTuningID;
2105 return contentTuningId;
2157 return _contentTuningLabels.contains({ contentTuningId, label });
2169 return petFamily->
Name[locale][0] !=
'\0' ? petFamily->
Name[locale] :
nullptr;
2175 if (quantity >= p.second->MinAmount && (!p.second->MaxAmount || quantity <= p.second->MaxAmount))
2184 return { points->front().X, points->back().X };
2186 return { 0.0f, 0.0f };
2191 switch (curve->
Type)
2197 switch (points.size())
2223 auto itr = _curvePoints.find(curveId);
2224 if (itr == _curvePoints.end())
2228 std::vector<DBCPosition2D>
const& points = itr->second;
2241 std::size_t pointIndex = 0;
2242 while (pointIndex < points.size() && points[pointIndex].X <= x)
2246 if (pointIndex >= points.size())
2247 return points.back().Y;
2248 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2250 return points[pointIndex].Y;
2251 return (((x - points[pointIndex - 1].X) / xDiff) * (points[pointIndex].Y - points[pointIndex - 1].Y)) + points[pointIndex - 1].Y;
2255 std::size_t pointIndex = 0;
2256 while (pointIndex < points.size() && points[pointIndex].X <= x)
2260 if (pointIndex >= points.size())
2261 return points.back().Y;
2262 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2264 return points[pointIndex].Y;
2265 return ((points[pointIndex].Y - points[pointIndex - 1].Y) * (1.0f - std::cos((x - points[pointIndex - 1].X) / xDiff *
float(
M_PI))) * 0.5f) + points[pointIndex - 1].Y;
2269 std::size_t pointIndex = 1;
2270 while (pointIndex < points.size() && points[pointIndex].X <= x)
2272 if (pointIndex == 1)
2274 if (pointIndex >= points.size() - 1)
2275 return points[points.size() - 2].Y;
2276 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2278 return points[pointIndex].Y;
2280 float mu = (x - points[pointIndex - 1].X) / xDiff;
2281 float a0 = -0.5f * points[pointIndex - 2].Y + 1.5f * points[pointIndex - 1].Y - 1.5f * points[pointIndex].Y + 0.5f * points[pointIndex + 1].Y;
2282 float a1 = points[pointIndex - 2].Y - 2.5f * points[pointIndex - 1].Y + 2.0f * points[pointIndex].Y - 0.5f * points[pointIndex + 1].Y;
2283 float a2 = -0.5f * points[pointIndex - 2].Y + 0.5f * points[pointIndex].Y;
2284 float a3 = points[pointIndex - 1].Y;
2286 return a0 * mu * mu * mu + a1 * mu * mu + a2 * mu + a3;
2290 float xDiff = points[2].X - points[0].X;
2293 float mu = (x - points[0].X) / xDiff;
2294 return ((1.0f - mu) * (1.0f - mu) * points[0].Y) + (1.0f - mu) * 2.0f * mu * points[1].Y + mu * mu * points[2].Y;
2298 float xDiff = points[3].X - points[0].X;
2301 float mu = (x - points[0].X) / xDiff;
2302 return (1.0f - mu) * (1.0f - mu) * (1.0f - mu) * points[0].Y
2303 + 3.0f * mu * (1.0f - mu) * (1.0f - mu) * points[1].Y
2304 + 3.0f * mu * mu * (1.0f - mu) * points[2].Y
2305 + mu * mu * mu * points[3].Y;
2309 float xDiff = points.back().X - points[0].X;
2311 return points.back().Y;
2313 std::vector<float> tmp(points.size());
2314 for (std::size_t i = 0; i < points.size(); ++i)
2315 tmp[i] = points[i].Y;
2317 float mu = (x - points[0].X) / xDiff;
2321 for (
int32 k = 0; k < i; ++k)
2323 float val = tmp[k] + mu * (tmp[k + 1] - tmp[k]);
2342 return emotesTextSound;
2345 return emotesTextSound;
2350template<
float(ExpectedStatModEntry::*field)>
2357 if (!contentTuningXExpected)
2362 if (ActiveMilestoneSeason < mythicPlusSeason->MilestoneSeason)
2378 auto expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, expansion));
2379 if (expectedStatItr == _expectedStatsByLevel.end())
2380 expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, -2));
2382 if (expectedStatItr == _expectedStatsByLevel.end())
2409 value = expectedStatItr->second->CreatureHealth;
2410 if (contentTuningMods)
2411 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2417 value = expectedStatItr->second->PlayerHealth;
2418 if (contentTuningMods)
2419 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2425 value = expectedStatItr->second->CreatureAutoAttackDps;
2426 if (contentTuningMods)
2427 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2433 value = expectedStatItr->second->CreatureArmor;
2434 if (contentTuningMods)
2435 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2441 value = expectedStatItr->second->PlayerMana;
2442 if (contentTuningMods)
2443 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2449 value = expectedStatItr->second->PlayerPrimaryStat;
2450 if (contentTuningMods)
2451 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2457 value = expectedStatItr->second->PlayerSecondaryStat;
2458 if (contentTuningMods)
2459 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2465 value = expectedStatItr->second->ArmorConstant;
2466 if (contentTuningMods)
2467 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2475 value = expectedStatItr->second->CreatureSpellDamage;
2476 if (contentTuningMods)
2477 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2502 if (
GlobalCurve(globalCurveEntry->Type) == globalCurveType)
2503 return globalCurveEntry->CurveID;
2530 return _itemClassByOldEnum[itemClass];
2535 return _itemsWithCurrencyCost.count(itemId) > 0;
2547 return itemAppearance->ItemDisplayInfoID;
2554 auto itr = _itemModifiedAppearancesByItem.find(itemId | (appearanceModId << 24));
2555 if (itr != _itemModifiedAppearancesByItem.end())
2559 if (appearanceModId)
2561 itr = _itemModifiedAppearancesByItem.find(itemId);
2562 if (itr != _itemModifiedAppearancesByItem.end())
2586 if (index < _journalTiersByIndex.size())
2587 return _journalTiersByIndex[index];
2594 if (dungeon->MapID ==
int32(mapId) &&
Difficulty(dungeon->DifficultyID) == difficulty)
2618 return 1 << liq->SoundBank;
2625 auto itr = _mapDifficulties.find(mapId);
2626 if (itr == _mapDifficulties.end())
2629 if (itr->second.empty())
2632 for (
auto& p : itr->second)
2635 if (!difficultyEntry)
2648 *difficulty =
Difficulty(itr->second.begin()->first);
2650 return itr->second.begin()->second;
2655 auto itr = _mapDifficulties.find(mapId);
2656 if (itr == _mapDifficulties.end())
2659 auto diffItr = itr->second.find(difficulty);
2660 if (diffItr == itr->second.end())
2663 return diffItr->second;
2672 uint32 tmpDiff = difficulty;
2717 auto ritr = _nameGenData.find(race);
2718 if (ritr == _nameGenData.end())
2721 if (ritr->second[gender].empty())
2730 if (Trinity::regex_search(name,
regex))
2735 if (Trinity::regex_search(name,
regex))
2744 if (!numTalentsAtLevel)
2747 if (numTalentsAtLevel)
2749 switch (playerClass)
2774 if (entry->MapID != mapid || entry->MinLevel > level)
2778 if (entry->MaxLevel >= level)
2782 if (!maxEntry || maxEntry->
MaxLevel < entry->MaxLevel)
2792 if (entry->MapID == mapid && entry->GetBracketId() ==
id)
2801 if (_pvpTalentSlotUnlock[slot])
2806 return _pvpTalentSlotUnlock[slot]->DeathKnightLevelRequired;
2808 return _pvpTalentSlotUnlock[slot]->DemonHunterLevelRequired;
2812 return _pvpTalentSlotUnlock[slot]->LevelRequired;
2835 auto itr = _questPackages.find(questPackageID);
2836 if (itr != _questPackages.end())
2837 return &itr->second.first;
2844 auto itr = _questPackages.find(questPackageID);
2845 if (itr != _questPackages.end())
2846 return &itr->second.second;
2857 return v2->UniqueBitFlag;
2868 return _powerTypes[power];
2877 if (powerName == name)
2880 powerName.erase(std::remove(powerName.begin(), powerName.end(),
'_'), powerName.end());
2881 if (powerName == name)
2890 auto itr = _pvpItemBonus.find(itemId);
2891 if (itr != _pvpItemBonus.end())
2926 if (!skllRaceClassInfo->RaceMask.IsEmpty() && !(skllRaceClassInfo->RaceMask.HasRace(race)))
2928 if (skllRaceClassInfo->ClassMask && !(skllRaceClassInfo->ClassMask & (1 << (class_ - 1))))
2931 return skllRaceClassInfo;
2939 std::vector<SkillRaceClassInfoEntry const*> result;
2941 result.push_back(skillRaceClassInfo);
2958 return _specsBySpecSet.count(std::make_pair(specSetId, specId)) > 0;
2963 return _spellFamilyNames.count(family) > 0;
2968 auto itr = _spellProcsPerMinuteMods.find(spellprocsPerMinuteId);
2969 if (itr != _spellProcsPerMinuteMods.end())
2972 return std::vector<SpellProcsPerMinuteModEntry const*>();
2982 return _talentsByPosition[class_][tier][column];
2992 if (requiredTotemCategoryId == 0)
2994 if (itemTotemCategoryId == 0)
3008 return requireAllTotems ? sharedMask == reqEntry->
TotemCategoryMask : sharedMask != 0;
3013 return _toys.count(toy) > 0;
3055 return Outside.DistanceToRegionEdgeSquared < std::numeric_limits<float>::epsilon() &&
3056 std::abs(
Outside.DistanceToRegionTop) < std::numeric_limits<float>::epsilon() &&
3057 std::abs(
Outside.DistanceToRegionBottom) < std::numeric_limits<float>::epsilon();
3064 bool rightInside = right.
IsInside();
3065 if (leftInside != rightInside)
3090 if (leftUiSizeX > std::numeric_limits<float>::epsilon() && rightUiSizeX > std::numeric_limits<float>::epsilon())
3094 if (leftScale != rightScale)
3095 return leftScale < rightScale;
3121 if (x < uiMapAssignment->Region[0].X || x > uiMapAssignment->
Region[1].X || y < uiMapAssignment->Region[0].Y || y > uiMapAssignment->
Region[1].Y)
3124 if (x >= uiMapAssignment->
Region[0].X)
3127 if (x > uiMapAssignment->
Region[1].X)
3128 xDiff = x - uiMapAssignment->
Region[0].X;
3131 xDiff = uiMapAssignment->
Region[0].X - x;
3133 if (y >= uiMapAssignment->
Region[0].Y)
3136 if (y > uiMapAssignment->
Region[1].Y)
3137 yDiff = y - uiMapAssignment->
Region[0].Y;
3140 yDiff = uiMapAssignment->
Region[0].Y - y;
3147 (x - (uiMapAssignment->
Region[0].X + uiMapAssignment->
Region[1].X) * 0.5f) * (x - (uiMapAssignment->
Region[0].X + uiMapAssignment->
Region[1].X) * 0.5f)
3148 + (y - (uiMapAssignment->
Region[0].Y + uiMapAssignment->
Region[1].Y) * 0.5f) * (y - (uiMapAssignment->
Region[0].Y + uiMapAssignment->
Region[1].Y) * 0.5f);
3153 if (z < uiMapAssignment->Region[0].Z || z > uiMapAssignment->
Region[1].Z)
3155 if (z < uiMapAssignment->Region[1].Z)
3157 if (z < uiMapAssignment->Region[0].Z)
3170 if (areaId && uiMapAssignment->
AreaID)
3172 int8 areaPriority = 0;
3173 while (areaId != uiMapAssignment->
AreaID)
3177 areaId = areaEntry->ParentAreaID;
3187 if (mapId >= 0 && uiMapAssignment->
MapID >= 0)
3189 if (mapId != uiMapAssignment->
MapID)
3193 if (mapEntry->ParentMapID == uiMapAssignment->
MapID)
3195 else if (mapEntry->CosmeticParentMapID == uiMapAssignment->
MapID)
3207 if (wmoGroupId || wmoDoodadPlacementId)
3211 bool hasDoodadPlacement =
false;
3217 hasDoodadPlacement =
true;
3220 if (wmoGroupId && uiMapAssignment->
WmoGroupID)
3222 if (wmoGroupId != uiMapAssignment->
WmoGroupID)
3225 if (hasDoodadPlacement)
3230 else if (hasDoodadPlacement)
3241 auto iterateUiMapAssignments = [&](std::unordered_multimap<int32, UiMapAssignmentEntry const*>
const& assignments,
int32 id)
3247 if (status < nearestMapAssignment)
3248 nearestMapAssignment = status;
3252 iterateUiMapAssignments(_uiMapAssignmentByWmoGroup[system], wmoGroupId);
3253 iterateUiMapAssignments(_uiMapAssignmentByWmoDoodadPlacement[system], wmoDoodadPlacementId);
3258 iterateUiMapAssignments(_uiMapAssignmentByArea[system], areaEntry->
ID);
3264 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ID);
3265 if (mapEntry->ParentMapID >= 0)
3266 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ParentMapID);
3267 if (mapEntry->CosmeticParentMapID >= 0)
3268 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->CosmeticParentMapID);
3283 if (!bounds || !bounds->IsUiAssignment)
3286 uiPosition.
X = ((1.0 - uiPosition.
X) * bounds->Bounds[1]) + (bounds->Bounds[3] * uiPosition.
X);
3287 uiPosition.
Y = ((1.0 - uiPosition.
Y) * bounds->Bounds[0]) + (bounds->Bounds[2] * uiPosition.
Y);
3308 if (!uiMapAssignment)
3312 *uiMapId = uiMapAssignment->
UiMapID;
3316 if (regionSize.X > 0.0f)
3317 relativePosition.X = (x - uiMapAssignment->
Region[0].X) / regionSize.X;
3318 if (regionSize.Y > 0.0f)
3319 relativePosition.Y = (y - uiMapAssignment->
Region[0].Y) / regionSize.Y;
3324 ((1.0f - (1.0f - relativePosition.Y)) * uiMapAssignment->
UiMin.
X) + ((1.0f - relativePosition.Y) * uiMapAssignment->
UiMax.
X),
3325 ((1.0f - (1.0f - relativePosition.X)) * uiMapAssignment->
UiMin.
Y) + ((1.0f - relativePosition.X) * uiMapAssignment->
UiMax.
Y)
3332 *newPos = uiPosition;
3345 if (assignment.second->MapID >= 0 && assignment.second->MapID != areaEntry->
ContinentID)
3348 float tmpY = (y - assignment.second->UiMax.Y) / (assignment.second->UiMin.Y - assignment.second->UiMax.Y);
3349 float tmpX = (x - assignment.second->UiMax.X) / (assignment.second->UiMin.X - assignment.second->UiMax.X);
3350 x = assignment.second->Region[0].X + tmpY * (assignment.second->Region[1].X - assignment.second->Region[0].X);
3351 y = assignment.second->Region[0].Y + tmpX * (assignment.second->Region[1].Y - assignment.second->Region[0].Y);
3362 if (!
GetUiMapPosition(x, y, 0.0f, -1, areaId, 0, 0,
UI_MAP_SYSTEM_WORLD,
true,
nullptr, &zoneCoords))
3365 x = zoneCoords.
Y * 100.0f;
3366 y = zoneCoords.
X * 100.0f;
3371 return _uiMapPhases.find(phaseId) != _uiMapPhases.end();
3396 ASSERT((
_data.size() % 8) == 0,
"TaxiMask size must be aligned to a multiple of uint64");
char const * localeNames[TOTAL_LOCALES]
LocaleConstant GetLocaleByName(std::string_view name)
CascLocaleBit WowLocaleToCascLocaleBit[TOTAL_LOCALES]
constexpr bool IsValidLocale(LocaleConstant locale)
DB2Storage< UISplashScreenEntry > sUISplashScreenStore("UISplashScreen.db2", &UiSplashScreenLoadInfo::Instance)
DB2Storage< LightEntry > sLightStore("Light.db2", &LightLoadInfo::Instance)
DB2Storage< AzeritePowerSetMemberEntry > sAzeritePowerSetMemberStore("AzeritePowerSetMember.db2", &AzeritePowerSetMemberLoadInfo::Instance)
DB2Storage< QuestFactionRewardEntry > sQuestFactionRewardStore("QuestFactionReward.db2", &QuestFactionRewardLoadInfo::Instance)
DB2Storage< PhaseEntry > sPhaseStore("Phase.db2", &PhaseLoadInfo::Instance)
DB2Storage< ArtifactAppearanceEntry > sArtifactAppearanceStore("ArtifactAppearance.db2", &ArtifactAppearanceLoadInfo::Instance)
DB2Storage< BankBagSlotPricesEntry > sBankBagSlotPricesStore("BankBagSlotPrices.db2", &BankBagSlotPricesLoadInfo::Instance)
DB2Storage< SkillRaceClassInfoEntry > sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", &SkillRaceClassInfoLoadInfo::Instance)
DB2Storage< ItemNameDescriptionEntry > sItemNameDescriptionStore("ItemNameDescription.db2", &ItemNameDescriptionLoadInfo::Instance)
DB2Storage< ChrRaceXChrModelEntry > sChrRaceXChrModelStore("ChrRaceXChrModel.db2", &ChrRaceXChrModelLoadInfo::Instance)
DB2Storage< ItemLimitCategoryEntry > sItemLimitCategoryStore("ItemLimitCategory.db2", &ItemLimitCategoryLoadInfo::Instance)
DB2Storage< DifficultyEntry > sDifficultyStore("Difficulty.db2", &DifficultyLoadInfo::Instance)
DB2Storage< WorldMapOverlayEntry > sWorldMapOverlayStore("WorldMapOverlay.db2", &WorldMapOverlayLoadInfo::Instance)
ChrSpecializationEntry const * ChrSpecializationByIndexContainer[MAX_CLASSES+1][MAX_SPECIALIZATIONS]
DB2Storage< ItemModifiedAppearanceExtraEntry > sItemModifiedAppearanceExtraStore("ItemModifiedAppearanceExtra.db2", &ItemModifiedAppearanceExtraLoadInfo::Instance)
DB2Storage< ItemDamageTwoHandCasterEntry > sItemDamageTwoHandCasterStore("ItemDamageTwoHandCaster.db2", &ItemDamageTwoHandCasterLoadInfo::Instance)
DB2Storage< ItemLevelSelectorEntry > sItemLevelSelectorStore("ItemLevelSelector.db2", &ItemLevelSelectorLoadInfo::Instance)
DB2Storage< NamesReservedEntry > sNamesReservedStore("NamesReserved.db2", &NamesReservedLoadInfo::Instance)
DB2Storage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", &GameobjectDisplayInfoLoadInfo::Instance)
DB2Storage< SceneScriptEntry > sSceneScriptStore("SceneScript.db2", &SceneScriptLoadInfo::Instance)
DB2Storage< CharacterLoadoutEntry > sCharacterLoadoutStore("CharacterLoadout.db2", &CharacterLoadoutLoadInfo::Instance)
DB2Storage< SpellVisualEntry > sSpellVisualStore("SpellVisual.db2", &SpellVisualLoadInfo::Instance)
DB2Storage< PVPItemEntry > sPVPItemStore("PVPItem.db2", &PvpItemLoadInfo::Instance)
DB2Storage< ItemEntry > sItemStore("Item.db2", &ItemLoadInfo::Instance)
DB2Storage< Achievement_CategoryEntry > sAchievementCategoryStore("Achievement_Category.db2", &AchievementCategoryLoadInfo::Instance)
DB2Storage< ItemSearchNameEntry > sItemSearchNameStore("ItemSearchName.db2", &ItemSearchNameLoadInfo::Instance)
DB2Storage< PhaseXPhaseGroupEntry > sPhaseXPhaseGroupStore("PhaseXPhaseGroup.db2", &PhaseXPhaseGroupLoadInfo::Instance)
std::unordered_map< uint32, std::unordered_map< uint32, MapDifficultyEntry const * > > MapDifficultyContainer
DB2Storage< BattlemasterListEntry > sBattlemasterListStore("BattlemasterList.db2", &BattlemasterListLoadInfo::Instance)
TaxiMask sAllianceTaxiNodesMask
std::unordered_map< uint32, std::vector< DBCPosition2D > > CurvePointsContainer
DB2Storage< AzeriteEssencePowerEntry > sAzeriteEssencePowerStore("AzeriteEssencePower.db2", &AzeriteEssencePowerLoadInfo::Instance)
DB2Storage< SpellInterruptsEntry > sSpellInterruptsStore("SpellInterrupts.db2", &SpellInterruptsLoadInfo::Instance)
DB2Storage< TraitCurrencySourceEntry > sTraitCurrencySourceStore("TraitCurrencySource.db2", &TraitCurrencySourceLoadInfo::Instance)
DB2Storage< SkillLineEntry > sSkillLineStore("SkillLine.db2", &SkillLineLoadInfo::Instance)
DB2Storage< TraitTreeXTraitCostEntry > sTraitTreeXTraitCostStore("TraitTreeXTraitCost.db2", &TraitTreeXTraitCostLoadInfo::Instance)
DB2Storage< OverrideSpellDataEntry > sOverrideSpellDataStore("OverrideSpellData.db2", &OverrideSpellDataLoadInfo::Instance)
DB2Storage< AnimationDataEntry > sAnimationDataStore("AnimationData.db2", &AnimationDataLoadInfo::Instance)
DB2Storage< FriendshipReputationEntry > sFriendshipReputationStore("FriendshipReputation.db2", &FriendshipReputationLoadInfo::Instance)
DB2Storage< BattlePetBreedQualityEntry > sBattlePetBreedQualityStore("BattlePetBreedQuality.db2", &BattlePetBreedQualityLoadInfo::Instance)
DB2Storage< EmotesTextEntry > sEmotesTextStore("EmotesText.db2", &EmotesTextLoadInfo::Instance)
DB2Storage< ArtifactEntry > sArtifactStore("Artifact.db2", &ArtifactLoadInfo::Instance)
DB2Storage< ArtifactPowerPickerEntry > sArtifactPowerPickerStore("ArtifactPowerPicker.db2", &ArtifactPowerPickerLoadInfo::Instance)
DB2Storage< TraitNodeGroupXTraitCondEntry > sTraitNodeGroupXTraitCondStore("TraitNodeGroupXTraitCond.db2", &TraitNodeGroupXTraitCondLoadInfo::Instance)
std::unordered_map< uint32, HeirloomEntry const * > HeirloomItemsContainer
DB2Storage< ArtifactQuestXPEntry > sArtifactQuestXPStore("ArtifactQuestXP.db2", &ArtifactQuestXpLoadInfo::Instance)
DB2Storage< JournalEncounterSectionEntry > sJournalEncounterSectionStore("JournalEncounterSection.db2", &JournalEncounterSectionLoadInfo::Instance)
DB2Storage< BattlePetBreedStateEntry > sBattlePetBreedStateStore("BattlePetBreedState.db2", &BattlePetBreedStateLoadInfo::Instance)
DB2Storage< PVPStatEntry > sPVPStatStore("PVPStat.db2", &PvpStatLoadInfo::Instance)
std::unordered_map< uint32, ItemChildEquipmentEntry const * > ItemChildEquipmentContainer
DB2Storage< PvpTalentCategoryEntry > sPvpTalentCategoryStore("PvpTalentCategory.db2", &PvpTalentCategoryLoadInfo::Instance)
DB2Storage< ItemBonusTreeEntry > sItemBonusTreeStore("ItemBonusTree.db2", &ItemBonusTreeLoadInfo::Instance)
DB2Storage< RandPropPointsEntry > sRandPropPointsStore("RandPropPoints.db2", &RandPropPointsLoadInfo::Instance)
DB2Storage< ItemBagFamilyEntry > sItemBagFamilyStore("ItemBagFamily.db2", &ItemBagFamilyLoadInfo::Instance)
DB2Storage< GameObjectsEntry > sGameObjectsStore("GameObjects.db2", &GameobjectsLoadInfo::Instance)
DB2Storage< SpellAuraOptionsEntry > sSpellAuraOptionsStore("SpellAuraOptions.db2", &SpellAuraOptionsLoadInfo::Instance)
std::unordered_map< uint32, std::unordered_map< uint32, std::vector< SpellPowerEntry const * > > > SpellPowerDifficultyContainer
DB2Storage< TraitNodeGroupXTraitNodeEntry > sTraitNodeGroupXTraitNodeStore("TraitNodeGroupXTraitNode.db2", &TraitNodeGroupXTraitNodeLoadInfo::Instance)
DB2Storage< SpellCategoryEntry > sSpellCategoryStore("SpellCategory.db2", &SpellCategoryLoadInfo::Instance)
DB2Storage< AchievementEntry > sAchievementStore("Achievement.db2", &AchievementLoadInfo::Instance)
DB2Storage< ImportPriceWeaponEntry > sImportPriceWeaponStore("ImportPriceWeapon.db2", &ImportPriceWeaponLoadInfo::Instance)
DB2Storage< FriendshipRepReactionEntry > sFriendshipRepReactionStore("FriendshipRepReaction.db2", &FriendshipRepReactionLoadInfo::Instance)
DB2Storage< GarrMissionEntry > sGarrMissionStore("GarrMission.db2", &GarrMissionLoadInfo::Instance)
std::array< ItemClassEntry const *, 20 > ItemClassByOldEnumContainer
DB2Storage< SpellNameEntry > sSpellNameStore("SpellName.db2", &SpellNameLoadInfo::Instance)
DB2Storage< CurveEntry > sCurveStore("Curve.db2", &CurveLoadInfo::Instance)
DB2Storage< PvpSeasonEntry > sPvpSeasonStore("PvpSeason.db2", &PvpSeasonLoadInfo::Instance)
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
DB2Storage< TraitNodeEntry > sTraitNodeStore("TraitNode.db2", &TraitNodeLoadInfo::Instance)
DB2Storage< TaxiNodesEntry > sTaxiNodesStore("TaxiNodes.db2", &TaxiNodesLoadInfo::Instance)
std::unordered_map< uint32, ItemModifiedAppearanceEntry const * > ItemModifiedAppearanceByItemContainer
DB2Storage< CreatureModelDataEntry > sCreatureModelDataStore("CreatureModelData.db2", &CreatureModelDataLoadInfo::Instance)
DB2Storage< LiquidTypeEntry > sLiquidTypeStore("LiquidType.db2", &LiquidTypeLoadInfo::Instance)
DB2Storage< ConditionalChrModelEntry > sConditionalChrModelStore("ConditionalChrModel.db2", &ConditionalChrModelLoadInfo::Instance)
DB2Storage< CreatureFamilyEntry > sCreatureFamilyStore("CreatureFamily.db2", &CreatureFamilyLoadInfo::Instance)
std::map< uint32, DB2StorageBase * > StorageMap
DB2Storage< CurvePointEntry > sCurvePointStore("CurvePoint.db2", &CurvePointLoadInfo::Instance)
DB2Storage< SpellXSpellVisualEntry > sSpellXSpellVisualStore("SpellXSpellVisual.db2", &SpellXSpellVisualLoadInfo::Instance)
DB2Storage< CharacterLoadoutItemEntry > sCharacterLoadoutItemStore("CharacterLoadoutItem.db2", &CharacterLoadoutItemLoadInfo::Instance)
DB2Storage< AnimKitEntry > sAnimKitStore("AnimKit.db2", &AnimKitLoadInfo::Instance)
DB2Storage< MapDifficultyEntry > sMapDifficultyStore("MapDifficulty.db2", &MapDifficultyLoadInfo::Instance)
DB2Storage< SpellEquippedItemsEntry > sSpellEquippedItemsStore("SpellEquippedItems.db2", &SpellEquippedItemsLoadInfo::Instance)
DB2Storage< ItemBonusEntry > sItemBonusStore("ItemBonus.db2", &ItemBonusLoadInfo::Instance)
DB2Storage< UiMapLinkEntry > sUiMapLinkStore("UiMapLink.db2", &UiMapLinkLoadInfo::Instance)
static UiMapAssignmentEntry const * FindNearestMapAssignment(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system)
static bool CheckUiMapAssignmentStatus(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapAssignmentEntry const *uiMapAssignment, UiMapAssignmentStatus *status)
DB2Storage< UnitPowerBarEntry > sUnitPowerBarStore("UnitPowerBar.db2", &UnitPowerBarLoadInfo::Instance)
DB2Storage< SpellReagentsEntry > sSpellReagentsStore("SpellReagents.db2", &SpellReagentsLoadInfo::Instance)
DB2Storage< LanguageWordsEntry > sLanguageWordsStore("LanguageWords.db2", &LanguageWordsLoadInfo::Instance)
DB2Storage< SkillLineXTraitTreeEntry > sSkillLineXTraitTreeStore("SkillLineXTraitTree.db2", &SkillLineXTraitTreeLoadInfo::Instance)
std::unordered_map< uint32, std::vector< uint32 > > ArtifactPowerLinksContainer
DB2Storage< TraitCostEntry > sTraitCostStore("TraitCost.db2", &TraitCostLoadInfo::Instance)
DB2Storage< ArtifactCategoryEntry > sArtifactCategoryStore("ArtifactCategory.db2", &ArtifactCategoryLoadInfo::Instance)
DB2Storage< ServerMessagesEntry > sServerMessagesStore("ServerMessages.db2", &ServerMessagesLoadInfo::Instance)
DB2Storage< ItemChildEquipmentEntry > sItemChildEquipmentStore("ItemChildEquipment.db2", &ItemChildEquipmentLoadInfo::Instance)
DB2Storage< SpecSetMemberEntry > sSpecSetMemberStore("SpecSetMember.db2", &SpecSetMemberLoadInfo::Instance)
DB2Storage< GarrBuildingPlotInstEntry > sGarrBuildingPlotInstStore("GarrBuildingPlotInst.db2", &GarrBuildingPlotInstLoadInfo::Instance)
DB2Storage< ItemBonusTreeNodeEntry > sItemBonusTreeNodeStore("ItemBonusTreeNode.db2", &ItemBonusTreeNodeLoadInfo::Instance)
DB2Storage< ChrCustomizationOptionEntry > sChrCustomizationOptionStore("ChrCustomizationOption.db2", &ChrCustomizationOptionLoadInfo::Instance)
DB2Storage< ItemSpecOverrideEntry > sItemSpecOverrideStore("ItemSpecOverride.db2", &ItemSpecOverrideLoadInfo::Instance)
DB2Storage< CreatureTypeEntry > sCreatureTypeStore("CreatureType.db2", &CreatureTypeLoadInfo::Instance)
DB2Storage< DurabilityQualityEntry > sDurabilityQualityStore("DurabilityQuality.db2", &DurabilityQualityLoadInfo::Instance)
DB2Storage< ChrCustomizationElementEntry > sChrCustomizationElementStore("ChrCustomizationElement.db2", &ChrCustomizationElementLoadInfo::Instance)
DB2Storage< SpellPowerDifficultyEntry > sSpellPowerDifficultyStore("SpellPowerDifficulty.db2", &SpellPowerDifficultyLoadInfo::Instance)
DB2Storage< ArtifactPowerEntry > sArtifactPowerStore("ArtifactPower.db2", &ArtifactPowerLoadInfo::Instance)
DB2Storage< TraitTreeLoadoutEntry > sTraitTreeLoadoutStore("TraitTreeLoadout.db2", &TraitTreeLoadoutLoadInfo::Instance)
DB2Storage< CriteriaEntry > sCriteriaStore("Criteria.db2", &CriteriaLoadInfo::Instance)
TaxiPathNodesByPath sTaxiPathNodesByPath
DB2Storage< ChallengeModeItemBonusOverrideEntry > sChallengeModeItemBonusOverrideStore("ChallengeModeItemBonusOverride.db2", &ChallengeModeItemBonusOverrideLoadInfo::Instance)
DB2Storage< AzeriteItemMilestonePowerEntry > sAzeriteItemMilestonePowerStore("AzeriteItemMilestonePower.db2", &AzeriteItemMilestonePowerLoadInfo::Instance)
std::pair< uint32, int32 > HotfixBlobKey
DB2Storage< QuestMoneyRewardEntry > sQuestMoneyRewardStore("QuestMoneyReward.db2", &QuestMoneyRewardLoadInfo::Instance)
DB2Storage< ItemXItemEffectEntry > sItemXItemEffectStore("ItemXItemEffect.db2", &ItemXItemEffectLoadInfo::Instance)
DB2Storage< ScenarioEntry > sScenarioStore("Scenario.db2", &ScenarioLoadInfo::Instance)
DB2Storage< TraitNodeXTraitNodeEntryEntry > sTraitNodeXTraitNodeEntryStore("TraitNodeXTraitNodeEntry.db2", &TraitNodeXTraitNodeEntryLoadInfo::Instance)
std::unordered_map< uint32, std::vector< ChrSpecialization > > GlyphRequiredSpecsContainer
DB2Storage< JournalInstanceEntry > sJournalInstanceStore("JournalInstance.db2", &JournalInstanceLoadInfo::Instance)
DB2Storage< ItemDamageOneHandEntry > sItemDamageOneHandStore("ItemDamageOneHand.db2", &ItemDamageOneHandLoadInfo::Instance)
DB2Storage< TransmogIllusionEntry > sTransmogIllusionStore("TransmogIllusion.db2", &TransmogIllusionLoadInfo::Instance)
std::unordered_map< uint32, std::vector< ItemSpecOverrideEntry const * > > ItemSpecOverridesContainer
static CurveInterpolationMode DetermineCurveType(CurveEntry const *curve, std::vector< DBCPosition2D > const &points)
DB2Storage< TransmogSetEntry > sTransmogSetStore("TransmogSet.db2", &TransmogSetLoadInfo::Instance)
DB2Storage< GuildColorEmblemEntry > sGuildColorEmblemStore("GuildColorEmblem.db2", &GuildColorEmblemLoadInfo::Instance)
DB2Storage< GarrBuildingEntry > sGarrBuildingStore("GarrBuilding.db2", &GarrBuildingLoadInfo::Instance)
DB2Storage< TraitNodeGroupXTraitCostEntry > sTraitNodeGroupXTraitCostStore("TraitNodeGroupXTraitCost.db2", &TraitNodeGroupXTraitCostLoadInfo::Instance)
DB2Storage< AzeriteKnowledgeMultiplierEntry > sAzeriteKnowledgeMultiplierStore("AzeriteKnowledgeMultiplier.db2", &AzeriteKnowledgeMultiplierLoadInfo::Instance)
DB2Storage< SpecializationSpellsEntry > sSpecializationSpellsStore("SpecializationSpells.db2", &SpecializationSpellsLoadInfo::Instance)
std::map< WMOAreaTableKey, WMOAreaTableEntry const * > WMOAreaTableLookupContainer
std::unordered_map< uint32, DB2Manager::MountTypeXCapabilitySet > MountCapabilitiesByTypeContainer
DB2Storage< GarrFollowerXAbilityEntry > sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", &GarrFollowerXAbilityLoadInfo::Instance)
DB2Storage< QuestInfoEntry > sQuestInfoStore("QuestInfo.db2", &QuestInfoLoadInfo::Instance)
DB2Storage< ItemArmorTotalEntry > sItemArmorTotalStore("ItemArmorTotal.db2", &ItemArmorTotalLoadInfo::Instance)
DB2Storage< ChrModelEntry > sChrModelStore("ChrModel.db2", &ChrModelLoadInfo::Instance)
std::unordered_map< uint32, std::vector< SpecializationSpellsEntry const * > > SpecializationSpellsContainer
DB2Storage< TraitTreeEntry > sTraitTreeStore("TraitTree.db2", &TraitTreeLoadInfo::Instance)
DB2Storage< GarrTalentTreeEntry > sGarrTalentTreeStore("GarrTalentTree.db2", &GarrTalentTreeLoadInfo::Instance)
DB2Storage< TransportRotationEntry > sTransportRotationStore("TransportRotation.db2", &TransportRotationLoadInfo::Instance)
DB2Storage< SpellRangeEntry > sSpellRangeStore("SpellRange.db2", &SpellRangeLoadInfo::Instance)
DB2Storage< ItemLevelSelectorQualityEntry > sItemLevelSelectorQualityStore("ItemLevelSelectorQuality.db2", &ItemLevelSelectorQualityLoadInfo::Instance)
DB2Storage< RewardPackXItemEntry > sRewardPackXItemStore("RewardPackXItem.db2", &RewardPackXItemLoadInfo::Instance)
DB2Storage< EmotesTextSoundEntry > sEmotesTextSoundStore("EmotesTextSound.db2", &EmotesTextSoundLoadInfo::Instance)
std::array< PowerTypeEntry const *, MAX_POWERS > PowerTypesContainer
bool ValidateBroadcastTextTactKeyOptionalData(std::vector< uint8 > const &data)
DB2Storage< ChrClassesEntry > sChrClassesStore("ChrClasses.db2", &ChrClassesLoadInfo::Instance)
DB2Storage< SpellShapeshiftFormEntry > sSpellShapeshiftFormStore("SpellShapeshiftForm.db2", &SpellShapeshiftFormLoadInfo::Instance)
DB2Storage< ItemPriceBaseEntry > sItemPriceBaseStore("ItemPriceBase.db2", &ItemPriceBaseLoadInfo::Instance)
DB2Storage< GlobalCurveEntry > sGlobalCurveStore("GlobalCurve.db2", &GlobalCurveLoadInfo::Instance)
DB2Storage< ModifierTreeEntry > sModifierTreeStore("ModifierTree.db2", &ModifierTreeLoadInfo::Instance)
std::unordered_map< uint32, std::vector< uint32 > > FactionTeamContainer
DB2Storage< SpellAuraRestrictionsEntry > sSpellAuraRestrictionsStore("SpellAuraRestrictions.db2", &SpellAuraRestrictionsLoadInfo::Instance)
DB2Storage< MountEntry > sMountStore("Mount.db2", &MountLoadInfo::Instance)
DB2Storage< VehicleSeatEntry > sVehicleSeatStore("VehicleSeat.db2", &VehicleSeatLoadInfo::Instance)
DB2Storage< ChrCustomizationDisplayInfoEntry > sChrCustomizationDisplayInfoStore("ChrCustomizationDisplayInfo.db2", &ChrCustomizationDisplayInfoLoadInfo::Instance)
std::unordered_map< uint32, std::vector< SpellProcsPerMinuteModEntry const * > > SpellProcsPerMinuteModContainer
DB2Storage< ArtifactPowerRankEntry > sArtifactPowerRankStore("ArtifactPowerRank.db2", &ArtifactPowerRankLoadInfo::Instance)
DB2Storage< DestructibleModelDataEntry > sDestructibleModelDataStore("DestructibleModelData.db2", &DestructibleModelDataLoadInfo::Instance)
DB2Storage< SpellShapeshiftEntry > sSpellShapeshiftStore("SpellShapeshift.db2", &SpellShapeshiftLoadInfo::Instance)
DB2Storage< GarrSiteLevelPlotInstEntry > sGarrSiteLevelPlotInstStore("GarrSiteLevelPlotInst.db2", &GarrSiteLevelPlotInstLoadInfo::Instance)
TaxiMask sOldContinentsNodesMask
DB2Storage< SpellVisualEffectNameEntry > sSpellVisualEffectNameStore("SpellVisualEffectName.db2", &SpellVisualEffectNameLoadInfo::Instance)
DB2Storage< SpellMiscEntry > sSpellMiscStore("SpellMisc.db2", &SpellMiscLoadInfo::Instance)
DB2Storage< WorldStateExpressionEntry > sWorldStateExpressionStore("WorldStateExpression.db2", &WorldStateExpressionLoadInfo::Instance)
DB2Storage< GarrPlotInstanceEntry > sGarrPlotInstanceStore("GarrPlotInstance.db2", &GarrPlotInstanceLoadInfo::Instance)
DB2Storage< LockEntry > sLockStore("Lock.db2", &LockLoadInfo::Instance)
DB2Storage< NamesProfanityEntry > sNamesProfanityStore("NamesProfanity.db2", &NamesProfanityLoadInfo::Instance)
DB2Storage< CharTitlesEntry > sCharTitlesStore("CharTitles.db2", &CharTitlesLoadInfo::Instance)
DB2Storage< GlyphRequiredSpecEntry > sGlyphRequiredSpecStore("GlyphRequiredSpec.db2", &GlyphRequiredSpecLoadInfo::Instance)
DB2Storage< ExpectedStatEntry > sExpectedStatStore("ExpectedStat.db2", &ExpectedStatLoadInfo::Instance)
DB2Storage< BattlePetSpeciesStateEntry > sBattlePetSpeciesStateStore("BattlePetSpeciesState.db2", &BattlePetSpeciesStateLoadInfo::Instance)
DB2Storage< NumTalentsAtLevelEntry > sNumTalentsAtLevelStore("NumTalentsAtLevel.db2", &NumTalentsAtLevelLoadInfo::Instance)
std::map< std::tuple< uint32, uint8, uint8, uint8 >, EmotesTextSoundEntry const * > EmotesTextSoundContainer
DB2Storage< ArtifactUnlockEntry > sArtifactUnlockStore("ArtifactUnlock.db2", &ArtifactUnlockLoadInfo::Instance)
DB2Storage< QuestLineXQuestEntry > sQuestLineXQuestStore("QuestLineXQuest.db2", &QuestLineXQuestLoadInfo::Instance)
DB2Storage< TraitCondEntry > sTraitCondStore("TraitCond.db2", &TraitCondLoadInfo::Instance)
DB2Storage< TransportAnimationEntry > sTransportAnimationStore("TransportAnimation.db2", &TransportAnimationLoadInfo::Instance)
std::vector< TalentEntry const * > TalentsByPosition[MAX_CLASSES][MAX_TALENT_TIERS][MAX_TALENT_COLUMNS]
DB2Storage< ContentTuningXExpectedEntry > sContentTuningXExpectedStore("ContentTuningXExpected.db2", &ContentTuningXExpectedLoadInfo::Instance)
DB2Storage< ConditionalContentTuningEntry > sConditionalContentTuningStore("ConditionalContentTuning.db2", &ConditionalContentTuningLoadInfo::Instance)
DB2Storage< WMOAreaTableEntry > sWMOAreaTableStore("WMOAreaTable.db2", &WmoAreaTableLoadInfo::Instance)
DB2Storage< TraitTreeXTraitCurrencyEntry > sTraitTreeXTraitCurrencyStore("TraitTreeXTraitCurrency.db2", &TraitTreeXTraitCurrencyLoadInfo::Instance)
DB2Storage< ItemXBonusTreeEntry > sItemXBonusTreeStore("ItemXBonusTree.db2", &ItemXBonusTreeLoadInfo::Instance)
DB2Storage< ChrSpecializationEntry > sChrSpecializationStore("ChrSpecialization.db2", &ChrSpecializationLoadInfo::Instance)
DB2Storage< Cfg_CategoriesEntry > sCfgCategoriesStore("Cfg_Categories.db2", &CfgCategoriesLoadInfo::Instance)
DB2Storage< ExpectedStatModEntry > sExpectedStatModStore("ExpectedStatMod.db2", &ExpectedStatModLoadInfo::Instance)
DB2Storage< PrestigeLevelInfoEntry > sPrestigeLevelInfoStore("PrestigeLevelInfo.db2", &PrestigeLevelInfoLoadInfo::Instance)
DB2Storage< ChrClassesXPowerTypesEntry > sChrClassesXPowerTypesStore("ChrClassesXPowerTypes.db2", &ChrClassesXPowerTypesLoadInfo::Instance)
DB2Storage< GarrPlotBuildingEntry > sGarrPlotBuildingStore("GarrPlotBuilding.db2", &GarrPlotBuildingLoadInfo::Instance)
DB2Storage< SceneScriptTextEntry > sSceneScriptTextStore("SceneScriptText.db2", &SceneScriptTextLoadInfo::Instance)
DB2Storage< ChrCustomizationReqChoiceEntry > sChrCustomizationReqChoiceStore("ChrCustomizationReqChoice.db2", &ChrCustomizationReqChoiceLoadInfo::Instance)
DB2Storage< GossipNPCOptionEntry > sGossipNPCOptionStore("GossipNPCOption.db2", &GossipNpcOptionLoadInfo::Instance)
DB2Storage< PowerTypeEntry > sPowerTypeStore("PowerType.db2", &PowerTypeLoadInfo::Instance)
DB2Storage< ItemSetEntry > sItemSetStore("ItemSet.db2", &ItemSetLoadInfo::Instance)
DB2Storage< TraitNodeEntryEntry > sTraitNodeEntryStore("TraitNodeEntry.db2", &TraitNodeEntryLoadInfo::Instance)
DB2Storage< QuestSortEntry > sQuestSortStore("QuestSort.db2", &QuestSortLoadInfo::Instance)
DB2Storage< GarrSiteLevelEntry > sGarrSiteLevelStore("GarrSiteLevel.db2", &GarrSiteLevelLoadInfo::Instance)
DB2Storage< SceneScriptPackageEntry > sSceneScriptPackageStore("SceneScriptPackage.db2", &SceneScriptPackageLoadInfo::Instance)
DB2Storage< CreatureDisplayInfoExtraEntry > sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", &CreatureDisplayInfoExtraLoadInfo::Instance)
DB2Storage< TotemCategoryEntry > sTotemCategoryStore("TotemCategory.db2", &TotemCategoryLoadInfo::Instance)
DB2Storage< SpellLevelsEntry > sSpellLevelsStore("SpellLevels.db2", &SpellLevelsLoadInfo::Instance)
DB2Storage< SpellVisualKitEntry > sSpellVisualKitStore("SpellVisualKit.db2", &SpellVisualKitLoadInfo::Instance)
DB2Storage< AdventureMapPOIEntry > sAdventureMapPOIStore("AdventureMapPOI.db2", &AdventureMapPoiLoadInfo::Instance)
DB2Storage< PvpTalentEntry > sPvpTalentStore("PvpTalent.db2", &PvpTalentLoadInfo::Instance)
DB2Storage< ScenarioStepEntry > sScenarioStepStore("ScenarioStep.db2", &ScenarioStepLoadInfo::Instance)
DB2Storage< JournalTierEntry > sJournalTierStore("JournalTier.db2", &JournalTierLoadInfo::Instance)
DB2Storage< BattlePetAbilityEntry > sBattlePetAbilityStore("BattlePetAbility.db2", &BattlePetAbilityLoadInfo::Instance)
DB2Storage< SpellVisualMissileEntry > sSpellVisualMissileStore("SpellVisualMissile.db2", &SpellVisualMissileLoadInfo::Instance)
DB2Storage< ItemEffectEntry > sItemEffectStore("ItemEffect.db2", &ItemEffectLoadInfo::Instance)
std::unordered_map< uint32, std::vector< ArtifactPowerEntry const * > > ArtifactPowersContainer
DB2Storage< BarberShopStyleEntry > sBarberShopStyleStore("BarberShopStyle.db2", &BarberShopStyleLoadInfo::Instance)
std::unordered_multimap< uint32, SkillRaceClassInfoEntry const * > SkillRaceClassInfoContainer
DB2Storage< ChatChannelsEntry > sChatChannelsStore("ChatChannels.db2", &ChatChannelsLoadInfo::Instance)
std::pair< uint32, bool(*)(std::vector< uint8 > const &data) > AllowedHotfixOptionalData
DB2Storage< MawPowerEntry > sMawPowerStore("MawPower.db2", &MawPowerLoadInfo::Instance)
DB2Storage< ToyEntry > sToyStore("Toy.db2", &ToyLoadInfo::Instance)
DB2Storage< CriteriaTreeEntry > sCriteriaTreeStore("CriteriaTree.db2", &CriteriaTreeLoadInfo::Instance)
DB2Storage< ChrClassUIDisplayEntry > sChrClassUIDisplayStore("ChrClassUIDisplay.db2", &ChrClassUiDisplayLoadInfo::Instance)
DB2Storage< TraitDefinitionEffectPointsEntry > sTraitDefinitionEffectPointsStore("TraitDefinitionEffectPoints.db2", &TraitDefinitionEffectPointsLoadInfo::Instance)
DB2Storage< CorruptionEffectsEntry > sCorruptionEffectsStore("CorruptionEffects.db2", &CorruptionEffectsLoadInfo::Instance)
DB2Storage< ImportPriceShieldEntry > sImportPriceShieldStore("ImportPriceShield.db2", &ImportPriceShieldLoadInfo::Instance)
DB2Storage< BattlePetSpeciesEntry > sBattlePetSpeciesStore("BattlePetSpecies.db2", &BattlePetSpeciesLoadInfo::Instance)
DB2Storage< ItemArmorShieldEntry > sItemArmorShieldStore("ItemArmorShield.db2", &ItemArmorShieldLoadInfo::Instance)
DB2Storage< AreaTriggerEntry > sAreaTriggerStore("AreaTrigger.db2", &AreaTriggerLoadInfo::Instance)
DB2Storage< SpellDurationEntry > sSpellDurationStore("SpellDuration.db2", &SpellDurationLoadInfo::Instance)
DB2Storage< SpellLearnSpellEntry > sSpellLearnSpellStore("SpellLearnSpell.db2", &SpellLearnSpellLoadInfo::Instance)
DB2Storage< ConversationLineEntry > sConversationLineStore("ConversationLine.db2", &ConversationLineLoadInfo::Instance)
DB2Storage< SpellCooldownsEntry > sSpellCooldownsStore("SpellCooldowns.db2", &SpellCooldownsLoadInfo::Instance)
DB2Storage< MountTypeXCapabilityEntry > sMountTypeXCapabilityStore("MountTypeXCapability.db2", &MountTypeXCapabilityLoadInfo::Instance)
DB2Storage< AdventureJournalEntry > sAdventureJournalStore("AdventureJournal.db2", &AdventureJournalLoadInfo::Instance)
void LoadDB2(std::bitset< TOTAL_LOCALES > &availableDb2Locales, std::vector< std::string > &errlist, StorageMap &stores, DB2StorageBase *storage, std::string const &db2Path, LocaleConstant defaultLocale, std::size_t cppRecordSize)
DB2Storage< MapDifficultyXConditionEntry > sMapDifficultyXConditionStore("MapDifficultyXCondition.db2", &MapDifficultyXConditionLoadInfo::Instance)
DB2Storage< BannedAddonsEntry > sBannedAddonsStore("BannedAddons.db2", &BannedAddonsLoadInfo::Instance)
std::tuple< uint16, uint8, int32 > WMOAreaTableKey
DB2Storage< ItemArmorQualityEntry > sItemArmorQualityStore("ItemArmorQuality.db2", &ItemArmorQualityLoadInfo::Instance)
DB2Storage< UnitConditionEntry > sUnitConditionStore("UnitCondition.db2", &UnitConditionLoadInfo::Instance)
std::unordered_map< uint32, std::vector< uint32 > > AreaGroupMemberContainer
DB2Storage< ItemDamageAmmoEntry > sItemDamageAmmoStore("ItemDamageAmmo.db2", &ItemDamageAmmoLoadInfo::Instance)
DB2Storage< ArtifactTierEntry > sArtifactTierStore("ArtifactTier.db2", &ArtifactTierLoadInfo::Instance)
std::unordered_map< uint32, std::vector< uint32 > > GlyphBindableSpellsContainer
DB2Storage< ItemModifiedAppearanceEntry > sItemModifiedAppearanceStore("ItemModifiedAppearance.db2", &ItemModifiedAppearanceLoadInfo::Instance)
DB2Storage< MailTemplateEntry > sMailTemplateStore("MailTemplate.db2", &MailTemplateLoadInfo::Instance)
DB2Storage< EmotesEntry > sEmotesStore("Emotes.db2", &EmotesLoadInfo::Instance)
std::unordered_map< uint32, std::vector< ItemSetSpellEntry const * > > ItemSetSpellContainer
DB2Storage< ItemSetSpellEntry > sItemSetSpellStore("ItemSetSpell.db2", &ItemSetSpellLoadInfo::Instance)
DB2Storage< Cfg_RegionsEntry > sCfgRegionsStore("Cfg_Regions.db2", &CfgRegionsLoadInfo::Instance)
DB2Storage< UiMapEntry > sUiMapStore("UiMap.db2", &UiMapLoadInfo::Instance)
DB2Storage< SkillLineAbilityEntry > sSkillLineAbilityStore("SkillLineAbility.db2", &SkillLineAbilityLoadInfo::Instance)
DB2Storage< CurrencyContainerEntry > sCurrencyContainerStore("CurrencyContainer.db2", &CurrencyContainerLoadInfo::Instance)
DB2Storage< ItemDisenchantLootEntry > sItemDisenchantLootStore("ItemDisenchantLoot.db2", &ItemDisenchantLootLoadInfo::Instance)
DB2Storage< KeychainEntry > sKeychainStore("Keychain.db2", &KeychainLoadInfo::Instance)
std::unordered_map< uint32, std::pair< std::vector< QuestPackageItemEntry const * >, std::vector< QuestPackageItemEntry const * > > > QuestPackageItemContainer
DB2Storage< TraitEdgeEntry > sTraitEdgeStore("TraitEdge.db2", &TraitEdgeLoadInfo::Instance)
DB2Storage< AzeriteUnlockMappingEntry > sAzeriteUnlockMappingStore("AzeriteUnlockMapping.db2", &AzeriteUnlockMappingLoadInfo::Instance)
DB2Storage< AzeriteTierUnlockEntry > sAzeriteTierUnlockStore("AzeriteTierUnlock.db2", &AzeriteTierUnlockLoadInfo::Instance)
DB2Storage< SummonPropertiesEntry > sSummonPropertiesStore("SummonProperties.db2", &SummonPropertiesLoadInfo::Instance)
DB2Storage< SpellReagentsCurrencyEntry > sSpellReagentsCurrencyStore("SpellReagentsCurrency.db2", &SpellReagentsCurrencyLoadInfo::Instance)
DB2Storage< GuildPerkSpellsEntry > sGuildPerkSpellsStore("GuildPerkSpells.db2", &GuildPerkSpellsLoadInfo::Instance)
DB2Storage< TraitDefinitionEntry > sTraitDefinitionStore("TraitDefinition.db2", &TraitDefinitionLoadInfo::Instance)
DB2Storage< AzeriteLevelInfoEntry > sAzeriteLevelInfoStore("AzeriteLevelInfo.db2", &AzeriteLevelInfoLoadInfo::Instance)
DB2Storage< LFGDungeonsEntry > sLFGDungeonsStore("LFGDungeons.db2", &LfgDungeonsLoadInfo::Instance)
DB2Storage< TaxiPathNodeEntry > sTaxiPathNodeStore("TaxiPathNode.db2", &TaxiPathNodeLoadInfo::Instance)
DB2Storage< SpellFocusObjectEntry > sSpellFocusObjectStore("SpellFocusObject.db2", &SpellFocusObjectLoadInfo::Instance)
DB2Storage< TactKeyEntry > sTactKeyStore("TactKey.db2", &TactKeyLoadInfo::Instance)
DB2Storage< NamesReservedLocaleEntry > sNamesReservedLocaleStore("NamesReservedLocale.db2", &NamesReservedLocaleLoadInfo::Instance)
DB2Storage< ImportPriceQualityEntry > sImportPriceQualityStore("ImportPriceQuality.db2", &ImportPriceQualityLoadInfo::Instance)
DB2Storage< PvpTierEntry > sPvpTierStore("PvpTier.db2", &PvpTierLoadInfo::Instance)
DB2Storage< ItemContextPickerEntryEntry > sItemContextPickerEntryStore("ItemContextPickerEntry.db2", &ItemContextPickerEntryLoadInfo::Instance)
DB2Storage< MountXDisplayEntry > sMountXDisplayStore("MountXDisplay.db2", &MountXDisplayLoadInfo::Instance)
DB2Storage< NameGenEntry > sNameGenStore("NameGen.db2", &NameGenLoadInfo::Instance)
DB2Storage< BroadcastTextEntry > sBroadcastTextStore("BroadcastText.db2", &BroadcastTextLoadInfo::Instance)
DB2Storage< SpellCastingRequirementsEntry > sSpellCastingRequirementsStore("SpellCastingRequirements.db2", &SpellCastingRequirementsLoadInfo::Instance)
std::unordered_map< uint32, std::vector< ItemLimitCategoryConditionEntry const * > > ItemLimitCategoryConditionContainer
DB2Storage< MythicPlusSeasonEntry > sMythicPlusSeasonStore("MythicPlusSeason.db2", &MythicPlusSeasonLoadInfo::Instance)
DB2Storage< GameObjectArtKitEntry > sGameObjectArtKitStore("GameObjectArtKit.db2", &GameobjectArtKitLoadInfo::Instance)
DB2Storage< ItemLimitCategoryConditionEntry > sItemLimitCategoryConditionStore("ItemLimitCategoryCondition.db2", &ItemLimitCategoryConditionLoadInfo::Instance)
DB2Storage< ItemExtendedCostEntry > sItemExtendedCostStore("ItemExtendedCost.db2", &ItemExtendedCostLoadInfo::Instance)
DB2Storage< SpellEffectEntry > sSpellEffectStore("SpellEffect.db2", &SpellEffectLoadInfo::Instance)
DB2Storage< ContentTuningXLabelEntry > sContentTuningXLabelStore("ContentTuningXLabel.db2", &ContentTuningXLabelLoadInfo::Instance)
std::array< std::vector< Trinity::wregex >, TOTAL_LOCALES+1 > NameValidationRegexContainer
DB2Storage< GuildColorBackgroundEntry > sGuildColorBackgroundStore("GuildColorBackground.db2", &GuildColorBackgroundLoadInfo::Instance)
DB2Storage< PVPDifficultyEntry > sPVPDifficultyStore("PVPDifficulty.db2", &PvpDifficultyLoadInfo::Instance)
std::map< HotfixBlobKey, std::vector< uint8 > > HotfixBlobMap
DB2Storage< TraitNodeEntryXTraitCondEntry > sTraitNodeEntryXTraitCondStore("TraitNodeEntryXTraitCond.db2", &TraitNodeEntryXTraitCondLoadInfo::Instance)
DB2Storage< QuestV2Entry > sQuestV2Store("QuestV2.db2", &QuestV2LoadInfo::Instance)
DB2Storage< AzeriteEmpoweredItemEntry > sAzeriteEmpoweredItemStore("AzeriteEmpoweredItem.db2", &AzeriteEmpoweredItemLoadInfo::Instance)
DB2Storage< VignetteEntry > sVignetteStore("Vignette.db2", &VignetteLoadInfo::Instance)
DB2Storage< CurrencyTypesEntry > sCurrencyTypesStore("CurrencyTypes.db2", &CurrencyTypesLoadInfo::Instance)
DB2Storage< LanguagesEntry > sLanguagesStore("Languages.db2", &LanguagesLoadInfo::Instance)
DB2Storage< MapChallengeModeEntry > sMapChallengeModeStore("MapChallengeMode.db2", &MapChallengeModeLoadInfo::Instance)
DB2Storage< SpellRadiusEntry > sSpellRadiusStore("SpellRadius.db2", &SpellRadiusLoadInfo::Instance)
DB2Storage< TraitCurrencyEntry > sTraitCurrencyStore("TraitCurrency.db2", &TraitCurrencyLoadInfo::Instance)
DB2Storage< AzeriteTierUnlockSetEntry > sAzeriteTierUnlockSetStore("AzeriteTierUnlockSet.db2", &AzeriteTierUnlockSetLoadInfo::Instance)
DB2Storage< GemPropertiesEntry > sGemPropertiesStore("GemProperties.db2", &GemPropertiesLoadInfo::Instance)
DB2Storage< ItemBonusListLevelDeltaEntry > sItemBonusListLevelDeltaStore("ItemBonusListLevelDelta.db2", &ItemBonusListLevelDeltaLoadInfo::Instance)
DB2Storage< ItemBonusListGroupEntryEntry > sItemBonusListGroupEntryStore("ItemBonusListGroupEntry.db2", &ItemBonusListGroupEntryLoadInfo::Instance)
DB2Storage< HeirloomEntry > sHeirloomStore("Heirloom.db2", &HeirloomLoadInfo::Instance)
DB2Storage< QuestXPEntry > sQuestXPStore("QuestXP.db2", &QuestXpLoadInfo::Instance)
DB2Storage< UiMapXMapArtEntry > sUiMapXMapArtStore("UiMapXMapArt.db2", &UiMapXMapArtLoadInfo::Instance)
DB2Storage< GlyphPropertiesEntry > sGlyphPropertiesStore("GlyphProperties.db2", &GlyphPropertiesLoadInfo::Instance)
DB2Storage< WorldEffectEntry > sWorldEffectStore("WorldEffect.db2", &WorldEffectLoadInfo::Instance)
std::unordered_map< uint32, std::vector< uint32 > > PhaseGroupContainer
DB2Storage< DungeonEncounterEntry > sDungeonEncounterStore("DungeonEncounter.db2", &DungeonEncounterLoadInfo::Instance)
DB2Storage< PvpTalentSlotUnlockEntry > sPvpTalentSlotUnlockStore("PvpTalentSlotUnlock.db2", &PvpTalentSlotUnlockLoadInfo::Instance)
DB2Storage< SpellTargetRestrictionsEntry > sSpellTargetRestrictionsStore("SpellTargetRestrictions.db2", &SpellTargetRestrictionsLoadInfo::Instance)
DB2Storage< ChrRacesEntry > sChrRacesStore("ChrRaces.db2", &ChrRacesLoadInfo::Instance)
DB2Storage< TraitNodeXTraitCostEntry > sTraitNodeXTraitCostStore("TraitNodeXTraitCost.db2", &TraitNodeXTraitCostLoadInfo::Instance)
DB2Storage< ParagonReputationEntry > sParagonReputationStore("ParagonReputation.db2", &ParagonReputationLoadInfo::Instance)
DB2Storage< QuestPackageItemEntry > sQuestPackageItemStore("QuestPackageItem.db2", &QuestPackageItemLoadInfo::Instance)
std::unordered_map< std::pair< uint32, uint8 >, ArtifactPowerRankEntry const * > ArtifactPowerRanksContainer
DB2Storage< PlayerConditionEntry > sPlayerConditionStore("PlayerCondition.db2", &PlayerConditionLoadInfo::Instance)
DB2Storage< GlyphBindableSpellEntry > sGlyphBindableSpellStore("GlyphBindableSpell.db2", &GlyphBindableSpellLoadInfo::Instance)
DB2Storage< TransmogSetItemEntry > sTransmogSetItemStore("TransmogSetItem.db2", &TransmogSetItemLoadInfo::Instance)
DB2Storage< RewardPackXCurrencyTypeEntry > sRewardPackXCurrencyTypeStore("RewardPackXCurrencyType.db2", &RewardPackXCurrencyTypeLoadInfo::Instance)
std::unordered_map< uint32, std::vector< SpellPowerEntry const * > > SpellPowerContainer
DB2Storage< ArtifactPowerLinkEntry > sArtifactPowerLinkStore("ArtifactPowerLink.db2", &ArtifactPowerLinkLoadInfo::Instance)
DB2Storage< ChrCustomizationReqEntry > sChrCustomizationReqStore("ChrCustomizationReq.db2", &ChrCustomizationReqLoadInfo::Instance)
DB2Storage< ImportPriceArmorEntry > sImportPriceArmorStore("ImportPriceArmor.db2", &ImportPriceArmorLoadInfo::Instance)
DB2Storage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", &CreatureDisplayInfoLoadInfo::Instance)
DB2Storage< ContentTuningEntry > sContentTuningStore("ContentTuning.db2", &ContentTuningLoadInfo::Instance)
DB2Storage< ItemLevelSelectorQualitySetEntry > sItemLevelSelectorQualitySetStore("ItemLevelSelectorQualitySet.db2", &ItemLevelSelectorQualitySetLoadInfo::Instance)
DB2Storage< TraitNodeXTraitCondEntry > sTraitNodeXTraitCondStore("TraitNodeXTraitCond.db2", &TraitNodeXTraitCondLoadInfo::Instance)
DB2Storage< SpellItemEnchantmentEntry > sSpellItemEnchantmentStore("SpellItemEnchantment.db2", &SpellItemEnchantmentLoadInfo::Instance)
DB2Storage< SpellClassOptionsEntry > sSpellClassOptionsStore("SpellClassOptions.db2", &SpellClassOptionsLoadInfo::Instance)
DB2Storage< AzeritePowerEntry > sAzeritePowerStore("AzeritePower.db2", &AzeritePowerLoadInfo::Instance)
DB2Storage< PowerDisplayEntry > sPowerDisplayStore("PowerDisplay.db2", &PowerDisplayLoadInfo::Instance)
DB2Storage< KeystoneAffixEntry > sKeystoneAffixStore("KeystoneAffix.db2", &KeystoneAffixLoadInfo::Instance)
DB2Storage< SoulbindConduitRankEntry > sSoulbindConduitRankStore("SoulbindConduitRank.db2", &SoulbindConduitRankLoadInfo::Instance)
DB2Storage< HolidaysEntry > sHolidaysStore("Holidays.db2", &HolidaysLoadInfo::Instance)
DB2Storage< ArmorLocationEntry > sArmorLocationStore("ArmorLocation.db2", &ArmorLocationLoadInfo::Instance)
DB2Storage< TransmogHolidayEntry > sTransmogHolidayStore("TransmogHoliday.db2", &TransmogHolidayLoadInfo::Instance)
DB2Storage< TalentEntry > sTalentStore("Talent.db2", &TalentLoadInfo::Instance)
DB2Storage< MovieEntry > sMovieStore("Movie.db2", &MovieLoadInfo::Instance)
DB2Storage< ItemCurrencyCostEntry > sItemCurrencyCostStore("ItemCurrencyCost.db2", &ItemCurrencyCostLoadInfo::Instance)
std::unordered_map< uint32, std::array< std::vector< NameGenEntry const * >, 2 > > NameGenContainer
DB2Storage< ItemAppearanceEntry > sItemAppearanceStore("ItemAppearance.db2", &ItemAppearanceLoadInfo::Instance)
DB2Storage< TransmogSetGroupEntry > sTransmogSetGroupStore("TransmogSetGroup.db2", &TransmogSetGroupLoadInfo::Instance)
DB2Storage< ItemSparseEntry > sItemSparseStore("ItemSparse.db2", &ItemSparseLoadInfo::Instance)
DB2Storage< TraitNodeGroupEntry > sTraitNodeGroupStore("TraitNodeGroup.db2", &TraitNodeGroupLoadInfo::Instance)
DB2Storage< FactionTemplateEntry > sFactionTemplateStore("FactionTemplate.db2", &FactionTemplateLoadInfo::Instance)
DB2Storage< ItemDamageTwoHandEntry > sItemDamageTwoHandStore("ItemDamageTwoHand.db2", &ItemDamageTwoHandLoadInfo::Instance)
DB2Storage< AuctionHouseEntry > sAuctionHouseStore("AuctionHouse.db2", &AuctionHouseLoadInfo::Instance)
DB2Storage< SpellProcsPerMinuteModEntry > sSpellProcsPerMinuteModStore("SpellProcsPerMinuteMod.db2", &SpellProcsPerMinuteModLoadInfo::Instance)
DB2Storage< MountCapabilityEntry > sMountCapabilityStore("MountCapability.db2", &MountCapabilityLoadInfo::Instance)
DB2Storage< SoundKitEntry > sSoundKitStore("SoundKit.db2", &SoundKitLoadInfo::Instance)
DB2Storage< ChrCustomizationChoiceEntry > sChrCustomizationChoiceStore("ChrCustomizationChoice.db2", &ChrCustomizationChoiceLoadInfo::Instance)
DB2Storage< AzeriteItemEntry > sAzeriteItemStore("AzeriteItem.db2", &AzeriteItemLoadInfo::Instance)
DB2Storage< ItemClassEntry > sItemClassStore("ItemClass.db2", &ItemClassLoadInfo::Instance)
DB2Storage< TraitNodeEntryXTraitCostEntry > sTraitNodeEntryXTraitCostStore("TraitNodeEntryXTraitCost.db2", &TraitNodeEntryXTraitCostLoadInfo::Instance)
DB2Storage< ItemSpecEntry > sItemSpecStore("ItemSpec.db2", &ItemSpecLoadInfo::Instance)
DB2Storage< AzeriteEssenceEntry > sAzeriteEssenceStore("AzeriteEssence.db2", &AzeriteEssenceLoadInfo::Instance)
DB2Storage< ItemDamageOneHandCasterEntry > sItemDamageOneHandCasterStore("ItemDamageOneHandCaster.db2", &ItemDamageOneHandCasterLoadInfo::Instance)
DB2Storage< SpellKeyboundOverrideEntry > sSpellKeyboundOverrideStore("SpellKeyboundOverride.db2", &SpellKeyboundOverrideLoadInfo::Instance)
std::unordered_map< uint32, DB2Manager::MountXDisplayContainer > MountDisplaysCointainer
DB2Storage< SpellTotemsEntry > sSpellTotemsStore("SpellTotems.db2", &SpellTotemsLoadInfo::Instance)
DB2Storage< TraitTreeLoadoutEntryEntry > sTraitTreeLoadoutEntryStore("TraitTreeLoadoutEntry.db2", &TraitTreeLoadoutEntryLoadInfo::Instance)
DB2Storage< GarrClassSpecEntry > sGarrClassSpecStore("GarrClassSpec.db2", &GarrClassSpecLoadInfo::Instance)
DB2Storage< SpellCategoriesEntry > sSpellCategoriesStore("SpellCategories.db2", &SpellCategoriesLoadInfo::Instance)
DB2Storage< BroadcastTextDurationEntry > sBroadcastTextDurationStore("BroadcastTextDuration.db2", &BroadcastTextDurationLoadInfo::Instance)
DB2Storage< AreaGroupMemberEntry > sAreaGroupMemberStore("AreaGroupMember.db2", &AreaGroupMemberLoadInfo::Instance)
DB2Storage< SceneScriptGlobalTextEntry > sSceneScriptGlobalTextStore("SceneScriptGlobalText.db2", &SceneScriptGlobalTextLoadInfo::Instance)
DB2Storage< SpellLabelEntry > sSpellLabelStore("SpellLabel.db2", &SpellLabelLoadInfo::Instance)
DB2Storage< AreaTableEntry > sAreaTableStore("AreaTable.db2", &AreaTableLoadInfo::Instance)
DB2Storage< SpellProcsPerMinuteEntry > sSpellProcsPerMinuteStore("SpellProcsPerMinute.db2", &SpellProcsPerMinuteLoadInfo::Instance)
DB2Storage< TaxiPathEntry > sTaxiPathStore("TaxiPath.db2", &TaxiPathLoadInfo::Instance)
static bool operator<(UiMapAssignmentStatus const &left, UiMapAssignmentStatus const &right)
std::unordered_set< uint32 > ToyItemIdsContainer
DB2Storage< SpellPowerEntry > sSpellPowerStore("SpellPower.db2", &SpellPowerLoadInfo::Instance)
DB2Storage< GarrFollowerEntry > sGarrFollowerStore("GarrFollower.db2", &GarrFollowerLoadInfo::Instance)
DB2Storage< ArtifactAppearanceSetEntry > sArtifactAppearanceSetStore("ArtifactAppearanceSet.db2", &ArtifactAppearanceSetLoadInfo::Instance)
DB2Storage< UiMapAssignmentEntry > sUiMapAssignmentStore("UiMapAssignment.db2", &UiMapAssignmentLoadInfo::Instance)
DB2Storage< RewardPackEntry > sRewardPackStore("RewardPack.db2", &RewardPackLoadInfo::Instance)
DB2Storage< FactionEntry > sFactionStore("Faction.db2", &FactionLoadInfo::Instance)
DB2Storage< DurabilityCostsEntry > sDurabilityCostsStore("DurabilityCosts.db2", &DurabilityCostsLoadInfo::Instance)
DB2Storage< VehicleEntry > sVehicleStore("Vehicle.db2", &VehicleLoadInfo::Instance)
DB2Storage< CinematicSequencesEntry > sCinematicSequencesStore("CinematicSequences.db2", &CinematicSequencesLoadInfo::Instance)
TaxiMask sHordeTaxiNodesMask
DB2Storage< GuildColorBorderEntry > sGuildColorBorderStore("GuildColorBorder.db2", &GuildColorBorderLoadInfo::Instance)
DB2Storage< SpellItemEnchantmentConditionEntry > sSpellItemEnchantmentConditionStore("SpellItemEnchantmentCondition.db2", &SpellItemEnchantmentConditionLoadInfo::Instance)
DB2Storage< CinematicCameraEntry > sCinematicCameraStore("CinematicCamera.db2", &CinematicCameraLoadInfo::Instance)
DB2Storage< SpellCastTimesEntry > sSpellCastTimesStore("SpellCastTimes.db2", &SpellCastTimesLoadInfo::Instance)
DB2Storage< GarrAbilityEntry > sGarrAbilityStore("GarrAbility.db2", &GarrAbilityLoadInfo::Instance)
DB2Storage< GarrPlotEntry > sGarrPlotStore("GarrPlot.db2", &GarrPlotLoadInfo::Instance)
DB2Storage< SpellScalingEntry > sSpellScalingStore("SpellScaling.db2", &SpellScalingLoadInfo::Instance)
DB2Storage< JournalEncounterEntry > sJournalEncounterStore("JournalEncounter.db2", &JournalEncounterLoadInfo::Instance)
static DBCPosition2D CalculateGlobalUiMapPosition(int32 uiMapID, DBCPosition2D uiPosition)
std::vector< TaxiPathNodeList > TaxiPathNodesByPath
#define DEFINE_DB2_SET_COMPARATOR(structure)
@ AZERITE_TIER_UNLOCK_SET_FLAG_DEFAULT
@ UI_MAP_SYSTEM_ADVENTURE
#define MAX_AZERITE_EMPOWERED_TIER
@ DIFFICULTY_FLAG_DEFAULT
constexpr size_t PLAYER_EXPLORED_ZONES_SIZE
#define MAX_PVP_TALENT_SLOTS
@ PlusMaxLevelForExpansion
#define MAX_TALENT_COLUMNS
@ MAX_BATTLEGROUND_BRACKETS
#define MAX_AZERITE_ESSENCE_SLOT
@ QUEST_PACKAGE_FILTER_UNMATCHED
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< HotfixDatabaseConnection > HotfixDatabase
Accessor to the hotfix database.
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
constexpr uint32 GetMaxLevelForExpansion(uint32 expansion)
#define MAX_SPECIALIZATIONS
#define PET_SPEC_OVERRIDE_CLASS_INDEX
#define INITIAL_SPECIALIZATION_INDEX
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
void strToLower(std::string &str)
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
AzeriteEssencePowerEntry const * GetAzeriteEssencePower(uint32 azeriteEssenceId, uint32 rank) const
std::vector< RewardPackXCurrencyTypeEntry const * > const * GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const
SoulbindConduitRankEntry const * GetSoulbindConduitRank(int32 soulbindConduitId, int32 rank) const
std::vector< ItemSetSpellEntry const * > const * GetItemSetSpells(uint32 itemSetId) const
ChrModelEntry const * GetChrModel(uint8 race, uint8 gender) const
float EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass, int32 mythicPlusMilestoneSeason) const
static ContentTuningEntry const * GetContentTuningForArea(AreaTableEntry const *areaEntry)
std::vector< uint32 > const * GetArtifactPowerLinks(uint32 artifactPowerId) const
SkillRaceClassInfoEntry const * GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_) const
static char const * GetBroadcastTextValue(BroadcastTextEntry const *broadcastText, LocaleConstant locale=DEFAULT_LOCALE, uint8 gender=GENDER_MALE, bool forceGender=false)
FriendshipRepReactionSet const * GetFriendshipRepReactions(uint32 friendshipRepID) const
std::vector< QuestLineXQuestEntry const * > const * GetQuestsForQuestLine(uint32 questLineId) const
std::vector< uint32 > const * GetFactionTeamList(uint32 faction) const
bool IsSpecSetMember(int32 specSetId, uint32 specId) const
uint32 GetRequiredAzeriteLevelForAzeritePowerTier(uint32 azeriteUnlockSetId, ItemContext context, uint32 tier) const
std::vector< SpellVisualMissileEntry const * > const * GetSpellVisualMissiles(int32 spellVisualMissileSetId) const
MountEntry const * GetMountById(uint32 id) const
ItemModifiedAppearanceEntry const * GetDefaultItemModifiedAppearance(uint32 itemId) const
ItemClassEntry const * GetItemClassByOldEnum(uint32 itemClass) const
std::vector< TransmogSetItemEntry const * > const * GetTransmogSetItems(uint32 transmogSetId) const
std::vector< SkillLineEntry const * > const * GetSkillLinesForParentSkill(uint32 parentSkillId) const
MapDifficultyEntry const * GetMapDifficultyData(uint32 mapId, Difficulty difficulty) const
std::vector< ItemLimitCategoryConditionEntry const * > const * GetItemLimitCategoryConditions(uint32 categoryId) const
static bool IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId, bool requireAllTotems=true)
WMOAreaTableEntry const * GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const
uint32 GetPowerIndexByClass(Powers power, uint32 classId) const
ItemChildEquipmentEntry const * GetItemChildEquipment(uint32 itemId) const
std::vector< AzeriteItemMilestonePowerEntry const * > const & GetAzeriteItemMilestonePowers() const
static DB2Manager & Instance()
uint8 GetPvpItemLevelBonus(uint32 itemId) const
uint32 GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const
std::vector< std::pair< uint32, PlayerConditionEntry const * > > MapDifficultyConditionsContainer
uint32 GetEmptyAnimStateID() const
MapDifficultyConditionsContainer const * GetMapDifficultyConditions(uint32 mapDifficultyId) const
std::vector< ChrSpecialization > const * GetGlyphRequiredSpecs(uint32 glyphPropertiesId) const
static PVPDifficultyEntry const * GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id)
ChrSpecializationEntry const * GetChrSpecializationByIndex(uint32 class_, uint32 index) const
uint32 GetQuestUniqueBitFlag(uint32 questId)
std::vector< uint32 > const * GetPhasesForGroup(uint32 group) const
MountXDisplayContainer const * GetMountDisplays(uint32 mountId) const
DB2StorageBase const * GetStorage(uint32 type) const
static LFGDungeonsEntry const * GetLfgDungeon(uint32 mapId, Difficulty difficulty)
void Map2ZoneCoordinates(uint32 areaId, float &x, float &y) const
HotfixContainer const & GetHotfixData() const
static uint32 GetLiquidFlags(uint32 liquidType)
static char const * GetChrRaceName(uint8 race, LocaleConstant locale=DEFAULT_LOCALE)
std::map< int32, HotfixPush > HotfixContainer
TaxiPathEntry const * GetTaxiPath(uint32 from, uint32 to) const
std::vector< RewardPackXItemEntry const * > const * GetRewardPackItemsByRewardID(uint32 rewardPackID) const
PowerTypeEntry const * GetPowerTypeByName(std::string const &name) const
std::vector< TransmogSetEntry const * > const * GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const
bool Zone2MapCoordinates(uint32 areaId, float &x, float &y) const
ChrClassUIDisplayEntry const * GetUiDisplayForClass(Classes unitClass) const
MapDifficultyEntry const * GetDefaultMapDifficulty(uint32 mapId, Difficulty *difficulty=nullptr) const
AzeriteEmpoweredItemEntry const * GetAzeriteEmpoweredItem(uint32 itemId) const
std::vector< uint32 > const * GetGlyphBindableSpells(uint32 glyphPropertiesId) const
JournalTierEntry const * GetJournalTier(uint32 index) const
int32 const * GetBroadcastTextDuration(int32 broadcastTextId, LocaleConstant locale=DEFAULT_LOCALE) const
std::vector< ItemSpecOverrideEntry const * > const * GetItemSpecOverrides(uint32 itemId) const
ChrSpecializationEntry const * GetDefaultChrSpecializationForClass(uint32 class_) const
MountTypeXCapabilitySet const * GetMountCapabilities(uint32 mountType) const
bool HasItemCurrencyCost(uint32 itemId) const
std::vector< HotfixOptionalData > const * GetHotfixOptionalData(uint32 tableHash, int32 recordId, LocaleConstant locale) const
CurrencyContainerEntry const * GetCurrencyContainerForCurrencyQuantity(uint32 currencyId, int32 quantity) const
static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, int32 *uiMapId=nullptr, DBCPosition2D *newPos=nullptr)
std::vector< ChrCustomizationChoiceEntry const * > const * GetCustomiztionChoices(uint32 chrCustomizationOptionId) const
ShapeshiftFormModelData const * GetShapeshiftFormModelData(uint8 race, uint8 gender, uint8 form) const
static int32 GetNumTalentsAtLevel(uint32 level, Classes playerClass)
std::vector< std::pair< uint32, std::vector< uint32 > > > const * GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const
void InsertNewHotfix(uint32 tableHash, uint32 recordId)
ParagonReputationEntry const * GetParagonReputation(uint32 factionId) const
uint32 GetGlobalCurveId(GlobalCurve globalCurveType) const
static bool IsInArea(uint32 objectAreaId, uint32 areaId)
ItemModifiedAppearanceEntry const * GetItemModifiedAppearance(uint32 itemId, uint32 appearanceModId) const
bool IsAzeriteItem(uint32 itemId) const
uint32 GetItemDisplayId(uint32 itemId, uint32 appearanceModId) const
std::vector< SpellProcsPerMinuteModEntry const * > GetSpellProcsPerMinuteMods(uint32 spellprocsPerMinuteId) const
AzeriteItemMilestonePowerEntry const * GetAzeriteItemMilestonePower(uint8 slot) const
static PVPDifficultyEntry const * GetBattlegroundBracketByLevel(uint32 mapid, uint32 level)
static bool IsValidSpellFamiliyName(SpellFamilyNames family)
HeirloomEntry const * GetHeirloomByItemId(uint32 itemId) const
std::string GetNameGenEntry(uint8 race, uint8 gender) const
bool IsToyItem(uint32 toy) const
std::vector< TalentEntry const * > const & GetTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const
void LoadHotfixBlob(uint32 localeMask)
EmotesTextSoundEntry const * GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const
ArtifactPowerRankEntry const * GetArtifactPowerRank(uint32 artifactPowerId, uint8 rank) const
static ConditionalChrModelEntry const * GetConditionalChrModel(int32 chrModelId)
float GetCurveValueAt(uint32 curveId, float x) const
std::vector< MountXDisplayEntry const * > MountXDisplayContainer
std::vector< AzeritePowerSetMemberEntry const * > const * GetAzeritePowers(uint32 itemId) const
uint32 GetRedirectedContentTuningId(uint32 contentTuningId, uint32 redirectFlag) const
static char const * GetClassName(uint8 class_, LocaleConstant locale=DEFAULT_LOCALE)
void LoadHotfixOptionalData(uint32 localeMask)
Optional< ContentTuningLevels > GetContentTuningData(uint32 contentTuningId, uint32 redirectFlag, bool forItem=false) const
std::vector< SpecializationSpellsEntry const * > const * GetSpecializationSpells(uint32 specId) const
bool HasContentTuningLabel(uint32 contentTuningId, int32 label) const
MountEntry const * GetMount(uint32 spellId) const
static uint32 GetDefaultMapLight(uint32 mapId)
std::vector< QuestPackageItemEntry const * > const * GetQuestPackageItems(uint32 questPackageID) const
std::vector< uint32 > GetAreasForGroup(uint32 areaGroupId) const
std::vector< uint8 > const * GetHotfixBlobData(uint32 tableHash, int32 recordId, LocaleConstant locale) const
uint32 GetHotfixCount() const
std::unordered_set< uint32 > const * GetPVPStatIDsForMap(uint32 mapId) const
std::vector< ArtifactPowerEntry const * > GetArtifactPowers(uint8 artifactId) const
ResponseCodes ValidateName(std::wstring const &name, LocaleConstant locale) const
MapDifficultyEntry const * GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty) const
std::set< MountTypeXCapabilityEntry const *, MountTypeXCapabilityEntryComparator > MountTypeXCapabilitySet
bool IsUiMapPhase(uint32 phaseId) const
PowerTypeEntry const * GetPowerTypeEntry(Powers power) const
uint32 LoadStores(std::string const &dataPath, LocaleConstant defaultLocale)
std::vector< QuestPackageItemEntry const * > const * GetQuestPackageItemsFallback(uint32 questPackageID) const
std::set< FriendshipRepReactionEntry const *, FriendshipRepReactionEntryComparator > FriendshipRepReactionSet
std::vector< ChrCustomizationOptionEntry const * > const * GetCustomiztionOptions(uint8 race, uint8 gender) const
static char const * GetCreatureFamilyPetName(uint32 petfamily, LocaleConstant locale)
std::vector< SkillLineAbilityEntry const * > const * GetSkillLineAbilitiesBySkill(uint32 skillId) const
void LoadHotfixData(uint32 localeMask)
int32 GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const
std::pair< float, float > GetCurveXAxisRange(uint32 curveId) const
TransmogIllusionEntry const * GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const
Interface class for common access.
uint32 GetTableHash() const
std::string const & GetFileName() const
void LoadStringsFromDB(LocaleConstant locale)
DB2LoadInfo const * GetLoadInfo() const
void Load(std::string const &path, LocaleConstant locale)
void LoadStringsFrom(std::string const &path, LocaleConstant locale)
Class used to access individual fields of database query result.
std::string GetString() const
std::vector< uint8 > GetBinary() const
std::vector< value_type > _data
auto MapEqualRange(M &map, typename M::key_type const &key)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
auto MapGetValuePtr(M &map, typename M::key_type const &key)
TC_REGEX_NAMESPACE ::regex regex
TC_REGEX_NAMESPACE ::wregex wregex
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default TC string format function.
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
int32 TargetLevelMaxDelta
EnumFlag< ContentTuningFlag > GetFlags() const
static constexpr DB2LoadInfo Instance
int32 MaxMythicPlusSeasonID
int32 MinMythicPlusSeasonID
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
DB2FieldMeta const * Fields
std::vector< uint8 > Data
uint32 AvailableLocalesMask
std::vector< HotfixRecord > Records
uint32 AvailableLocalesMask
static constexpr DB2LoadInfo Instance
uint8 FallbackDifficultyID
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
float CreatureSpellDamageMod
float PlayerSecondaryStatMod
float CreatureAutoAttackDPSMod
float PlayerPrimaryStatMod
static constexpr DB2LoadInfo Instance
int32 ActiveMilestoneSeason
ExpectedStatModReducer(int32 mythicPlusMilestoneSeason)
float operator()(float mod, ContentTuningXExpectedEntry const *contentTuningXExpected) const
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
int32 NumTalentsDemonHunter
int32 NumTalentsDeathKnight
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
char const * NameGlobalStringTag
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
std::array< DBCPosition3D, 2 > Region
int32 WmoDoodadPlacementID
static constexpr DB2LoadInfo Instance
struct UiMapAssignmentStatus::@197 Inside
UiMapAssignmentEntry const * UiMapAssignment
float DistanceToRegionEdgeSquared
float DistanceToRegionBottom
float DistanceToRegionTop
float DistanceToRegionCenterSquared
struct UiMapAssignmentStatus::@198 Outside
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance