diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.cpp | 66 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.h | 38 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2LoadInfo.h | 226 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 64 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 12 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 141 |
6 files changed, 546 insertions, 1 deletions
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index b470ba8cdd9..4c3570616ed 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -481,6 +481,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE (`VerifiedBuild` > 0) = ?" " AND locale = ?", CONNECTION_SYNCH); + // CurrencyContainer.db2 + PrepareStatement(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT ID, ContainerName, ContainerDescription, MinAmount, MaxAmount, ContainerIconID, " + "ContainerQuality, OnLootSpellVisualKitID, CurrencyTypesID FROM currency_container WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT MAX(ID) + 1 FROM currency_container", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT ID, ContainerName_lang, ContainerDescription_lang FROM currency_container_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // CurrencyTypes.db2 PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, " "MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, Flags1, Flags2" @@ -643,6 +650,16 @@ void HotfixDatabaseConnection::DoPrepareStatements() " FROM garr_follower_x_ability WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, "SELECT MAX(ID) + 1 FROM garr_follower_x_ability", CONNECTION_SYNCH); + // GarrMission.db2 + PrepareStatement(HOTFIX_SEL_GARR_MISSION, "SELECT ID, Name, Location, Description, MapPosX, MapPosY, WorldPosX, WorldPosY, GarrTypeID, " + "GarrMissionTypeID, GarrFollowerTypeID, MaxFollowers, MissionCost, MissionCostCurrencyTypesID, OfferedGarrMissionTextureID, UiTextureKitID, " + "EnvGarrMechanicID, EnvGarrMechanicTypeID, PlayerConditionID, GarrMissionSetID, TargetLevel, TargetItemLevel, MissionDuration, " + "TravelDuration, OfferDuration, BaseCompletionChance, BaseFollowerXP, OvermaxRewardPackID, FollowerDeathChance, AreaID, Flags, " + "AutoMissionScalar, AutoMissionScalarCurveID, AutoCombatantEnvCasterID FROM garr_mission WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_MISSION, "SELECT MAX(ID) + 1 FROM garr_mission", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_MISSION, "SELECT ID, Name_lang, Location_lang, Description_lang FROM garr_mission_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // GarrPlot.db2 PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, " "UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); @@ -940,12 +957,45 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_ITEM_X_ITEM_EFFECT, "SELECT ID, ItemEffectID, ItemID FROM item_x_item_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_X_ITEM_EFFECT, "SELECT MAX(ID) + 1 FROM item_x_item_effect", CONNECTION_SYNCH); + // JournalEncounter.db2 + PrepareStatement(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT Name, Description, MapX, MapY, ID, JournalInstanceID, DungeonEncounterID, OrderIndex, " + "FirstSectionID, UiMapID, MapDisplayConditionID, Flags, DifficultyMask FROM journal_encounter WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT MAX(ID) + 1 FROM journal_encounter", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT ID, Name_lang, Description_lang FROM journal_encounter_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + + // JournalEncounterSection.db2 + PrepareStatement(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT ID, Title, BodyText, JournalEncounterID, OrderIndex, ParentSectionID, " + "FirstChildSectionID, NextSiblingSectionID, Type, IconCreatureDisplayInfoID, UiModelSceneID, SpellID, IconFileDataID, Flags, IconFlags, " + "DifficultyMask FROM journal_encounter_section WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT MAX(ID) + 1 FROM journal_encounter_section", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT ID, Title_lang, BodyText_lang FROM journal_encounter_section_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + + // JournalInstance.db2 + PrepareStatement(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT ID, Name, Description, MapID, BackgroundFileDataID, ButtonFileDataID, " + "ButtonSmallFileDataID, LoreFileDataID, OrderIndex, Flags, AreaID FROM journal_instance WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT MAX(ID) + 1 FROM journal_instance", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT ID, Name_lang, Description_lang FROM journal_instance_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + + // JournalTier.db2 + PrepareStatement(HOTFIX_SEL_JOURNAL_TIER, "SELECT ID, Name, PlayerConditionID FROM journal_tier WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_TIER, "SELECT MAX(ID) + 1 FROM journal_tier", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_TIER, "SELECT ID, Name_lang FROM journal_tier_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // Keychain.db2 PrepareStatement(HOTFIX_SEL_KEYCHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_KEYCHAIN, "SELECT MAX(ID) + 1 FROM keychain", CONNECTION_SYNCH); + // KeystoneAffix.db2 + PrepareStatement(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT ID, Name, Description, FiledataID FROM keystone_affix WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT MAX(ID) + 1 FROM keystone_affix", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT ID, Name_lang, Description_lang FROM keystone_affix_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?", CONNECTION_SYNCH); + // LanguageWords.db2 PrepareStatement(HOTFIX_SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_LANGUAGE_WORDS, "SELECT MAX(ID) + 1 FROM language_words", CONNECTION_SYNCH); @@ -999,6 +1049,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, " "PvpLongDescription_lang FROM map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // MapChallengeMode.db2 + PrepareStatement(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, ExpansionLevel, CriteriaCount1, CriteriaCount2, CriteriaCount3" + " FROM map_challenge_mode WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT MAX(ID) + 1 FROM map_challenge_mode", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT ID, Name_lang FROM map_challenge_mode_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?", CONNECTION_SYNCH); + // MapDifficulty.db2 PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, DifficultyID, LockID, ResetInterval, MaxPlayers, ItemContext, " "ItemContextPickerID, Flags, ContentTuningID, MapID FROM map_difficulty WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); @@ -1012,6 +1069,10 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION, "SELECT ID, FailureDescription_lang FROM map_difficulty_x_condition_locale" " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // MawPower.db2 + PrepareStatement(HOTFIX_SEL_MAW_POWER, "SELECT ID, SpellID, MawPowerRarityID FROM maw_power WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAW_POWER, "SELECT MAX(ID) + 1 FROM maw_power", CONNECTION_SYNCH); + // ModifierTree.db2 PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); @@ -1259,6 +1320,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() " FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT MAX(ID) + 1 FROM skill_race_class_info", CONNECTION_SYNCH); + // SoulbindConduitRank.db2 + PrepareStatement(HOTFIX_SEL_SOULBIND_CONDUIT_RANK, "SELECT ID, RankIndex, SpellID, AuraPointsOverride, SoulbindConduitID" + " FROM soulbind_conduit_rank WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SOULBIND_CONDUIT_RANK, "SELECT MAX(ID) + 1 FROM soulbind_conduit_rank", CONNECTION_SYNCH); + // SoundKit.db2 PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT ID, SoundType, VolumeFloat, Flags, MinDistance, DistanceCutoff, EAXDef, SoundKitAdvancedID, " "VolumeVariationPlus, VolumeVariationMinus, PitchVariationPlus, PitchVariationMinus, DialogType, PitchAdjust, BusOverwriteID, MaxInstances" diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index 7237547cfe2..8051a913c40 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -281,6 +281,10 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_CRITERIA_TREE_MAX_ID, HOTFIX_SEL_CRITERIA_TREE_LOCALE, + HOTFIX_SEL_CURRENCY_CONTAINER, + HOTFIX_SEL_CURRENCY_CONTAINER_MAX_ID, + HOTFIX_SEL_CURRENCY_CONTAINER_LOCALE, + HOTFIX_SEL_CURRENCY_TYPES, HOTFIX_SEL_CURRENCY_TYPES_MAX_ID, HOTFIX_SEL_CURRENCY_TYPES_LOCALE, @@ -367,6 +371,10 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY_MAX_ID, + HOTFIX_SEL_GARR_MISSION, + HOTFIX_SEL_GARR_MISSION_MAX_ID, + HOTFIX_SEL_GARR_MISSION_LOCALE, + HOTFIX_SEL_GARR_PLOT, HOTFIX_SEL_GARR_PLOT_MAX_ID, @@ -546,9 +554,29 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_ITEM_X_ITEM_EFFECT, HOTFIX_SEL_ITEM_X_ITEM_EFFECT_MAX_ID, + HOTFIX_SEL_JOURNAL_ENCOUNTER, + HOTFIX_SEL_JOURNAL_ENCOUNTER_MAX_ID, + HOTFIX_SEL_JOURNAL_ENCOUNTER_LOCALE, + + HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, + HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION_MAX_ID, + HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION_LOCALE, + + HOTFIX_SEL_JOURNAL_INSTANCE, + HOTFIX_SEL_JOURNAL_INSTANCE_MAX_ID, + HOTFIX_SEL_JOURNAL_INSTANCE_LOCALE, + + HOTFIX_SEL_JOURNAL_TIER, + HOTFIX_SEL_JOURNAL_TIER_MAX_ID, + HOTFIX_SEL_JOURNAL_TIER_LOCALE, + HOTFIX_SEL_KEYCHAIN, HOTFIX_SEL_KEYCHAIN_MAX_ID, + HOTFIX_SEL_KEYSTONE_AFFIX, + HOTFIX_SEL_KEYSTONE_AFFIX_MAX_ID, + HOTFIX_SEL_KEYSTONE_AFFIX_LOCALE, + HOTFIX_SEL_LANGUAGE_WORDS, HOTFIX_SEL_LANGUAGE_WORDS_MAX_ID, @@ -577,6 +605,10 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_MAP_MAX_ID, HOTFIX_SEL_MAP_LOCALE, + HOTFIX_SEL_MAP_CHALLENGE_MODE, + HOTFIX_SEL_MAP_CHALLENGE_MODE_MAX_ID, + HOTFIX_SEL_MAP_CHALLENGE_MODE_LOCALE, + HOTFIX_SEL_MAP_DIFFICULTY, HOTFIX_SEL_MAP_DIFFICULTY_MAX_ID, HOTFIX_SEL_MAP_DIFFICULTY_LOCALE, @@ -585,6 +617,9 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION_MAX_ID, HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION_LOCALE, + HOTFIX_SEL_MAW_POWER, + HOTFIX_SEL_MAW_POWER_MAX_ID, + HOTFIX_SEL_MODIFIER_TREE, HOTFIX_SEL_MODIFIER_TREE_MAX_ID, @@ -733,6 +768,9 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_SKILL_RACE_CLASS_INFO, HOTFIX_SEL_SKILL_RACE_CLASS_INFO_MAX_ID, + HOTFIX_SEL_SOULBIND_CONDUIT_RANK, + HOTFIX_SEL_SOULBIND_CONDUIT_RANK_MAX_ID, + HOTFIX_SEL_SOUND_KIT, HOTFIX_SEL_SOUND_KIT_MAX_ID, diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 6fae3356658..9a631bcc552 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -1648,6 +1648,27 @@ struct CriteriaTreeLoadInfo } }; +struct CurrencyContainerLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "ContainerName" }, + { false, FT_STRING, "ContainerDescription" }, + { true, FT_INT, "MinAmount" }, + { true, FT_INT, "MaxAmount" }, + { true, FT_INT, "ContainerIconID" }, + { true, FT_INT, "ContainerQuality" }, + { true, FT_INT, "OnLootSpellVisualKitID" }, + { false, FT_INT, "CurrencyTypesID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurrencyContainerMeta::Instance(), HOTFIX_SEL_CURRENCY_CONTAINER); + return &loadInfo; + } +}; + struct CurrencyTypesLoadInfo { static DB2LoadInfo const* Instance() @@ -2275,6 +2296,52 @@ struct GarrFollowerXAbilityLoadInfo } }; +struct GarrMissionLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Location" }, + { false, FT_STRING, "Description" }, + { false, FT_FLOAT, "MapPosX" }, + { false, FT_FLOAT, "MapPosY" }, + { false, FT_FLOAT, "WorldPosX" }, + { false, FT_FLOAT, "WorldPosY" }, + { false, FT_BYTE, "GarrTypeID" }, + { false, FT_BYTE, "GarrMissionTypeID" }, + { false, FT_BYTE, "GarrFollowerTypeID" }, + { false, FT_BYTE, "MaxFollowers" }, + { false, FT_INT, "MissionCost" }, + { false, FT_SHORT, "MissionCostCurrencyTypesID" }, + { false, FT_BYTE, "OfferedGarrMissionTextureID" }, + { false, FT_SHORT, "UiTextureKitID" }, + { false, FT_INT, "EnvGarrMechanicID" }, + { true, FT_INT, "EnvGarrMechanicTypeID" }, + { false, FT_INT, "PlayerConditionID" }, + { true, FT_INT, "GarrMissionSetID" }, + { true, FT_BYTE, "TargetLevel" }, + { false, FT_SHORT, "TargetItemLevel" }, + { true, FT_INT, "MissionDuration" }, + { true, FT_INT, "TravelDuration" }, + { false, FT_INT, "OfferDuration" }, + { false, FT_BYTE, "BaseCompletionChance" }, + { false, FT_INT, "BaseFollowerXP" }, + { false, FT_INT, "OvermaxRewardPackID" }, + { false, FT_BYTE, "FollowerDeathChance" }, + { false, FT_INT, "AreaID" }, + { false, FT_INT, "Flags" }, + { false, FT_FLOAT, "AutoMissionScalar" }, + { true, FT_INT, "AutoMissionScalarCurveID" }, + { true, FT_INT, "AutoCombatantEnvCasterID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrMissionMeta::Instance(), HOTFIX_SEL_GARR_MISSION); + return &loadInfo; + } +}; + struct GarrPlotLoadInfo { static DB2LoadInfo const* Instance() @@ -3461,6 +3528,97 @@ struct ItemXItemEffectLoadInfo } }; +struct JournalEncounterLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Description" }, + { false, FT_FLOAT, "MapX" }, + { false, FT_FLOAT, "MapY" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "JournalInstanceID" }, + { false, FT_SHORT, "DungeonEncounterID" }, + { false, FT_INT, "OrderIndex" }, + { false, FT_SHORT, "FirstSectionID" }, + { false, FT_SHORT, "UiMapID" }, + { false, FT_INT, "MapDisplayConditionID" }, + { false, FT_BYTE, "Flags" }, + { true, FT_BYTE, "DifficultyMask" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalEncounterMeta::Instance(), HOTFIX_SEL_JOURNAL_ENCOUNTER); + return &loadInfo; + } +}; + +struct JournalEncounterSectionLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Title" }, + { false, FT_STRING, "BodyText" }, + { false, FT_SHORT, "JournalEncounterID" }, + { false, FT_BYTE, "OrderIndex" }, + { false, FT_SHORT, "ParentSectionID" }, + { false, FT_SHORT, "FirstChildSectionID" }, + { false, FT_SHORT, "NextSiblingSectionID" }, + { false, FT_BYTE, "Type" }, + { false, FT_INT, "IconCreatureDisplayInfoID" }, + { true, FT_INT, "UiModelSceneID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "IconFileDataID" }, + { false, FT_SHORT, "Flags" }, + { false, FT_SHORT, "IconFlags" }, + { true, FT_BYTE, "DifficultyMask" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalEncounterSectionMeta::Instance(), HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION); + return &loadInfo; + } +}; + +struct JournalInstanceLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Description" }, + { false, FT_SHORT, "MapID" }, + { true, FT_INT, "BackgroundFileDataID" }, + { true, FT_INT, "ButtonFileDataID" }, + { true, FT_INT, "ButtonSmallFileDataID" }, + { true, FT_INT, "LoreFileDataID" }, + { false, FT_BYTE, "OrderIndex" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "AreaID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalInstanceMeta::Instance(), HOTFIX_SEL_JOURNAL_INSTANCE); + return &loadInfo; + } +}; + +struct JournalTierLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + { true, FT_INT, "PlayerConditionID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalTierMeta::Instance(), HOTFIX_SEL_JOURNAL_TIER); + return &loadInfo; + } +}; + struct KeychainLoadInfo { static DB2LoadInfo const* Instance() @@ -3506,6 +3664,22 @@ struct KeychainLoadInfo } }; +struct KeystoneAffixLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Description" }, + { true, FT_INT, "FiledataID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, KeystoneAffixMeta::Instance(), HOTFIX_SEL_KEYSTONE_AFFIX); + return &loadInfo; + } +}; + struct LanguageWordsLoadInfo { static DB2LoadInfo const* Instance() @@ -3771,6 +3945,26 @@ struct MapLoadInfo } }; +struct MapChallengeModeLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_STRING, "Name" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "MapID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_INT, "ExpansionLevel" }, + { true, FT_SHORT, "CriteriaCount1" }, + { true, FT_SHORT, "CriteriaCount2" }, + { true, FT_SHORT, "CriteriaCount3" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapChallengeModeMeta::Instance(), HOTFIX_SEL_MAP_CHALLENGE_MODE); + return &loadInfo; + } +}; + struct MapDifficultyLoadInfo { static DB2LoadInfo const* Instance() @@ -3811,6 +4005,21 @@ struct MapDifficultyXConditionLoadInfo } }; +struct MawPowerLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "MawPowerRarityID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MawPowerMeta::Instance(), HOTFIX_SEL_MAW_POWER); + return &loadInfo; + } +}; + struct ModifierTreeLoadInfo { static DB2LoadInfo const* Instance() @@ -4816,6 +5025,23 @@ struct SkillRaceClassInfoLoadInfo } }; +struct SoulbindConduitRankLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "RankIndex" }, + { true, FT_INT, "SpellID" }, + { false, FT_FLOAT, "AuraPointsOverride" }, + { false, FT_INT, "SoulbindConduitID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SoulbindConduitRankMeta::Instance(), HOTFIX_SEL_SOULBIND_CONDUIT_RANK); + return &loadInfo; + } +}; + struct SoundKitLoadInfo { static DB2LoadInfo const* Instance() diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index c40820bba9f..83dc7f388c3 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -116,6 +116,7 @@ DB2Storage<CreatureModelDataEntry> sCreatureModelDataStore("Creatur DB2Storage<CreatureTypeEntry> sCreatureTypeStore("CreatureType.db2", CreatureTypeLoadInfo::Instance()); DB2Storage<CriteriaEntry> sCriteriaStore("Criteria.db2", CriteriaLoadInfo::Instance()); DB2Storage<CriteriaTreeEntry> sCriteriaTreeStore("CriteriaTree.db2", CriteriaTreeLoadInfo::Instance()); +DB2Storage<CurrencyContainerEntry> sCurrencyContainerStore("CurrencyContainer.db2", CurrencyContainerLoadInfo::Instance()); DB2Storage<CurrencyTypesEntry> sCurrencyTypesStore("CurrencyTypes.db2", CurrencyTypesLoadInfo::Instance()); DB2Storage<CurveEntry> sCurveStore("Curve.db2", CurveLoadInfo::Instance()); DB2Storage<CurvePointEntry> sCurvePointStore("CurvePoint.db2", CurvePointLoadInfo::Instance()); @@ -141,6 +142,7 @@ DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore("Garr DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore("GarrClassSpec.db2", GarrClassSpecLoadInfo::Instance()); DB2Storage<GarrFollowerEntry> sGarrFollowerStore("GarrFollower.db2", GarrFollowerLoadInfo::Instance()); DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", GarrFollowerXAbilityLoadInfo::Instance()); +DB2Storage<GarrMissionEntry> sGarrMissionStore("GarrMission.db2", GarrMissionLoadInfo::Instance()); DB2Storage<GarrPlotEntry> sGarrPlotStore("GarrPlot.db2", GarrPlotLoadInfo::Instance()); DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingLoadInfo::Instance()); DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore("GarrPlotInstance.db2", GarrPlotInstanceLoadInfo::Instance()); @@ -198,7 +200,12 @@ DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", I DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", ItemSpecOverrideLoadInfo::Instance()); DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", ItemXBonusTreeLoadInfo::Instance()); DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore("ItemXItemEffect.db2", ItemXItemEffectLoadInfo::Instance()); +DB2Storage<JournalEncounterEntry> sJournalEncounterStore("JournalEncounter.db2", JournalEncounterLoadInfo::Instance()); +DB2Storage<JournalEncounterSectionEntry> sJournalEncounterSectionStore("JournalEncounterSection.db2", JournalEncounterSectionLoadInfo::Instance()); +DB2Storage<JournalInstanceEntry> sJournalInstanceStore("JournalInstance.db2", JournalInstanceLoadInfo::Instance()); +DB2Storage<JournalTierEntry> sJournalTierStore("JournalTier.db2", JournalTierLoadInfo::Instance()); DB2Storage<KeychainEntry> sKeychainStore("Keychain.db2", KeychainLoadInfo::Instance()); +DB2Storage<KeystoneAffixEntry> sKeystoneAffixStore("KeystoneAffix.db2", KeystoneAffixLoadInfo::Instance()); DB2Storage<LanguageWordsEntry> sLanguageWordsStore("LanguageWords.db2", LanguageWordsLoadInfo::Instance()); DB2Storage<LanguagesEntry> sLanguagesStore("Languages.db2", LanguagesLoadInfo::Instance()); DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore("LFGDungeons.db2", LfgDungeonsLoadInfo::Instance()); @@ -207,8 +214,10 @@ DB2Storage<LiquidTypeEntry> sLiquidTypeStore("LiquidType.db2 DB2Storage<LockEntry> sLockStore("Lock.db2", LockLoadInfo::Instance()); DB2Storage<MailTemplateEntry> sMailTemplateStore("MailTemplate.db2", MailTemplateLoadInfo::Instance()); DB2Storage<MapEntry> sMapStore("Map.db2", MapLoadInfo::Instance()); +DB2Storage<MapChallengeModeEntry> sMapChallengeModeStore("MapChallengeMode.db2", MapChallengeModeLoadInfo::Instance()); DB2Storage<MapDifficultyEntry> sMapDifficultyStore("MapDifficulty.db2", MapDifficultyLoadInfo::Instance()); DB2Storage<MapDifficultyXConditionEntry> sMapDifficultyXConditionStore("MapDifficultyXCondition.db2", MapDifficultyXConditionLoadInfo::Instance()); +DB2Storage<MawPowerEntry> sMawPowerStore("MawPower.db2", MawPowerLoadInfo::Instance()); DB2Storage<ModifierTreeEntry> sModifierTreeStore("ModifierTree.db2", ModifierTreeLoadInfo::Instance()); DB2Storage<MountCapabilityEntry> sMountCapabilityStore("MountCapability.db2", MountCapabilityLoadInfo::Instance()); DB2Storage<MountEntry> sMountStore("Mount.db2", MountLoadInfo::Instance()); @@ -255,6 +264,7 @@ DB2Storage<SceneScriptTextEntry> sSceneScriptTextStore("SceneScri DB2Storage<SkillLineEntry> sSkillLineStore("SkillLine.db2", SkillLineLoadInfo::Instance()); DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLineAbility.db2", SkillLineAbilityLoadInfo::Instance()); DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoLoadInfo::Instance()); +DB2Storage<SoulbindConduitRankEntry> sSoulbindConduitRankStore("SoulbindConduitRank.db2", SoulbindConduitRankLoadInfo::Instance()); DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitLoadInfo::Instance()); DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsLoadInfo::Instance()); DB2Storage<SpecSetMemberEntry> sSpecSetMemberStore("SpecSetMember.db2", SpecSetMemberLoadInfo::Instance()); @@ -417,6 +427,7 @@ namespace std::unordered_map<std::pair<uint8 /*race*/, uint8/*gender*/>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender; std::unordered_map<uint32 /*chrCustomizationReqId*/, std::unordered_map<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>> _chrCustomizationRequiredChoices; ChrSpecializationByIndexContainer _chrSpecializationsByIndex; + std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers; CurvePointsContainer _curvePoints; EmotesTextSoundContainer _emoteTextSounds; std::unordered_map<std::pair<uint32 /*level*/, int32 /*expansion*/>, ExpectedStatEntry const*> _expectedStatsByLevel; @@ -438,6 +449,7 @@ namespace ItemToBonusTreeContainer _itemToBonusTree; ItemSetSpellContainer _itemSetSpells; ItemSpecOverridesContainer _itemSpecOverrides; + std::vector<JournalTierEntry const*> _journalTiersByIndex; DB2Manager::MapDifficultyContainer _mapDifficulties; std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions; std::unordered_map<uint32, MountEntry const*> _mountsBySpellId; @@ -457,12 +469,14 @@ namespace std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine; std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill; SkillRaceClassInfoContainer _skillRaceClassInfoBySkill; + std::unordered_map<std::pair<int32, int32>, SoulbindConduitRankEntry const*> _soulbindConduitRanks; SpecializationSpellsContainer _specializationSpellsBySpec; std::unordered_set<std::pair<int32, uint32>> _specsBySpecSet; std::unordered_set<uint8> _spellFamilyNames; SpellProcsPerMinuteModContainer _spellProcsPerMinuteMods; TalentsByPosition _talentsByPosition; ToyItemIdsContainer _toys; + std::unordered_map<uint32, TransmogIllusionEntry const*> _transmogIllusionsByEnchantmentId; std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance; std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet; std::unordered_map<int32, UiMapBounds> _uiMapBounds; @@ -669,6 +683,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sCreatureTypeStore); LOAD_DB2(sCriteriaStore); LOAD_DB2(sCriteriaTreeStore); + LOAD_DB2(sCurrencyContainerStore); LOAD_DB2(sCurrencyTypesStore); LOAD_DB2(sCurveStore); LOAD_DB2(sCurvePointStore); @@ -694,8 +709,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sGarrClassSpecStore); LOAD_DB2(sGarrFollowerStore); LOAD_DB2(sGarrFollowerXAbilityStore); - LOAD_DB2(sGarrPlotBuildingStore); + LOAD_DB2(sGarrMissionStore); LOAD_DB2(sGarrPlotStore); + LOAD_DB2(sGarrPlotBuildingStore); LOAD_DB2(sGarrPlotInstanceStore); LOAD_DB2(sGarrSiteLevelStore); LOAD_DB2(sGarrSiteLevelPlotInstStore); @@ -751,7 +767,12 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sItemSpecOverrideStore); LOAD_DB2(sItemXBonusTreeStore); LOAD_DB2(sItemXItemEffectStore); + LOAD_DB2(sJournalEncounterStore); + LOAD_DB2(sJournalEncounterSectionStore); + LOAD_DB2(sJournalInstanceStore); + LOAD_DB2(sJournalTierStore); LOAD_DB2(sKeychainStore); + LOAD_DB2(sKeystoneAffixStore); LOAD_DB2(sLanguageWordsStore); LOAD_DB2(sLanguagesStore); LOAD_DB2(sLFGDungeonsStore); @@ -760,8 +781,10 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sLockStore); LOAD_DB2(sMailTemplateStore); LOAD_DB2(sMapStore); + LOAD_DB2(sMapChallengeModeStore); LOAD_DB2(sMapDifficultyStore); LOAD_DB2(sMapDifficultyXConditionStore); + LOAD_DB2(sMawPowerStore); LOAD_DB2(sModifierTreeStore); LOAD_DB2(sMountCapabilityStore); LOAD_DB2(sMountStore); @@ -808,6 +831,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sSkillLineStore); LOAD_DB2(sSkillLineAbilityStore); LOAD_DB2(sSkillRaceClassInfoStore); + LOAD_DB2(sSoulbindConduitRankStore); LOAD_DB2(sSoundKitStore); LOAD_DB2(sSpecializationSpellsStore); LOAD_DB2(sSpecSetMemberStore); @@ -1087,6 +1111,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul if (sExpectedStatModStore.LookupEntry(contentTuningXExpectedStat->ExpectedStatModID)) _expectedStatModsByContentTuning[contentTuningXExpectedStat->ContentTuningID].push_back(contentTuningXExpectedStat); + for (CurrencyContainerEntry const* currencyContainer : sCurrencyContainerStore) + _currencyContainers.emplace(currencyContainer->CurrencyTypesID, currencyContainer); + for (CurvePointEntry const* curvePoint : sCurvePointStore) if (sCurveStore.LookupEntry(curvePoint->CurveID)) _curvePoints[curvePoint->CurveID].push_back(curvePoint); @@ -1175,6 +1202,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul for (auto&& kvp : _azeriteEmpoweredItems) LoadAzeriteEmpoweredItemUnlockMappings(azeriteUnlockMappings, kvp.first); + for (JournalTierEntry const* journalTier : sJournalTierStore) + _journalTiersByIndex.push_back(journalTier); + for (MapDifficultyEntry const* entry : sMapDifficultyStore) _mapDifficulties[entry->MapID][entry->DifficultyID] = entry; _mapDifficulties[0][0] = _mapDifficulties[1][0]; // map 0 is missing from MapDifficulty.dbc so we cheat a bit @@ -1314,6 +1344,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul if (sSkillLineStore.LookupEntry(entry->SkillID)) _skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry)); + for (SoulbindConduitRankEntry const* soulbindConduitRank : sSoulbindConduitRankStore) + _soulbindConduitRanks[{ soulbindConduitRank->SoulbindConduitID, soulbindConduitRank->RankIndex }] = soulbindConduitRank; + for (SpecializationSpellsEntry const* specSpells : sSpecializationSpellsStore) _specializationSpellsBySpec[specSpells->SpecID].push_back(specSpells); @@ -1359,6 +1392,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul for (ToyEntry const* toy : sToyStore) _toys.insert(toy->ItemID); + for (TransmogIllusionEntry const* transmogIllusion : sTransmogIllusionStore) + _transmogIllusionsByEnchantmentId[transmogIllusion->SpellItemEnchantmentID] = transmogIllusion; + for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore) { TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID); @@ -1979,6 +2015,15 @@ char const* DB2Manager::GetCreatureFamilyPetName(uint32 petfamily, LocaleConstan return petFamily->Name[locale][0] != '\0' ? petFamily->Name[locale] : nullptr; } +CurrencyContainerEntry const* DB2Manager::GetCurrencyContainerForCurrencyQuantity(uint32 currencyId, int32 quantity) const +{ + for (std::pair<uint32 const, CurrencyContainerEntry const*> const& p : Trinity::Containers::MapEqualRange(_currencyContainers, currencyId)) + if (quantity >= p.second->MinAmount && (!p.second->MaxAmount || quantity <= p.second->MaxAmount)) + return p.second; + + return nullptr; +} + enum class CurveInterpolationMode : uint8 { Linear = 0, @@ -2534,6 +2579,13 @@ std::vector<ItemSpecOverrideEntry const*> const* DB2Manager::GetItemSpecOverride return Trinity::Containers::MapGetValuePtr(_itemSpecOverrides, itemId); } +JournalTierEntry const* DB2Manager::GetJournalTier(uint32 index) const +{ + if (index < _journalTiersByIndex.size()) + return _journalTiersByIndex[index]; + return nullptr; +} + LFGDungeonsEntry const* DB2Manager::GetLfgDungeon(uint32 mapId, Difficulty difficulty) { for (LFGDungeonsEntry const* dungeon : sLFGDungeonsStore) @@ -2886,6 +2938,11 @@ SkillRaceClassInfoEntry const* DB2Manager::GetSkillRaceClassInfo(uint32 skill, u return nullptr; } +SoulbindConduitRankEntry const* DB2Manager::GetSoulbindConduitRank(int32 soulbindConduitId, int32 rank) const +{ + return Trinity::Containers::MapGetValuePtr(_soulbindConduitRanks, { soulbindConduitId, rank }); +} + std::vector<SpecializationSpellsEntry const*> const* DB2Manager::GetSpecializationSpells(uint32 specId) const { return Trinity::Containers::MapGetValuePtr(_specializationSpellsBySpec, specId); @@ -2940,6 +2997,11 @@ bool DB2Manager::IsToyItem(uint32 toy) const return _toys.count(toy) > 0; } +TransmogIllusionEntry const* DB2Manager::GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const +{ + return Trinity::Containers::MapGetValuePtr(_transmogIllusionsByEnchantmentId, spellItemEnchantmentId); +} + std::vector<TransmogSetEntry const*> const* DB2Manager::GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const { return Trinity::Containers::MapGetValuePtr(_transmogSetsByItemModifiedAppearance, itemModifiedAppearanceId); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index e6dfe80745d..ff391647762 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -110,6 +110,7 @@ TC_GAME_API extern DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildin TC_GAME_API extern DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore; TC_GAME_API extern DB2Storage<GarrFollowerEntry> sGarrFollowerStore; TC_GAME_API extern DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore; +TC_GAME_API extern DB2Storage<GarrMissionEntry> sGarrMissionStore; TC_GAME_API extern DB2Storage<GarrPlotEntry> sGarrPlotStore; TC_GAME_API extern DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore; TC_GAME_API extern DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore; @@ -152,6 +153,10 @@ TC_GAME_API extern DB2Storage<ItemSparseEntry> sItemSparseS TC_GAME_API extern DB2Storage<ItemSpecEntry> sItemSpecStore; TC_GAME_API extern DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore; TC_GAME_API extern DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore; +TC_GAME_API extern DB2Storage<JournalEncounterEntry> sJournalEncounterStore; +TC_GAME_API extern DB2Storage<JournalEncounterSectionEntry> sJournalEncounterSectionStore; +TC_GAME_API extern DB2Storage<JournalInstanceEntry> sJournalInstanceStore; +TC_GAME_API extern DB2Storage<KeystoneAffixEntry> sKeystoneAffixStore; TC_GAME_API extern DB2Storage<LanguageWordsEntry> sLanguageWordsStore; TC_GAME_API extern DB2Storage<LanguagesEntry> sLanguagesStore; TC_GAME_API extern DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore; @@ -159,6 +164,8 @@ TC_GAME_API extern DB2Storage<LiquidTypeEntry> sLiquidTypeS TC_GAME_API extern DB2Storage<LockEntry> sLockStore; TC_GAME_API extern DB2Storage<MailTemplateEntry> sMailTemplateStore; TC_GAME_API extern DB2Storage<MapEntry> sMapStore; +TC_GAME_API extern DB2Storage<MapChallengeModeEntry> sMapChallengeModeStore; +TC_GAME_API extern DB2Storage<MawPowerEntry> sMawPowerStore; TC_GAME_API extern DB2Storage<ModifierTreeEntry> sModifierTreeStore; TC_GAME_API extern DB2Storage<MountCapabilityEntry> sMountCapabilityStore; TC_GAME_API extern DB2Storage<MountEntry> sMountStore; @@ -230,6 +237,7 @@ TC_GAME_API extern DB2Storage<TransmogSetGroupEntry> sTransmogSet TC_GAME_API extern DB2Storage<TransmogSetItemEntry> sTransmogSetItemStore; TC_GAME_API extern DB2Storage<TransportAnimationEntry> sTransportAnimationStore; TC_GAME_API extern DB2Storage<TransportRotationEntry> sTransportRotationStore; +TC_GAME_API extern DB2Storage<UiMapEntry> sUiMapStore; TC_GAME_API extern DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore; TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStore; TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore; @@ -366,6 +374,7 @@ public: ChrSpecializationEntry const* GetDefaultChrSpecializationForClass(uint32 class_) const; Optional<ContentTuningLevels> GetContentTuningData(uint32 contentTuningId, uint32 replacementConditionMask, bool forItem = false) const; static char const* GetCreatureFamilyPetName(uint32 petfamily, LocaleConstant locale); + CurrencyContainerEntry const* GetCurrencyContainerForCurrencyQuantity(uint32 currencyId, int32 quantity) const; float GetCurveValueAt(uint32 curveId, float x) const; EmotesTextSoundEntry const* GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const; float EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const; @@ -388,6 +397,7 @@ public: ItemModifiedAppearanceEntry const* GetDefaultItemModifiedAppearance(uint32 itemId) const; std::vector<ItemSetSpellEntry const*> const* GetItemSetSpells(uint32 itemSetId) const; std::vector<ItemSpecOverrideEntry const*> const* GetItemSpecOverrides(uint32 itemId) const; + JournalTierEntry const* GetJournalTier(uint32 index) const; static LFGDungeonsEntry const* GetLfgDungeon(uint32 mapId, Difficulty difficulty); static uint32 GetDefaultMapLight(uint32 mapId); static uint32 GetLiquidFlags(uint32 liquidType); @@ -422,6 +432,7 @@ public: std::vector<SkillLineEntry const*> const* GetSkillLinesForParentSkill(uint32 parentSkillId) const; std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const; SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); + SoulbindConduitRankEntry const* GetSoulbindConduitRank(int32 soulbindConduitId, int32 rank) const; std::vector<SpecializationSpellsEntry const*> const* GetSpecializationSpells(uint32 specId) const; bool IsSpecSetMember(int32 specSetId, uint32 specId) const; static bool IsValidSpellFamiliyName(SpellFamilyNames family); @@ -429,6 +440,7 @@ public: std::vector<TalentEntry const*> const& GetTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const; static bool IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId); bool IsToyItem(uint32 toy) const; + TransmogIllusionEntry const* GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const; std::vector<TransmogSetEntry const*> const* GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const; std::vector<TransmogSetItemEntry const*> const* GetTransmogSetItems(uint32 transmogSetId) const; static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 4f09a919e21..7245c5e1da9 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -1237,6 +1237,19 @@ struct CriteriaTreeEntry EnumFlag<CriteriaTreeFlags> GetFlags() const { return static_cast<CriteriaTreeFlags>(Flags); } }; +struct CurrencyContainerEntry +{ + uint32 ID; + LocalizedString ContainerName; + LocalizedString ContainerDescription; + int32 MinAmount; + int32 MaxAmount; + int32 ContainerIconID; + int32 ContainerQuality; + int32 OnLootSpellVisualKitID; + uint32 CurrencyTypesID; +}; + struct CurrencyTypesEntry { uint32 ID; @@ -1647,6 +1660,42 @@ struct GarrFollowerXAbilityEntry uint32 GarrFollowerID; }; +struct GarrMissionEntry +{ + uint32 ID; + LocalizedString Name; + LocalizedString Location; + LocalizedString Description; + DBCPosition2D MapPos; + DBCPosition2D WorldPos; + uint8 GarrTypeID; + uint8 GarrMissionTypeID; + uint8 GarrFollowerTypeID; + uint8 MaxFollowers; + uint32 MissionCost; + uint16 MissionCostCurrencyTypesID; + uint8 OfferedGarrMissionTextureID; + uint16 UiTextureKitID; + uint32 EnvGarrMechanicID; + int32 EnvGarrMechanicTypeID; + uint32 PlayerConditionID; + int32 GarrMissionSetID; + int8 TargetLevel; + uint16 TargetItemLevel; + int32 MissionDuration; + int32 TravelDuration; + uint32 OfferDuration; + uint8 BaseCompletionChance; + uint32 BaseFollowerXP; + uint32 OvermaxRewardPackID; + uint8 FollowerDeathChance; + uint32 AreaID; + uint32 Flags; + float AutoMissionScalar; + int32 AutoMissionScalarCurveID; + int32 AutoCombatantEnvCasterID; +}; + struct GarrPlotEntry { uint32 ID; @@ -2238,6 +2287,64 @@ struct ItemXItemEffectEntry uint32 ItemID; }; +struct JournalEncounterEntry +{ + LocalizedString Name; + LocalizedString Description; + DBCPosition2D Map; + uint32 ID; + uint16 JournalInstanceID; + uint16 DungeonEncounterID; + uint32 OrderIndex; + uint16 FirstSectionID; + uint16 UiMapID; + uint32 MapDisplayConditionID; + uint8 Flags; + int8 DifficultyMask; +}; + +struct JournalEncounterSectionEntry +{ + uint32 ID; + LocalizedString Title; + LocalizedString BodyText; + uint16 JournalEncounterID; + uint8 OrderIndex; + uint16 ParentSectionID; + uint16 FirstChildSectionID; + uint16 NextSiblingSectionID; + uint8 Type; + uint32 IconCreatureDisplayInfoID; + int32 UiModelSceneID; + int32 SpellID; + int32 IconFileDataID; + uint16 Flags; + uint16 IconFlags; + int8 DifficultyMask; +}; + +struct JournalInstanceEntry +{ + uint32 ID; + LocalizedString Name; + LocalizedString Description; + uint16 MapID; + int32 BackgroundFileDataID; + int32 ButtonFileDataID; + int32 ButtonSmallFileDataID; + int32 LoreFileDataID; + uint8 OrderIndex; + uint8 Flags; + uint16 AreaID; +}; + +struct JournalTierEntry +{ + uint32 ID; + LocalizedString Name; + int32 PlayerConditionID; +}; + #define KEYCHAIN_SIZE 32 struct KeychainEntry @@ -2246,6 +2353,14 @@ struct KeychainEntry uint8 Key[KEYCHAIN_SIZE]; }; +struct KeystoneAffixEntry +{ + uint32 ID; + LocalizedString Name; + LocalizedString Description; + int32 FiledataID; +}; + struct LanguageWordsEntry { uint32 ID; @@ -2409,6 +2524,16 @@ struct MapEntry bool IsGarrison() const { return (Flags[0] & MAP_FLAG_GARRISON) != 0; } }; +struct MapChallengeModeEntry +{ + LocalizedString Name; + uint32 ID; + uint16 MapID; + uint8 Flags; + uint32 ExpansionLevel; + int16 CriteriaCount[3]; +}; + struct MapDifficultyEntry { uint32 ID; @@ -2442,6 +2567,13 @@ struct MapDifficultyXConditionEntry uint32 MapDifficultyID; }; +struct MawPowerEntry +{ + uint32 ID; + int32 SpellID; + int32 MawPowerRarityID; +}; + struct ModifierTreeEntry { uint32 ID; @@ -2970,6 +3102,15 @@ struct SkillRaceClassInfoEntry int16 SkillTierID; }; +struct SoulbindConduitRankEntry +{ + uint32 ID; + int32 RankIndex; + int32 SpellID; + float AuraPointsOverride; + uint32 SoulbindConduitID; +}; + struct SoundKitEntry { uint32 ID; |