35#include <boost/filesystem/directory.hpp>
36#include <boost/filesystem/operations.hpp>
454 std::array<HotfixBlobMap, TOTAL_LOCALES> _hotfixBlob;
456 std::array<std::map<HotfixBlobKey, std::vector<DB2Manager::HotfixOptionalData>>,
TOTAL_LOCALES> _hotfixOptionalData;
464 std::vector<AzeriteItemMilestonePowerEntry const*> _azeriteItemMilestonePowers;
465 std::array<AzeriteItemMilestonePowerEntry const*, MAX_AZERITE_ESSENCE_SLOT> _azeriteItemMilestonePowerByEssenceSlot;
466 std::unordered_map<
uint32 , std::vector<AzeritePowerSetMemberEntry const*>> _azeritePowers;
467 std::unordered_map<std::pair<
uint32 ,
ItemContext>, std::array<uint8, MAX_AZERITE_EMPOWERED_TIER>> _azeriteTierUnlockLevels;
469 std::unordered_map<std::pair<uint8, uint8>,
CharBaseInfoEntry const*> _charBaseInfoByRaceAndClass;
470 std::array<ChrClassUIDisplayEntry const*, MAX_CLASSES> _uiDisplayByClass;
471 std::array<std::array<uint32, MAX_POWERS>,
MAX_CLASSES> _powersByClass;
472 std::unordered_map<
uint32 , std::vector<ChrCustomizationChoiceEntry const*>> _chrCustomizationChoicesByOption;
473 std::unordered_map<std::pair<uint8, uint8>,
ChrModelEntry const*> _chrModelsByRaceAndGender;
475 std::unordered_map<std::pair<
uint8 ,
uint8>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender;
476 std::unordered_map<
uint32 , std::vector<std::pair<
uint32 , std::vector<uint32>>>> _chrCustomizationRequiredChoices;
478 std::unordered_map<int32, ConditionalChrModelEntry const*> _conditionalChrModelsByChrModelId;
479 std::unordered_map<
uint32 , std::vector<ConditionalContentTuningEntry const*>> _conditionalContentTuning;
480 std::unordered_set<std::pair<uint32, int32>> _contentTuningLabels;
481 std::unordered_map<
uint32 , std::vector<int32>> _creatureLabels;
482 std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers;
486 std::unordered_map<
uint32 , std::vector<ContentTuningXExpectedEntry const*>> _expectedStatModsByContentTuning;
488 std::unordered_map<uint32, std::set<FriendshipRepReactionEntry const*, DB2Manager::FriendshipRepReactionEntryComparator>> _friendshipRepReactions;
490 std::unordered_map<
uint32 , std::vector<int32>> _gameobjectLabels;
495 std::unordered_set<uint32> _itemsWithCurrencyCost;
500 std::vector<JournalTierEntry const*> _journalTiersByIndex;
502 std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions;
503 std::unordered_map<uint32, MountEntry const*> _mountsBySpellId;
508 std::unordered_map<uint32, ParagonReputationEntry const*> _paragonReputations;
512 std::unordered_map<uint32, uint8> _pvpItemBonus;
514 std::unordered_map<uint32, std::vector<QuestLineXQuestEntry const*>> _questsByQuestLine;
516 std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes;
517 std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems;
518 std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine;
519 std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill;
523 std::unordered_set<std::pair<int32, uint32>> _specsBySpecSet;
524 std::unordered_set<uint8> _spellFamilyNames;
526 std::unordered_map<int32, std::vector<SpellVisualMissileEntry const*>> _spellVisualMissilesBySet;
528 std::unordered_map<std::pair<uint32, uint32>,
TaxiPathEntry const*> _taxiPaths;
530 std::unordered_map<uint32, TransmogIllusionEntry const*> _transmogIllusionsByEnchantmentId;
531 std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance;
532 std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet;
533 std::unordered_map<int32, UiMapBounds> _uiMapBounds;
534 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByMap[
MAX_UI_MAP_SYSTEM];
535 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByArea[
MAX_UI_MAP_SYSTEM];
536 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoDoodadPlacement[
MAX_UI_MAP_SYSTEM];
537 std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoGroup[
MAX_UI_MAP_SYSTEM];
538 std::unordered_set<int32> _uiMapPhases;
540 std::unordered_map<uint32, std::unordered_set<uint32>> _pvpStatIdsByMap;
543void LoadDB2(std::bitset<TOTAL_LOCALES>& availableDb2Locales, std::vector<std::string>& errlist,
StorageMap& stores,
DB2StorageBase* storage, std::string
const& db2Path,
549 std::string clientMetaString, ourMetaString;
556 clientMetaString += char(
FT_INT);
565 ourMetaString += char(loadInfo->
Fields[i].
Type);
567 ASSERT(clientMetaString == ourMetaString,
568 "%s C++ structure fields %s do not match generated types from the client %s",
569 storage->
GetFileName().c_str(), ourMetaString.c_str(), clientMetaString.c_str());
573 "Size of '%s' set by format string (%u) not equal size of C++ structure (" SZFMTD ").",
579 storage->
Load(db2Path +
localeNames[defaultLocale] +
'/', defaultLocale);
581 catch (std::system_error
const& e)
583 if (e.code() == std::errc::no_such_file_or_directory)
590 catch (std::exception
const& e)
592 errlist.emplace_back(e.what());
601 if (defaultLocale == i || !availableDb2Locales[i])
608 catch (std::system_error
const& e)
610 if (e.code() != std::errc::no_such_file_or_directory)
615 catch (std::exception
const& e)
617 errlist.emplace_back(e.what());
622 if (availableDb2Locales[i])
638 std::string db2Path = dataPath +
"dbc/";
640 std::vector<std::string> loadErrors;
641 std::bitset<TOTAL_LOCALES> availableDb2Locales = [&]()
643 std::bitset<TOTAL_LOCALES> foundLocales;
644 boost::filesystem::directory_iterator db2PathItr(db2Path), end;
645 while (db2PathItr != end)
649 foundLocales[locale] =
true;
656 if (!availableDb2Locales[defaultLocale])
661 LoadDB2(availableDb2Locales, loadErrors, _stores, &store, db2Path, defaultLocale,
sizeof(T));
1018 if (!loadErrors.empty())
1020 sLog->SetSynchronous();
1022 for (std::string
const& error : loadErrors)
1038 TC_LOG_FATAL(
"misc",
"You have _outdated_ DB2 files. Please extract correct versions from current using client.");
1044 return availableDb2Locales.to_ulong();
1052 _areaGroupMembers[areaGroupMember->AreaGroupID].push_back(areaGroupMember->AreaID);
1057 "PLAYER_EXPLORED_ZONES_SIZE must be at least %d", (areaTable->AreaBit + 63) / 64);
1061 _artifactPowers[artifactPower->ArtifactID].push_back(artifactPower);
1065 _artifactPowerLinks[artifactPowerLink->PowerA].push_back(artifactPowerLink->PowerB);
1066 _artifactPowerLinks[artifactPowerLink->PowerB].push_back(artifactPowerLink->PowerA);
1070 _artifactPowerRanks[std::pair<uint32, uint8>{ artifactPowerRank->ArtifactPowerID, artifactPowerRank->RankIndex }] = artifactPowerRank;
1073 _azeriteEmpoweredItems[azeriteEmpoweredItem->ItemID] = azeriteEmpoweredItem;
1076 _azeriteEssencePowersByIdAndRank[std::pair<uint32, uint32>{ azeriteEssencePower->AzeriteEssenceID, azeriteEssencePower->Tier }] = azeriteEssencePower;
1079 _azeriteItemMilestonePowers.push_back(azeriteItemMilestonePower);
1084 uint32 azeriteEssenceSlot = 0;
1091 _azeriteItemMilestonePowerByEssenceSlot[azeriteEssenceSlot] = azeriteItemMilestonePower;
1092 ++azeriteEssenceSlot;
1099 _azeritePowers[azeritePowerSetMember->AzeritePowerSetID].push_back(azeritePowerSetMember);
1102 _azeriteTierUnlockLevels[std::pair<uint32, ItemContext>{ azeriteTierUnlock->AzeriteTierUnlockSetID,
ItemContext(azeriteTierUnlock->ItemCreationContext) }][azeriteTierUnlock->Tier] = azeriteTierUnlock->AzeriteLevel;
1106 if (battlemaster->MaxLevel < battlemaster->MinLevel)
1108 TC_LOG_ERROR(
"db2.hotfix.battlemaster_list",
"Battlemaster ({}) contains bad values for MinLevel ({}) and MaxLevel ({}). Swapping values.", battlemaster->ID, battlemaster->MinLevel, battlemaster->MaxLevel);
1111 if (battlemaster->MaxPlayers < battlemaster->MinPlayers)
1113 TC_LOG_ERROR(
"db2.hotfix.battlemaster_list",
"Battlemaster ({}) contains bad values for MinPlayers ({}) and MaxPlayers ({}). Swapping values.", battlemaster->ID, battlemaster->MinPlayers, battlemaster->MaxPlayers);
1114 int8 minPlayers = battlemaster->MinPlayers;
1122 _broadcastTextDurations[{ broadcastTextDuration->BroadcastTextID,
CascLocaleBit(broadcastTextDuration->Locale) }] = broadcastTextDuration->Duration;
1125 _charBaseInfoByRaceAndClass[{ charBaseInfo->RaceID, charBaseInfo->ClassID }] = charBaseInfo;
1130 _uiDisplayByClass[uiDisplay->ChrClassesID] = uiDisplay;
1134 std::set<ChrClassesXPowerTypesEntry const*, ChrClassesXPowerTypesEntryComparator> powers;
1136 powers.insert(power);
1138 for (std::array<uint32, MAX_POWERS>& powersForClass : _powersByClass)
1145 if (_powersByClass[power->ClassID][j] !=
MAX_POWERS)
1150 _powersByClass[power->ClassID][power->PowerType] = index;
1155 _chrCustomizationChoicesByOption[customizationChoice->ChrCustomizationOptionID].push_back(customizationChoice);
1157 std::unordered_multimap<uint32, std::pair<uint32, uint8>> shapeshiftFormByModel;
1158 std::unordered_map<uint32, ChrCustomizationDisplayInfoEntry const*> displayInfoByCustomizationChoice;
1167 displayInfoByCustomizationChoice[customizationElement->ChrCustomizationChoiceID] = customizationDisplayInfo;
1169 shapeshiftFormByModel.emplace(customizationOption->ChrModelID, std::make_pair(customizationOption->ID,
uint8(customizationDisplayInfo->ShapeshiftFormID)));
1174 std::unordered_map<uint32, std::vector<ChrCustomizationOptionEntry const*>> customizationOptionsByModel;
1176 customizationOptionsByModel[customizationOption->ChrModelID].push_back(customizationOption);
1182 std::vector<std::pair<uint32, std::vector<uint32>>>& requiredChoicesForReq = _chrCustomizationRequiredChoices[reqChoice->ChrCustomizationReqID];
1183 std::vector<uint32>* choices =
nullptr;
1184 for (std::pair<
uint32, std::vector<uint32>>& choicesForOption : requiredChoicesForReq)
1186 if (choicesForOption.first == customizationChoice->ChrCustomizationOptionID)
1188 choices = &choicesForOption.second;
1194 std::pair<uint32, std::vector<uint32>>& choicesForReq = requiredChoicesForReq.emplace_back();
1195 choicesForReq.first = customizationChoice->ChrCustomizationOptionID;
1196 choices = &choicesForReq.second;
1198 choices->push_back(reqChoice->ChrCustomizationChoiceID);
1202 std::unordered_map<uint32, uint32> parentRaces;
1204 if (chrRace->UnalteredVisualRaceID)
1205 parentRaces[chrRace->UnalteredVisualRaceID] = chrRace->ID;
1211 _chrModelsByRaceAndGender[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex) }] = model;
1215 std::vector<ChrCustomizationOptionEntry const*>& raceOptions = _chrCustomizationOptionsByRaceAndGender[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex) }];
1216 raceOptions.insert(raceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end());
1220 std::vector<ChrCustomizationOptionEntry const*>& parentRaceOptions = _chrCustomizationOptionsByRaceAndGender[{
uint8(*parentRace),
uint8(raceModel->Sex) }];
1221 parentRaceOptions.insert(parentRaceOptions.end(), customizationOptionsForModel->begin(), customizationOptionsForModel->end());
1228 ShapeshiftFormModelData& data = _chrCustomizationChoicesForShapeshifts[{
uint8(raceModel->ChrRacesID),
uint8(raceModel->Sex), shapeshiftOptionsForModel.second.second }];
1229 data.
OptionID = shapeshiftOptionsForModel.second.first;
1234 for (std::size_t i = 0; i < data.
Choices->size(); ++i)
1241 memset(_chrSpecializationsByIndex, 0,
sizeof(_chrSpecializationsByIndex));
1247 uint32 storageIndex = chrSpec->ClassID;
1250 ASSERT(!chrSpec->ClassID);
1254 _chrSpecializationsByIndex[storageIndex][chrSpec->OrderIndex] = chrSpec;
1258 _conditionalChrModelsByChrModelId[conditionalChrModel->ChrModelID] = conditionalChrModel;
1262 _conditionalContentTuning[conditionalContentTuning->ParentContentTuningID].push_back(conditionalContentTuning);
1264 for (
auto& [parentContentTuningId, conditionalContentTunings] : _conditionalContentTuning)
1270 _expectedStatModsByContentTuning[contentTuningXExpectedStat->ContentTuningID].push_back(contentTuningXExpectedStat);
1273 _contentTuningLabels.emplace(contentTuningXLabel->ContentTuningID, contentTuningXLabel->LabelID);
1276 _creatureLabels[creatureLabel->CreatureDifficultyID].push_back(creatureLabel->LabelID);
1279 _currencyContainers.emplace(currencyContainer->CurrencyTypesID, currencyContainer);
1282 std::unordered_map<
uint32 , std::vector<CurvePointEntry const*>> unsortedPoints;
1285 unsortedPoints[curvePoint->CurveID].push_back(curvePoint);
1287 for (
auto& [curveId, curvePoints] : unsortedPoints)
1290 std::vector<DBCPosition2D>& points = _curvePoints[curveId];
1291 points.resize(curvePoints.size());
1297 _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextID, emoteTextSound->RaceID, emoteTextSound->SexID, emoteTextSound->ClassID)] = emoteTextSound;
1300 _expectedStatsByLevel[std::make_pair(expectedStat->Lvl, expectedStat->ExpansionID)] = expectedStat;
1303 if (faction->ParentFactionID)
1304 _factionTeams[faction->ParentFactionID].push_back(faction->ID);
1307 _friendshipRepReactions[friendshipRepReaction->FriendshipRepID].insert(friendshipRepReaction);
1311 if (gameObjectDisplayInfo->GeoBoxMax.X < gameObjectDisplayInfo->GeoBoxMin.X)
1313 if (gameObjectDisplayInfo->GeoBoxMax.Y < gameObjectDisplayInfo->GeoBoxMin.Y)
1315 if (gameObjectDisplayInfo->GeoBoxMax.Z < gameObjectDisplayInfo->GeoBoxMin.Z)
1320 _creatureLabels[gameobjectLabel->GameObjectID].push_back(gameobjectLabel->LabelID);
1323 _heirlooms[heirloom->ItemID] = heirloom;
1326 _glyphBindableSpells[glyphBindableSpell->GlyphPropertiesID].push_back(glyphBindableSpell->SpellID);
1329 _glyphRequiredSpecs[glyphRequiredSpec->GlyphPropertiesID].push_back(
ChrSpecialization(glyphRequiredSpec->ChrSpecializationID));
1333 ASSERT(_itemChildEquipment.find(itemChildEquipment->ParentItemID) == _itemChildEquipment.end(),
"Item must have max 1 child item.");
1334 _itemChildEquipment[itemChildEquipment->ParentItemID] = itemChildEquipment;
1339 ASSERT(itemClass->ClassID <
int32(_itemClassByOldEnum.size()));
1340 ASSERT(!_itemClassByOldEnum[itemClass->ClassID]);
1341 _itemClassByOldEnum[itemClass->ClassID] = itemClass;
1345 _itemsWithCurrencyCost.insert(itemCurrencyCost->ItemID);
1348 _itemCategoryConditions[condition->ParentItemLimitCategoryID].push_back(condition);
1352 ASSERT(appearanceMod->ItemID <= 0xFFFFFF);
1353 _itemModifiedAppearancesByItem[appearanceMod->ItemID | (appearanceMod->ItemAppearanceModifierID << 24)] = appearanceMod;
1357 _itemSetSpells[itemSetSpell->ItemSetID].push_back(itemSetSpell);
1360 _itemSpecOverrides[itemSpecOverride->ItemID].push_back(itemSpecOverride);
1363 _journalTiersByIndex.push_back(journalTier);
1366 _mapDifficulties[entry->MapID][entry->DifficultyID] = entry;
1368 std::vector<MapDifficultyXConditionEntry const*> mapDifficultyConditions;
1371 mapDifficultyConditions.push_back(mapDifficultyCondition);
1377 _mapDifficultyConditions[mapDifficultyCondition->MapDifficultyID].emplace_back(mapDifficultyCondition->ID, playerCondition);
1380 _mountsBySpellId[mount->SourceSpellID] = mount;
1383 _mountCapabilitiesByType[mountTypeCapability->MountTypeID].insert(mountTypeCapability);
1386 _mountDisplays[mountDisplay->MountID].push_back(mountDisplay);
1389 _nameGenData[nameGen->RaceID][nameGen->Sex].push_back(nameGen);
1395 bool conversionResult =
Utf8toWStr(namesProfanity->Name, name);
1396 ASSERT(conversionResult);
1397 if (namesProfanity->Language != -1)
1398 _nameValidators[namesProfanity->Language].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1406 _nameValidators[i].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1414 bool conversionResult =
Utf8toWStr(namesReserved->Name, name);
1415 ASSERT(conversionResult);
1416 _nameValidators[
TOTAL_LOCALES].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1423 bool conversionResult =
Utf8toWStr(namesReserved->Name, name);
1424 ASSERT(conversionResult);
1430 if (namesReserved->LocaleMask & (1 << i))
1431 _nameValidators[i].emplace_back(name, Trinity::regex::perl | Trinity::regex::icase | Trinity::regex::optimize);
1437 _paragonReputations[paragonReputation->FactionID] = paragonReputation;
1440 std::unordered_map<
uint32 , std::vector<PathNodeEntry const*>> unsortedNodes;
1443 unsortedNodes[pathNode->PathID].push_back(pathNode);
1445 for (
auto&& [pathId, pathNodes] : unsortedNodes)
1447 PathDb2& path = _paths[pathId];
1449 path.
Locations.resize(pathNodes.size());
1453 return sLocationStore.AssertEntry(node->LocationID)->Pos;
1458 if (
sPathStore.HasRecord(pathProperty->PathID))
1459 _paths[pathProperty->PathID].Properties.push_back(pathProperty);
1464 _phasesByGroup[group->PhaseGroupID].push_back(phase->ID);
1469 ASSERT(!_powerTypes[powerType->PowerTypeEnum]);
1471 _powerTypes[powerType->PowerTypeEnum] = powerType;
1480 _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta;
1487 if (talentUnlock->Slot & (1 << i))
1489 ASSERT(!_pvpTalentSlotUnlock[i]);
1490 _pvpTalentSlotUnlock[i] = talentUnlock;
1497 _questsByQuestLine[questLineQuest->QuestLineID].push_back(questLineQuest);
1499 for (
auto& [questLineId, questLineQuests] : _questsByQuestLine)
1506 _questPackages[questPackageItem->PackageID].first.push_back(questPackageItem);
1508 _questPackages[questPackageItem->PackageID].second.push_back(questPackageItem);
1512 _rewardPackCurrencyTypes[rewardPackXCurrencyType->RewardPackID].push_back(rewardPackXCurrencyType);
1515 _rewardPackItems[rewardPackXItem->RewardPackID].push_back(rewardPackXItem);
1518 if (skill->ParentSkillLineID)
1519 _skillLinesByParentSkillLine[skill->ParentSkillLineID].push_back(skill);
1522 _skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility);
1526 _skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry));
1529 _soulbindConduitRanks[{ soulbindConduitRank->SoulbindConduitID, soulbindConduitRank->RankIndex }] = soulbindConduitRank;
1532 _specializationSpellsBySpec[specSpells->SpecID].push_back(specSpells);
1535 _specsBySpecSet.insert(std::make_pair(specSetMember->SpecSetID,
uint32(specSetMember->ChrSpecializationID)));
1538 _spellFamilyNames.insert(classOption->SpellClassSet);
1541 _spellProcsPerMinuteMods[ppmMod->SpellProcsPerMinuteID].push_back(ppmMod);
1544 _spellVisualMissilesBySet[spellVisualMissile->SpellVisualMissileSetID].push_back(spellVisualMissile);
1549 ASSERT(talentInfo->TierID <
MAX_TALENT_TIERS,
"MAX_TALENT_TIERS must be at least %u", talentInfo->TierID + 1);
1550 ASSERT(talentInfo->ColumnIndex <
MAX_TALENT_COLUMNS,
"MAX_TALENT_COLUMNS must be at least %u", talentInfo->ColumnIndex + 1);
1552 _talentsByPosition[talentInfo->ClassID][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo);
1556 _taxiPaths[{ entry->FromTaxiNode, entry->ToTaxiNode }] = entry;
1561 std::vector<uint32> pathLength;
1562 pathLength.resize(pathCount);
1564 pathLength[entry->PathID] = std::max(pathLength[entry->PathID], entry->NodeIndex + 1u);
1576 _toys.insert(toy->ItemID);
1579 _transmogIllusionsByEnchantmentId[transmogIllusion->SpellItemEnchantmentID] = transmogIllusion;
1587 _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set);
1588 _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem);
1591 std::unordered_multimap<int32, UiMapAssignmentEntry const*> uiMapAssignmentByUiMap;
1594 uiMapAssignmentByUiMap.emplace(uiMapAssignment->UiMapID, uiMapAssignment);
1598 if (uiMapAssignment->MapID >= 0)
1599 _uiMapAssignmentByMap[uiMap->System].emplace(uiMapAssignment->MapID, uiMapAssignment);
1600 if (uiMapAssignment->AreaID)
1601 _uiMapAssignmentByArea[uiMap->System].emplace(uiMapAssignment->AreaID, uiMapAssignment);
1602 if (uiMapAssignment->WmoDoodadPlacementID)
1603 _uiMapAssignmentByWmoDoodadPlacement[uiMap->System].emplace(uiMapAssignment->WmoDoodadPlacementID, uiMapAssignment);
1604 if (uiMapAssignment->WmoGroupID)
1605 _uiMapAssignmentByWmoGroup[uiMap->System].emplace(uiMapAssignment->WmoGroupID, uiMapAssignment);
1609 std::unordered_map<std::pair<uint32, uint32>,
UiMapLinkEntry const*> uiMapLinks;
1611 uiMapLinks[std::make_pair(uiMapLink->ParentUiMapID,
uint32(uiMapLink->ChildUiMapID))] = uiMapLink;
1615 UiMapBounds& bounds = _uiMapBounds[uiMap->ID];
1616 memset(&bounds, 0,
sizeof(bounds));
1626 if (uiMapAssignmentForMap.second->MapID >= 0 &&
1627 uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 &&
1628 uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0)
1630 uiMapAssignment = uiMapAssignmentForMap.second;
1635 if (!uiMapAssignment)
1638 for (std::pair<int32 const, UiMapAssignmentEntry const*>
const& uiMapAssignmentForMap :
Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ParentUiMapID))
1640 if (uiMapAssignmentForMap.second->MapID == uiMapAssignment->
MapID &&
1641 uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 &&
1642 uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0)
1644 parentUiMapAssignment = uiMapAssignmentForMap.second;
1649 if (!parentUiMapAssignment)
1652 float parentXsize = parentUiMapAssignment->
Region[1].X - parentUiMapAssignment->
Region[0].X;
1653 float parentYsize = parentUiMapAssignment->
Region[1].Y - parentUiMapAssignment->
Region[0].Y;
1654 float bound0scale = (uiMapAssignment->
Region[1].X - parentUiMapAssignment->
Region[0].X) / parentXsize;
1655 float bound0 = ((1.0f - bound0scale) * parentUiMapAssignment->
UiMax.
Y) + (bound0scale * parentUiMapAssignment->
UiMin.
Y);
1656 float bound2scale = (uiMapAssignment->
Region[0].X - parentUiMapAssignment->
Region[0].X) / parentXsize;
1657 float bound2 = ((1.0f - bound2scale) * parentUiMapAssignment->
UiMax.
Y) + (bound2scale * parentUiMapAssignment->
UiMin.
Y);
1658 float bound1scale = (uiMapAssignment->
Region[1].Y - parentUiMapAssignment->
Region[0].Y) / parentYsize;
1659 float bound1 = ((1.0f - bound1scale) * parentUiMapAssignment->
UiMax.
X) + (bound1scale * parentUiMapAssignment->
UiMin.
X);
1660 float bound3scale = (uiMapAssignment->
Region[0].Y - parentUiMapAssignment->
Region[0].Y) / parentYsize;
1661 float bound3 = ((1.0f - bound3scale) * parentUiMapAssignment->
UiMax.
X) + (bound3scale * parentUiMapAssignment->
UiMin.
X);
1662 if ((bound3 - bound1) > 0.0f || (bound2 - bound0) > 0.0f)
1664 bounds.Bounds[0] = bound0;
1665 bounds.Bounds[1] = bound1;
1666 bounds.Bounds[2] = bound2;
1667 bounds.Bounds[3] = bound3;
1668 bounds.IsUiAssignment =
true;
1674 bounds.IsUiAssignment =
false;
1675 bounds.IsUiLink =
true;
1676 bounds.Bounds[0] = uiMapLink->UiMin.Y;
1677 bounds.Bounds[1] = uiMapLink->UiMin.X;
1678 bounds.Bounds[2] = uiMapLink->UiMax.Y;
1679 bounds.Bounds[3] = uiMapLink->UiMax.X;
1684 if (uiMapArt->PhaseID)
1685 _uiMapPhases.insert(uiMapArt->PhaseID);
1688 _wmoAreaTableLookup[
WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry;
1699 if (!node->IsPartOfTaxiNetwork())
1716 if (uiMapId == 985 || uiMapId == 986)
1721 _pvpStatIdsByMap[pvpStat->MapID].insert(pvpStat->ID);
1728 auto itr = _stores.find(type);
1729 if (itr != _stores.end())
1739 QueryResult result =
HotfixDatabase.Query(
"SELECT Id, UniqueId, TableHash, RecordId, Status FROM hotfix_data ORDER BY Id");
1743 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix info entries.");
1749 std::map<std::pair<uint32, int32>,
bool> deletedRecords;
1753 Field* fields = result->Fetch();
1760 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1764 for (std::size_t locale = 0; locale <
TOTAL_LOCALES; ++locale)
1766 if (!availableDb2Locales[locale])
1769 if (!_hotfixBlob[locale].
contains(key))
1770 availableDb2Locales[locale] =
false;
1773 if (availableDb2Locales.none())
1775 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);
1789 push.
Records.push_back(hotfixRecord);
1795 }
while (result->NextRow());
1797 for (
auto itr = deletedRecords.begin(); itr != deletedRecords.end(); ++itr)
1800 store->EraseRecord(itr->first.second);
1809 QueryResult result =
HotfixDatabase.Query(
"SELECT TableHash, RecordId, locale, `Blob` FROM hotfix_blob ORDER BY TableHash");
1813 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix blob entries.");
1817 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1818 uint32 hotfixBlobCount = 0;
1821 Field* fields = result->Fetch();
1824 auto storeItr = _stores.find(tableHash);
1825 if (storeItr != _stores.end())
1827 TC_LOG_ERROR(
"sql.sql",
"Table hash 0x{:X} points to a loaded DB2 store {}, fill related table instead of hotfix_blob",
1828 tableHash, storeItr->second->GetFileName());
1833 std::string localeName = fields[2].
GetString();
1838 TC_LOG_ERROR(
"sql.sql",
"`hotfix_blob` contains invalid locale: {} at TableHash: 0x{:X} and RecordID: {}", localeName, tableHash, recordId);
1842 if (!availableDb2Locales[locale])
1845 _hotfixBlob[locale][std::make_pair(tableHash, recordId)] = fields[3].
GetBinary();
1847 }
while (result->NextRow());
1854 return data.size() == 8 + 16;
1864 QueryResult result =
HotfixDatabase.Query(
"SELECT TableHash, RecordId, locale, `Key`, `Data` FROM hotfix_optional_data ORDER BY TableHash");
1868 TC_LOG_INFO(
"server.loading",
">> Loaded 0 hotfix optional data records.");
1872 std::bitset<TOTAL_LOCALES> availableDb2Locales = localeMask;
1873 uint32 hotfixOptionalDataCount = 0;
1876 Field* fields = result->Fetch();
1880 if (allowedHotfixes.begin() == allowedHotfixes.end())
1882 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);
1887 auto storeItr = _stores.find(tableHash);
1888 if (storeItr == _stores.end())
1890 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` references unknown DB2 store by hash 0x{:X} with RecordID: {}", tableHash, recordId);
1894 std::string localeName = fields[2].
GetString();
1899 TC_LOG_ERROR(
"sql.sql",
"`hotfix_optional_data` contains invalid locale: {} at TableHash: 0x{:X} and RecordID: {}", localeName, tableHash, recordId);
1903 if (!availableDb2Locales[locale])
1908 auto allowedHotfixItr = std::find_if(allowedHotfixes.begin(), allowedHotfixes.end(), [&](std::pair<uint32 const, AllowedHotfixOptionalData>
const& v)
1910 return v.second.first == optionalData.Key;
1912 if (allowedHotfixItr == allowedHotfixes.end())
1914 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: {}",
1915 optionalData.
Key, tableHash, recordId);
1920 if (!allowedHotfixItr->second.second(optionalData.
Data))
1922 TC_LOG_ERROR(
"sql.sql",
"Table `hotfix_optional_data` contains invalid data for DB2 store 0x{:X}, RecordID: {} and Key: 0x{:X}",
1923 tableHash, recordId, optionalData.
Key);
1927 _hotfixOptionalData[locale][std::make_pair(tableHash, recordId)].push_back(std::move(optionalData));
1928 hotfixOptionalDataCount++;
1929 }
while (result->NextRow());
1931 TC_LOG_INFO(
"server.loading",
">> Loaded {} hotfix optional data records in {} ms", hotfixOptionalDataCount,
GetMSTimeDiffToNow(oldMSTime));
1936 return _hotfixData.size();
1973 push.
Records.push_back(hotfixRecord);
1979 auto itr = _areaGroupMembers.find(areaGroupId);
1980 if (itr != _areaGroupMembers.end())
1983 return std::vector<uint32>();
1990 if (objectAreaId == areaId)
1998 }
while (objectAreaId);
2010 return contentTuning;
2021 auto itr = _artifactPowers.find(artifactId);
2022 if (itr != _artifactPowers.end())
2025 return std::vector<ArtifactPowerEntry const*>{};
2056 return _azeriteItemMilestonePowers;
2062 return _azeriteItemMilestonePowerByEssenceSlot[slot];
2076 if (std::array<uint8, MAX_AZERITE_EMPOWERED_TIER>
const* levels =
Trinity::Containers::MapGetValuePtr(_azeriteTierUnlockLevels, std::make_pair(azeriteUnlockSetId, context)))
2077 return (*levels)[tier];
2082 return (*levels)[tier];
2091 if (broadcastText->
Text1[locale][0] !=
'\0')
2092 return broadcastText->
Text1[locale];
2097 if (broadcastText->
Text[locale][0] !=
'\0')
2098 return broadcastText->
Text[locale];
2116 return _uiDisplayByClass[unitClass];
2125 if (classEntry->
Name[locale][0] !=
'\0')
2126 return classEntry->
Name[locale];
2133 return _powersByClass[classId][power];
2167 if (raceEntry->
Name[locale][0] !=
'\0')
2168 return raceEntry->
Name[locale];
2175 return _chrSpecializationsByIndex[class_][index];
2187 if (conditionalContentTuning->RedirectFlag & redirectFlag)
2188 return conditionalContentTuning->RedirectContentTuningID;
2190 return contentTuningId;
2244 return _contentTuningLabels.contains({ contentTuningId, label });
2256 return petFamily->
Name[locale][0] !=
'\0' ? petFamily->
Name[locale] :
nullptr;
2262 return labels ? std::span<int32 const>(*labels) : std::span<int32 const>();
2268 if (quantity >= p.second->MinAmount && (!p.second->MaxAmount || quantity <= p.second->MaxAmount))
2277 return { points->front().X, points->back().X };
2279 return { 0.0f, 0.0f };
2284 switch (curve->
Type)
2290 switch (points.size())
2316 auto itr = _curvePoints.find(curveId);
2317 if (itr == _curvePoints.end())
2321 std::vector<DBCPosition2D>
const& points = itr->second;
2334 std::size_t pointIndex = 0;
2335 while (pointIndex < points.size() && points[pointIndex].X <= x)
2339 if (pointIndex >= points.size())
2340 return points.back().Y;
2341 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2343 return points[pointIndex].Y;
2344 return (((x - points[pointIndex - 1].X) / xDiff) * (points[pointIndex].Y - points[pointIndex - 1].Y)) + points[pointIndex - 1].Y;
2348 std::size_t pointIndex = 0;
2349 while (pointIndex < points.size() && points[pointIndex].X <= x)
2353 if (pointIndex >= points.size())
2354 return points.back().Y;
2355 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2357 return points[pointIndex].Y;
2358 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;
2362 std::size_t pointIndex = 1;
2363 while (pointIndex < points.size() && points[pointIndex].X <= x)
2365 if (pointIndex == 1)
2367 if (pointIndex >= points.size() - 1)
2368 return points[points.size() - 2].Y;
2369 float xDiff = points[pointIndex].X - points[pointIndex - 1].X;
2371 return points[pointIndex].Y;
2373 float mu = (x - points[pointIndex - 1].X) / xDiff;
2374 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;
2375 float a1 = points[pointIndex - 2].Y - 2.5f * points[pointIndex - 1].Y + 2.0f * points[pointIndex].Y - 0.5f * points[pointIndex + 1].Y;
2376 float a2 = -0.5f * points[pointIndex - 2].Y + 0.5f * points[pointIndex].Y;
2377 float a3 = points[pointIndex - 1].Y;
2379 return a0 * mu * mu * mu + a1 * mu * mu + a2 * mu + a3;
2383 float xDiff = points[2].X - points[0].X;
2386 float mu = (x - points[0].X) / xDiff;
2387 return ((1.0f - mu) * (1.0f - mu) * points[0].Y) + (1.0f - mu) * 2.0f * mu * points[1].Y + mu * mu * points[2].Y;
2391 float xDiff = points[3].X - points[0].X;
2394 float mu = (x - points[0].X) / xDiff;
2395 return (1.0f - mu) * (1.0f - mu) * (1.0f - mu) * points[0].Y
2396 + 3.0f * mu * (1.0f - mu) * (1.0f - mu) * points[1].Y
2397 + 3.0f * mu * mu * (1.0f - mu) * points[2].Y
2398 + mu * mu * mu * points[3].Y;
2402 float xDiff = points.back().X - points[0].X;
2404 return points.back().Y;
2406 std::vector<float> tmp(points.size());
2407 for (std::size_t i = 0; i < points.size(); ++i)
2408 tmp[i] = points[i].Y;
2410 float mu = (x - points[0].X) / xDiff;
2414 for (
int32 k = 0; k < i; ++k)
2416 float val = tmp[k] + mu * (tmp[k + 1] - tmp[k]);
2435 return emotesTextSound;
2438 return emotesTextSound;
2443template<
float(ExpectedStatModEntry::*field)>
2450 if (!contentTuningXExpected)
2455 if (ActiveMilestoneSeason < mythicPlusSeason->MilestoneSeason)
2471 auto expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, expansion));
2472 if (expectedStatItr == _expectedStatsByLevel.end())
2473 expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, -2));
2475 if (expectedStatItr == _expectedStatsByLevel.end())
2502 value = expectedStatItr->second->CreatureHealth;
2503 if (contentTuningMods)
2504 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2510 value = expectedStatItr->second->PlayerHealth;
2511 if (contentTuningMods)
2512 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2518 value = expectedStatItr->second->CreatureAutoAttackDps;
2519 if (contentTuningMods)
2520 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2526 value = expectedStatItr->second->CreatureArmor;
2527 if (contentTuningMods)
2528 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2534 value = expectedStatItr->second->PlayerMana;
2535 if (contentTuningMods)
2536 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2542 value = expectedStatItr->second->PlayerPrimaryStat;
2543 if (contentTuningMods)
2544 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2550 value = expectedStatItr->second->PlayerSecondaryStat;
2551 if (contentTuningMods)
2552 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2558 value = expectedStatItr->second->ArmorConstant;
2559 if (contentTuningMods)
2560 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2568 value = expectedStatItr->second->CreatureSpellDamage;
2569 if (contentTuningMods)
2570 value *= std::accumulate(contentTuningMods->begin(), contentTuningMods->end(), 1.0f,
2595 return labels ? std::span<int32 const>(*labels) : std::span<int32 const>();
2601 if (
GlobalCurve(globalCurveEntry->Type) == globalCurveType)
2602 return globalCurveEntry->CurveID;
2629 return _itemClassByOldEnum[itemClass];
2634 return _itemsWithCurrencyCost.count(itemId) > 0;
2646 return itemAppearance->ItemDisplayInfoID;
2653 auto itr = _itemModifiedAppearancesByItem.find(itemId | (appearanceModId << 24));
2654 if (itr != _itemModifiedAppearancesByItem.end())
2658 if (appearanceModId)
2660 itr = _itemModifiedAppearancesByItem.find(itemId);
2661 if (itr != _itemModifiedAppearancesByItem.end())
2685 if (index < _journalTiersByIndex.size())
2686 return _journalTiersByIndex[index];
2693 if (dungeon->MapID ==
int32(mapId) &&
Difficulty(dungeon->DifficultyID) == difficulty)
2717 return 1 << liq->SoundBank;
2725 if (!difficultiesForMap)
2728 auto difficultyEnd = difficultiesForMap->end();
2731 auto foundDifficulty = std::ranges::find_if(difficultiesForMap->begin(), difficultyEnd,
2732 [](
uint32 difficultyId) { return sDifficultyStore.HasRecord(difficultyId); },
2735 if (foundDifficulty == difficultyEnd)
2741 auto defaultDifficulty = std::ranges::find_if(foundDifficulty, difficultyEnd,
2743 [](std::pair<uint32 const, MapDifficultyEntry const*>
const& p) {
return sDifficultyStore.LookupEntry(p.first); });
2745 if (defaultDifficulty != difficultyEnd)
2746 foundDifficulty = defaultDifficulty;
2750 *difficulty =
Difficulty(foundDifficulty->first);
2752 return foundDifficulty->second;
2757 auto itr = _mapDifficulties.find(mapId);
2758 if (itr == _mapDifficulties.end())
2761 auto diffItr = itr->second.find(difficulty);
2762 if (diffItr == itr->second.end())
2765 return diffItr->second;
2774 uint32 tmpDiff = difficulty;
2819 auto ritr = _nameGenData.find(race);
2820 if (ritr == _nameGenData.end())
2823 if (ritr->second[gender].empty())
2832 if (Trinity::regex_search(name,
regex))
2837 if (Trinity::regex_search(name,
regex))
2846 if (!numTalentsAtLevel)
2849 if (numTalentsAtLevel)
2851 switch (playerClass)
2881 if (entry->MapID != mapid || entry->MinLevel > level)
2885 if (entry->MaxLevel >= level)
2889 if (!maxEntry || maxEntry->
MaxLevel < entry->MaxLevel)
2899 if (entry->MapID == mapid && entry->GetBracketId() ==
id)
2908 if (_pvpTalentSlotUnlock[slot])
2913 return _pvpTalentSlotUnlock[slot]->DeathKnightLevelRequired;
2915 return _pvpTalentSlotUnlock[slot]->DemonHunterLevelRequired;
2919 return _pvpTalentSlotUnlock[slot]->LevelRequired;
2942 auto itr = _questPackages.find(questPackageID);
2943 if (itr != _questPackages.end())
2944 return &itr->second.first;
2951 auto itr = _questPackages.find(questPackageID);
2952 if (itr != _questPackages.end())
2953 return &itr->second.second;
2964 return v2->UniqueBitFlag;
2975 return _powerTypes[power];
2984 if (powerName == name)
2987 powerName.erase(std::remove(powerName.begin(), powerName.end(),
'_'), powerName.end());
2988 if (powerName == name)
2997 auto itr = _pvpItemBonus.find(itemId);
2998 if (itr != _pvpItemBonus.end())
3033 if (!skllRaceClassInfo->RaceMask.IsEmpty() && !(skllRaceClassInfo->RaceMask.HasRace(race)))
3035 if (skllRaceClassInfo->ClassMask && !(skllRaceClassInfo->ClassMask & (1 << (class_ - 1))))
3038 return skllRaceClassInfo;
3046 std::vector<SkillRaceClassInfoEntry const*> result;
3048 result.push_back(skillRaceClassInfo);
3065 return _specsBySpecSet.count(std::make_pair(specSetId, specId)) > 0;
3070 return _spellFamilyNames.count(family) > 0;
3075 auto itr = _spellProcsPerMinuteMods.find(spellprocsPerMinuteId);
3076 if (itr != _spellProcsPerMinuteMods.end())
3079 return std::vector<SpellProcsPerMinuteModEntry const*>();
3089 return _talentsByPosition[class_][tier][column];
3099 if (requiredTotemCategoryId == 0)
3101 if (itemTotemCategoryId == 0)
3115 return requireAllTotems ? sharedMask == reqEntry->
TotemCategoryMask : sharedMask != 0;
3120 return _toys.count(toy) > 0;
3162 return Outside.DistanceToRegionEdgeSquared < std::numeric_limits<float>::epsilon() &&
3163 std::abs(
Outside.DistanceToRegionTop) < std::numeric_limits<float>::epsilon() &&
3164 std::abs(
Outside.DistanceToRegionBottom) < std::numeric_limits<float>::epsilon();
3171 bool rightInside = right.
IsInside();
3172 if (leftInside != rightInside)
3197 if (leftUiSizeX > std::numeric_limits<float>::epsilon() && rightUiSizeX > std::numeric_limits<float>::epsilon())
3201 if (leftScale != rightScale)
3202 return leftScale < rightScale;
3228 if (x < uiMapAssignment->Region[0].X || x > uiMapAssignment->
Region[1].X || y < uiMapAssignment->Region[0].Y || y > uiMapAssignment->
Region[1].Y)
3231 if (x >= uiMapAssignment->
Region[0].X)
3234 if (x > uiMapAssignment->
Region[1].X)
3235 xDiff = x - uiMapAssignment->
Region[0].X;
3238 xDiff = uiMapAssignment->
Region[0].X - x;
3240 if (y >= uiMapAssignment->
Region[0].Y)
3243 if (y > uiMapAssignment->
Region[1].Y)
3244 yDiff = y - uiMapAssignment->
Region[0].Y;
3247 yDiff = uiMapAssignment->
Region[0].Y - y;
3254 (x - (uiMapAssignment->
Region[0].X + uiMapAssignment->
Region[1].X) * 0.5f) * (x - (uiMapAssignment->
Region[0].X + uiMapAssignment->
Region[1].X) * 0.5f)
3255 + (y - (uiMapAssignment->
Region[0].Y + uiMapAssignment->
Region[1].Y) * 0.5f) * (y - (uiMapAssignment->
Region[0].Y + uiMapAssignment->
Region[1].Y) * 0.5f);
3260 if (z < uiMapAssignment->Region[0].Z || z > uiMapAssignment->
Region[1].Z)
3262 if (z < uiMapAssignment->Region[1].Z)
3264 if (z < uiMapAssignment->Region[0].Z)
3277 if (areaId && uiMapAssignment->
AreaID)
3279 int8 areaPriority = 0;
3280 while (areaId != uiMapAssignment->
AreaID)
3284 areaId = areaEntry->ParentAreaID;
3294 if (mapId >= 0 && uiMapAssignment->
MapID >= 0)
3296 if (mapId != uiMapAssignment->
MapID)
3300 if (mapEntry->ParentMapID == uiMapAssignment->
MapID)
3302 else if (mapEntry->CosmeticParentMapID == uiMapAssignment->
MapID)
3314 if (wmoGroupId || wmoDoodadPlacementId)
3318 bool hasDoodadPlacement =
false;
3324 hasDoodadPlacement =
true;
3327 if (wmoGroupId && uiMapAssignment->
WmoGroupID)
3329 if (wmoGroupId != uiMapAssignment->
WmoGroupID)
3332 if (hasDoodadPlacement)
3337 else if (hasDoodadPlacement)
3348 auto iterateUiMapAssignments = [&](std::unordered_multimap<int32, UiMapAssignmentEntry const*>
const& assignments,
int32 id)
3354 if (status < nearestMapAssignment)
3355 nearestMapAssignment = status;
3359 iterateUiMapAssignments(_uiMapAssignmentByWmoGroup[system], wmoGroupId);
3360 iterateUiMapAssignments(_uiMapAssignmentByWmoDoodadPlacement[system], wmoDoodadPlacementId);
3365 iterateUiMapAssignments(_uiMapAssignmentByArea[system], areaEntry->
ID);
3371 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ID);
3372 if (mapEntry->ParentMapID >= 0)
3373 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ParentMapID);
3374 if (mapEntry->CosmeticParentMapID >= 0)
3375 iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->CosmeticParentMapID);
3390 if (!bounds || !bounds->IsUiAssignment)
3393 uiPosition.
X = ((1.0 - uiPosition.
X) * bounds->Bounds[1]) + (bounds->Bounds[3] * uiPosition.
X);
3394 uiPosition.
Y = ((1.0 - uiPosition.
Y) * bounds->Bounds[0]) + (bounds->Bounds[2] * uiPosition.
Y);
3415 if (!uiMapAssignment)
3419 *uiMapId = uiMapAssignment->
UiMapID;
3423 if (regionSize.X > 0.0f)
3424 relativePosition.X = (x - uiMapAssignment->
Region[0].X) / regionSize.X;
3425 if (regionSize.Y > 0.0f)
3426 relativePosition.Y = (y - uiMapAssignment->
Region[0].Y) / regionSize.Y;
3431 ((1.0f - (1.0f - relativePosition.Y)) * uiMapAssignment->
UiMin.
X) + ((1.0f - relativePosition.Y) * uiMapAssignment->
UiMax.
X),
3432 ((1.0f - (1.0f - relativePosition.X)) * uiMapAssignment->
UiMin.
Y) + ((1.0f - relativePosition.X) * uiMapAssignment->
UiMax.
Y)
3439 *newPos = uiPosition;
3452 if (assignment.second->MapID >= 0 && assignment.second->MapID != areaEntry->
ContinentID)
3455 float tmpY = (y - assignment.second->UiMax.Y) / (assignment.second->UiMin.Y - assignment.second->UiMax.Y);
3456 float tmpX = (x - assignment.second->UiMax.X) / (assignment.second->UiMin.X - assignment.second->UiMax.X);
3457 x = assignment.second->Region[0].X + tmpY * (assignment.second->Region[1].X - assignment.second->Region[0].X);
3458 y = assignment.second->Region[0].Y + tmpX * (assignment.second->Region[1].Y - assignment.second->Region[0].Y);
3469 if (!
GetUiMapPosition(x, y, 0.0f, -1, areaId, 0, 0,
UI_MAP_SYSTEM_WORLD,
true,
nullptr, &zoneCoords))
3472 x = zoneCoords.
Y * 100.0f;
3473 y = zoneCoords.
X * 100.0f;
3478 return _uiMapPhases.find(phaseId) != _uiMapPhases.end();
3503 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)
DB2Storage< PathEntry > sPathStore("Path.db2", &PathLoadInfo::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)
static DBCPosition2D CalculateGlobalUiMapPosition(uint32 uiMapID, DBCPosition2D uiPosition)
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< CreatureLabelEntry > sCreatureLabelStore("CreatureLabel.db2", &CreatureLabelLoadInfo::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< AreaTriggerActionSetEntry > sAreaTriggerActionSetStore("AreaTriggerActionSet.db2", &AreaTriggerActionSetLoadInfo::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< ModifiedCraftingItemEntry > sModifiedCraftingItemStore("ModifiedCraftingItem.db2", &ModifiedCraftingItemLoadInfo::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< MountEquipmentEntry > sMountEquipmentStore("MountEquipment.db2", &MountEquipmentLoadInfo::Instance)
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< PathPropertyEntry > sPathPropertyStore("PathProperty.db2", &PathPropertyLoadInfo::Instance)
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< LocationEntry > sLocationStore("Location.db2", &LocationLoadInfo::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)
DB2Storage< BattlemasterListXMapEntry > sBattlemasterListXMapStore("BattlemasterListXMap.db2", &BattlemasterListXMapLoadInfo::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< WarbandSceneEntry > sWarbandSceneStore("WarbandScene.db2", &WarbandSceneLoadInfo::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< CraftingQualityEntry > sCraftingQualityStore("CraftingQuality.db2", &CraftingQualityLoadInfo::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< SpellEmpowerEntry > sSpellEmpowerStore("SpellEmpower.db2", &SpellEmpowerLoadInfo::Instance)
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< SpellEmpowerStageEntry > sSpellEmpowerStageStore("SpellEmpowerStage.db2", &SpellEmpowerStageLoadInfo::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< PerksActivityEntry > sPerksActivityStore("PerksActivity.db2", &PerksActivityLoadInfo::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< CharBaseInfoEntry > sCharBaseInfoStore("CharBaseInfo.db2", &CharBaseInfoLoadInfo::Instance)
DB2Storage< SpellClassOptionsEntry > sSpellClassOptionsStore("SpellClassOptions.db2", &SpellClassOptionsLoadInfo::Instance)
DB2Storage< AzeritePowerEntry > sAzeritePowerStore("AzeritePower.db2", &AzeritePowerLoadInfo::Instance)
DB2Storage< PowerDisplayEntry > sPowerDisplayStore("PowerDisplay.db2", &PowerDisplayLoadInfo::Instance)
DB2Storage< TraitSubTreeEntry > sTraitSubTreeStore("TraitSubTree.db2", &TraitSubTreeLoadInfo::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< FlightCapabilityEntry > sFlightCapabilityStore("FlightCapability.db2", &FlightCapabilityLoadInfo::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< PathNodeEntry > sPathNodeStore("PathNode.db2", &PathNodeLoadInfo::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< GameObjectLabelEntry > sGameObjectLabelStore("GameObjectLabel.db2", &GameobjectLabelLoadInfo::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)
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
#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__, message__,...)
#define TC_LOG_FATAL(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
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
int32 const * GetBroadcastTextDuration(uint32 broadcastTextId, LocaleConstant locale=DEFAULT_LOCALE) 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 char const * GetChrClassName(uint8 class_, LocaleConstant locale=DEFAULT_LOCALE)
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
std::span< int32 const > GetGameObjectLabels(uint32 gameobjectId) 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
static CharBaseInfoEntry const * GetCharBaseInfo(Races race, Classes class_)
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
static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, uint32 *uiMapId=nullptr, DBCPosition2D *newPos=nullptr)
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
PathDb2 const * GetPath(uint32 pathId) const
JournalTierEntry const * GetJournalTier(uint32 index) 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
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::span< int32 const > GetCreatureLabels(uint32 creatureDifficultyId) 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
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) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
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.
struct advstd::ranges::Contains contains
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
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
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
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
std::vector< DBCPosition3D > Locations
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
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
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::@187 Inside
UiMapAssignmentEntry const * UiMapAssignment
float DistanceToRegionEdgeSquared
float DistanceToRegionBottom
struct UiMapAssignmentStatus::@188 Outside
float DistanceToRegionTop
float DistanceToRegionCenterSquared
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance
static constexpr DB2LoadInfo Instance