// Copyright (c) CypherCore All rights reserved. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. using Framework.Constants; using Framework.Database; using System; using System.Collections.Generic; using System.Linq; using System.Collections; using System.IO; namespace Game.DataStorage { public class CliDB { public static BitSet LoadStores(string dataPath, Locale defaultLocale) { uint oldMSTime = Time.GetMSTime(); string db2Path = $"{dataPath}/dbc"; BitSet availableDb2Locales = new((int)Locale.Total); foreach (var dir in Directory.GetDirectories(db2Path)) { Locale locale = Path.GetFileName(dir).ToEnum(); if (SharedConst.IsValidLocale(locale) && (WorldConfig.GetBoolValue(WorldCfg.LoadLocales) || locale == defaultLocale)) availableDb2Locales[(int)locale] = true; } if (!availableDb2Locales[(int)defaultLocale]) return null; uint loadedFileCount = 0; DB6Storage ReadDB2(string fileName, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale = 0) where T : new() { DB6Storage storage = new(); if (!storage.LoadData($"{db2Path}/{defaultLocale}/{fileName}")) { Log.outError(LogFilter.ServerLoading, "Error loading DB2 files"); Environment.Exit(1); return null; } storage.LoadHotfixData(availableDb2Locales, preparedStatement, preparedStatementLocale); Global.DB2Mgr.AddDB2(storage.GetTableHash(), storage); loadedFileCount++; return storage; } AchievementStorage = ReadDB2("Achievement.db2", HotfixStatements.SEL_ACHIEVEMENT, HotfixStatements.SEL_ACHIEVEMENT_LOCALE); AchievementCategoryStorage = ReadDB2("Achievement_Category.db2", HotfixStatements.SEL_ACHIEVEMENT_CATEGORY, HotfixStatements.SEL_ACHIEVEMENT_CATEGORY_LOCALE); AdventureJournalStorage = ReadDB2("AdventureJournal.db2", HotfixStatements.SEL_ADVENTURE_JOURNAL, HotfixStatements.SEL_ADVENTURE_JOURNAL_LOCALE); AdventureMapPOIStorage = ReadDB2("AdventureMapPOI.db2", HotfixStatements.SEL_ADVENTURE_MAP_POI, HotfixStatements.SEL_ADVENTURE_MAP_POI_LOCALE); AnimationDataStorage = ReadDB2("AnimationData.db2", HotfixStatements.SEL_ANIMATION_DATA); AnimKitStorage = ReadDB2("AnimKit.db2", HotfixStatements.SEL_ANIM_KIT); AreaGroupMemberStorage = ReadDB2("AreaGroupMember.db2", HotfixStatements.SEL_AREA_GROUP_MEMBER); AreaTableStorage = ReadDB2("AreaTable.db2", HotfixStatements.SEL_AREA_TABLE, HotfixStatements.SEL_AREA_TABLE_LOCALE); AreaTriggerStorage = ReadDB2("AreaTrigger.db2", HotfixStatements.SEL_AREA_TRIGGER); AreaTriggerActionSetStorage = ReadDB2("AreaTriggerActionSet.db2", HotfixStatements.SEL_AREA_TRIGGER_ACTION_SET); ArmorLocationStorage = ReadDB2("ArmorLocation.db2", HotfixStatements.SEL_ARMOR_LOCATION); ArtifactStorage = ReadDB2("Artifact.db2", HotfixStatements.SEL_ARTIFACT, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE); ArtifactAppearanceStorage = ReadDB2("ArtifactAppearance.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE); ArtifactAppearanceSetStorage = ReadDB2("ArtifactAppearanceSet.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET, HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET_LOCALE); //ArtifactCategoryStorage = ReadDB2("ArtifactCategory.db2", HotfixStatements.SEL_ARTIFACT_CATEGORY); ArtifactPowerStorage = ReadDB2("ArtifactPower.db2", HotfixStatements.SEL_ARTIFACT_POWER); ArtifactPowerLinkStorage = ReadDB2("ArtifactPowerLink.db2", HotfixStatements.SEL_ARTIFACT_POWER_LINK); ArtifactPowerPickerStorage = ReadDB2("ArtifactPowerPicker.db2", HotfixStatements.SEL_ARTIFACT_POWER_PICKER); ArtifactPowerRankStorage = ReadDB2("ArtifactPowerRank.db2", HotfixStatements.SEL_ARTIFACT_POWER_RANK); //ArtifactQuestXPStorage = ReadDB2("ArtifactQuestXP.db2", HotfixStatements.SEL_ARTIFACT_QUEST_XP); ArtifactTierStorage = ReadDB2("ArtifactTier.db2", HotfixStatements.SEL_ARTIFACT_TIER); ArtifactUnlockStorage = ReadDB2("ArtifactUnlock.db2", HotfixStatements.SEL_ARTIFACT_UNLOCK); AuctionHouseStorage = ReadDB2("AuctionHouse.db2", HotfixStatements.SEL_AUCTION_HOUSE, HotfixStatements.SEL_AUCTION_HOUSE_LOCALE); AzeriteEmpoweredItemStorage = ReadDB2("AzeriteEmpoweredItem.db2", HotfixStatements.SEL_AZERITE_EMPOWERED_ITEM); AzeriteEssenceStorage = ReadDB2("AzeriteEssence.db2", HotfixStatements.SEL_AZERITE_ESSENCE, HotfixStatements.SEL_AZERITE_ESSENCE_LOCALE); AzeriteEssencePowerStorage = ReadDB2("AzeriteEssencePower.db2", HotfixStatements.SEL_AZERITE_ESSENCE_POWER, HotfixStatements.SEL_AZERITE_ESSENCE_POWER_LOCALE); AzeriteItemStorage = ReadDB2("AzeriteItem.db2", HotfixStatements.SEL_AZERITE_ITEM); AzeriteItemMilestonePowerStorage = ReadDB2("AzeriteItemMilestonePower.db2", HotfixStatements.SEL_AZERITE_ITEM_MILESTONE_POWER); AzeriteKnowledgeMultiplierStorage = ReadDB2("AzeriteKnowledgeMultiplier.db2", HotfixStatements.SEL_AZERITE_KNOWLEDGE_MULTIPLIER); AzeriteLevelInfoStorage = ReadDB2("AzeriteLevelInfo.db2", HotfixStatements.SEL_AZERITE_LEVEL_INFO); AzeritePowerStorage = ReadDB2("AzeritePower.db2", HotfixStatements.SEL_AZERITE_POWER); AzeritePowerSetMemberStorage = ReadDB2("AzeritePowerSetMember.db2", HotfixStatements.SEL_AZERITE_POWER_SET_MEMBER); AzeriteTierUnlockStorage = ReadDB2("AzeriteTierUnlock.db2", HotfixStatements.SEL_AZERITE_TIER_UNLOCK); AzeriteTierUnlockSetStorage = ReadDB2("AzeriteTierUnlockSet.db2", HotfixStatements.SEL_AZERITE_TIER_UNLOCK_SET); AzeriteUnlockMappingStorage = ReadDB2("AzeriteUnlockMapping.db2", HotfixStatements.SEL_AZERITE_UNLOCK_MAPPING); BankTabStorage = ReadDB2("BankTab.db2", HotfixStatements.SEL_BANK_TAB); BannedAddOnsStorage = ReadDB2("BannedAddons.db2", HotfixStatements.SEL_BANNED_ADDONS); BarberShopStyleStorage = ReadDB2("BarberShopStyle.db2", HotfixStatements.SEL_BARBER_SHOP_STYLE, HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE); BattlePetBreedQualityStorage = ReadDB2("BattlePetBreedQuality.db2", HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY); BattlePetBreedStateStorage = ReadDB2("BattlePetBreedState.db2", HotfixStatements.SEL_BATTLE_PET_BREED_STATE); BattlePetSpeciesStorage = ReadDB2("BattlePetSpecies.db2", HotfixStatements.SEL_BATTLE_PET_SPECIES, HotfixStatements.SEL_BATTLE_PET_SPECIES_LOCALE); BattlePetSpeciesStateStorage = ReadDB2("BattlePetSpeciesState.db2", HotfixStatements.SEL_BATTLE_PET_SPECIES_STATE); BattlemasterListStorage = ReadDB2("BattlemasterList.db2", HotfixStatements.SEL_BATTLEMASTER_LIST, HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE); BattlemasterListXMapStorage = ReadDB2("BattlemasterListXMap.db2", HotfixStatements.SEL_BATTLEMASTER_LIST_X_MAP); BroadcastTextStorage = ReadDB2("BroadcastText.db2", HotfixStatements.SEL_BROADCAST_TEXT, HotfixStatements.SEL_BROADCAST_TEXT_LOCALE); BroadcastTextDurationStorage = ReadDB2("BroadcastTextDuration.db2", HotfixStatements.SEL_BROADCAST_TEXT_DURATION); CfgCategoriesStorage = ReadDB2("Cfg_Categories.db2", HotfixStatements.SEL_CFG_CATEGORIES, HotfixStatements.SEL_CFG_CATEGORIES_LOCALE); CfgRegionsStorage = ReadDB2("Cfg_Regions.db2", HotfixStatements.SEL_CFG_REGIONS); ChallengeModeItemBonusOverrideStorage = ReadDB2("ChallengeModeItemBonusOverride.db2", HotfixStatements.SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE); CharBaseInfoStorage = ReadDB2("CharBaseInfo.db2", HotfixStatements.SEL_CHAR_BASE_INFO); CharTitlesStorage = ReadDB2("CharTitles.db2", HotfixStatements.SEL_CHAR_TITLES, HotfixStatements.SEL_CHAR_TITLES_LOCALE); CharacterLoadoutStorage = ReadDB2("CharacterLoadout.db2", HotfixStatements.SEL_CHARACTER_LOADOUT); CharacterLoadoutItemStorage = ReadDB2("CharacterLoadoutItem.db2", HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM); ChatChannelsStorage = ReadDB2("ChatChannels.db2", HotfixStatements.SEL_CHAT_CHANNELS, HotfixStatements.SEL_CHAT_CHANNELS_LOCALE); ChrClassUIDisplayStorage = ReadDB2("ChrClassUIDisplay.db2", HotfixStatements.SEL_CHR_CLASS_UI_DISPLAY); ChrClassesStorage = ReadDB2("ChrClasses.db2", HotfixStatements.SEL_CHR_CLASSES, HotfixStatements.SEL_CHR_CLASSES_LOCALE); ChrClassesXPowerTypesStorage = ReadDB2("ChrClassesXPowerTypes.db2", HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES); ChrCustomizationChoiceStorage = ReadDB2("ChrCustomizationChoice.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE, HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE_LOCALE); ChrCustomizationDisplayInfoStorage = ReadDB2("ChrCustomizationDisplayInfo.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_DISPLAY_INFO); ChrCustomizationElementStorage = ReadDB2("ChrCustomizationElement.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT); ChrCustomizationOptionStorage = ReadDB2("ChrCustomizationOption.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION, HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION_LOCALE); ChrCustomizationReqStorage = ReadDB2("ChrCustomizationReq.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ); ChrCustomizationReqChoiceStorage = ReadDB2("ChrCustomizationReqChoice.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ_CHOICE); ChrModelStorage = ReadDB2("ChrModel.db2", HotfixStatements.SEL_CHR_MODEL); ChrRaceXChrModelStorage = ReadDB2("ChrRaceXChrModel.db2", HotfixStatements.SEL_CHR_RACE_X_CHR_MODEL); ChrRacesStorage = ReadDB2("ChrRaces.db2", HotfixStatements.SEL_CHR_RACES, HotfixStatements.SEL_CHR_RACES_LOCALE); ChrSpecializationStorage = ReadDB2("ChrSpecialization.db2", HotfixStatements.SEL_CHR_SPECIALIZATION, HotfixStatements.SEL_CHR_SPECIALIZATION_LOCALE); CinematicCameraStorage = ReadDB2("CinematicCamera.db2", HotfixStatements.SEL_CINEMATIC_CAMERA); CinematicSequencesStorage = ReadDB2("CinematicSequences.db2", HotfixStatements.SEL_CINEMATIC_SEQUENCES); ConditionalChrModelStorage = ReadDB2("ConditionalChrModel.db2", HotfixStatements.SEL_CONDITIONAL_CHR_MODEL); ConditionalContentTuningStorage = ReadDB2("ConditionalContentTuning.db2", HotfixStatements.SEL_CONDITIONAL_CONTENT_TUNING); ContentTuningStorage = ReadDB2("ContentTuning.db2", HotfixStatements.SEL_CONTENT_TUNING); ContentTuningXExpectedStorage = ReadDB2("ContentTuningXExpected.db2", HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED); ContentTuningXLabelStorage = ReadDB2("ContentTuningXLabel.db2", HotfixStatements.SEL_CONTENT_TUNING_X_LABEL); ConversationLineStorage = ReadDB2("ConversationLine.db2", HotfixStatements.SEL_CONVERSATION_LINE); CorruptionEffectsStorage = ReadDB2("CorruptionEffects.db2", HotfixStatements.SEL_CORRUPTION_EFFECTS); CreatureDisplayInfoStorage = ReadDB2("CreatureDisplayInfo.db2", HotfixStatements.SEL_CREATURE_DISPLAY_INFO); CreatureDisplayInfoExtraStorage = ReadDB2("CreatureDisplayInfoExtra.db2", HotfixStatements.SEL_CREATURE_DISPLAY_INFO_EXTRA); CreatureFamilyStorage = ReadDB2("CreatureFamily.db2", HotfixStatements.SEL_CREATURE_FAMILY, HotfixStatements.SEL_CREATURE_FAMILY_LOCALE); CreatureLabelStorage = ReadDB2("CreatureLabel.db2", HotfixStatements.SEL_CREATURE_LABEL); CreatureModelDataStorage = ReadDB2("CreatureModelData.db2", HotfixStatements.SEL_CREATURE_MODEL_DATA); CreatureTypeStorage = ReadDB2("CreatureType.db2", HotfixStatements.SEL_CREATURE_TYPE, HotfixStatements.SEL_CREATURE_TYPE_LOCALE); CriteriaStorage = ReadDB2("Criteria.db2", HotfixStatements.SEL_CRITERIA); CriteriaTreeStorage = ReadDB2("CriteriaTree.db2", HotfixStatements.SEL_CRITERIA_TREE, HotfixStatements.SEL_CRITERIA_TREE_LOCALE); CurrencyContainerStorage = ReadDB2("CurrencyContainer.db2", HotfixStatements.SEL_CURRENCY_CONTAINER, HotfixStatements.SEL_CURRENCY_CONTAINER_LOCALE); CurrencyTypesStorage = ReadDB2("CurrencyTypes.db2", HotfixStatements.SEL_CURRENCY_TYPES, HotfixStatements.SEL_CURRENCY_TYPES_LOCALE); CurveStorage = ReadDB2("Curve.db2", HotfixStatements.SEL_CURVE); CurvePointStorage = ReadDB2("CurvePoint.db2", HotfixStatements.SEL_CURVE_POINT); DestructibleModelDataStorage = ReadDB2("DestructibleModelData.db2", HotfixStatements.SEL_DESTRUCTIBLE_MODEL_DATA); DifficultyStorage = ReadDB2("Difficulty.db2", HotfixStatements.SEL_DIFFICULTY, HotfixStatements.SEL_DIFFICULTY_LOCALE); DungeonEncounterStorage = ReadDB2("DungeonEncounter.db2", HotfixStatements.SEL_DUNGEON_ENCOUNTER, HotfixStatements.SEL_DUNGEON_ENCOUNTER_LOCALE); DurabilityCostsStorage = ReadDB2("DurabilityCosts.db2", HotfixStatements.SEL_DURABILITY_COSTS); DurabilityQualityStorage = ReadDB2("DurabilityQuality.db2", HotfixStatements.SEL_DURABILITY_QUALITY); EmotesStorage = ReadDB2("Emotes.db2", HotfixStatements.SEL_EMOTES); EmotesTextStorage = ReadDB2("EmotesText.db2", HotfixStatements.SEL_EMOTES_TEXT); EmotesTextSoundStorage = ReadDB2("EmotesTextSound.db2", HotfixStatements.SEL_EMOTES_TEXT_SOUND); ExpectedStatStorage = ReadDB2("ExpectedStat.db2", HotfixStatements.SEL_EXPECTED_STAT); ExpectedStatModStorage = ReadDB2("ExpectedStatMod.db2", HotfixStatements.SEL_EXPECTED_STAT_MOD); FactionStorage = ReadDB2("Faction.db2", HotfixStatements.SEL_FACTION, HotfixStatements.SEL_FACTION_LOCALE); FactionTemplateStorage = ReadDB2("FactionTemplate.db2", HotfixStatements.SEL_FACTION_TEMPLATE); FlightCapabilityStorage = ReadDB2("FlightCapability.db2", HotfixStatements.SEL_FLIGHT_CAPABILITY); FriendshipRepReactionStorage = ReadDB2("FriendshipRepReaction.db2", HotfixStatements.SEL_FRIENDSHIP_REP_REACTION, HotfixStatements.SEL_FRIENDSHIP_REP_REACTION_LOCALE); FriendshipReputationStorage = ReadDB2("FriendshipReputation.db2", HotfixStatements.SEL_FRIENDSHIP_REPUTATION, HotfixStatements.SEL_FRIENDSHIP_REPUTATION_LOCALE); GameObjectArtKitStorage = ReadDB2("GameObjectArtKit.db2", HotfixStatements.SEL_GAMEOBJECT_ART_KIT); GameObjectDisplayInfoStorage = ReadDB2("GameObjectDisplayInfo.db2", HotfixStatements.SEL_GAMEOBJECT_DISPLAY_INFO); GameObjectLabelStorage = ReadDB2("GameObjectLabel.db2", HotfixStatements.SEL_GAMEOBJECT_LABEL); GameObjectsStorage = ReadDB2("GameObjects.db2", HotfixStatements.SEL_GAMEOBJECTS, HotfixStatements.SEL_GAMEOBJECTS_LOCALE); GarrAbilityStorage = ReadDB2("GarrAbility.db2", HotfixStatements.SEL_GARR_ABILITY, HotfixStatements.SEL_GARR_ABILITY_LOCALE); GarrBuildingStorage = ReadDB2("GarrBuilding.db2", HotfixStatements.SEL_GARR_BUILDING, HotfixStatements.SEL_GARR_BUILDING_LOCALE); GarrBuildingPlotInstStorage = ReadDB2("GarrBuildingPlotInst.db2", HotfixStatements.SEL_GARR_BUILDING_PLOT_INST); GarrClassSpecStorage = ReadDB2("GarrClassSpec.db2", HotfixStatements.SEL_GARR_CLASS_SPEC, HotfixStatements.SEL_GARR_CLASS_SPEC_LOCALE); GarrFollowerStorage = ReadDB2("GarrFollower.db2", HotfixStatements.SEL_GARR_FOLLOWER, HotfixStatements.SEL_GARR_FOLLOWER_LOCALE); GarrFollowerXAbilityStorage = ReadDB2("GarrFollowerXAbility.db2", HotfixStatements.SEL_GARR_FOLLOWER_X_ABILITY); GarrMissionStorage = ReadDB2("GarrMission.db2", HotfixStatements.SEL_GARR_MISSION, HotfixStatements.SEL_GARR_MISSION_LOCALE); GarrPlotStorage = ReadDB2("GarrPlot.db2", HotfixStatements.SEL_GARR_PLOT); GarrPlotBuildingStorage = ReadDB2("GarrPlotBuilding.db2", HotfixStatements.SEL_GARR_PLOT_BUILDING); GarrPlotInstanceStorage = ReadDB2("GarrPlotInstance.db2", HotfixStatements.SEL_GARR_PLOT_INSTANCE); GarrSiteLevelStorage = ReadDB2("GarrSiteLevel.db2", HotfixStatements.SEL_GARR_SITE_LEVEL); GarrSiteLevelPlotInstStorage = ReadDB2("GarrSiteLevelPlotInst.db2", HotfixStatements.SEL_GARR_SITE_LEVEL_PLOT_INST); GarrTalentTreeStorage = ReadDB2("GarrTalentTree.db2", HotfixStatements.SEL_GARR_TALENT_TREE, HotfixStatements.SEL_GARR_TALENT_TREE_LOCALE); GemPropertiesStorage = ReadDB2("GemProperties.db2", HotfixStatements.SEL_GEM_PROPERTIES); GlobalCurveStorage = ReadDB2("GlobalCurve.db2", HotfixStatements.SEL_GLOBAL_CURVE); GlyphBindableSpellStorage = ReadDB2("GlyphBindableSpell.db2", HotfixStatements.SEL_GLYPH_BINDABLE_SPELL); GlyphPropertiesStorage = ReadDB2("GlyphProperties.db2", HotfixStatements.SEL_GLYPH_PROPERTIES); GlyphRequiredSpecStorage = ReadDB2("GlyphRequiredSpec.db2", HotfixStatements.SEL_GLYPH_REQUIRED_SPEC); GossipNPCOptionStorage = ReadDB2("GossipNPCOption.db2", HotfixStatements.SEL_GOSSIP_NPC_OPTION); GuildColorBackgroundStorage = ReadDB2("GuildColorBackground.db2", HotfixStatements.SEL_GUILD_COLOR_BACKGROUND); GuildColorBorderStorage = ReadDB2("GuildColorBorder.db2", HotfixStatements.SEL_GUILD_COLOR_BORDER); GuildColorEmblemStorage = ReadDB2("GuildColorEmblem.db2", HotfixStatements.SEL_GUILD_COLOR_EMBLEM); GuildPerkSpellsStorage = ReadDB2("GuildPerkSpells.db2", HotfixStatements.SEL_GUILD_PERK_SPELLS); HeirloomStorage = ReadDB2("Heirloom.db2", HotfixStatements.SEL_HEIRLOOM, HotfixStatements.SEL_HEIRLOOM_LOCALE); HolidaysStorage = ReadDB2("Holidays.db2", HotfixStatements.SEL_HOLIDAYS); ImportPriceArmorStorage = ReadDB2("ImportPriceArmor.db2", HotfixStatements.SEL_IMPORT_PRICE_ARMOR); ImportPriceQualityStorage = ReadDB2("ImportPriceQuality.db2", HotfixStatements.SEL_IMPORT_PRICE_QUALITY); ImportPriceShieldStorage = ReadDB2("ImportPriceShield.db2", HotfixStatements.SEL_IMPORT_PRICE_SHIELD); ImportPriceWeaponStorage = ReadDB2("ImportPriceWeapon.db2", HotfixStatements.SEL_IMPORT_PRICE_WEAPON); ItemAppearanceStorage = ReadDB2("ItemAppearance.db2", HotfixStatements.SEL_ITEM_APPEARANCE); ItemArmorQualityStorage = ReadDB2("ItemArmorQuality.db2", HotfixStatements.SEL_ITEM_ARMOR_QUALITY); ItemArmorShieldStorage = ReadDB2("ItemArmorShield.db2", HotfixStatements.SEL_ITEM_ARMOR_SHIELD); ItemArmorTotalStorage = ReadDB2("ItemArmorTotal.db2", HotfixStatements.SEL_ITEM_ARMOR_TOTAL); //ItemBagFamilyStorage = ReadDB2("ItemBagFamily.db2", HotfixStatements.SEL_ITEM_BAG_FAMILY, HotfixStatements.SEL_ITEM_BAG_FAMILY_LOCALE); ItemBonusStorage = ReadDB2("ItemBonus.db2", HotfixStatements.SEL_ITEM_BONUS); ItemBonusListGroupEntryStorage = ReadDB2("ItemBonusListGroupEntry.db2", HotfixStatements.SEL_ITEM_BONUS_LIST_GROUP_ENTRY); ItemBonusListLevelDeltaStorage = ReadDB2("ItemBonusListLevelDelta.db2", HotfixStatements.SEL_ITEM_BONUS_LIST_LEVEL_DELTA); ItemBonusTreeStorage = ReadDB2("ItemBonusTree.db2", HotfixStatements.SEL_ITEM_BONUS_TREE); ItemBonusTreeNodeStorage = ReadDB2("ItemBonusTreeNode.db2", HotfixStatements.SEL_ITEM_BONUS_TREE_NODE); ItemChildEquipmentStorage = ReadDB2("ItemChildEquipment.db2", HotfixStatements.SEL_ITEM_CHILD_EQUIPMENT); ItemClassStorage = ReadDB2("ItemClass.db2", HotfixStatements.SEL_ITEM_CLASS, HotfixStatements.SEL_ITEM_CLASS_LOCALE); ItemContextPickerEntryStorage = ReadDB2("ItemContextPickerEntry.db2", HotfixStatements.SEL_ITEM_CONTEXT_PICKER_ENTRY); ItemCurrencyCostStorage = ReadDB2("ItemCurrencyCost.db2", HotfixStatements.SEL_ITEM_CURRENCY_COST); ItemDamageAmmoStorage = ReadDB2("ItemDamageAmmo.db2", HotfixStatements.SEL_ITEM_DAMAGE_AMMO); ItemDamageOneHandStorage = ReadDB2("ItemDamageOneHand.db2", HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND); ItemDamageOneHandCasterStorage = ReadDB2("ItemDamageOneHandCaster.db2", HotfixStatements.SEL_ITEM_DAMAGE_ONE_HAND_CASTER); ItemDamageTwoHandStorage = ReadDB2("ItemDamageTwoHand.db2", HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND); ItemDamageTwoHandCasterStorage = ReadDB2("ItemDamageTwoHandCaster.db2", HotfixStatements.SEL_ITEM_DAMAGE_TWO_HAND_CASTER); ItemDisenchantLootStorage = ReadDB2("ItemDisenchantLoot.db2", HotfixStatements.SEL_ITEM_DISENCHANT_LOOT); ItemEffectStorage = ReadDB2("ItemEffect.db2", HotfixStatements.SEL_ITEM_EFFECT); ItemStorage = ReadDB2("Item.db2", HotfixStatements.SEL_ITEM); ItemExtendedCostStorage = ReadDB2("ItemExtendedCost.db2", HotfixStatements.SEL_ITEM_EXTENDED_COST); ItemLevelSelectorStorage = ReadDB2("ItemLevelSelector.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR); ItemLevelSelectorQualityStorage = ReadDB2("ItemLevelSelectorQuality.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY); ItemLevelSelectorQualitySetStorage = ReadDB2("ItemLevelSelectorQualitySet.db2", HotfixStatements.SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET); ItemLimitCategoryStorage = ReadDB2("ItemLimitCategory.db2", HotfixStatements.SEL_ITEM_LIMIT_CATEGORY, HotfixStatements.SEL_ITEM_LIMIT_CATEGORY_LOCALE); ItemLimitCategoryConditionStorage = ReadDB2("ItemLimitCategoryCondition.db2", HotfixStatements.SEL_ITEM_LIMIT_CATEGORY_CONDITION); ItemModifiedAppearanceStorage = ReadDB2("ItemModifiedAppearance.db2", HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE); ItemModifiedAppearanceExtraStorage = ReadDB2("ItemModifiedAppearanceExtra.db2", HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE_EXTRA); ItemNameDescriptionStorage = ReadDB2("ItemNameDescription.db2", HotfixStatements.SEL_ITEM_NAME_DESCRIPTION, HotfixStatements.SEL_ITEM_NAME_DESCRIPTION_LOCALE); ItemPriceBaseStorage = ReadDB2("ItemPriceBase.db2", HotfixStatements.SEL_ITEM_PRICE_BASE); ItemSearchNameStorage = ReadDB2("ItemSearchName.db2", HotfixStatements.SEL_ITEM_SEARCH_NAME, HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE); ItemSetStorage = ReadDB2("ItemSet.db2", HotfixStatements.SEL_ITEM_SET, HotfixStatements.SEL_ITEM_SET_LOCALE); ItemSetSpellStorage = ReadDB2("ItemSetSpell.db2", HotfixStatements.SEL_ITEM_SET_SPELL); ItemSparseStorage = ReadDB2("ItemSparse.db2", HotfixStatements.SEL_ITEM_SPARSE, HotfixStatements.SEL_ITEM_SPARSE_LOCALE); ItemSpecStorage = ReadDB2("ItemSpec.db2", HotfixStatements.SEL_ITEM_SPEC); ItemSpecOverrideStorage = ReadDB2("ItemSpecOverride.db2", HotfixStatements.SEL_ITEM_SPEC_OVERRIDE); ItemXBonusTreeStorage = ReadDB2("ItemXBonusTree.db2", HotfixStatements.SEL_ITEM_X_BONUS_TREE); ItemXItemEffectStorage = ReadDB2("ItemXItemEffect.db2", HotfixStatements.SEL_ITEM_X_ITEM_EFFECT); JournalEncounterStorage = ReadDB2("JournalEncounter.db2", HotfixStatements.SEL_JOURNAL_ENCOUNTER, HotfixStatements.SEL_JOURNAL_ENCOUNTER_LOCALE); JournalEncounterSectionStorage = ReadDB2("JournalEncounterSection.db2", HotfixStatements.SEL_JOURNAL_ENCOUNTER_SECTION, HotfixStatements.SEL_JOURNAL_ENCOUNTER_SECTION_LOCALE); JournalInstanceStorage = ReadDB2("JournalInstance.db2", HotfixStatements.SEL_JOURNAL_INSTANCE, HotfixStatements.SEL_JOURNAL_INSTANCE_LOCALE); JournalTierStorage = ReadDB2("JournalTier.db2", HotfixStatements.SEL_JOURNAL_TIER, HotfixStatements.SEL_JOURNAL_TIER_LOCALE); //KeyChainStorage = ReadDB2("KeyChain.db2", HotfixStatements.SEL_KEYCHAIN); KeystoneAffixStorage = ReadDB2("KeystoneAffix.db2", HotfixStatements.SEL_KEYSTONE_AFFIX, HotfixStatements.SEL_KEYSTONE_AFFIX_LOCALE); LanguageWordsStorage = ReadDB2("LanguageWords.db2", HotfixStatements.SEL_LANGUAGE_WORDS); LanguagesStorage = ReadDB2("Languages.db2", HotfixStatements.SEL_LANGUAGES, HotfixStatements.SEL_LANGUAGES_LOCALE); LFGDungeonsStorage = ReadDB2("LFGDungeons.db2", HotfixStatements.SEL_LFG_DUNGEONS, HotfixStatements.SEL_LFG_DUNGEONS_LOCALE); LightStorage = ReadDB2("Light.db2", HotfixStatements.SEL_LIGHT); LiquidTypeStorage = ReadDB2("LiquidType.db2", HotfixStatements.SEL_LIQUID_TYPE); LocationStorage = ReadDB2("Location.db2", HotfixStatements.SEL_LOCATION); LockStorage = ReadDB2("Lock.db2", HotfixStatements.SEL_LOCK); MailTemplateStorage = ReadDB2("MailTemplate.db2", HotfixStatements.SEL_MAIL_TEMPLATE, HotfixStatements.SEL_MAIL_TEMPLATE_LOCALE); MapStorage = ReadDB2("Map.db2", HotfixStatements.SEL_MAP, HotfixStatements.SEL_MAP_LOCALE); MapChallengeModeStorage = ReadDB2("MapChallengeMode.db2", HotfixStatements.SEL_MAP_CHALLENGE_MODE, HotfixStatements.SEL_MAP_CHALLENGE_MODE_LOCALE); MapDifficultyStorage = ReadDB2("MapDifficulty.db2", HotfixStatements.SEL_MAP_DIFFICULTY, HotfixStatements.SEL_MAP_DIFFICULTY_LOCALE); MapDifficultyXConditionStorage = ReadDB2("MapDifficultyXCondition.db2", HotfixStatements.SEL_MAP_DIFFICULTY_X_CONDITION, HotfixStatements.SEL_MAP_DIFFICULTY_X_CONDITION_LOCALE); MawPowerStorage = ReadDB2("MawPower.db2", HotfixStatements.SEL_MAW_POWER); ModifierTreeStorage = ReadDB2("ModifierTree.db2", HotfixStatements.SEL_MODIFIER_TREE); MountCapabilityStorage = ReadDB2("MountCapability.db2", HotfixStatements.SEL_MOUNT_CAPABILITY); MountStorage = ReadDB2("Mount.db2", HotfixStatements.SEL_MOUNT, HotfixStatements.SEL_MOUNT_LOCALE); MountEquipmentStorage = ReadDB2("MountEquipment.db2", HotfixStatements.SEL_MOUNT_EQUIPMENT); MountTypeXCapabilityStorage = ReadDB2("MountTypeXCapability.db2", HotfixStatements.SEL_MOUNT_TYPE_X_CAPABILITY); MountXDisplayStorage = ReadDB2("MountXDisplay.db2", HotfixStatements.SEL_MOUNT_X_DISPLAY); MovieStorage = ReadDB2("Movie.db2", HotfixStatements.SEL_MOVIE); MythicPlusSeasonStorage = ReadDB2("MythicPlusSeason.db2", HotfixStatements.SEL_MYTHIC_PLUS_SEASON); NameGenStorage = ReadDB2("NameGen.db2", HotfixStatements.SEL_NAME_GEN); NamesProfanityStorage = ReadDB2("NamesProfanity.db2", HotfixStatements.SEL_NAMES_PROFANITY); NamesReservedStorage = ReadDB2("NamesReserved.db2", HotfixStatements.SEL_NAMES_RESERVED, HotfixStatements.SEL_NAMES_RESERVED_LOCALE); NamesReservedLocaleStorage = ReadDB2("NamesReservedLocale.db2", HotfixStatements.SEL_NAMES_RESERVED_LOCALE); NumTalentsAtLevelStorage = ReadDB2("NumTalentsAtLevel.db2", HotfixStatements.SEL_NUM_TALENTS_AT_LEVEL); OverrideSpellDataStorage = ReadDB2("OverrideSpellData.db2", HotfixStatements.SEL_OVERRIDE_SPELL_DATA); ParagonReputationStorage = ReadDB2("ParagonReputation.db2", HotfixStatements.SEL_PARAGON_REPUTATION); PathStorage = ReadDB2("Path.db2", HotfixStatements.SEL_PATH); PathNodeStorage = ReadDB2("PathNode.db2", HotfixStatements.SEL_PATH_NODE); PathPropertyStorage = ReadDB2("PathProperty.db2", HotfixStatements.SEL_PATH_PROPERTY); PhaseStorage = ReadDB2("Phase.db2", HotfixStatements.SEL_PHASE); PhaseXPhaseGroupStorage = ReadDB2("PhaseXPhaseGroup.db2", HotfixStatements.SEL_PHASE_X_PHASE_GROUP); PlayerConditionStorage = ReadDB2("PlayerCondition.db2", HotfixStatements.SEL_PLAYER_CONDITION, HotfixStatements.SEL_PLAYER_CONDITION_LOCALE); PlayerDataElementAccountStorage = ReadDB2("PlayerDataElementAccount.db2", HotfixStatements.SEL_PLAYER_DATA_ELEMENT_ACCOUNT); PlayerDataElementCharacterStorage = ReadDB2("PlayerDataElementCharacter.db2", HotfixStatements.SEL_PLAYER_DATA_ELEMENT_CHARACTER); PlayerDataFlagAccountStorage = ReadDB2("PlayerDataFlagAccount.db2", HotfixStatements.SEL_PLAYER_DATA_FLAG_ACCOUNT); PlayerDataFlagCharacterStorage = ReadDB2("PlayerDataFlagCharacter.db2", HotfixStatements.SEL_PLAYER_DATA_FLAG_CHARACTER); PowerDisplayStorage = ReadDB2("PowerDisplay.db2", HotfixStatements.SEL_POWER_DISPLAY); PowerTypeStorage = ReadDB2("PowerType.db2", HotfixStatements.SEL_POWER_TYPE); PrestigeLevelInfoStorage = ReadDB2("PrestigeLevelInfo.db2", HotfixStatements.SEL_PRESTIGE_LEVEL_INFO, HotfixStatements.SEL_PRESTIGE_LEVEL_INFO_LOCALE); PvpDifficultyStorage = ReadDB2("PVPDifficulty.db2", HotfixStatements.SEL_PVP_DIFFICULTY); PvpItemStorage = ReadDB2("PVPItem.db2", HotfixStatements.SEL_PVP_ITEM); PvpStatStorage = ReadDB2("PVPStat.db2", HotfixStatements.SEL_PVP_STAT, HotfixStatements.SEL_PVP_STAT_LOCALE); PvpSeasonStorage = ReadDB2("PvpSeason.db2", HotfixStatements.SEL_PVP_SEASON); PvpTalentStorage = ReadDB2("PvpTalent.db2", HotfixStatements.SEL_PVP_TALENT, HotfixStatements.SEL_PVP_TALENT_LOCALE); PvpTalentCategoryStorage = ReadDB2("PvpTalentCategory.db2", HotfixStatements.SEL_PVP_TALENT_CATEGORY); PvpTalentSlotUnlockStorage = ReadDB2("PvpTalentSlotUnlock.db2", HotfixStatements.SEL_PVP_TALENT_SLOT_UNLOCK); PvpTierStorage = ReadDB2("PvpTier.db2", HotfixStatements.SEL_PVP_TIER, HotfixStatements.SEL_PVP_TIER_LOCALE); QuestFactionRewardStorage = ReadDB2("QuestFactionReward.db2", HotfixStatements.SEL_QUEST_FACTION_REWARD); QuestInfoStorage = ReadDB2("QuestInfo.db2", HotfixStatements.SEL_QUEST_INFO, HotfixStatements.SEL_QUEST_INFO_LOCALE); QuestLineXQuestStorage = ReadDB2("QuestLineXQuest.db2", HotfixStatements.SEL_QUEST_LINE_X_QUEST); QuestMoneyRewardStorage = ReadDB2("QuestMoneyReward.db2", HotfixStatements.SEL_QUEST_MONEY_REWARD); QuestPackageItemStorage = ReadDB2("QuestPackageItem.db2", HotfixStatements.SEL_QUEST_PACKAGE_ITEM); QuestSortStorage = ReadDB2("QuestSort.db2", HotfixStatements.SEL_QUEST_SORT, HotfixStatements.SEL_QUEST_SORT_LOCALE); QuestV2Storage = ReadDB2("QuestV2.db2", HotfixStatements.SEL_QUEST_V2); QuestXPStorage = ReadDB2("QuestXP.db2", HotfixStatements.SEL_QUEST_XP); RandPropPointsStorage = ReadDB2("RandPropPoints.db2", HotfixStatements.SEL_RAND_PROP_POINTS); RewardPackStorage = ReadDB2("RewardPack.db2", HotfixStatements.SEL_REWARD_PACK); RewardPackXCurrencyTypeStorage = ReadDB2("RewardPackXCurrencyType.db2", HotfixStatements.SEL_REWARD_PACK_X_CURRENCY_TYPE); RewardPackXItemStorage = ReadDB2("RewardPackXItem.db2", HotfixStatements.SEL_REWARD_PACK_X_ITEM); ScenarioStorage = ReadDB2("Scenario.db2", HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE); ScenarioStepStorage = ReadDB2("ScenarioStep.db2", HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE); SceneScriptStorage = ReadDB2("SceneScript.db2", HotfixStatements.SEL_SCENE_SCRIPT); SceneScriptGlobalTextStorage = ReadDB2("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT); SceneScriptPackageStorage = ReadDB2("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE); SceneScriptTextStorage = ReadDB2("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT); ServerMessagesStorage = ReadDB2("ServerMessages.db2", HotfixStatements.SEL_SERVER_MESSAGES, HotfixStatements.SEL_SERVER_MESSAGES_LOCALE); SkillLineStorage = ReadDB2("SkillLine.db2", HotfixStatements.SEL_SKILL_LINE, HotfixStatements.SEL_SKILL_LINE_LOCALE); SkillLineAbilityStorage = ReadDB2("SkillLineAbility.db2", HotfixStatements.SEL_SKILL_LINE_ABILITY); SkillLineXTraitTreeStorage = ReadDB2("SkillLineXTraitTree.db2", HotfixStatements.SEL_SKILL_LINE_X_TRAIT_TREE); SkillRaceClassInfoStorage = ReadDB2("SkillRaceClassInfo.db2", HotfixStatements.SEL_SKILL_RACE_CLASS_INFO); SoulbindConduitRankStorage = ReadDB2("SoulbindConduitRank.db2", HotfixStatements.SEL_SOULBIND_CONDUIT_RANK); SoundKitStorage = ReadDB2("SoundKit.db2", HotfixStatements.SEL_SOUND_KIT); SpecializationSpellsStorage = ReadDB2("SpecializationSpells.db2", HotfixStatements.SEL_SPECIALIZATION_SPELLS, HotfixStatements.SEL_SPECIALIZATION_SPELLS_LOCALE); SpecSetMemberStorage = ReadDB2("SpecSetMember.db2", HotfixStatements.SEL_SPEC_SET_MEMBER); SpellNameStorage = ReadDB2("SpellName.db2", HotfixStatements.SEL_SPELL_NAME, HotfixStatements.SEL_SPELL_NAME_LOCALE); SpellAuraOptionsStorage = ReadDB2("SpellAuraOptions.db2", HotfixStatements.SEL_SPELL_AURA_OPTIONS); SpellAuraRestrictionsStorage = ReadDB2("SpellAuraRestrictions.db2", HotfixStatements.SEL_SPELL_AURA_RESTRICTIONS); SpellCastTimesStorage = ReadDB2("SpellCastTimes.db2", HotfixStatements.SEL_SPELL_CAST_TIMES); SpellCastingRequirementsStorage = ReadDB2("SpellCastingRequirements.db2", HotfixStatements.SEL_SPELL_CASTING_REQUIREMENTS); SpellCategoriesStorage = ReadDB2("SpellCategories.db2", HotfixStatements.SEL_SPELL_CATEGORIES); SpellCategoryStorage = ReadDB2("SpellCategory.db2", HotfixStatements.SEL_SPELL_CATEGORY, HotfixStatements.SEL_SPELL_CATEGORY_LOCALE); SpellClassOptionsStorage = ReadDB2("SpellClassOptions.db2", HotfixStatements.SEL_SPELL_CLASS_OPTIONS); SpellCooldownsStorage = ReadDB2("SpellCooldowns.db2", HotfixStatements.SEL_SPELL_COOLDOWNS); SpellDurationStorage = ReadDB2("SpellDuration.db2", HotfixStatements.SEL_SPELL_DURATION); SpellEffectStorage = ReadDB2("SpellEffect.db2", HotfixStatements.SEL_SPELL_EFFECT); SpellEmpowerStorage = ReadDB2("SpellEmpower.db2", HotfixStatements.SEL_SPELL_EMPOWER); SpellEmpowerStageStorage = ReadDB2("SpellEmpowerStage.db2", HotfixStatements.SEL_SPELL_EMPOWER_STAGE); SpellEquippedItemsStorage = ReadDB2("SpellEquippedItems.db2", HotfixStatements.SEL_SPELL_EQUIPPED_ITEMS); SpellFocusObjectStorage = ReadDB2("SpellFocusObject.db2", HotfixStatements.SEL_SPELL_FOCUS_OBJECT, HotfixStatements.SEL_SPELL_FOCUS_OBJECT_LOCALE); SpellInterruptsStorage = ReadDB2("SpellInterrupts.db2", HotfixStatements.SEL_SPELL_INTERRUPTS); SpellItemEnchantmentStorage = ReadDB2("SpellItemEnchantment.db2", HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_LOCALE); SpellItemEnchantmentConditionStorage = ReadDB2("SpellItemEnchantmentCondition.db2", HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_CONDITION); SpellKeyboundOverrideStorage = ReadDB2("SpellKeyboundOverride.db2", HotfixStatements.SEL_SPELL_KEYBOUND_OVERRIDE); SpellLabelStorage = ReadDB2("SpellLabel.db2", HotfixStatements.SEL_SPELL_LABEL); SpellLearnSpellStorage = ReadDB2("SpellLearnSpell.db2", HotfixStatements.SEL_SPELL_LEARN_SPELL); SpellLevelsStorage = ReadDB2("SpellLevels.db2", HotfixStatements.SEL_SPELL_LEVELS); SpellMiscStorage = ReadDB2("SpellMisc.db2", HotfixStatements.SEL_SPELL_MISC); SpellPowerStorage = ReadDB2("SpellPower.db2", HotfixStatements.SEL_SPELL_POWER); SpellPowerDifficultyStorage = ReadDB2("SpellPowerDifficulty.db2", HotfixStatements.SEL_SPELL_POWER_DIFFICULTY); SpellProcsPerMinuteStorage = ReadDB2("SpellProcsPerMinute.db2", HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE); SpellProcsPerMinuteModStorage = ReadDB2("SpellProcsPerMinuteMod.db2", HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE_MOD); SpellRadiusStorage = ReadDB2("SpellRadius.db2", HotfixStatements.SEL_SPELL_RADIUS); SpellRangeStorage = ReadDB2("SpellRange.db2", HotfixStatements.SEL_SPELL_RANGE, HotfixStatements.SEL_SPELL_RANGE_LOCALE); SpellReagentsStorage = ReadDB2("SpellReagents.db2", HotfixStatements.SEL_SPELL_REAGENTS); SpellReagentsCurrencyStorage = ReadDB2("SpellReagentsCurrency.db2", HotfixStatements.SEL_SPELL_REAGENTS_CURRENCY); SpellScalingStorage = ReadDB2("SpellScaling.db2", HotfixStatements.SEL_SPELL_SCALING); SpellShapeshiftStorage = ReadDB2("SpellShapeshift.db2", HotfixStatements.SEL_SPELL_SHAPESHIFT); SpellShapeshiftFormStorage = ReadDB2("SpellShapeshiftForm.db2", HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE); SpellTargetRestrictionsStorage = ReadDB2("SpellTargetRestrictions.db2", HotfixStatements.SEL_SPELL_TARGET_RESTRICTIONS); SpellTotemsStorage = ReadDB2("SpellTotems.db2", HotfixStatements.SEL_SPELL_TOTEMS); SpellVisualStorage = ReadDB2("SpellVisual.db2", HotfixStatements.SEL_SPELL_VISUAL); SpellVisualEffectNameStorage = ReadDB2("SpellVisualEffectName.db2", HotfixStatements.SEL_SPELL_VISUAL_EFFECT_NAME); SpellVisualMissileStorage = ReadDB2("SpellVisualMissile.db2", HotfixStatements.SEL_SPELL_VISUAL_MISSILE); SpellVisualKitStorage = ReadDB2("SpellVisualKit.db2", HotfixStatements.SEL_SPELL_VISUAL_KIT); SpellXSpellVisualStorage = ReadDB2("SpellXSpellVisual.db2", HotfixStatements.SEL_SPELL_X_SPELL_VISUAL); SummonPropertiesStorage = ReadDB2("SummonProperties.db2", HotfixStatements.SEL_SUMMON_PROPERTIES); TactKeyStorage = ReadDB2("TactKey.db2", HotfixStatements.SEL_TACT_KEY); TalentStorage = ReadDB2("Talent.db2", HotfixStatements.SEL_TALENT, HotfixStatements.SEL_TALENT_LOCALE); TaxiNodesStorage = ReadDB2("TaxiNodes.db2", HotfixStatements.SEL_TAXI_NODES, HotfixStatements.SEL_TAXI_NODES_LOCALE); TaxiPathStorage = ReadDB2("TaxiPath.db2", HotfixStatements.SEL_TAXI_PATH); TaxiPathNodeStorage = ReadDB2("TaxiPathNode.db2", HotfixStatements.SEL_TAXI_PATH_NODE); TotemCategoryStorage = ReadDB2("TotemCategory.db2", HotfixStatements.SEL_TOTEM_CATEGORY, HotfixStatements.SEL_TOTEM_CATEGORY_LOCALE); ToyStorage = ReadDB2("Toy.db2", HotfixStatements.SEL_TOY, HotfixStatements.SEL_TOY_LOCALE); TraitCondStorage = ReadDB2("TraitCond.db2", HotfixStatements.SEL_TRAIT_COND); TraitCostStorage = ReadDB2("TraitCost.db2", HotfixStatements.SEL_TRAIT_COST); TraitCurrencyStorage = ReadDB2("TraitCurrency.db2", HotfixStatements.SEL_TRAIT_CURRENCY); TraitCurrencySourceStorage = ReadDB2("TraitCurrencySource.db2", HotfixStatements.SEL_TRAIT_CURRENCY_SOURCE, HotfixStatements.SEL_TRAIT_CURRENCY_SOURCE_LOCALE); TraitDefinitionStorage = ReadDB2("TraitDefinition.db2", HotfixStatements.SEL_TRAIT_DEFINITION, HotfixStatements.SEL_TRAIT_DEFINITION_LOCALE); TraitDefinitionEffectPointsStorage = ReadDB2("TraitDefinitionEffectPoints.db2", HotfixStatements.SEL_TRAIT_DEFINITION_EFFECT_POINTS); TraitEdgeStorage = ReadDB2("TraitEdge.db2", HotfixStatements.SEL_TRAIT_EDGE); TraitNodeStorage = ReadDB2("TraitNode.db2", HotfixStatements.SEL_TRAIT_NODE); TraitNodeEntryStorage = ReadDB2("TraitNodeEntry.db2", HotfixStatements.SEL_TRAIT_NODE_ENTRY); TraitNodeEntryXTraitCondStorage = ReadDB2("TraitNodeEntryXTraitCond.db2", HotfixStatements.SEL_TRAIT_NODE_ENTRY_X_TRAIT_COND); TraitNodeEntryXTraitCostStorage = ReadDB2("TraitNodeEntryXTraitCost.db2", HotfixStatements.SEL_TRAIT_NODE_ENTRY_X_TRAIT_COST); TraitNodeGroupStorage = ReadDB2("TraitNodeGroup.db2", HotfixStatements.SEL_TRAIT_NODE_GROUP); TraitNodeGroupXTraitCondStorage = ReadDB2("TraitNodeGroupXTraitCond.db2", HotfixStatements.SEL_TRAIT_NODE_GROUP_X_TRAIT_COND); TraitNodeGroupXTraitCostStorage = ReadDB2("TraitNodeGroupXTraitCost.db2", HotfixStatements.SEL_TRAIT_NODE_GROUP_X_TRAIT_COST); TraitNodeGroupXTraitNodeStorage = ReadDB2("TraitNodeGroupXTraitNode.db2", HotfixStatements.SEL_TRAIT_NODE_GROUP_X_TRAIT_NODE); TraitNodeXTraitCondStorage = ReadDB2("TraitNodeXTraitCond.db2", HotfixStatements.SEL_TRAIT_NODE_X_TRAIT_COND); TraitNodeXTraitCostStorage = ReadDB2("TraitNodeXTraitCost.db2", HotfixStatements.SEL_TRAIT_NODE_X_TRAIT_COST); TraitNodeXTraitNodeEntryStorage = ReadDB2("TraitNodeXTraitNodeEntry.db2", HotfixStatements.SEL_TRAIT_NODE_X_TRAIT_NODE_ENTRY); TraitSubTreeStorage = ReadDB2("TraitSubTree.db2", HotfixStatements.SEL_TRAIT_SUB_TREE, HotfixStatements.SEL_TRAIT_SUB_TREE_LOCALE); TraitTreeStorage = ReadDB2("TraitTree.db2", HotfixStatements.SEL_TRAIT_TREE); TraitTreeLoadoutStorage = ReadDB2("TraitTreeLoadout.db2", HotfixStatements.SEL_TRAIT_TREE_LOADOUT); TraitTreeLoadoutEntryStorage = ReadDB2("TraitTreeLoadoutEntry.db2", HotfixStatements.SEL_TRAIT_TREE_LOADOUT_ENTRY); TraitTreeXTraitCostStorage = ReadDB2("TraitTreeXTraitCost.db2", HotfixStatements.SEL_TRAIT_TREE_X_TRAIT_COST); TraitTreeXTraitCurrencyStorage = ReadDB2("TraitTreeXTraitCurrency.db2", HotfixStatements.SEL_TRAIT_TREE_X_TRAIT_CURRENCY); TransmogHolidayStorage = ReadDB2("TransmogHoliday.db2", HotfixStatements.SEL_TRANSMOG_HOLIDAY); TransmogIllusionStorage = ReadDB2("TransmogIllusion.db2", HotfixStatements.SEL_TRANSMOG_ILLUSION); TransmogSetStorage = ReadDB2("TransmogSet.db2", HotfixStatements.SEL_TRANSMOG_SET, HotfixStatements.SEL_TRANSMOG_SET_LOCALE); TransmogSetGroupStorage = ReadDB2("TransmogSetGroup.db2", HotfixStatements.SEL_TRANSMOG_SET_GROUP, HotfixStatements.SEL_TRANSMOG_SET_GROUP_LOCALE); TransmogSetItemStorage = ReadDB2("TransmogSetItem.db2", HotfixStatements.SEL_TRANSMOG_SET_ITEM); TransportAnimationStorage = ReadDB2("TransportAnimation.db2", HotfixStatements.SEL_TRANSPORT_ANIMATION); TransportRotationStorage = ReadDB2("TransportRotation.db2", HotfixStatements.SEL_TRANSPORT_ROTATION); UiMapStorage = ReadDB2("UiMap.db2", HotfixStatements.SEL_UI_MAP, HotfixStatements.SEL_UI_MAP_LOCALE); UiMapAssignmentStorage = ReadDB2("UiMapAssignment.db2", HotfixStatements.SEL_UI_MAP_ASSIGNMENT); UiMapLinkStorage = ReadDB2("UiMapLink.db2", HotfixStatements.SEL_UI_MAP_LINK); UiMapXMapArtStorage = ReadDB2("UiMapXMapArt.db2", HotfixStatements.SEL_UI_MAP_X_MAP_ART); UISplashScreenStorage = ReadDB2("UISplashScreen.db2", HotfixStatements.SEL_UI_SPLASH_SCREEN, HotfixStatements.SEL_UI_SPLASH_SCREEN_LOCALE); UnitConditionStorage = ReadDB2("UnitCondition.db2", HotfixStatements.SEL_UNIT_CONDITION); UnitPowerBarStorage = ReadDB2("UnitPowerBar.db2", HotfixStatements.SEL_UNIT_POWER_BAR, HotfixStatements.SEL_UNIT_POWER_BAR_LOCALE); VehicleStorage = ReadDB2("Vehicle.db2", HotfixStatements.SEL_VEHICLE); VehicleSeatStorage = ReadDB2("VehicleSeat.db2", HotfixStatements.SEL_VEHICLE_SEAT); VignetteStorage = ReadDB2("Vignette.db2", HotfixStatements.SEL_VIGNETTE, HotfixStatements.SEL_VIGNETTE_LOCALE); WarbandSceneStorage = ReadDB2("WarbandScene.db2", HotfixStatements.SEL_WARBAND_SCENE, HotfixStatements.SEL_WARBAND_SCENE_LOCALE); WMOAreaTableStorage = ReadDB2("WMOAreaTable.db2", HotfixStatements.SEL_WMO_AREA_TABLE, HotfixStatements.SEL_WMO_AREA_TABLE_LOCALE); WorldEffectStorage = ReadDB2("WorldEffect.db2", HotfixStatements.SEL_WORLD_EFFECT); WorldMapOverlayStorage = ReadDB2("WorldMapOverlay.db2", HotfixStatements.SEL_WORLD_MAP_OVERLAY); WorldStateExpressionStorage = ReadDB2("WorldStateExpression.db2", HotfixStatements.SEL_WORLD_STATE_EXPRESSION); // Check loaded DB2 files proper version if (!AreaTableStorage.ContainsKey(16579) || // last area added in 11.2.0 (62213) !CharTitlesStorage.ContainsKey(937) || // last char title added in 11.2.0 (62213) !FlightCapabilityStorage.ContainsKey(1) || // default flight capability (required) !GemPropertiesStorage.ContainsKey(4287) || // last gem property added in 11.2.0 (62213) !ItemStorage.ContainsKey(252009) || // last item added in 11.2.0 (62213) !ItemSparseStorage.ContainsKey(208392) || !ItemSparseStorage.ContainsKey(242709) || !ItemExtendedCostStorage.ContainsKey(10637) || // last item extended cost added in 11.2.0 (62213) !MapStorage.ContainsKey(2951) || // last map added in 11.2.0 (62213) !SpellNameStorage.ContainsKey(1254022)) // last spell added in 11.2.0 (62213) { Log.outFatal(LogFilter.ServerLoading, "You have _outdated_ DB2 files. Please extract correct versions from current using client."); Environment.Exit(1); } Log.outInfo(LogFilter.ServerLoading, $"Initialized {loadedFileCount} DB2 data storages in {Time.GetMSTimeDiffToNow(oldMSTime)} ms"); return availableDb2Locales; } public static void LoadGameTables(string dataPath) { uint oldMSTime = Time.GetMSTime(); string gtPath = dataPath + "/gt/"; uint loadedFileCount = 0; GameTable ReadGameTable(string fileName) where T : new() { return GameTableReader.Read(gtPath, fileName, ref loadedFileCount); } ArtifactKnowledgeMultiplierGameTable = ReadGameTable("ArtifactKnowledgeMultiplier.txt"); ArtifactLevelXPGameTable = ReadGameTable("artifactLevelXP.txt"); BarberShopCostBaseGameTable = ReadGameTable("BarberShopCostBase.txt"); BaseMPGameTable = ReadGameTable("BaseMp.txt"); BattlePetXPGameTable = ReadGameTable("BattlePetXP.txt"); CombatRatingsGameTable = ReadGameTable("CombatRatings.txt"); CombatRatingsMultByILvlGameTable = ReadGameTable("CombatRatingsMultByILvl.txt"); HpPerStaGameTable = ReadGameTable("HpPerSta.txt"); ItemLevelByLevelTable = ReadGameTable("ItemLevelByLevel.txt"); ItemSocketCostPerLevelGameTable = ReadGameTable("ItemSocketCostPerLevel.txt"); NpcManaCostScalerGameTable = ReadGameTable("NPCManaCostScaler.txt"); SpellScalingGameTable = ReadGameTable("SpellScaling.txt"); StaminaMultByILvlGameTable = ReadGameTable("StaminaMultByILvl.txt"); XpGameTable = ReadGameTable("xp.txt"); Log.outInfo(LogFilter.ServerLoading, "Initialized {0} DBC GameTables data stores in {1} ms", loadedFileCount, Time.GetMSTimeDiffToNow(oldMSTime)); } #region Main Collections public static DB6Storage AchievementStorage; public static DB6Storage AchievementCategoryStorage; public static DB6Storage AdventureJournalStorage; public static DB6Storage AdventureMapPOIStorage; public static DB6Storage AnimationDataStorage; public static DB6Storage AnimKitStorage; public static DB6Storage AreaGroupMemberStorage; public static DB6Storage AreaTableStorage; public static DB6Storage AreaTriggerStorage; public static DB6Storage AreaTriggerActionSetStorage; public static DB6Storage ArmorLocationStorage; public static DB6Storage ArtifactStorage; public static DB6Storage ArtifactAppearanceStorage; public static DB6Storage ArtifactAppearanceSetStorage; public static DB6Storage ArtifactCategoryStorage; public static DB6Storage ArtifactPowerStorage; public static DB6Storage ArtifactPowerLinkStorage; public static DB6Storage ArtifactPowerPickerStorage; public static DB6Storage ArtifactPowerRankStorage; //public static DB6Storage ArtifactQuestXPStorage; public static DB6Storage ArtifactTierStorage; public static DB6Storage ArtifactUnlockStorage; public static DB6Storage AuctionHouseStorage; public static DB6Storage AzeriteEmpoweredItemStorage; public static DB6Storage AzeriteEssenceStorage; public static DB6Storage AzeriteEssencePowerStorage; public static DB6Storage AzeriteItemStorage; public static DB6Storage AzeriteItemMilestonePowerStorage; public static DB6Storage AzeriteKnowledgeMultiplierStorage; public static DB6Storage AzeriteLevelInfoStorage; public static DB6Storage AzeritePowerStorage; public static DB6Storage AzeritePowerSetMemberStorage; public static DB6Storage AzeriteTierUnlockStorage; public static DB6Storage AzeriteTierUnlockSetStorage; public static DB6Storage AzeriteUnlockMappingStorage; public static DB6Storage BankTabStorage; public static DB6Storage BannedAddOnsStorage; public static DB6Storage BarberShopStyleStorage; public static DB6Storage BattlePetBreedQualityStorage; public static DB6Storage BattlePetBreedStateStorage; public static DB6Storage BattlePetSpeciesStorage; public static DB6Storage BattlePetSpeciesStateStorage; public static DB6Storage BattlemasterListStorage; public static DB6Storage BattlemasterListXMapStorage; public static DB6Storage BroadcastTextStorage; public static DB6Storage BroadcastTextDurationStorage; public static DB6Storage CfgCategoriesStorage; public static DB6Storage CfgRegionsStorage; public static DB6Storage ChallengeModeItemBonusOverrideStorage; public static DB6Storage CharBaseInfoStorage; public static DB6Storage CharTitlesStorage; public static DB6Storage CharacterLoadoutStorage; public static DB6Storage CharacterLoadoutItemStorage; public static DB6Storage ChatChannelsStorage; public static DB6Storage ChrClassUIDisplayStorage; public static DB6Storage ChrClassesStorage; public static DB6Storage ChrClassesXPowerTypesStorage; public static DB6Storage ChrCustomizationChoiceStorage; public static DB6Storage ChrCustomizationDisplayInfoStorage; public static DB6Storage ChrCustomizationElementStorage; public static DB6Storage ChrCustomizationReqStorage; public static DB6Storage ChrCustomizationReqChoiceStorage; public static DB6Storage ChrModelStorage; public static DB6Storage ChrRaceXChrModelStorage; public static DB6Storage ChrCustomizationOptionStorage; public static DB6Storage ChrRacesStorage; public static DB6Storage ChrSpecializationStorage; public static DB6Storage CinematicCameraStorage; public static DB6Storage CinematicSequencesStorage; public static DB6Storage ConditionalChrModelStorage; public static DB6Storage ConditionalContentTuningStorage; public static DB6Storage ContentTuningStorage; public static DB6Storage ContentTuningXExpectedStorage; public static DB6Storage ContentTuningXLabelStorage; public static DB6Storage ConversationLineStorage; public static DB6Storage CorruptionEffectsStorage; public static DB6Storage CreatureDisplayInfoStorage; public static DB6Storage CreatureDisplayInfoExtraStorage; public static DB6Storage CreatureFamilyStorage; public static DB6Storage CreatureLabelStorage; public static DB6Storage CreatureModelDataStorage; public static DB6Storage CreatureTypeStorage; public static DB6Storage CriteriaStorage; public static DB6Storage CriteriaTreeStorage; public static DB6Storage CurrencyContainerStorage; public static DB6Storage CurrencyTypesStorage; public static DB6Storage CurveStorage; public static DB6Storage CurvePointStorage; public static DB6Storage DestructibleModelDataStorage; public static DB6Storage DifficultyStorage; public static DB6Storage DungeonEncounterStorage; public static DB6Storage DurabilityCostsStorage; public static DB6Storage DurabilityQualityStorage; public static DB6Storage EmotesStorage; public static DB6Storage EmotesTextStorage; public static DB6Storage EmotesTextSoundStorage; public static DB6Storage ExpectedStatStorage; public static DB6Storage ExpectedStatModStorage; public static DB6Storage FactionStorage; public static DB6Storage FactionTemplateStorage; public static DB6Storage FlightCapabilityStorage; public static DB6Storage FriendshipRepReactionStorage; public static DB6Storage FriendshipReputationStorage; public static DB6Storage GameObjectArtKitStorage; public static DB6Storage GameObjectDisplayInfoStorage; public static DB6Storage GameObjectLabelStorage; public static DB6Storage GameObjectsStorage; public static DB6Storage GarrAbilityStorage; public static DB6Storage GarrBuildingStorage; public static DB6Storage GarrBuildingPlotInstStorage; public static DB6Storage GarrClassSpecStorage; public static DB6Storage GarrFollowerStorage; public static DB6Storage GarrFollowerXAbilityStorage; public static DB6Storage GarrMissionStorage; public static DB6Storage GarrPlotBuildingStorage; public static DB6Storage GarrPlotStorage; public static DB6Storage GarrPlotInstanceStorage; public static DB6Storage GarrSiteLevelStorage; public static DB6Storage GarrSiteLevelPlotInstStorage; public static DB6Storage GarrTalentTreeStorage; public static DB6Storage GemPropertiesStorage; public static DB6Storage GlobalCurveStorage; public static DB6Storage GlyphBindableSpellStorage; public static DB6Storage GlyphPropertiesStorage; public static DB6Storage GlyphRequiredSpecStorage; public static DB6Storage GossipNPCOptionStorage; public static DB6Storage GuildColorBackgroundStorage; public static DB6Storage GuildColorBorderStorage; public static DB6Storage GuildColorEmblemStorage; public static DB6Storage GuildPerkSpellsStorage; public static DB6Storage HeirloomStorage; public static DB6Storage HolidaysStorage; public static DB6Storage ImportPriceArmorStorage; public static DB6Storage ImportPriceQualityStorage; public static DB6Storage ImportPriceShieldStorage; public static DB6Storage ImportPriceWeaponStorage; public static DB6Storage ItemAppearanceStorage; public static DB6Storage ItemArmorQualityStorage; public static DB6Storage ItemArmorShieldStorage; public static DB6Storage ItemArmorTotalStorage; //public static DB6Storage ItemBagFamilyStorage; public static DB6Storage ItemBonusStorage; public static DB6Storage ItemBonusListGroupEntryStorage; public static DB6Storage ItemBonusListLevelDeltaStorage; public static DB6Storage ItemBonusTreeStorage; public static DB6Storage ItemBonusTreeNodeStorage; public static DB6Storage ItemContextPickerEntryStorage; public static DB6Storage ItemClassStorage; public static DB6Storage ItemChildEquipmentStorage; public static DB6Storage ItemCurrencyCostStorage; public static DB6Storage ItemDamageAmmoStorage; public static DB6Storage ItemDamageOneHandStorage; public static DB6Storage ItemDamageOneHandCasterStorage; public static DB6Storage ItemDamageTwoHandStorage; public static DB6Storage ItemDamageTwoHandCasterStorage; public static DB6Storage ItemDisenchantLootStorage; public static DB6Storage ItemEffectStorage; public static DB6Storage ItemStorage; public static DB6Storage ItemExtendedCostStorage; public static DB6Storage ItemLevelSelectorStorage; public static DB6Storage ItemLevelSelectorQualityStorage; public static DB6Storage ItemLevelSelectorQualitySetStorage; public static DB6Storage ItemLimitCategoryStorage; public static DB6Storage ItemLimitCategoryConditionStorage; public static DB6Storage ItemModifiedAppearanceStorage; public static DB6Storage ItemModifiedAppearanceExtraStorage; public static DB6Storage ItemNameDescriptionStorage; public static DB6Storage ItemPriceBaseStorage; public static DB6Storage ItemSearchNameStorage; public static DB6Storage ItemSetStorage; public static DB6Storage ItemSetSpellStorage; public static DB6Storage ItemSparseStorage; public static DB6Storage ItemSpecStorage; public static DB6Storage ItemSpecOverrideStorage; public static DB6Storage ItemXBonusTreeStorage; public static DB6Storage ItemXItemEffectStorage; public static DB6Storage JournalEncounterStorage; public static DB6Storage JournalEncounterSectionStorage; public static DB6Storage JournalInstanceStorage; public static DB6Storage JournalTierStorage; //public static DB6Storage KeyChainStorage; public static DB6Storage KeystoneAffixStorage; public static DB6Storage LanguageWordsStorage; public static DB6Storage LanguagesStorage; public static DB6Storage LFGDungeonsStorage; public static DB6Storage LightStorage; public static DB6Storage LiquidTypeStorage; public static DB6Storage LocationStorage; public static DB6Storage LockStorage; public static DB6Storage MailTemplateStorage; public static DB6Storage MapStorage; public static DB6Storage MapChallengeModeStorage; public static DB6Storage MapDifficultyStorage; public static DB6Storage MapDifficultyXConditionStorage; public static DB6Storage MawPowerStorage; public static DB6Storage ModifierTreeStorage; public static DB6Storage MountCapabilityStorage; public static DB6Storage MountStorage; public static DB6Storage MountEquipmentStorage; public static DB6Storage MountTypeXCapabilityStorage; public static DB6Storage MountXDisplayStorage; public static DB6Storage MovieStorage; public static DB6Storage MythicPlusSeasonStorage; public static DB6Storage NameGenStorage; public static DB6Storage NamesProfanityStorage; public static DB6Storage NamesReservedStorage; public static DB6Storage NamesReservedLocaleStorage; public static DB6Storage NumTalentsAtLevelStorage; public static DB6Storage OverrideSpellDataStorage; public static DB6Storage ParagonReputationStorage; public static DB6Storage PathStorage; public static DB6Storage PathNodeStorage; public static DB6Storage PathPropertyStorage; public static DB6Storage PhaseStorage; public static DB6Storage PhaseXPhaseGroupStorage; public static DB6Storage PlayerConditionStorage; public static DB6Storage PlayerDataElementAccountStorage; public static DB6Storage PlayerDataElementCharacterStorage; public static DB6Storage PlayerDataFlagAccountStorage; public static DB6Storage PlayerDataFlagCharacterStorage; public static DB6Storage PowerDisplayStorage; public static DB6Storage PowerTypeStorage; public static DB6Storage PrestigeLevelInfoStorage; public static DB6Storage PvpDifficultyStorage; public static DB6Storage PvpItemStorage; public static DB6Storage PvpStatStorage; public static DB6Storage PvpSeasonStorage; public static DB6Storage PvpTalentStorage; public static DB6Storage PvpTalentCategoryStorage; public static DB6Storage PvpTalentSlotUnlockStorage; public static DB6Storage PvpTierStorage; public static DB6Storage QuestFactionRewardStorage; public static DB6Storage QuestInfoStorage; public static DB6Storage QuestLineXQuestStorage; public static DB6Storage QuestMoneyRewardStorage; public static DB6Storage QuestPackageItemStorage; public static DB6Storage QuestSortStorage; public static DB6Storage QuestV2Storage; public static DB6Storage QuestXPStorage; public static DB6Storage RandPropPointsStorage; public static DB6Storage RewardPackStorage; public static DB6Storage RewardPackXCurrencyTypeStorage; public static DB6Storage RewardPackXItemStorage; public static DB6Storage ScenarioStorage; public static DB6Storage ScenarioStepStorage; public static DB6Storage SceneScriptStorage; public static DB6Storage SceneScriptGlobalTextStorage; public static DB6Storage SceneScriptPackageStorage; public static DB6Storage SceneScriptTextStorage; public static DB6Storage ServerMessagesStorage; public static DB6Storage SkillLineStorage; public static DB6Storage SkillLineAbilityStorage; public static DB6Storage SkillLineXTraitTreeStorage; public static DB6Storage SkillRaceClassInfoStorage; public static DB6Storage SoulbindConduitRankStorage; public static DB6Storage SoundKitStorage; public static DB6Storage SpecializationSpellsStorage; public static DB6Storage SpecSetMemberStorage; public static DB6Storage SpellAuraOptionsStorage; public static DB6Storage SpellAuraRestrictionsStorage; public static DB6Storage SpellCastTimesStorage; public static DB6Storage SpellCastingRequirementsStorage; public static DB6Storage SpellCategoriesStorage; public static DB6Storage SpellCategoryStorage; public static DB6Storage SpellClassOptionsStorage; public static DB6Storage SpellCooldownsStorage; public static DB6Storage SpellDurationStorage; public static DB6Storage SpellEffectStorage; public static DB6Storage SpellEmpowerStorage; public static DB6Storage SpellEmpowerStageStorage; public static DB6Storage SpellEquippedItemsStorage; public static DB6Storage SpellFocusObjectStorage; public static DB6Storage SpellInterruptsStorage; public static DB6Storage SpellItemEnchantmentStorage; public static DB6Storage SpellItemEnchantmentConditionStorage; public static DB6Storage SpellKeyboundOverrideStorage; public static DB6Storage SpellLabelStorage; public static DB6Storage SpellLearnSpellStorage; public static DB6Storage SpellLevelsStorage; public static DB6Storage SpellMiscStorage; public static DB6Storage SpellNameStorage; public static DB6Storage SpellPowerStorage; public static DB6Storage SpellPowerDifficultyStorage; public static DB6Storage SpellProcsPerMinuteStorage; public static DB6Storage SpellProcsPerMinuteModStorage; public static DB6Storage SpellRadiusStorage; public static DB6Storage SpellRangeStorage; public static DB6Storage SpellReagentsStorage; public static DB6Storage SpellReagentsCurrencyStorage; public static DB6Storage SpellScalingStorage; public static DB6Storage SpellShapeshiftStorage; public static DB6Storage SpellShapeshiftFormStorage; public static DB6Storage SpellTargetRestrictionsStorage; public static DB6Storage SpellTotemsStorage; public static DB6Storage SpellVisualStorage; public static DB6Storage SpellVisualEffectNameStorage; public static DB6Storage SpellVisualMissileStorage; public static DB6Storage SpellVisualKitStorage; public static DB6Storage SpellXSpellVisualStorage; public static DB6Storage SummonPropertiesStorage; public static DB6Storage TactKeyStorage; public static DB6Storage TalentStorage; public static DB6Storage TaxiNodesStorage; public static DB6Storage TaxiPathStorage; public static DB6Storage TaxiPathNodeStorage; public static DB6Storage TotemCategoryStorage; public static DB6Storage ToyStorage; public static DB6Storage TraitCondStorage; public static DB6Storage TraitCostStorage; public static DB6Storage TraitCurrencyStorage; public static DB6Storage TraitCurrencySourceStorage; public static DB6Storage TraitDefinitionStorage; public static DB6Storage TraitDefinitionEffectPointsStorage; public static DB6Storage TraitEdgeStorage; public static DB6Storage TraitNodeStorage; public static DB6Storage TraitNodeEntryStorage; public static DB6Storage TraitNodeEntryXTraitCondStorage; public static DB6Storage TraitNodeEntryXTraitCostStorage; public static DB6Storage TraitNodeGroupStorage; public static DB6Storage TraitNodeGroupXTraitCondStorage; public static DB6Storage TraitNodeGroupXTraitCostStorage; public static DB6Storage TraitNodeGroupXTraitNodeStorage; public static DB6Storage TraitNodeXTraitCondStorage; public static DB6Storage TraitNodeXTraitCostStorage; public static DB6Storage TraitNodeXTraitNodeEntryStorage; public static DB6Storage TraitSubTreeStorage; public static DB6Storage TraitTreeStorage; public static DB6Storage TraitTreeLoadoutStorage; public static DB6Storage TraitTreeLoadoutEntryStorage; public static DB6Storage TraitTreeXTraitCostStorage; public static DB6Storage TraitTreeXTraitCurrencyStorage; public static DB6Storage TransmogHolidayStorage; public static DB6Storage TransmogIllusionStorage; public static DB6Storage TransmogSetStorage; public static DB6Storage TransmogSetGroupStorage; public static DB6Storage TransmogSetItemStorage; public static DB6Storage TransportAnimationStorage; public static DB6Storage TransportRotationStorage; public static DB6Storage UiMapStorage; public static DB6Storage UiMapAssignmentStorage; public static DB6Storage UiMapLinkStorage; public static DB6Storage UiMapXMapArtStorage; public static DB6Storage UISplashScreenStorage; public static DB6Storage UnitConditionStorage; public static DB6Storage UnitPowerBarStorage; public static DB6Storage VehicleStorage; public static DB6Storage VehicleSeatStorage; public static DB6Storage VignetteStorage; public static DB6Storage WarbandSceneStorage; public static DB6Storage WMOAreaTableStorage; public static DB6Storage WorldEffectStorage; public static DB6Storage WorldMapOverlayStorage; public static DB6Storage WorldStateExpressionStorage; #endregion #region GameTables public static GameTable ArtifactKnowledgeMultiplierGameTable; public static GameTable ArtifactLevelXPGameTable; public static GameTable BarberShopCostBaseGameTable; public static GameTable BaseMPGameTable; public static GameTable BattlePetXPGameTable; public static GameTable CombatRatingsGameTable; public static GameTable CombatRatingsMultByILvlGameTable; public static GameTable HpPerStaGameTable; public static GameTable ItemLevelByLevelTable; public static GameTable ItemSocketCostPerLevelGameTable; public static GameTable NpcManaCostScalerGameTable; public static GameTable SpellScalingGameTable; public static GameTable StaminaMultByILvlGameTable; public static GameTable XpGameTable; #endregion #region Helper Methods public static float GetGameTableColumnForClass(dynamic row, Class class_) { switch (class_) { case Class.Warrior: return row.Warrior; case Class.Paladin: return row.Paladin; case Class.Hunter: return row.Hunter; case Class.Rogue: return row.Rogue; case Class.Priest: return row.Priest; case Class.Deathknight: return row.DeathKnight; case Class.Shaman: return row.Shaman; case Class.Mage: return row.Mage; case Class.Warlock: return row.Warlock; case Class.Monk: return row.Monk; case Class.Druid: return row.Druid; case Class.DemonHunter: return row.DemonHunter; case Class.Evoker: return row.Evoker; case Class.Adventurer: return row.Adventurer; default: break; } return 0.0f; } public static float GetSpellScalingColumnForClass(GtSpellScalingRecord row, int class_) { switch (class_) { case (int)Class.Warrior: return row.Warrior; case (int)Class.Paladin: return row.Paladin; case (int)Class.Hunter: return row.Hunter; case (int)Class.Rogue: return row.Rogue; case (int)Class.Priest: return row.Priest; case (int)Class.Deathknight: return row.DeathKnight; case (int)Class.Shaman: return row.Shaman; case (int)Class.Mage: return row.Mage; case (int)Class.Warlock: return row.Warlock; case (int)Class.Monk: return row.Monk; case (int)Class.Druid: return row.Druid; case (int)Class.DemonHunter: return row.DemonHunter; case (int)Class.Evoker: return row.Evoker; case (int)Class.Adventurer: return row.Adventurer; case -1: case -7: return row.Item; case -2: return row.Consumable; case -3: return row.Gem1; case -4: return row.Gem2; case -5: return row.Gem3; case -6: return row.Health; case -8: return row.DamageReplaceStat; case -9: return row.DamageSecondary; case -10: return row.ManaConsumable; default: break; } return 0.0f; } public static float GetBattlePetXPPerLevel(GtBattlePetXPRecord row) { return row.Wins * row.Xp; } public static float GetIlvlStatMultiplier(GtGenericMultByILvlRecord row, InventoryType invType) { switch (invType) { case InventoryType.Neck: case InventoryType.Finger: return row.JewelryMultiplier; case InventoryType.Trinket: return row.TrinketMultiplier; case InventoryType.Weapon: case InventoryType.Shield: case InventoryType.Ranged: case InventoryType.Weapon2Hand: case InventoryType.WeaponMainhand: case InventoryType.WeaponOffhand: case InventoryType.Holdable: case InventoryType.RangedRight: return row.WeaponMultiplier; default: return row.ArmorMultiplier; } } #endregion } }