diff options
Diffstat (limited to 'src')
79 files changed, 2941 insertions, 2949 deletions
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 9ac48c17b5c..ebd4f1ac6e4 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -32,8 +32,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() m_stmts.resize(MAX_HOTFIXDATABASE_STATEMENTS); // Achievement.db2 - PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Title, Description, Reward, Flags, MapID, Supercedes, Category, UIOrder, SharesCriteria, " - "Faction, Points, MinimumCriteria, ID, IconFileDataID, CriteriaTree FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Title, Description, Reward, Flags, InstanceID, Supercedes, Category, UiOrder, SharesCriteria, " + "Faction, Points, MinimumCriteria, ID, IconFileID, CriteriaTree FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Title_lang, Description_lang, Reward_lang FROM achievement_locale WHERE locale = ?", CONNECTION_SYNCH); // AnimKit.db2 @@ -43,56 +43,57 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_AREA_GROUP_MEMBER, "SELECT ID, AreaID, AreaGroupID FROM area_group_member ORDER BY ID DESC", CONNECTION_SYNCH); // AreaTable.db2 - PrepareStatement(HOTFIX_SEL_AREA_TABLE, "SELECT ID, ZoneName, AreaName, Flags1, Flags2, AmbientMultiplier, MapID, ParentAreaID, AreaBit, " - "AmbienceID, ZoneMusic, IntroSound, LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4, UWZoneMusic, UWAmbience, " - "PvPCombatWorldStateID, SoundProviderPref, SoundProviderPrefUnderwater, ExplorationLevel, FactionGroupMask, MountFlags, " - "WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, UWIntroSound FROM area_table ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AREA_TABLE, "SELECT ID, ZoneName, AreaName, Flags1, Flags2, AmbientMultiplier, ContinentID, ParentAreaID, AreaBit, " + "AmbienceID, ZoneMusic, IntroSound, LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4, UwZoneMusic, UwAmbience, " + "PvpCombatWorldStateID, SoundProviderPref, SoundProviderPrefUnderwater, ExplorationLevel, FactionGroupMask, MountFlags, " + "WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, UwIntroSound FROM area_table ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AREA_TABLE, "SELECT ID, AreaName_lang FROM area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // AreaTrigger.db2 - PrepareStatement(HOTFIX_SEL_AREA_TRIGGER, "SELECT PosX, PosY, PosZ, Radius, BoxLength, BoxWidth, BoxHeight, BoxYaw, MapID, PhaseID, PhaseGroupID, " - "ShapeID, AreaTriggerActionSetID, PhaseUseFlags, ShapeType, Flag, ID FROM area_trigger ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AREA_TRIGGER, "SELECT PosX, PosY, PosZ, Radius, BoxLength, BoxWidth, BoxHeight, BoxYaw, ContinentID, PhaseID, " + "PhaseGroupID, ShapeID, AreaTriggerActionSetID, PhaseUseFlags, ShapeType, Flags, ID FROM area_trigger ORDER BY ID DESC", CONNECTION_SYNCH); // ArmorLocation.db2 - PrepareStatement(HOTFIX_SEL_ARMOR_LOCATION, "SELECT ID, Modifier1, Modifier2, Modifier3, Modifier4, Modifier5 FROM armor_location ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARMOR_LOCATION, "SELECT ID, Clothmodifier, Leathermodifier, Chainmodifier, Platemodifier, Modifier FROM armor_location" + " ORDER BY ID DESC", CONNECTION_SYNCH); // Artifact.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name, BarConnectedColor, BarDisconnectedColor, TitleColor, ClassUiTextureKitID, SpecID, " - "ArtifactCategoryID, Flags, UiModelSceneID, SpellVisualKitID FROM artifact ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name, UiBarOverlayColor, UiBarBackgroundColor, UiNameColor, UiTextureKitID, " + "ChrSpecializationID, ArtifactCategoryID, Flags, UiModelSceneID, SpellVisualKitID FROM artifact ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name_lang FROM artifact_locale WHERE locale = ?", CONNECTION_SYNCH); // ArtifactAppearance.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT Name, SwatchColor, ModelDesaturation, ModelAlpha, ShapeshiftDisplayID, " - "ArtifactAppearanceSetID, Unknown, DisplayIndex, AppearanceModID, Flags, ModifiesShapeshiftFormDisplay, ID, PlayerConditionID, " - "ItemAppearanceID, AltItemAppearanceID FROM artifact_appearance ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT Name, UiSwatchColor, UiModelSaturation, UiModelOpacity, OverrideShapeshiftDisplayID, " + "ArtifactAppearanceSetID, UiCameraID, DisplayIndex, ItemAppearanceModifierID, Flags, OverrideShapeshiftFormID, ID, UnlockPlayerConditionID, " + "UiItemAppearanceID, UiAltItemAppearanceID FROM artifact_appearance ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT ID, Name_lang FROM artifact_appearance_locale WHERE locale = ?", CONNECTION_SYNCH); // ArtifactAppearanceSet.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT Name, Name2, UiCameraID, AltHandUICameraID, DisplayIndex, AttachmentPoint, Flags, " - "ID, ArtifactID FROM artifact_appearance_set ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT ID, Name_lang, Name2_lang FROM artifact_appearance_set_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT Name, Description, UiCameraID, AltHandUICameraID, DisplayIndex, " + "ForgeAttachmentOverride, Flags, ID, ArtifactID FROM artifact_appearance_set ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT ID, Name_lang, Description_lang FROM artifact_appearance_set_locale" + " WHERE locale = ?", CONNECTION_SYNCH); // ArtifactCategory.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_CATEGORY, "SELECT ID, ArtifactKnowledgeCurrencyID, ArtifactKnowledgeMultiplierCurveID FROM artifact_category" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_CATEGORY, "SELECT ID, XpMultCurrencyID, XpMultCurveID FROM artifact_category ORDER BY ID DESC", CONNECTION_SYNCH); // ArtifactPower.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER, "SELECT PosX, PosY, ArtifactID, Flags, MaxRank, ArtifactTier, ID, RelicType FROM artifact_power" + PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER, "SELECT PosX, PosY, ArtifactID, Flags, MaxPurchasableRank, Tier, ID, Label FROM artifact_power" " ORDER BY ID DESC", CONNECTION_SYNCH); // ArtifactPowerLink.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT ID, FromArtifactPowerID, ToArtifactPowerID FROM artifact_power_link ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT ID, PowerA, PowerB FROM artifact_power_link ORDER BY ID DESC", CONNECTION_SYNCH); // ArtifactPowerPicker.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_PICKER, "SELECT ID, PlayerConditionID FROM artifact_power_picker ORDER BY ID DESC", CONNECTION_SYNCH); // ArtifactPowerRank.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_RANK, "SELECT ID, SpellID, Value, Unknown, Rank, ArtifactPowerID FROM artifact_power_rank" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_RANK, "SELECT ID, SpellID, AuraPointsOverride, ItemBonusListID, RankIndex, ArtifactPowerID" + " FROM artifact_power_rank ORDER BY ID DESC", CONNECTION_SYNCH); // ArtifactQuestXp.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_QUEST_XP, "SELECT ID, Exp1, Exp2, Exp3, Exp4, Exp5, Exp6, Exp7, Exp8, Exp9, Exp10 FROM artifact_quest_xp" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_QUEST_XP, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM artifact_quest_xp ORDER BY ID DESC", CONNECTION_SYNCH); // AuctionHouse.db2 PrepareStatement(HOTFIX_SEL_AUCTION_HOUSE, "SELECT ID, Name, FactionID, DepositRate, ConsignmentRate FROM auction_house ORDER BY ID DESC", CONNECTION_SYNCH); @@ -110,51 +111,54 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale WHERE locale = ?", CONNECTION_SYNCH); // BattlePetBreedQuality.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, Modifier, Quality FROM battle_pet_breed_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, StateMultiplier, QualityEnum FROM battle_pet_breed_quality ORDER BY ID DESC", CONNECTION_SYNCH); // BattlePetBreedState.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT ID, Value, State, BreedID FROM battle_pet_breed_state ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT ID, Value, BattlePetStateID, BattlePetBreedID FROM battle_pet_breed_state" + " ORDER BY ID DESC", CONNECTION_SYNCH); // BattlePetSpecies.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT SourceText, Description, CreatureID, IconFileID, SummonSpellID, Flags, PetType, Source, " - "ID, CardModelSceneID, LoadoutModelSceneID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT SourceText, Description, CreatureID, IconFileDataID, SummonSpellID, Flags, PetTypeEnum, " + "SourceTypeEnum, ID, CardUIModelSceneID, LoadoutUIModelSceneID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT ID, SourceText_lang, Description_lang FROM battle_pet_species_locale WHERE locale = ?", CONNECTION_SYNCH); // BattlePetSpeciesState.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, Value, State, SpeciesID FROM battle_pet_species_state ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, Value, BattlePetStateID, BattlePetSpeciesID FROM battle_pet_species_state" + " ORDER BY ID DESC", CONNECTION_SYNCH); // BattlemasterList.db2 PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, IconFileDataID, MapID1, MapID2, " "MapID3, MapID4, MapID5, MapID6, MapID7, MapID8, MapID9, MapID10, MapID11, MapID12, MapID13, MapID14, MapID15, MapID16, HolidayWorldState, " - "PlayerConditionID, InstanceType, GroupsAllowed, MaxGroupSize, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, Flags" + "RequiredPlayerConditionID, InstanceType, GroupsAllowed, MaxGroupSize, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, Flags" " FROM battlemaster_list ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang" " FROM battlemaster_list_locale WHERE locale = ?", CONNECTION_SYNCH); // BroadcastText.db2 - PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText, FemaleText, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, " - "EmoteDelay3, UnkEmoteID, Language, Type, PlayerConditionID, SoundID1, SoundID2 FROM broadcast_text ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText_lang, FemaleText_lang FROM broadcast_text_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, Text, Text1, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, EmoteDelay3, " + "EmotesID, LanguageID, Flags, ConditionID, SoundEntriesID1, SoundEntriesID2 FROM broadcast_text ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, Text_lang, Text1_lang FROM broadcast_text_locale WHERE locale = ?", CONNECTION_SYNCH); // CharacterFacialHairStyles.db2 PrepareStatement(HOTFIX_SEL_CHARACTER_FACIAL_HAIR_STYLES, "SELECT ID, Geoset1, Geoset2, Geoset3, Geoset4, Geoset5, RaceID, SexID, VariationID" " FROM character_facial_hair_styles ORDER BY ID DESC", CONNECTION_SYNCH); // CharBaseSection.db2 - PrepareStatement(HOTFIX_SEL_CHAR_BASE_SECTION, "SELECT ID, Variation, ResolutionVariation, Resolution FROM char_base_section ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHAR_BASE_SECTION, "SELECT ID, VariationEnum, ResolutionVariationEnum, LayoutResType FROM char_base_section" + " ORDER BY ID DESC", CONNECTION_SYNCH); // CharSections.db2 - PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT ID, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3, Flags, RaceID, SexID, " + PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT ID, MaterialResourcesID1, MaterialResourcesID2, MaterialResourcesID3, Flags, RaceID, SexID, " "BaseSection, VariationIndex, ColorIndex FROM char_sections ORDER BY ID DESC", CONNECTION_SYNCH); // CharStartOutfit.db2 PrepareStatement(HOTFIX_SEL_CHAR_START_OUTFIT, "SELECT ID, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, " "ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, ItemID18, ItemID19, ItemID20, ItemID21, ItemID22, ItemID23, " - "ItemID24, PetDisplayID, ClassID, GenderID, OutfitID, PetFamilyID, RaceID FROM char_start_outfit ORDER BY ID DESC", CONNECTION_SYNCH); + "ItemID24, PetDisplayID, ClassID, SexID, OutfitID, PetFamilyID, RaceID FROM char_start_outfit ORDER BY ID DESC", CONNECTION_SYNCH); // CharTitles.db2 - PrepareStatement(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, NameMale, NameFemale, MaskID, Flags FROM char_titles ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, NameMale_lang, NameFemale_lang FROM char_titles_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name, Name1, MaskID, Flags FROM char_titles ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name_lang, Name1_lang FROM char_titles_locale WHERE locale = ?", CONNECTION_SYNCH); // ChatChannels.db2 PrepareStatement(HOTFIX_SEL_CHAT_CHANNELS, "SELECT ID, Name, Shortcut, Flags, FactionGroup FROM chat_channels ORDER BY ID DESC", CONNECTION_SYNCH); @@ -162,34 +166,34 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrClasses.db2 PrepareStatement(HOTFIX_SEL_CHR_CLASSES, "SELECT PetNameToken, Name, NameFemale, NameMale, Filename, CreateScreenFileDataID, " - "SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, StartingLevel, Flags, CinematicSequenceID, DefaultSpec, PowerType, " - "SpellClassSet, AttackPowerPerStrength, AttackPowerPerAgility, RangedAttackPowerPerAgility, Unk1, ID FROM chr_classes ORDER BY ID DESC", CONNECTION_SYNCH); + "SelectScreenFileDataID, LowResScreenFileDataID, IconFileDataID, StartingLevel, Flags, CinematicSequenceID, DefaultSpec, DisplayPower, " + "SpellClassSet, AttackPowerPerStrength, AttackPowerPerAgility, RangedAttackPowerPerAgility, PrimaryStatPriority, ID FROM chr_classes" + " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT ID, Name_lang, NameFemale_lang, NameMale_lang FROM chr_classes_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrClassesXPowerTypes.db2 PrepareStatement(HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT ID, PowerType, ClassID FROM chr_classes_x_power_types ORDER BY ID DESC", CONNECTION_SYNCH); // ChrRaces.db2 - PrepareStatement(HOTFIX_SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, LowercaseName, LowercaseNameFemale, Flags, " - "MaleDisplayID, FemaleDisplayID, CreateScreenFileDataID, SelectScreenFileDataID, MaleCustomizeOffset1, MaleCustomizeOffset2, " + PrepareStatement(HOTFIX_SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, Flags, " + "MaleDisplayId, FemaleDisplayId, CreateScreenFileDataID, SelectScreenFileDataID, MaleCustomizeOffset1, MaleCustomizeOffset2, " "MaleCustomizeOffset3, FemaleCustomizeOffset1, FemaleCustomizeOffset2, FemaleCustomizeOffset3, LowResScreenFileDataID, StartingLevel, " - "UIDisplayOrder, FactionID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, BaseLanguage, CreatureType, TeamID, RaceRelated, " - "UnalteredVisualRaceID, CharComponentTextureLayoutID, DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, " - "CharComponentTexLayoutHiResID, ID, HighResMaleDisplayID, HighResFemaleDisplayID, HeritageArmorAchievementID, MaleCorpseBonesModelFileDataID, " - "FemaleCorpseBonesModelFileDataID, AlteredFormTransitionSpellVisualID1, AlteredFormTransitionSpellVisualID2, " - "AlteredFormTransitionSpellVisualID3, AlteredFormTransitionSpellVisualKitID1, AlteredFormTransitionSpellVisualKitID2, " - "AlteredFormTransitionSpellVisualKitID3 FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, LowercaseName_lang, LowercaseNameFemale_lang" + "UiDisplayOrder, FactionID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, BaseLanguage, CreatureType, Alliance, RaceRelated, " + "UnalteredVisualRaceID, CharComponentTextureLayoutID, DefaultClassID, NeutralRaceID, DisplayRaceID, CharComponentTexLayoutHiResID, ID, " + "HighResMaleDisplayId, HighResFemaleDisplayId, HeritageArmorAchievementID, MaleSkeletonFileDataID, FemaleSkeletonFileDataID, " + "AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, AlteredFormFinishVisualKitID1, " + "AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3 FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang" " FROM chr_races_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrSpecialization.db2 - PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT Name, Name2, Description, MasterySpellID1, MasterySpellID2, ClassID, OrderIndex, " - "PetTalentType, Role, PrimaryStatOrder, ID, IconFileDataID, Flags, AnimReplacementSetID FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, Name_lang, Name2_lang, Description_lang FROM chr_specialization_locale" + PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT Name, FemaleName, Description, MasterySpellID1, MasterySpellID2, ClassID, OrderIndex, " + "PetTalentType, Role, PrimaryStatPriority, ID, SpellIconFileID, Flags, AnimReplacements FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, Name_lang, FemaleName_lang, Description_lang FROM chr_specialization_locale" " WHERE locale = ?", CONNECTION_SYNCH); // CinematicCamera.db2 - PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, SoundID, OriginX, OriginY, OriginZ, OriginFacing, ModelFileDataID FROM cinematic_camera" + PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, SoundID, OriginX, OriginY, OriginZ, OriginFacing, FileDataID FROM cinematic_camera" " ORDER BY ID DESC", CONNECTION_SYNCH); // CinematicSequences.db2 @@ -197,32 +201,32 @@ void HotfixDatabaseConnection::DoPrepareStatements() " FROM cinematic_sequences ORDER BY ID DESC", CONNECTION_SYNCH); // ConversationLine.db2 - PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, Duration, NextLineID, Unk1, Yell, Unk2, Unk3" - " FROM conversation_line ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, " + "AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line ORDER BY ID DESC", CONNECTION_SYNCH); // CreatureDisplayInfo.db2 PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO, "SELECT ID, CreatureModelScale, ModelID, NPCSoundID, SizeClass, Flags, Gender, " - "ExtendedDisplayInfoID, PortraitTextureFileDataID, CreatureModelAlpha, SoundID, PlayerModelScale, PortraitCreatureDisplayInfoID, BloodID, " - "ParticleColorID, CreatureGeosetData, ObjectEffectPackageID, AnimReplacementSetID, UnarmedWeaponSubclass, StateSpellVisualKitID, " - "InstanceOtherPlayerPetScale, MountSpellVisualKitID, TextureVariation1, TextureVariation2, TextureVariation3 FROM creature_display_info" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "ExtendedDisplayInfoID, PortraitTextureFileDataID, CreatureModelAlpha, SoundID, PlayerOverrideScale, PortraitCreatureDisplayInfoID, BloodID, " + "ParticleColorID, CreatureGeosetData, ObjectEffectPackageID, AnimReplacementSetID, UnarmedWeaponType, StateSpellVisualKitID, " + "PetInstanceScale, MountPoofSpellVisualKitID, TextureVariationFileDataID1, TextureVariationFileDataID2, TextureVariationFileDataID3" + " FROM creature_display_info ORDER BY ID DESC", CONNECTION_SYNCH); // CreatureDisplayInfoExtra.db2 - PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, FileDataID, HDFileDataID, DisplayRaceID, DisplaySexID, DisplayClassID, " - "SkinID, FaceID, HairStyleID, HairColorID, FacialHairID, CustomDisplayOption1, CustomDisplayOption2, CustomDisplayOption3, Flags" - " FROM creature_display_info_extra ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, BakeMaterialResourcesID, HDBakeMaterialResourcesID, DisplayRaceID, " + "DisplaySexID, DisplayClassID, SkinID, FaceID, HairStyleID, HairColorID, FacialHairID, CustomDisplayOption1, CustomDisplayOption2, " + "CustomDisplayOption3, Flags FROM creature_display_info_extra ORDER BY ID DESC", CONNECTION_SYNCH); // CreatureFamily.db2 - PrepareStatement(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name, MinScale, MaxScale, IconFileDataID, SkillLine1, SkillLine2, PetFoodMask, " + PrepareStatement(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name, MinScale, MaxScale, IconFileID, SkillLine1, SkillLine2, PetFoodMask, " "MinScaleLevel, MaxScaleLevel, PetTalentType FROM creature_family ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name_lang FROM creature_family_locale WHERE locale = ?", CONNECTION_SYNCH); // CreatureModelData.db2 PrepareStatement(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT ID, ModelScale, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, " - "CollisionWidth, CollisionHeight, MountHeight, GeoBoxMin1, GeoBoxMin2, GeoBoxMin3, GeoBoxMax1, GeoBoxMax2, GeoBoxMax3, WorldEffectScale, " - "AttachedEffectScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, OverrideLootEffectScale, OverrideNameScale, " - "OverrideSelectionRadius, TamedPetBaseScale, HoverHeight, Flags, FileDataID, SizeClass, BloodID, FootprintTextureID, FoleyMaterialID, " - "FootstepEffectID, DeathThudEffectID, SoundID, CreatureGeosetDataID FROM creature_model_data ORDER BY ID DESC", CONNECTION_SYNCH); + "CollisionWidth, CollisionHeight, MountHeight, GeoBox1, GeoBox2, GeoBox3, GeoBox4, GeoBox5, GeoBox6, WorldEffectScale, AttachedEffectScale, " + "MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, OverrideLootEffectScale, OverrideNameScale, OverrideSelectionRadius, " + "TamedPetBaseScale, HoverHeight, Flags, FileDataID, SizeClass, BloodID, FootprintTextureID, FoleyMaterialID, FootstepCameraEffectID, " + "DeathThudCameraEffectID, SoundID, CreatureGeosetDataID FROM creature_model_data ORDER BY ID DESC", CONNECTION_SYNCH); // CreatureType.db2 PrepareStatement(HOTFIX_SEL_CREATURE_TYPE, "SELECT ID, Name, Flags FROM creature_type ORDER BY ID DESC", CONNECTION_SYNCH); @@ -239,32 +243,31 @@ void HotfixDatabaseConnection::DoPrepareStatements() // CurrencyTypes.db2 PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, MaxQty, MaxEarnablePerWeek, Flags, CategoryID, SpellCategory, Quality, " - "InventoryIconFileDataID, SpellWeight FROM currency_types ORDER BY ID DESC", CONNECTION_SYNCH); + "InventoryIconFileID, SpellWeight FROM currency_types ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE locale = ?", CONNECTION_SYNCH); // Curve.db2 - PrepareStatement(HOTFIX_SEL_CURVE, "SELECT ID, Type, Unused FROM curve ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CURVE, "SELECT ID, Type, Flags FROM curve ORDER BY ID DESC", CONNECTION_SYNCH); // CurvePoint.db2 - PrepareStatement(HOTFIX_SEL_CURVE_POINT, "SELECT ID, X, Y, CurveID, `Index` FROM curve_point ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CURVE_POINT, "SELECT ID, PosX, PosY, CurveID, OrderIndex FROM curve_point ORDER BY ID DESC", CONNECTION_SYNCH); // DestructibleModelData.db2 - PrepareStatement(HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT ID, StateDamagedDisplayID, StateDestroyedDisplayID, StateRebuildingDisplayID, " - "StateSmokeDisplayID, HealEffectSpeed, StateDamagedImpactEffectDoodadSet, StateDamagedAmbientDoodadSet, StateDamagedNameSet, " - "StateDestroyedDestructionDoodadSet, StateDestroyedImpactEffectDoodadSet, StateDestroyedAmbientDoodadSet, StateDestroyedNameSet, " - "StateRebuildingDestructionDoodadSet, StateRebuildingImpactEffectDoodadSet, StateRebuildingAmbientDoodadSet, StateRebuildingNameSet, " - "StateSmokeInitDoodadSet, StateSmokeAmbientDoodadSet, StateSmokeNameSet, EjectDirection, DoNotHighlight, HealEffect" - " FROM destructible_model_data ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT ID, State0Wmo, State1Wmo, State2Wmo, State3Wmo, HealEffectSpeed, " + "State0ImpactEffectDoodadSet, State0AmbientDoodadSet, State0NameSet, State1DestructionDoodadSet, State1ImpactEffectDoodadSet, " + "State1AmbientDoodadSet, State1NameSet, State2DestructionDoodadSet, State2ImpactEffectDoodadSet, State2AmbientDoodadSet, State2NameSet, " + "State3InitDoodadSet, State3AmbientDoodadSet, State3NameSet, EjectDirection, DoNotHighlight, HealEffect FROM destructible_model_data" + " ORDER BY ID DESC", CONNECTION_SYNCH); // Difficulty.db2 PrepareStatement(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID, " - "FallbackDifficultyID, InstanceType, MinPlayers, MaxPlayers, OldEnumValue, Flags, ToggleDifficultyID, ItemBonusTreeModID, OrderIndex" - " FROM difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + "FallbackDifficultyID, InstanceType, MinPlayers, MaxPlayers, OldEnumValue, Flags, ToggleDifficultyID, ItemContext, OrderIndex FROM difficulty" + " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name_lang FROM difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // DungeonEncounter.db2 - PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT Name, CreatureDisplayID, MapID, DifficultyID, Bit, Flags, ID, OrderIndex, " - "TextureFileDataID FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT Name, CreatureDisplayID, MapID, DifficultyID, Bit, Flags, ID, OrderIndex, SpellIconFileID" + " FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE locale = ?", CONNECTION_SYNCH); // DurabilityCosts.db2 @@ -276,72 +279,71 @@ void HotfixDatabaseConnection::DoPrepareStatements() " FROM durability_costs ORDER BY ID DESC", CONNECTION_SYNCH); // DurabilityQuality.db2 - PrepareStatement(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT ID, QualityMod FROM durability_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT ID, Data FROM durability_quality ORDER BY ID DESC", CONNECTION_SYNCH); // Emotes.db2 - PrepareStatement(HOTFIX_SEL_EMOTES, "SELECT ID, RaceMask, EmoteSlashCommand, SpellVisualKitID, EmoteFlags, AnimID, EmoteSpecProc, " - "EmoteSpecProcParam, EmoteSoundID, ClassMask FROM emotes ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES, "SELECT ID, RaceMask, EmoteSlashCommand, EmoteFlags, SpellVisualKitID, AnimID, EmoteSpecProc, ClassMask, " + "EmoteSpecProcParam, EventSoundID FROM emotes ORDER BY ID DESC", CONNECTION_SYNCH); // EmotesText.db2 PrepareStatement(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name_lang FROM emotes_text_locale WHERE locale = ?", CONNECTION_SYNCH); // EmotesTextSound.db2 - PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, RaceId, SexId, ClassId, SoundId, EmotesTextId FROM emotes_text_sound ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, RaceID, SexID, ClassID, SoundID, EmotesTextID FROM emotes_text_sound ORDER BY ID DESC", CONNECTION_SYNCH); // Faction.db2 PrepareStatement(HOTFIX_SEL_FACTION, "SELECT ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " - "Description, ID, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ParentFactionModIn, ParentFactionModOut, " - "ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, ReputationIndex, ReputationClassMask1, ReputationClassMask2, " - "ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ParentFactionID, " - "ParagonFactionID, ParentFactionCapIn, ParentFactionCapOut, Expansion, Flags, FriendshipRepID FROM faction ORDER BY ID DESC", CONNECTION_SYNCH); + "Description, ID, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ParentFactionMod1, ParentFactionMod2, ReputationMax1, " + "ReputationMax2, ReputationMax3, ReputationMax4, ReputationIndex, ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, " + "ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ParentFactionID, ParagonFactionID, " + "ParentFactionCap1, ParentFactionCap2, Expansion, Flags, FriendshipRepID FROM faction ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_FACTION, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE locale = ?", CONNECTION_SYNCH); // FactionTemplate.db2 - PrepareStatement(HOTFIX_SEL_FACTION_TEMPLATE, "SELECT ID, Faction, Flags, Enemies1, Enemies2, Enemies3, Enemies4, Friends1, Friends2, Friends3, " - "Friends4, Mask, FriendMask, EnemyMask FROM faction_template ORDER BY ID DESC", CONNECTION_SYNCH); - - // Gameobjects.db2 - PrepareStatement(HOTFIX_SEL_GAMEOBJECTS, "SELECT Name, PositionX, PositionY, PositionZ, RotationX, RotationY, RotationZ, RotationW, Size, Data1, " - "Data2, Data3, Data4, Data5, Data6, Data7, Data8, MapID, DisplayID, PhaseID, PhaseGroupID, PhaseUseFlags, Type, ID FROM gameobjects" - " ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_GAMEOBJECTS, "SELECT ID, Name_lang FROM gameobjects_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_FACTION_TEMPLATE, "SELECT ID, Faction, Flags, Enemies1, Enemies2, Enemies3, Enemies4, Friend1, Friend2, Friend3, " + "Friend4, FactionGroup, FriendGroup, EnemyGroup FROM faction_template ORDER BY ID DESC", CONNECTION_SYNCH); // GameobjectDisplayInfo.db2 PrepareStatement(HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, "SELECT ID, FileDataID, GeoBoxMinX, GeoBoxMinY, GeoBoxMinZ, GeoBoxMaxX, GeoBoxMaxY, " "GeoBoxMaxZ, OverrideLootEffectScale, OverrideNameScale, ObjectEffectPackageID FROM gameobject_display_info ORDER BY ID DESC", CONNECTION_SYNCH); + // Gameobjects.db2 + PrepareStatement(HOTFIX_SEL_GAMEOBJECTS, "SELECT Name, PosX, PosY, PosZ, Rot1, Rot2, Rot3, Rot4, Scale, PropValue1, PropValue2, PropValue3, " + "PropValue4, PropValue5, PropValue6, PropValue7, PropValue8, OwnerID, DisplayID, PhaseID, PhaseGroupID, PhaseUseFlags, TypeID, ID" + " FROM gameobjects ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_GAMEOBJECTS, "SELECT ID, Name_lang FROM gameobjects_locale WHERE locale = ?", CONNECTION_SYNCH); + // GarrAbility.db2 - PrepareStatement(HOTFIX_SEL_GARR_ABILITY, "SELECT Name, Description, IconFileDataID, Flags, OtherFactionGarrAbilityID, GarrAbilityCategoryID, " - "FollowerTypeID, ID FROM garr_ability ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_ABILITY, "SELECT Name, Description, IconFileDataID, Flags, FactionChangeGarrAbilityID, GarrAbilityCategoryID, " + "GarrFollowerTypeID, ID FROM garr_ability ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_ABILITY, "SELECT ID, Name_lang, Description_lang FROM garr_ability_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuilding.db2 - PrepareStatement(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, NameAlliance, NameHorde, Description, Tooltip, HordeGameObjectID, AllianceGameObjectID, " - "IconFileDataID, CostCurrencyID, HordeTexPrefixKitID, AllianceTexPrefixKitID, AllianceActivationScenePackageID, " - "HordeActivationScenePackageID, FollowerRequiredGarrAbilityID, FollowerGarrAbilityEffectID, CostMoney, Unknown, Type, Level, Flags, " - "MaxShipments, GarrTypeID, BuildDuration, CostCurrencyAmount, BonusAmount FROM garr_building ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, NameAlliance_lang, NameHorde_lang, Description_lang, Tooltip_lang" + PrepareStatement(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, AllianceName, HordeName, Description, Tooltip, HordeGameObjectID, AllianceGameObjectID, " + "IconFileDataID, CurrencyTypeID, HordeUiTextureKitID, AllianceUiTextureKitID, AllianceSceneScriptPackageID, HordeSceneScriptPackageID, " + "GarrAbilityID, BonusGarrAbilityID, GoldCost, GarrSiteID, BuildingType, UpgradeLevel, Flags, ShipmentCapacity, GarrTypeID, BuildSeconds, " + "CurrencyQty, MaxAssignments FROM garr_building ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, AllianceName_lang, HordeName_lang, Description_lang, Tooltip_lang" " FROM garr_building_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuildingPlotInst.db2 - PrepareStatement(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT LandmarkOffsetX, LandmarkOffsetY, UiTextureAtlasMemberID, GarrSiteLevelPlotInstID, " + PrepareStatement(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT MapOffsetX, MapOffsetY, UiTextureAtlasMemberID, GarrSiteLevelPlotInstID, " "GarrBuildingID, ID FROM garr_building_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); // GarrClassSpec.db2 - PrepareStatement(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT NameMale, NameFemale, NameGenderless, ClassAtlasID, GarrFollItemSetID, `Limit`, Flags, ID" - " FROM garr_class_spec ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ID, NameMale_lang, NameFemale_lang, NameGenderless_lang FROM garr_class_spec_locale" + PrepareStatement(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ClassSpec, ClassSpecMale, ClassSpecFemale, UiTextureAtlasMemberID, GarrFollItemSetID, " + "FollowerClassLimit, Flags, ID FROM garr_class_spec ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ID, ClassSpec_lang, ClassSpecMale_lang, ClassSpecFemale_lang FROM garr_class_spec_locale" " WHERE locale = ?", CONNECTION_SYNCH); // GarrFollower.db2 - PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER, "SELECT HordeSourceText, AllianceSourceText, Name, HordeCreatureID, AllianceCreatureID, " - "HordePortraitIconID, AlliancePortraitIconID, HordeAddedBroadcastTextID, AllianceAddedBroadcastTextID, HordeGarrFollItemSetID, " - "AllianceGarrFollItemSetID, ItemLevelWeapon, ItemLevelArmor, HordeListPortraitTextureKitID, AllianceListPortraitTextureKitID, FollowerTypeID, " - "HordeUiAnimRaceInfoID, AllianceUiAnimRaceInfoID, Quality, HordeGarrClassSpecID, AllianceGarrClassSpecID, Level, Unknown1, Flags, Unknown2, " - "Unknown3, GarrTypeID, MaxDurability, Class, HordeFlavorTextGarrStringID, AllianceFlavorTextGarrStringID, ID FROM garr_follower" - " ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang, Name_lang FROM garr_follower_locale" + PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER, "SELECT HordeSourceText, AllianceSourceText, TitleName, HordeCreatureID, AllianceCreatureID, " + "HordeIconFileDataID, AllianceIconFileDataID, HordeSlottingBroadcastTextID, AllySlottingBroadcastTextID, HordeGarrFollItemSetID, " + "AllianceGarrFollItemSetID, ItemLevelWeapon, ItemLevelArmor, HordeUITextureKitID, AllianceUITextureKitID, GarrFollowerTypeID, " + "HordeGarrFollRaceID, AllianceGarrFollRaceID, Quality, HordeGarrClassSpecID, AllianceGarrClassSpecID, FollowerLevel, Gender, Flags, " + "HordeSourceTypeEnum, AllianceSourceTypeEnum, GarrTypeID, Vitality, ChrClassID, HordeFlavorGarrStringID, AllianceFlavorGarrStringID, ID" + " FROM garr_follower ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang, TitleName_lang FROM garr_follower_locale" " WHERE locale = ?", CONNECTION_SYNCH); // GarrFollowerXAbility.db2 @@ -349,8 +351,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // GarrPlot.db2 - PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, AllianceConstructionGameObjectID, HordeConstructionGameObjectID, GarrPlotUICategoryID, " - "PlotType, Flags, MinCount, MaxCount FROM garr_plot ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, AllianceConstructObjID, HordeConstructObjID, UiCategoryID, PlotType, Flags, " + "UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name_lang FROM garr_plot_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrPlotBuilding.db2 @@ -358,24 +360,23 @@ void HotfixDatabaseConnection::DoPrepareStatements() // GarrPlotInstance.db2 PrepareStatement(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name, GarrPlotID FROM garr_plot_instance ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name_lang FROM garr_plot_instance_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrSiteLevel.db2 - PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallX, TownHallY, MapID, SiteID, MovieID, UpgradeResourceCost, UpgradeMoneyCost, " - "Level, UITextureKitID, Level2 FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallUiPosX, TownHallUiPosY, MapID, UiTextureKitID, UpgradeMovieID, UpgradeCost, " + "UpgradeGoldCost, GarrLevel, GarrSiteID, MaxBuildingLevel FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH); // GarrSiteLevelPlotInst.db2 - PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, "SELECT ID, LandmarkX, LandmarkY, GarrSiteLevelID, GarrPlotInstanceID, Unknown" + PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, "SELECT ID, UiMarkerPosX, UiMarkerPosY, GarrSiteLevelID, GarrPlotInstanceID, UiMarkerSize" " FROM garr_site_level_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); // GemProperties.db2 - PrepareStatement(HOTFIX_SEL_GEM_PROPERTIES, "SELECT ID, Type, EnchantID, MinItemLevel FROM gem_properties ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GEM_PROPERTIES, "SELECT ID, Type, EnchantId, MinItemLevel FROM gem_properties ORDER BY ID DESC", CONNECTION_SYNCH); // GlyphBindableSpell.db2 PrepareStatement(HOTFIX_SEL_GLYPH_BINDABLE_SPELL, "SELECT ID, SpellID, GlyphPropertiesID FROM glyph_bindable_spell ORDER BY ID DESC", CONNECTION_SYNCH); // GlyphProperties.db2 - PrepareStatement(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, SpellIconID, Type, GlyphExclusiveCategoryID FROM glyph_properties" + PrepareStatement(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, SpellIconID, GlyphType, GlyphExclusiveCategoryID FROM glyph_properties" " ORDER BY ID DESC", CONNECTION_SYNCH); // GlyphRequiredSpec.db2 @@ -394,8 +395,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_GUILD_PERK_SPELLS, "SELECT ID, SpellID FROM guild_perk_spells ORDER BY ID DESC", CONNECTION_SYNCH); // Heirloom.db2 - PrepareStatement(HOTFIX_SEL_HEIRLOOM, "SELECT SourceText, ItemID, OldItem1, OldItem2, NextDifficultyItemID, UpgradeItemID1, UpgradeItemID2, " - "UpgradeItemID3, ItemBonusListID1, ItemBonusListID2, ItemBonusListID3, Flags, Source, ID FROM heirloom ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_HEIRLOOM, "SELECT SourceText, ItemID, LegacyItemID, LegacyUpgradedItemID, StaticUpgradedItemID, UpgradeItemID1, " + "UpgradeItemID2, UpgradeItemID3, UpgradeItemBonusListID1, UpgradeItemBonusListID2, UpgradeItemBonusListID3, Flags, SourceTypeEnum, ID" + " FROM heirloom ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_HEIRLOOM, "SELECT ID, SourceText_lang FROM heirloom_locale WHERE locale = ?", CONNECTION_SYNCH); // Holidays.db2 @@ -406,117 +408,117 @@ void HotfixDatabaseConnection::DoPrepareStatements() "TextureFileDataID1, TextureFileDataID2, TextureFileDataID3 FROM holidays ORDER BY ID DESC", CONNECTION_SYNCH); // ImportPriceArmor.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothFactor, LeatherFactor, MailFactor, PlateFactor FROM import_price_armor" + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothModifier, LeatherModifier, ChainModifier, PlateModifier FROM import_price_armor" " ORDER BY ID DESC", CONNECTION_SYNCH); // ImportPriceQuality.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_QUALITY, "SELECT ID, Factor FROM import_price_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_QUALITY, "SELECT ID, Data FROM import_price_quality ORDER BY ID DESC", CONNECTION_SYNCH); // ImportPriceShield.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_SHIELD, "SELECT ID, Factor FROM import_price_shield ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_SHIELD, "SELECT ID, Data FROM import_price_shield ORDER BY ID DESC", CONNECTION_SYNCH); // ImportPriceWeapon.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Factor FROM import_price_weapon ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon ORDER BY ID DESC", CONNECTION_SYNCH); // Item.db2 - PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, FileDataID, Class, SubClass, SoundOverrideSubclass, Material, InventoryType, Sheath, GroupSoundsID" - " FROM item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, IconFileDataID, ClassID, SubclassID, SoundOverrideSubclassID, Material, InventoryType, SheatheType, " + "ItemGroupSoundsID FROM item ORDER BY ID DESC", CONNECTION_SYNCH); // ItemAppearance.db2 - PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, DisplayID, IconFileDataID, UIOrder, ObjectComponentSlot FROM item_appearance" + PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder, DisplayType FROM item_appearance" " ORDER BY ID DESC", CONNECTION_SYNCH); // ItemArmorQuality.db2 - PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_QUALITY, "SELECT ID, QualityMod1, QualityMod2, QualityMod3, QualityMod4, QualityMod5, QualityMod6, " - "QualityMod7, ItemLevel FROM item_armor_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_QUALITY, "SELECT ID, Qualitymod1, Qualitymod2, Qualitymod3, Qualitymod4, Qualitymod5, Qualitymod6, " + "Qualitymod7, ItemLevel FROM item_armor_quality ORDER BY ID DESC", CONNECTION_SYNCH); // ItemArmorShield.db2 PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_SHIELD, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, ItemLevel" " FROM item_armor_shield ORDER BY ID DESC", CONNECTION_SYNCH); // ItemArmorTotal.db2 - PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_TOTAL, "SELECT ID, Value1, Value2, Value3, Value4, ItemLevel FROM item_armor_total ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_TOTAL, "SELECT ID, Cloth, Leather, Mail, Plate, ItemLevel FROM item_armor_total ORDER BY ID DESC", CONNECTION_SYNCH); // ItemBagFamily.db2 PrepareStatement(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT ID, Name FROM item_bag_family ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT ID, Name_lang FROM item_bag_family_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemBonus.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, BonusListID, Type, `Index` FROM item_bonus ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, ParentItemBonusListID, Type, OrderIndex FROM item_bonus" + " ORDER BY ID DESC", CONNECTION_SYNCH); // ItemBonusListLevelDelta.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT Delta, ID FROM item_bonus_list_level_delta ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT ItemLevelDelta, ID FROM item_bonus_list_level_delta ORDER BY ID DESC", CONNECTION_SYNCH); // ItemBonusTreeNode.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, SubTreeID, BonusListID, ItemLevelSelectorID, BonusTreeModID, BonusTreeID" - " FROM item_bonus_tree_node ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, ItemContext, " + "ParentItemBonusTreeID FROM item_bonus_tree_node ORDER BY ID DESC", CONNECTION_SYNCH); // ItemChildEquipment.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, AltItemID, AltEquipmentSlot, ItemID FROM item_child_equipment ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ChildItemID, ChildItemEquipSlot, ParentItemID FROM item_child_equipment" + " ORDER BY ID DESC", CONNECTION_SYNCH); // ItemClass.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, Name, PriceMod, OldEnumValue, Flags FROM item_class ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, Name_lang FROM item_class_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName, PriceModifier, ClassID, Flags FROM item_class ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName_lang FROM item_class_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemCurrencyCost.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemId FROM item_currency_cost ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDamageAmmo.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_AMMO, "SELECT ID, DPS1, DPS2, DPS3, DPS4, DPS5, DPS6, DPS7, ItemLevel FROM item_damage_ammo" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_AMMO, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, ItemLevel" + " FROM item_damage_ammo ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDamageOneHand.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND, "SELECT ID, DPS1, DPS2, DPS3, DPS4, DPS5, DPS6, DPS7, ItemLevel FROM item_damage_one_hand" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, ItemLevel" + " FROM item_damage_one_hand ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDamageOneHandCaster.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER, "SELECT ID, DPS1, DPS2, DPS3, DPS4, DPS5, DPS6, DPS7, ItemLevel" - " FROM item_damage_one_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, " + "ItemLevel FROM item_damage_one_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDamageTwoHand.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND, "SELECT ID, DPS1, DPS2, DPS3, DPS4, DPS5, DPS6, DPS7, ItemLevel FROM item_damage_two_hand" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, ItemLevel" + " FROM item_damage_two_hand ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDamageTwoHandCaster.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER, "SELECT ID, DPS1, DPS2, DPS3, DPS4, DPS5, DPS6, DPS7, ItemLevel" - " FROM item_damage_two_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, " + "ItemLevel FROM item_damage_two_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); // ItemDisenchantLoot.db2 - PrepareStatement(HOTFIX_SEL_ITEM_DISENCHANT_LOOT, "SELECT ID, MinItemLevel, MaxItemLevel, RequiredDisenchantSkill, ItemSubClass, ItemQuality, " - "Expansion, ItemClass FROM item_disenchant_loot ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_DISENCHANT_LOOT, "SELECT ID, MinLevel, MaxLevel, SkillRequired, Subclass, Quality, ExpansionID, Class" + " FROM item_disenchant_loot ORDER BY ID DESC", CONNECTION_SYNCH); // ItemEffect.db2 - PrepareStatement(HOTFIX_SEL_ITEM_EFFECT, "SELECT ID, SpellID, Cooldown, CategoryCooldown, Charges, Category, ChrSpecializationID, OrderIndex, " - "`Trigger`, ItemID FROM item_effect ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_EFFECT, "SELECT ID, SpellID, CoolDownMSec, CategoryCoolDownMSec, Charges, SpellCategoryID, ChrSpecializationID, " + "LegacySlotIndex, TriggerType, ParentItemID FROM item_effect ORDER BY ID DESC", CONNECTION_SYNCH); // ItemExtendedCost.db2 - PrepareStatement(HOTFIX_SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredItem1, RequiredItem2, RequiredItem3, RequiredItem4, RequiredItem5, " - "RequiredCurrencyCount1, RequiredCurrencyCount2, RequiredCurrencyCount3, RequiredCurrencyCount4, RequiredCurrencyCount5, RequiredItemCount1, " - "RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredPersonalArenaRating, RequiredCurrency1, " - "RequiredCurrency2, RequiredCurrency3, RequiredCurrency4, RequiredCurrency5, RequiredArenaSlot, RequiredFactionId, RequiredFactionStanding, " - "RequirementFlags, RequiredAchievement FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_EXTENDED_COST, "SELECT ID, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, CurrencyCount1, CurrencyCount2, " + "CurrencyCount3, CurrencyCount4, CurrencyCount5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, RequiredArenaRating, " + "CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, ArenaBracket, MinFactionID, MinReputation, Flags, RequiredAchievement" + " FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); // ItemLevelSelector.db2 - PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR, "SELECT ID, ItemLevel, ItemLevelSelectorQualitySetID FROM item_level_selector ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR, "SELECT ID, MinItemLevel, ItemLevelSelectorQualitySetID FROM item_level_selector ORDER BY ID DESC", CONNECTION_SYNCH); // ItemLevelSelectorQuality.db2 - PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY, "SELECT ID, ItemBonusListID, Quality, ItemLevelSelectorQualitySetID" + PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY, "SELECT ID, QualityItemBonusListID, Quality, ParentILSQualitySetID" " FROM item_level_selector_quality ORDER BY ID DESC", CONNECTION_SYNCH); // ItemLevelSelectorQualitySet.db2 - PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, "SELECT ID, ItemLevelMin, ItemLevelMax FROM item_level_selector_quality_set" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, "SELECT ID, IlvlRare, IlvlEpic FROM item_level_selector_quality_set ORDER BY ID DESC", CONNECTION_SYNCH); // ItemLimitCategory.db2 PrepareStatement(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name, Quantity, Flags FROM item_limit_category ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name_lang FROM item_limit_category_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemModifiedAppearance.db2 - PrepareStatement(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ItemID, ID, AppearanceModID, AppearanceID, `Index`, SourceType" - " FROM item_modified_appearance ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ItemID, ID, ItemAppearanceModifierID, ItemAppearanceID, OrderIndex, " + "TransmogSourceTypeEnum FROM item_modified_appearance ORDER BY ID DESC", CONNECTION_SYNCH); // ItemPriceBase.db2 - PrepareStatement(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT ID, ArmorFactor, WeaponFactor, ItemLevel FROM item_price_base ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT ID, Armor, Weapon, ItemLevel FROM item_price_base ORDER BY ID DESC", CONNECTION_SYNCH); // ItemRandomProperties.db2 PrepareStatement(HOTFIX_SEL_ITEM_RANDOM_PROPERTIES, "SELECT ID, Name, Enchantment1, Enchantment2, Enchantment3, Enchantment4, Enchantment5" @@ -529,14 +531,14 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_RANDOM_SUFFIX, "SELECT ID, Name_lang FROM item_random_suffix_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSearchName.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT AllowableRace, Name, ID, Flags1, Flags2, Flags3, ItemLevel, Quality, RequiredExpansion, " - "RequiredLevel, RequiredReputationFaction, RequiredReputationRank, AllowableClass, RequiredSkill, RequiredSkillRank, RequiredSpell" + PrepareStatement(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT AllowableRace, Display, ID, Flags1, Flags2, Flags3, ItemLevel, OverallQualityID, " + "ExpansionID, RequiredLevel, MinFactionID, MinReputation, AllowableClass, RequiredSkill, RequiredSkillRank, RequiredAbility" " FROM item_search_name ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT ID, Name_lang FROM item_search_name_locale WHERE locale = ?", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT ID, Display_lang FROM item_search_name_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSet.db2 PrepareStatement(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, " - "ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, RequiredSkillRank, RequiredSkill, Flags FROM item_set" + "ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, RequiredSkillRank, RequiredSkill, SetFlags FROM item_set" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name_lang FROM item_set_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -544,36 +546,36 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_ITEM_SET_SPELL, "SELECT ID, SpellID, ChrSpecID, Threshold, ItemSetID FROM item_set_spell ORDER BY ID DESC", CONNECTION_SYNCH); // ItemSparse.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Name, Name2, Name3, Name4, Description, Flags1, Flags2, Flags3, Flags4, Unk1, " - "Unk2, BuyCount, BuyPrice, SellPrice, RequiredSpell, MaxCount, Stackable, ItemStatAllocation1, ItemStatAllocation2, ItemStatAllocation3, " - "ItemStatAllocation4, ItemStatAllocation5, ItemStatAllocation6, ItemStatAllocation7, ItemStatAllocation8, ItemStatAllocation9, " - "ItemStatAllocation10, ItemStatSocketCostMultiplier1, ItemStatSocketCostMultiplier2, ItemStatSocketCostMultiplier3, " - "ItemStatSocketCostMultiplier4, ItemStatSocketCostMultiplier5, ItemStatSocketCostMultiplier6, ItemStatSocketCostMultiplier7, " - "ItemStatSocketCostMultiplier8, ItemStatSocketCostMultiplier9, ItemStatSocketCostMultiplier10, RangedModRange, BagFamily, " - "ArmorDamageModifier, Duration, StatScalingFactor, AllowableClass, ItemLevel, RequiredSkill, RequiredSkillRank, RequiredReputationFaction, " - "ItemStatValue1, ItemStatValue2, ItemStatValue3, ItemStatValue4, ItemStatValue5, ItemStatValue6, ItemStatValue7, ItemStatValue8, " - "ItemStatValue9, ItemStatValue10, ScalingStatDistribution, Delay, PageText, StartQuest, LockID, RandomProperty, RandomSuffix, ItemSet, Area, " - "Map, TotemCategory, SocketBonus, GemProperties, ItemLimitCategory, HolidayID, RequiredTransmogHolidayID, ItemNameDescriptionID, Quality, " - "InventoryType, RequiredLevel, RequiredHonorRank, RequiredCityRank, RequiredReputationRank, ContainerSlots, ItemStatType1, ItemStatType2, " - "ItemStatType3, ItemStatType4, ItemStatType5, ItemStatType6, ItemStatType7, ItemStatType8, ItemStatType9, ItemStatType10, DamageType, " - "Bonding, LanguageID, PageMaterial, Material, Sheath, SocketColor1, SocketColor2, SocketColor3, CurrencySubstitutionID, " - "CurrencySubstitutionCount, ArtifactID, RequiredExpansion FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Name_lang, Name2_lang, Name3_lang, Name4_lang, Description_lang FROM item_sparse_locale" - " WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Display, Display1, Display2, Display3, Description, Flags1, Flags2, Flags3, " + "Flags4, PriceRandomValue, PriceVariance, VendorStackCount, BuyPrice, SellPrice, RequiredAbility, MaxCount, Stackable, StatPercentEditor1, " + "StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, " + "StatPercentEditor9, StatPercentEditor10, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, StatPercentageOfSocket4, " + "StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, StatPercentageOfSocket9, " + "StatPercentageOfSocket10, ItemRange, BagFamily, QualityModifier, DurationInInventory, DmgVariance, AllowableClass, ItemLevel, RequiredSkill, " + "RequiredSkillRank, MinFactionID, ItemStatValue1, ItemStatValue2, ItemStatValue3, ItemStatValue4, ItemStatValue5, ItemStatValue6, " + "ItemStatValue7, ItemStatValue8, ItemStatValue9, ItemStatValue10, ScalingStatDistributionID, ItemDelay, PageID, StartQuestID, LockID, " + "RandomSelect, ItemRandomSuffixGroupID, ItemSet, ZoneBound, InstanceBound, TotemCategoryID, SocketMatchEnchantmentId, GemProperties, " + "LimitCategory, RequiredHoliday, RequiredTransmogHoliday, ItemNameDescriptionID, OverallQualityID, InventoryType, RequiredLevel, " + "RequiredPVPRank, RequiredPVPMedal, MinReputation, ContainerSlots, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, " + "StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, " + "StatModifierBonusStat9, StatModifierBonusStat10, DamageDamageType, Bonding, LanguageID, PageMaterialID, Material, SheatheType, SocketType1, " + "SocketType2, SocketType3, SpellWeightCategory, SpellWeight, ArtifactID, ExpansionID FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Display_lang, Display1_lang, Display2_lang, Display3_lang, Description_lang" + " FROM item_sparse_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSpec.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SPEC, "SELECT ID, SpecID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat FROM item_spec" + PrepareStatement(HOTFIX_SEL_ITEM_SPEC, "SELECT ID, SpecializationID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat FROM item_spec" " ORDER BY ID DESC", CONNECTION_SYNCH); // ItemSpecOverride.db2 PrepareStatement(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override ORDER BY ID DESC", CONNECTION_SYNCH); // ItemUpgrade.db2 - PrepareStatement(HOTFIX_SEL_ITEM_UPGRADE, "SELECT ID, CurrencyCost, PrevItemUpgradeID, CurrencyID, ItemUpgradePathID, ItemLevelBonus" + PrepareStatement(HOTFIX_SEL_ITEM_UPGRADE, "SELECT ID, CurrencyAmount, PrerequisiteID, CurrencyType, ItemUpgradePathID, ItemLevelIncrement" " FROM item_upgrade ORDER BY ID DESC", CONNECTION_SYNCH); // ItemXBonusTree.db2 - PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, BonusTreeID, ItemID FROM item_x_bonus_tree ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree ORDER BY ID DESC", 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, " @@ -581,24 +583,23 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // LfgDungeons.db2 - PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, Flags, MinItemLevel, MaxLevel, TargetLevelMax, MapID, RandomID, " - "ScenarioID, LastBossJournalEncounterID, BonusReputationAmount, MentorItemLevel, PlayerConditionID, MinLevel, TargetLevel, TargetLevelMin, " - "DifficultyID, Type, Faction, Expansion, OrderIndex, GroupID, CountTank, CountHealer, CountDamage, MinCountTank, MinCountHealer, " - "MinCountDamage, SubType, MentorCharLevel, TextureFileDataID, RewardIconFileDataID, ProposalTextureFileDataID FROM lfg_dungeons" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, Flags, MinGear, MaxLevel, TargetLevelMax, MapID, RandomID, ScenarioID, " + "FinalEncounterID, BonusReputationAmount, MentorItemLevel, RequiredPlayerConditionId, MinLevel, TargetLevel, TargetLevelMin, DifficultyID, " + "TypeID, Faction, ExpansionLevel, OrderIndex, GroupID, CountTank, CountHealer, CountDamage, MinCountTank, MinCountHealer, MinCountDamage, " + "Subtype, MentorCharLevel, IconTextureFileID, RewardsBgTextureFileID, PopupBgTextureFileID FROM lfg_dungeons ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE locale = ?", CONNECTION_SYNCH); // Light.db2 - PrepareStatement(HOTFIX_SEL_LIGHT, "SELECT ID, PosX, PosY, PosZ, FalloffStart, FalloffEnd, MapID, LightParamsID1, LightParamsID2, LightParamsID3, " - "LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_LIGHT, "SELECT ID, GameCoordsX, GameCoordsY, GameCoordsZ, GameFalloffStart, GameFalloffEnd, ContinentID, " + "LightParamsID1, LightParamsID2, LightParamsID3, LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light" + " ORDER BY ID DESC", CONNECTION_SYNCH); // LiquidType.db2 PrepareStatement(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, SpellID, MaxDarkenDepth, " "FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, ParticleScale, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, " "Float7, `Float8`, Float9, Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, " - "Flags, LightID, Type, ParticleMovement, ParticleTexSlots, MaterialID, DepthTexCount1, DepthTexCount2, DepthTexCount3, DepthTexCount4, " - "DepthTexCount5, DepthTexCount6, SoundID FROM liquid_type ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name_lang FROM liquid_type_locale WHERE locale = ?", CONNECTION_SYNCH); + "Flags, LightID, SoundBank, ParticleMovement, ParticleTexSlots, MaterialID, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, " + "FrameCountTexture4, FrameCountTexture5, FrameCountTexture6, SoundID FROM liquid_type ORDER BY ID DESC", CONNECTION_SYNCH); // Lock.db2 PrepareStatement(HOTFIX_SEL_LOCK, "SELECT ID, Index1, Index2, Index3, Index4, Index5, Index6, Index7, Index8, Skill1, Skill2, Skill3, Skill4, " @@ -610,42 +611,42 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_MAIL_TEMPLATE, "SELECT ID, Body_lang FROM mail_template_locale WHERE locale = ?", CONNECTION_SYNCH); // Map.db2 - PrepareStatement(HOTFIX_SEL_MAP, "SELECT ID, Directory, MapName, MapDescription0, MapDescription1, ShortDescription, LongDescription, Flags1, " - "Flags2, MinimapIconScale, CorpsePosX, CorpsePosY, AreaTableID, LoadingScreenID, CorpseMapID, TimeOfDayOverride, ParentMapID, " - "CosmeticParentMapID, WindSettingsID, InstanceType, unk5, ExpansionID, MaxPlayers, TimeOffset FROM map ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, ShortDescription_lang, " - "LongDescription_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MAP, "SELECT ID, Directory, MapName, MapDescription0, MapDescription1, PvpShortDescription, PvpLongDescription, " + "Flags1, Flags2, MinimapIconScale, CorpseX, CorpseY, AreaTableID, LoadingScreenID, CorpseMapID, TimeOfDayOverride, ParentMapID, " + "CosmeticParentMapID, WindSettingsID, InstanceType, MapType, ExpansionID, MaxPlayers, TimeOffset FROM map ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, " + "PvpLongDescription_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH); // MapDifficulty.db2 - PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, DifficultyID, RaidDurationType, MaxPlayers, LockID, Flags, ItemBonusTreeModID, " - "Context, MapID FROM map_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, DifficultyID, ResetInterval, MaxPlayers, LockID, Flags, ItemContext, " + "ItemContextPickerID, MapID FROM map_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message_lang FROM map_difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // ModifierTree.db2 - PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Asset1, Asset2, Parent, Type, Unk700, Operator, Amount FROM modifier_tree ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Asset, SecondaryAsset, Parent, Type, TertiaryAsset, Operator, Amount FROM modifier_tree" + " ORDER BY ID DESC", CONNECTION_SYNCH); // Mount.db2 - PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT Name, Description, SourceDescription, SpellId, CameraPivotMultiplier, MountTypeId, Flags, Source, ID, " - "PlayerConditionId, UiModelSceneID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_MOUNT, "SELECT ID, Name_lang, Description_lang, SourceDescription_lang FROM mount_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT Name, Description, SourceText, SourceSpellID, MountFlyRideHeight, MountTypeID, Flags, SourceTypeEnum, " + "ID, PlayerConditionID, UiModelSceneID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_MOUNT, "SELECT ID, Name_lang, Description_lang, SourceText_lang FROM mount_locale WHERE locale = ?", CONNECTION_SYNCH); // MountCapability.db2 - PrepareStatement(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT RequiredSpell, SpeedModSpell, RequiredRidingSkill, RequiredArea, RequiredMap, Flags, ID, " - "RequiredAura FROM mount_capability ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT ReqSpellKnownID, ModSpellAuraID, ReqRidingSkill, ReqAreaID, ReqMapID, Flags, ID, " + "ReqSpellAuraID FROM mount_capability ORDER BY ID DESC", CONNECTION_SYNCH); // MountTypeXCapability.db2 PrepareStatement(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability" " ORDER BY ID DESC", CONNECTION_SYNCH); // MountXDisplay.db2 - PrepareStatement(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT ID, DisplayID, PlayerConditionID, MountID FROM mount_x_display ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT ID, CreatureDisplayInfoID, PlayerConditionID, MountID FROM mount_x_display ORDER BY ID DESC", CONNECTION_SYNCH); // Movie.db2 PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, AudioFileDataID, SubtitleFileDataID, Volume, KeyID FROM movie ORDER BY ID DESC", CONNECTION_SYNCH); // NameGen.db2 - PrepareStatement(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name, Race, Sex FROM name_gen ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name_lang FROM name_gen_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name, RaceID, Sex FROM name_gen ORDER BY ID DESC", CONNECTION_SYNCH); // NamesProfanity.db2 PrepareStatement(HOTFIX_SEL_NAMES_PROFANITY, "SELECT ID, Name, Language FROM names_profanity ORDER BY ID DESC", CONNECTION_SYNCH); @@ -657,8 +658,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale ORDER BY ID DESC", CONNECTION_SYNCH); // OverrideSpellData.db2 - PrepareStatement(HOTFIX_SEL_OVERRIDE_SPELL_DATA, "SELECT ID, SpellID1, SpellID2, SpellID3, SpellID4, SpellID5, SpellID6, SpellID7, SpellID8, " - "SpellID9, SpellID10, PlayerActionbarFileDataID, Flags FROM override_spell_data ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_OVERRIDE_SPELL_DATA, "SELECT ID, Spells1, Spells2, Spells3, Spells4, Spells5, Spells6, Spells7, Spells8, Spells9, " + "Spells10, PlayerActionBarFileDataID, Flags FROM override_spell_data ORDER BY ID DESC", CONNECTION_SYNCH); // Phase.db2 PrepareStatement(HOTFIX_SEL_PHASE, "SELECT ID, Flags FROM phase ORDER BY ID DESC", CONNECTION_SYNCH); @@ -668,86 +669,85 @@ void HotfixDatabaseConnection::DoPrepareStatements() // PlayerCondition.db2 PrepareStatement(HOTFIX_SEL_PLAYER_CONDITION, "SELECT RaceMask, FailureDescription, ID, Flags, MinLevel, MaxLevel, ClassMask, Gender, " - "NativeGender, SkillLogic, LanguageID, MinLanguage, MaxLanguage, MaxFactionID, MaxReputation, ReputationLogic, Unknown1, MinPVPRank, " + "NativeGender, SkillLogic, LanguageID, MinLanguage, MaxLanguage, MaxFactionID, MaxReputation, ReputationLogic, CurrentPvpFaction, MinPVPRank, " "MaxPVPRank, PvpMedal, PrevQuestLogic, CurrQuestLogic, CurrentCompletedQuestLogic, SpellLogic, ItemLogic, ItemFlags, AuraSpellLogic, " "WorldStateExpressionID, WeatherID, PartyStatus, LifetimeMaxPVPRank, AchievementLogic, LfgLogic, AreaLogic, CurrencyLogic, QuestKillID, " "QuestKillLogic, MinExpansionLevel, MaxExpansionLevel, MinExpansionTier, MaxExpansionTier, MinGuildLevel, MaxGuildLevel, PhaseUseFlags, " "PhaseID, PhaseGroupID, MinAvgItemLevel, MaxAvgItemLevel, MinAvgEquippedItemLevel, MaxAvgEquippedItemLevel, ChrSpecializationIndex, " - "ChrSpecializationRole, PowerType, PowerTypeComp, PowerTypeValue, ModifierTreeID, MainHandItemSubclassMask, SkillID1, SkillID2, SkillID3, " - "SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, MinFactionID1, MinFactionID2, " - "MinFactionID3, MinReputation1, MinReputation2, MinReputation3, PrevQuestID1, PrevQuestID2, PrevQuestID3, PrevQuestID4, CurrQuestID1, " - "CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, CurrentCompletedQuestID3, " - "CurrentCompletedQuestID4, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, ItemCount2, ItemCount3, " - "ItemCount4, Explored1, Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AuraCount1, AuraCount2, AuraCount3, " - "AuraCount4, Achievement1, Achievement2, Achievement3, Achievement4, LfgStatus1, LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, " - "LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, LfgValue4, AreaID1, AreaID2, AreaID3, AreaID4, CurrencyID1, " - "CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, QuestKillMonster1, QuestKillMonster2, " + "ChrSpecializationRole, PowerType, PowerTypeComp, PowerTypeValue, ModifierTreeID, WeaponSubclassMask, SkillID1, SkillID2, SkillID3, SkillID4, " + "MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, MinFactionID1, MinFactionID2, MinFactionID3, " + "MinReputation1, MinReputation2, MinReputation3, PrevQuestID1, PrevQuestID2, PrevQuestID3, PrevQuestID4, CurrQuestID1, CurrQuestID2, " + "CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, CurrentCompletedQuestID3, CurrentCompletedQuestID4, " + "SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, ItemCount2, ItemCount3, ItemCount4, Explored1, " + "Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AuraStacks1, AuraStacks2, AuraStacks3, AuraStacks4, " + "Achievement1, Achievement2, Achievement3, Achievement4, LfgStatus1, LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, " + "LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, LfgValue4, AreaID1, AreaID2, AreaID3, AreaID4, CurrencyID1, CurrencyID2, " + "CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, QuestKillMonster1, QuestKillMonster2, " "QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, MovementFlags1, MovementFlags2 FROM player_condition" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT ID, FailureDescription_lang FROM player_condition_locale WHERE locale = ?", CONNECTION_SYNCH); // PowerDisplay.db2 - PrepareStatement(HOTFIX_SEL_POWER_DISPLAY, "SELECT ID, GlobalStringBaseTag, PowerType, Red, Green, Blue FROM power_display ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_POWER_DISPLAY, "SELECT ID, GlobalStringBaseTag, ActualType, Red, Green, Blue FROM power_display ORDER BY ID DESC", CONNECTION_SYNCH); // PowerType.db2 - PrepareStatement(HOTFIX_SEL_POWER_TYPE, "SELECT ID, PowerTypeToken, PowerCostToken, RegenerationPeace, RegenerationCombat, MaxPower, " - "RegenerationDelay, Flags, PowerTypeEnum, RegenerationMin, RegenerationCenter, RegenerationMax, UIModifier FROM power_type ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_POWER_TYPE, "SELECT ID, NameGlobalStringTag, CostGlobalStringTag, RegenPeace, RegenCombat, MaxBasePower, " + "RegenInterruptTimeMS, Flags, PowerTypeEnum, MinPower, CenterPower, DefaultPower, DisplayModifier FROM power_type ORDER BY ID DESC", CONNECTION_SYNCH); // PrestigeLevelInfo.db2 - PrepareStatement(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, PrestigeText, IconID, PrestigeLevel, Flags FROM prestige_level_info ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, PrestigeText_lang FROM prestige_level_info_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, Name, BadgeTextureFileDataID, PrestigeLevel, Flags FROM prestige_level_info" + " ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, Name_lang FROM prestige_level_info_locale WHERE locale = ?", CONNECTION_SYNCH); // PvpDifficulty.db2 - PrepareStatement(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT ID, BracketID, MinLevel, MaxLevel, MapID FROM pvp_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT ID, RangeIndex, MinLevel, MaxLevel, MapID FROM pvp_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); // PvpItem.db2 - PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelBonus FROM pvp_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelDelta FROM pvp_item ORDER BY ID DESC", CONNECTION_SYNCH); // PvpReward.db2 - PrepareStatement(HOTFIX_SEL_PVP_REWARD, "SELECT ID, HonorLevel, Prestige, RewardPackID FROM pvp_reward ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_REWARD, "SELECT ID, HonorLevel, PrestigeLevel, RewardPackID FROM pvp_reward ORDER BY ID DESC", CONNECTION_SYNCH); // PvpTalent.db2 - PrepareStatement(HOTFIX_SEL_PVP_TALENT, "SELECT ID, Description, SpellID, OverridesSpellID, ExtraSpellID, TierID, ColumnIndex, Flags, ClassID, " - "SpecID, Role FROM pvp_talent ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_TALENT, "SELECT ID, Description, SpellID, OverridesSpellID, ActionBarSpellID, TierID, ColumnIndex, Flags, " + "ClassID, SpecID, Role FROM pvp_talent ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PVP_TALENT, "SELECT ID, Description_lang FROM pvp_talent_locale WHERE locale = ?", CONNECTION_SYNCH); // PvpTalentUnlock.db2 PrepareStatement(HOTFIX_SEL_PVP_TALENT_UNLOCK, "SELECT ID, TierID, ColumnIndex, HonorLevel FROM pvp_talent_unlock ORDER BY ID DESC", CONNECTION_SYNCH); // QuestFactionReward.db2 - PrepareStatement(HOTFIX_SEL_QUEST_FACTION_REWARD, "SELECT ID, QuestRewFactionValue1, QuestRewFactionValue2, QuestRewFactionValue3, " - "QuestRewFactionValue4, QuestRewFactionValue5, QuestRewFactionValue6, QuestRewFactionValue7, QuestRewFactionValue8, QuestRewFactionValue9, " - "QuestRewFactionValue10 FROM quest_faction_reward ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_FACTION_REWARD, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_faction_reward ORDER BY ID DESC", CONNECTION_SYNCH); // QuestMoneyReward.db2 - PrepareStatement(HOTFIX_SEL_QUEST_MONEY_REWARD, "SELECT ID, Money1, Money2, Money3, Money4, Money5, Money6, Money7, Money8, Money9, Money10" - " FROM quest_money_reward ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_MONEY_REWARD, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_money_reward ORDER BY ID DESC", CONNECTION_SYNCH); // QuestPackageItem.db2 - PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, ItemID, QuestPackageID, FilterType, ItemCount FROM quest_package_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, ItemID, PackageID, DisplayType, ItemQuantity FROM quest_package_item ORDER BY ID DESC", CONNECTION_SYNCH); // QuestSort.db2 - PrepareStatement(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName, SortOrder FROM quest_sort ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName, UiOrderIndex FROM quest_sort ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName_lang FROM quest_sort_locale WHERE locale = ?", CONNECTION_SYNCH); // QuestV2.db2 PrepareStatement(HOTFIX_SEL_QUEST_V2, "SELECT ID, UniqueBitFlag FROM quest_v2 ORDER BY ID DESC", CONNECTION_SYNCH); // QuestXp.db2 - PrepareStatement(HOTFIX_SEL_QUEST_XP, "SELECT ID, Exp1, Exp2, Exp3, Exp4, Exp5, Exp6, Exp7, Exp8, Exp9, Exp10 FROM quest_xp ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_XP, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, Difficulty7, " + "Difficulty8, Difficulty9, Difficulty10 FROM quest_xp ORDER BY ID DESC", CONNECTION_SYNCH); // RandPropPoints.db2 - PrepareStatement(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT ID, EpicPropertiesPoints1, EpicPropertiesPoints2, EpicPropertiesPoints3, " - "EpicPropertiesPoints4, EpicPropertiesPoints5, RarePropertiesPoints1, RarePropertiesPoints2, RarePropertiesPoints3, RarePropertiesPoints4, " - "RarePropertiesPoints5, UncommonPropertiesPoints1, UncommonPropertiesPoints2, UncommonPropertiesPoints3, UncommonPropertiesPoints4, " - "UncommonPropertiesPoints5 FROM rand_prop_points ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT ID, Epic1, Epic2, Epic3, Epic4, Epic5, Superior1, Superior2, Superior3, Superior4, " + "Superior5, Good1, Good2, Good3, Good4, Good5 FROM rand_prop_points ORDER BY ID DESC", CONNECTION_SYNCH); // RewardPack.db2 - PrepareStatement(HOTFIX_SEL_REWARD_PACK, "SELECT ID, Money, ArtifactXPMultiplier, ArtifactXPDifficulty, ArtifactCategoryID, TitleID, Unused" - " FROM reward_pack ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_REWARD_PACK, "SELECT ID, Money, ArtifactXPMultiplier, ArtifactXPDifficulty, ArtifactXPCategoryID, CharTitleID, " + "TreasurePickerID FROM reward_pack ORDER BY ID DESC", CONNECTION_SYNCH); // RewardPackXItem.db2 - PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, Amount, RewardPackID FROM reward_pack_x_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, ItemQuantity, RewardPackID FROM reward_pack_x_item ORDER BY ID DESC", CONNECTION_SYNCH); // RulesetItemUpgrade.db2 PrepareStatement(HOTFIX_SEL_RULESET_ITEM_UPGRADE, "SELECT ID, ItemID, ItemUpgradeID FROM ruleset_item_upgrade ORDER BY ID DESC", CONNECTION_SYNCH); @@ -756,20 +756,20 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_SANDBOX_SCALING, "SELECT ID, MinLevel, MaxLevel, Flags FROM sandbox_scaling ORDER BY ID DESC", CONNECTION_SYNCH); // ScalingStatDistribution.db2 - PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, ItemLevelCurveID, MinLevel, MaxLevel FROM scaling_stat_distribution" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, PlayerLevelToItemLevelCurveID, MinLevel, MaxLevel" + " FROM scaling_stat_distribution ORDER BY ID DESC", CONNECTION_SYNCH); // Scenario.db2 - PrepareStatement(HOTFIX_SEL_SCENARIO, "SELECT ID, Name, Data, Flags, Type FROM scenario ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Flags, Type FROM scenario ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO, "SELECT ID, Name_lang FROM scenario_locale WHERE locale = ?", CONNECTION_SYNCH); // ScenarioStep.db2 - PrepareStatement(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description, Name, ScenarioID, PreviousStepID, QuestRewardID, Step, Flags, CriteriaTreeID, " - "BonusRequiredStepID FROM scenario_step ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description_lang, Name_lang FROM scenario_step_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description, Title, ScenarioID, Supersedes, RewardQuestID, OrderIndex, Flags, " + "Criteriatreeid, RelatedStep FROM scenario_step ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description_lang, Title_lang FROM scenario_step_locale WHERE locale = ?", CONNECTION_SYNCH); // SceneScript.db2 - PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT, "SELECT ID, PrevScriptId, NextScriptId FROM scene_script ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT, "SELECT ID, FirstSceneScriptID, NextSceneScriptID FROM scene_script ORDER BY ID DESC", CONNECTION_SYNCH); // SceneScriptGlobalText.db2 PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT ID, Name, Script FROM scene_script_global_text ORDER BY ID DESC", CONNECTION_SYNCH); @@ -781,13 +781,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text ORDER BY ID DESC", CONNECTION_SYNCH); // SkillLine.db2 - PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName, Description, AlternateVerb, Flags, CategoryID, CanLink, IconFileDataID, " + PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName, Description, AlternateVerb, Flags, CategoryID, CanLink, SpellIconFileID, " "ParentSkillLineID FROM skill_line ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName_lang, Description_lang, AlternateVerb_lang FROM skill_line_locale" " WHERE locale = ?", CONNECTION_SYNCH); // SkillLineAbility.db2 - PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT RaceMask, ID, SpellID, SupercedesSpell, SkillLine, TrivialSkillLineRankHigh, " + PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT RaceMask, ID, Spell, SupercedesSpell, SkillLine, TrivialSkillLineRankHigh, " "TrivialSkillLineRankLow, UniqueBit, TradeSkillCategoryID, NumSkillUps, ClassMask, MinSkillLineRank, AcquireMethod, Flags" " FROM skill_line_ability ORDER BY ID DESC", CONNECTION_SYNCH); @@ -797,11 +797,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() // SoundKit.db2 PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT ID, VolumeFloat, MinDistance, DistanceCutoff, Flags, SoundEntriesAdvancedID, SoundType, " - "DialogType, EAXDef, VolumeVariationPlus, VolumeVariationMinus, PitchVariationPlus, PitchVariationMinus, PitchAdjust, BusOverwriteID, Unk700" - " FROM sound_kit ORDER BY ID DESC", CONNECTION_SYNCH); + "DialogType, EAXDef, VolumeVariationPlus, VolumeVariationMinus, PitchVariationPlus, PitchVariationMinus, PitchAdjust, BusOverwriteID, " + "MaxInstances FROM sound_kit ORDER BY ID DESC", CONNECTION_SYNCH); // SpecializationSpells.db2 - PrepareStatement(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT Description, SpellID, OverridesSpellID, SpecID, OrderIndex, ID" + PrepareStatement(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT Description, SpellID, OverridesSpellID, SpecID, DisplayOrder, ID" " FROM specialization_spells ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT ID, Description_lang FROM specialization_spells_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -820,7 +820,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() " FROM spell_aura_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); // SpellCastTimes.db2 - PrepareStatement(HOTFIX_SEL_SPELL_CAST_TIMES, "SELECT ID, CastTime, MinCastTime, CastTimePerLevel FROM spell_cast_times ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_CAST_TIMES, "SELECT ID, Base, Minimum, PerLevel FROM spell_cast_times ORDER BY ID DESC", CONNECTION_SYNCH); // SpellCastingRequirements.db2 PrepareStatement(HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS, "SELECT ID, SpellID, MinFactionID, RequiredAreasID, RequiresSpellFocus, " @@ -831,8 +831,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() "Mechanic, PreventionType, SpellID FROM spell_categories ORDER BY ID DESC", CONNECTION_SYNCH); // SpellCategory.db2 - PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, ChargeRecoveryTime, Flags, UsesPerWeek, MaxCharges, ChargeCategoryType" - " FROM spell_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, ChargeRecoveryTime, Flags, UsesPerWeek, MaxCharges, TypeMask FROM spell_category" + " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name_lang FROM spell_category_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellClassOptions.db2 @@ -850,13 +850,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, Effect, EffectBasePoints, EffectIndex, EffectAura, DifficultyID, EffectAmplitude, " "EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectDieSides, EffectItemType, EffectMechanic, " "EffectPointsPerResource, EffectRealPointsPerLevel, EffectTriggerSpell, EffectPosFacing, EffectAttributes, BonusCoefficientFromAP, " - "PvPMultiplier, Coefficient, Variance, ResourceCoefficient, GroupSizeCoefficient, EffectSpellClassMask1, EffectSpellClassMask2, " - "EffectSpellClassMask3, EffectSpellClassMask4, EffectMiscValue, EffectMiscValueB, EffectRadiusIndex, EffectRadiusMaxIndex, ImplicitTarget1, " + "PvpMultiplier, Coefficient, Variance, ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectSpellClassMask1, EffectSpellClassMask2, " + "EffectSpellClassMask3, EffectSpellClassMask4, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, EffectRadiusIndex2, ImplicitTarget1, " "ImplicitTarget2, SpellID FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH); // SpellEquippedItems.db2 - PrepareStatement(HOTFIX_SEL_SPELL_EQUIPPED_ITEMS, "SELECT ID, SpellID, EquippedItemInventoryTypeMask, EquippedItemSubClassMask, " - "EquippedItemClass FROM spell_equipped_items ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_EQUIPPED_ITEMS, "SELECT ID, SpellID, EquippedItemInvTypes, EquippedItemSubclass, EquippedItemClass" + " FROM spell_equipped_items ORDER BY ID DESC", CONNECTION_SYNCH); // SpellFocusObject.db2 PrepareStatement(HOTFIX_SEL_SPELL_FOCUS_OBJECT, "SELECT ID, Name FROM spell_focus_object ORDER BY ID DESC", CONNECTION_SYNCH); @@ -867,38 +867,36 @@ void HotfixDatabaseConnection::DoPrepareStatements() "ChannelInterruptFlags1, ChannelInterruptFlags2, SpellID FROM spell_interrupts ORDER BY ID DESC", CONNECTION_SYNCH); // SpellItemEnchantment.db2 - PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name, EffectSpellID1, EffectSpellID2, EffectSpellID3, EffectScalingPoints1, " - "EffectScalingPoints2, EffectScalingPoints3, TransmogCost, TextureFileDataID, EffectPointsMin1, EffectPointsMin2, EffectPointsMin3, " - "ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ConditionID, MinLevel, MaxLevel, " - "ScalingClass, ScalingClassRestricted, PlayerConditionID FROM spell_item_enchantment ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " + "EffectScalingPoints2, EffectScalingPoints3, TransmogCost, IconFileDataID, EffectPointsMin1, EffectPointsMin2, EffectPointsMin3, ItemVisual, " + "Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ConditionID, MinLevel, MaxLevel, ScalingClass, " + "ScalingClassRestricted, TransmogPlayerConditionID FROM spell_item_enchantment ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name_lang FROM spell_item_enchantment_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellItemEnchantmentCondition.db2 - PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, "SELECT ID, LTOperand1, LTOperand2, LTOperand3, LTOperand4, LTOperand5, " - "LTOperandType1, LTOperandType2, LTOperandType3, LTOperandType4, LTOperandType5, Operator1, Operator2, Operator3, Operator4, Operator5, " - "RTOperandType1, RTOperandType2, RTOperandType3, RTOperandType4, RTOperandType5, RTOperand1, RTOperand2, RTOperand3, RTOperand4, RTOperand5, " + PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, "SELECT ID, LtOperand1, LtOperand2, LtOperand3, LtOperand4, LtOperand5, " + "LtOperandType1, LtOperandType2, LtOperandType3, LtOperandType4, LtOperandType5, Operator1, Operator2, Operator3, Operator4, Operator5, " + "RtOperandType1, RtOperandType2, RtOperandType3, RtOperandType4, RtOperandType5, RtOperand1, RtOperand2, RtOperand3, RtOperand4, RtOperand5, " "Logic1, Logic2, Logic3, Logic4, Logic5 FROM spell_item_enchantment_condition ORDER BY ID DESC", CONNECTION_SYNCH); // SpellLearnSpell.db2 - PrepareStatement(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT ID, LearnSpellID, SpellID, OverridesSpellID FROM spell_learn_spell ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT ID, SpellID, LearnSpellID, OverridesSpellID FROM spell_learn_spell ORDER BY ID DESC", CONNECTION_SYNCH); // SpellLevels.db2 - PrepareStatement(HOTFIX_SEL_SPELL_LEVELS, "SELECT ID, BaseLevel, MaxLevel, SpellLevel, DifficultyID, MaxUsableLevel, SpellID FROM spell_levels" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_LEVELS, "SELECT ID, BaseLevel, MaxLevel, SpellLevel, DifficultyID, MaxPassiveAuraLevel, SpellID" + " FROM spell_levels ORDER BY ID DESC", CONNECTION_SYNCH); // SpellMisc.db2 - PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, CastingTimeIndex, DurationIndex, RangeIndex, SchoolMask, IconFileDataID, Speed, " - "ActiveIconFileDataID, MultistrikeSpeedMod, DifficultyID, Attributes, AttributesEx, AttributesExB, AttributesExC, AttributesExD, " - "AttributesExE, AttributesExF, AttributesExG, AttributesExH, AttributesExI, AttributesExJ, AttributesExK, AttributesExL, AttributesExM, " - "SpellID FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, CastingTimeIndex, DurationIndex, RangeIndex, SchoolMask, SpellIconFileDataID, Speed, " + "ActiveIconFileDataID, LaunchDelay, DifficultyID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, " + "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, SpellID FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH); // SpellPower.db2 - PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT ManaCost, ManaCostPercentage, ManaCostPercentagePerSecond, RequiredAura, HealthCostPercentage, " - "PowerIndex, PowerType, ID, ManaCostPerLevel, ManaCostPerSecond, ManaCostAdditional, PowerDisplayID, UnitPowerBarID, SpellID FROM spell_power" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT ManaCost, PowerCostPct, PowerPctPerSecond, RequiredAuraSpellID, PowerCostMaxPct, OrderIndex, " + "PowerType, ID, ManaCostPerLevel, ManaPerSecond, OptionalCost, PowerDisplayID, AltPowerBarID, SpellID FROM spell_power ORDER BY ID DESC", CONNECTION_SYNCH); // SpellPowerDifficulty.db2 - PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT DifficultyID, PowerIndex, ID FROM spell_power_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT DifficultyID, OrderIndex, ID FROM spell_power_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); // SpellProcsPerMinute.db2 PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute ORDER BY ID DESC", CONNECTION_SYNCH); @@ -911,8 +909,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_SPELL_RADIUS, "SELECT ID, Radius, RadiusPerLevel, RadiusMin, RadiusMax FROM spell_radius ORDER BY ID DESC", CONNECTION_SYNCH); // SpellRange.db2 - PrepareStatement(HOTFIX_SEL_SPELL_RANGE, "SELECT ID, DisplayName, DisplayNameShort, MinRangeHostile, MinRangeFriend, MaxRangeHostile, " - "MaxRangeFriend, Flags FROM spell_range ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_RANGE, "SELECT ID, DisplayName, DisplayNameShort, RangeMin1, RangeMin2, RangeMax1, RangeMax2, Flags" + " FROM spell_range ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_RANGE, "SELECT ID, DisplayName_lang, DisplayNameShort_lang FROM spell_range_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellReagents.db2 @@ -921,35 +919,35 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // SpellScaling.db2 - PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, ScalingClass, MinScalingLevel, MaxScalingLevel" - " FROM spell_scaling ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, Class, MinScalingLevel, MaxScalingLevel FROM spell_scaling" + " ORDER BY ID DESC", CONNECTION_SYNCH); // SpellShapeshift.db2 PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, ShapeshiftMask2, " "StanceBarOrder FROM spell_shapeshift ORDER BY ID DESC", CONNECTION_SYNCH); // SpellShapeshiftForm.db2 - PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, WeaponDamageVariance, Flags, CombatRoundTime, MountTypeID, CreatureType, " - "BonusActionBar, AttackIconFileDataID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, " + PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, DamageVariance, Flags, CombatRoundTime, MountTypeID, CreatureType, " + "BonusActionBar, AttackIconFileID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, " "PresetSpellID2, PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellTargetRestrictions.db2 - PrepareStatement(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT ID, ConeAngle, Width, Targets, TargetCreatureType, DifficultyID, " - "MaxAffectedTargets, MaxTargetLevel, SpellID FROM spell_target_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT ID, ConeDegrees, Width, Targets, TargetCreatureType, DifficultyID, MaxTargets, " + "MaxTargetLevel, SpellID FROM spell_target_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); // SpellTotems.db2 PrepareStatement(HOTFIX_SEL_SPELL_TOTEMS, "SELECT ID, SpellID, Totem1, Totem2, RequiredTotemCategoryID1, RequiredTotemCategoryID2" " FROM spell_totems ORDER BY ID DESC", CONNECTION_SYNCH); // SpellXSpellVisual.db2 - PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT SpellVisualID, ID, Chance, CasterPlayerConditionID, CasterUnitConditionID, " - "PlayerConditionID, UnitConditionID, IconFileDataID, ActiveIconFileDataID, Flags, DifficultyID, Priority, SpellID FROM spell_x_spell_visual" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT SpellVisualID, ID, Probability, CasterPlayerConditionID, CasterUnitConditionID, " + "ViewerPlayerConditionID, ViewerUnitConditionID, SpellIconFileID, ActiveIconFileID, Flags, DifficultyID, Priority, SpellID" + " FROM spell_x_spell_visual ORDER BY ID DESC", CONNECTION_SYNCH); // SummonProperties.db2 - PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Flags, Category, Faction, Type, Slot FROM summon_properties ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Flags, Control, Faction, Title, Slot FROM summon_properties ORDER BY ID DESC", CONNECTION_SYNCH); // TactKey.db2 PrepareStatement(HOTFIX_SEL_TACT_KEY, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " @@ -961,37 +959,37 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_TALENT, "SELECT ID, Description_lang FROM talent_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiNodes.db2 - PrepareStatement(HOTFIX_SEL_TAXI_NODES, "SELECT ID, Name, PosX, PosY, PosZ, MountCreatureID1, MountCreatureID2, MapOffsetX, MapOffsetY, Unk730, " - "FlightMapOffsetX, FlightMapOffsetY, MapID, ConditionID, LearnableIndex, Flags, UiTextureKitPrefixID, SpecialAtlasIconPlayerConditionID" + PrepareStatement(HOTFIX_SEL_TAXI_NODES, "SELECT ID, Name, PosX, PosY, PosZ, MountCreatureID1, MountCreatureID2, MapOffsetX, MapOffsetY, Facing, " + "FlightMapOffsetX, FlightMapOffsetY, ContinentID, ConditionID, CharacterBitNumber, Flags, UiTextureKitID, SpecialIconConditionID" " FROM taxi_nodes ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TAXI_NODES, "SELECT ID, Name_lang FROM taxi_nodes_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiPath.db2 - PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT `From`, `To`, ID, Cost FROM taxi_path ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT FromTaxiNode, ToTaxiNode, ID, Cost FROM taxi_path ORDER BY ID DESC", CONNECTION_SYNCH); // TaxiPathNode.db2 - PrepareStatement(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT LocX, LocY, LocZ, PathID, MapID, NodeIndex, ID, Flags, Delay, ArrivalEventID, " + PrepareStatement(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT LocX, LocY, LocZ, PathID, ContinentID, NodeIndex, ID, Flags, Delay, ArrivalEventID, " "DepartureEventID FROM taxi_path_node ORDER BY ID DESC", CONNECTION_SYNCH); // TotemCategory.db2 - PrepareStatement(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name, CategoryMask, CategoryType FROM totem_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name, TotemCategoryMask, TotemCategoryType FROM totem_category ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name_lang FROM totem_category_locale WHERE locale = ?", CONNECTION_SYNCH); // Toy.db2 - PrepareStatement(HOTFIX_SEL_TOY, "SELECT Description, ItemID, Flags, CategoryFilter, ID FROM toy ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_TOY, "SELECT ID, Description_lang FROM toy_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TOY, "SELECT SourceText, ItemID, Flags, SourceTypeEnum, ID FROM toy ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_TOY, "SELECT ID, SourceText_lang FROM toy_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogHoliday.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_HOLIDAY, "SELECT ID, HolidayID FROM transmog_holiday ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_HOLIDAY, "SELECT ID, RequiredTransmogHoliday FROM transmog_holiday ORDER BY ID DESC", CONNECTION_SYNCH); // TransmogSet.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_SET, "SELECT Name, BaseSetID, UIOrder, ExpansionID, ID, Flags, QuestID, ClassMask, ItemNameDescriptionID, " - "TransmogSetGroupID FROM transmog_set ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_SET, "SELECT Name, ParentTransmogSetID, UiOrder, ExpansionID, ID, Flags, TrackingQuestID, ClassMask, " + "ItemNameDescriptionID, TransmogSetGroupID FROM transmog_set ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET, "SELECT ID, Name_lang FROM transmog_set_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogSetGroup.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT Label, ID FROM transmog_set_group ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT ID, Label_lang FROM transmog_set_group_locale WHERE locale = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT Name, ID FROM transmog_set_group ORDER BY ID DESC", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT ID, Name_lang FROM transmog_set_group_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogSetItem.db2 PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_ITEM, "SELECT ID, TransmogSetID, ItemModifiedAppearanceID, Flags FROM transmog_set_item ORDER BY ID DESC", CONNECTION_SYNCH); @@ -1001,7 +999,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // TransportRotation.db2 - PrepareStatement(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT ID, TimeIndex, X, Y, Z, W, TransportID FROM transport_rotation ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT ID, TimeIndex, Rot1, Rot2, Rot3, Rot4, GameObjectsID FROM transport_rotation" + " ORDER BY ID DESC", CONNECTION_SYNCH); // UnitPowerBar.db2 PrepareStatement(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, Name, Cost, OutOfError, ToolTip, RegenerationPeace, RegenerationCombat, FileDataID1, " @@ -1013,24 +1012,24 @@ void HotfixDatabaseConnection::DoPrepareStatements() // Vehicle.db2 PrepareStatement(HOTFIX_SEL_VEHICLE, "SELECT ID, Flags, TurnSpeed, PitchSpeed, PitchMin, PitchMax, MouseLookOffsetPitch, CameraFadeDistScalarMin, " "CameraFadeDistScalarMax, CameraPitchOffset, FacingLimitRight, FacingLimitLeft, CameraYawOffset, SeatID1, SeatID2, SeatID3, SeatID4, SeatID5, " - "SeatID6, SeatID7, SeatID8, VehicleUIIndicatorID, PowerDisplayID1, PowerDisplayID2, PowerDisplayID3, FlagsB, UILocomotionType, " + "SeatID6, SeatID7, SeatID8, VehicleUIIndicatorID, PowerDisplayID1, PowerDisplayID2, PowerDisplayID3, FlagsB, UiLocomotionType, " "MissileTargetingID FROM vehicle ORDER BY ID DESC", CONNECTION_SYNCH); // VehicleSeat.db2 - PrepareStatement(HOTFIX_SEL_VEHICLE_SEAT, "SELECT ID, Flags1, Flags2, Flags3, AttachmentOffsetX, AttachmentOffsetY, AttachmentOffsetZ, " + PrepareStatement(HOTFIX_SEL_VEHICLE_SEAT, "SELECT ID, Flags, FlagsB, FlagsC, AttachmentOffsetX, AttachmentOffsetY, AttachmentOffsetZ, " "EnterPreDelay, EnterSpeed, EnterGravity, EnterMinDuration, EnterMaxDuration, EnterMinArcHeight, EnterMaxArcHeight, ExitPreDelay, ExitSpeed, " "ExitGravity, ExitMinDuration, ExitMaxDuration, ExitMinArcHeight, ExitMaxArcHeight, PassengerYaw, PassengerPitch, PassengerRoll, " "VehicleEnterAnimDelay, VehicleExitAnimDelay, CameraEnteringDelay, CameraEnteringDuration, CameraExitingDelay, CameraExitingDuration, " "CameraOffsetX, CameraOffsetY, CameraOffsetZ, CameraPosChaseRate, CameraFacingChaseRate, CameraEnteringZoom, CameraSeatZoomMin, " - "CameraSeatZoomMax, UISkinFileDataID, EnterAnimStart, EnterAnimLoop, RideAnimStart, RideAnimLoop, RideUpperAnimStart, RideUpperAnimLoop, " + "CameraSeatZoomMax, UiSkinFileDataID, EnterAnimStart, EnterAnimLoop, RideAnimStart, RideAnimLoop, RideUpperAnimStart, RideUpperAnimLoop, " "ExitAnimStart, ExitAnimLoop, ExitAnimEnd, VehicleEnterAnim, VehicleExitAnim, VehicleRideAnimLoop, EnterAnimKitID, RideAnimKitID, " "ExitAnimKitID, VehicleEnterAnimKitID, VehicleRideAnimKitID, VehicleExitAnimKitID, CameraModeID, AttachmentID, PassengerAttachmentID, " "VehicleEnterAnimBone, VehicleExitAnimBone, VehicleRideAnimLoopBone, VehicleAbilityDisplay, EnterUISoundID, ExitUISoundID FROM vehicle_seat" " ORDER BY ID DESC", CONNECTION_SYNCH); // WmoAreaTable.db2 - PrepareStatement(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT AreaName, WMOGroupID, AmbienceID, ZoneMusic, IntroSound, AreaTableID, UWIntroSound, " - "UWAmbience, NameSet, SoundProviderPref, SoundProviderPrefUnderwater, Flags, ID, UWZoneMusic, WMOID FROM wmo_area_table ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT AreaName, WmoGroupID, AmbienceID, ZoneMusic, IntroSound, AreaTableID, UwIntroSound, " + "UwAmbience, NameSetID, SoundProviderPref, SoundProviderPrefUnderwater, Flags, ID, UwZoneMusic, WmoID FROM wmo_area_table ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT ID, AreaName_lang FROM wmo_area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // WorldEffect.db2 @@ -1039,12 +1038,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() // WorldMapArea.db2 PrepareStatement(HOTFIX_SEL_WORLD_MAP_AREA, "SELECT AreaName, LocLeft, LocRight, LocTop, LocBottom, Flags, MapID, AreaID, DisplayMapID, " - "DefaultDungeonFloor, ParentWorldMapID, LevelRangeMin, LevelRangeMax, BountySetID, BountyBoardLocation, ID, PlayerConditionID" + "DefaultDungeonFloor, ParentWorldMapID, LevelRangeMin, LevelRangeMax, BountySetID, BountyDisplayLocation, ID, VisibilityPlayerConditionID" " FROM world_map_area ORDER BY ID DESC", CONNECTION_SYNCH); // WorldMapOverlay.db2 - PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT TextureName, ID, TextureWidth, TextureHeight, MapAreaID, AreaID1, AreaID2, AreaID3, " - "AreaID4, OffsetX, OffsetY, HitRectTop, HitRectLeft, HitRectBottom, HitRectRight, PlayerConditionID, Flags FROM world_map_overlay" + PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT TextureName, ID, TextureWidth, TextureHeight, MapAreaID, OffsetX, OffsetY, HitRectTop, " + "HitRectLeft, HitRectBottom, HitRectRight, PlayerConditionID, Flags, AreaID1, AreaID2, AreaID3, AreaID4 FROM world_map_overlay" " ORDER BY ID DESC", CONNECTION_SYNCH); // WorldMapTransforms.db2 diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index f3711b2ded6..6ffb860931a 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -161,7 +161,6 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_EMOTES, HOTFIX_SEL_EMOTES_TEXT, - HOTFIX_SEL_EMOTES_TEXT_LOCALE, HOTFIX_SEL_EMOTES_TEXT_SOUND, @@ -170,11 +169,11 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_FACTION_TEMPLATE, + HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, + HOTFIX_SEL_GAMEOBJECTS, HOTFIX_SEL_GAMEOBJECTS_LOCALE, - HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, - HOTFIX_SEL_GARR_ABILITY, HOTFIX_SEL_GARR_ABILITY_LOCALE, @@ -197,7 +196,6 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_GARR_PLOT_BUILDING, HOTFIX_SEL_GARR_PLOT_INSTANCE, - HOTFIX_SEL_GARR_PLOT_INSTANCE_LOCALE, HOTFIX_SEL_GARR_SITE_LEVEL, @@ -320,7 +318,6 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_LIGHT, HOTFIX_SEL_LIQUID_TYPE, - HOTFIX_SEL_LIQUID_TYPE_LOCALE, HOTFIX_SEL_LOCK, @@ -347,7 +344,6 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_MOVIE, HOTFIX_SEL_NAME_GEN, - HOTFIX_SEL_NAME_GEN_LOCALE, HOTFIX_SEL_NAMES_PROFANITY, diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index facf598d5fc..837f06125e2 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -83,7 +83,7 @@ bool AchievementMgr::CanUpdateCriteriaTree(Criteria const* criteria, CriteriaTre return false; } - if (achievement->MapID != -1 && referencePlayer->GetMapId() != uint32(achievement->MapID)) + if (achievement->InstanceID != -1 && referencePlayer->GetMapId() != uint32(achievement->InstanceID)) { TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: %u Type %s Achievement %u) Wrong map", criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), achievement->ID); @@ -171,7 +171,7 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry) // Oddly, the target count is NOT contained in the achievement, but in each individual criteria if (entry->Flags & ACHIEVEMENT_FLAG_SUMM) { - uint64 progress = 0; + int64 progress = 0; CriteriaMgr::WalkCriteriaTree(tree, [this, &progress](CriteriaTree const* criteriaTree) { if (criteriaTree->Criteria) @@ -352,7 +352,7 @@ void PlayerAchievementMgr::ResetCriteria(CriteriaTypes type, uint64 miscValue1, CriteriaList const& achievementCriteriaList = GetCriteriaByType(type); for (Criteria const* achievementCriteria : achievementCriteriaList) { - if (achievementCriteria->Entry->FailEvent != miscValue1 || (achievementCriteria->Entry->FailAsset && achievementCriteria->Entry->FailAsset != miscValue2)) + if (achievementCriteria->Entry->FailEvent != miscValue1 || (achievementCriteria->Entry->FailAsset && achievementCriteria->Entry->FailAsset != int64(miscValue2))) continue; std::vector<CriteriaTree const*> const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(achievementCriteria->ID); @@ -1059,7 +1059,7 @@ void AchievementGlobalMgr::LoadAchievementReferenceList() // Correct map requirement (currently has Ulduar); 6.0.3 note - it STILL has ulduar requirement hotfixes.ApplyHotfix(4539, [](AchievementEntry* achievement) { - achievement->MapID = 631; + achievement->InstanceID = 631; }); TC_LOG_INFO("server.loading", ">> Loaded %u achievement references in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 1fd9545e409..81d91eb5703 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -638,7 +638,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellIter->first); for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter) { - if (skillIter->second->SkillLine == criteria->Entry->Asset.SkillID) + if (skillIter->second->SkillLine == int32(criteria->Entry->Asset.SkillID)) spellCount++; } } @@ -831,7 +831,7 @@ void CriteriaHandler::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(type); for (Criteria const* criteria : criteriaList) { - if (criteria->Entry->StartAsset != entry) + if (criteria->Entry->StartAsset != int32(entry)) continue; CriteriaTreeList const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(criteria->ID); @@ -862,7 +862,7 @@ void CriteriaHandler::RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry) CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(type); for (Criteria const* criteria : criteriaList) { - if (criteria->Entry->StartAsset != entry) + if (criteria->Entry->StartAsset != int32(entry)) continue; CriteriaTreeList const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(criteria->ID); @@ -1570,7 +1570,7 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr if (!reqType) return true; - uint32 reqValue = tree->Entry->Asset[0]; + uint32 reqValue = tree->Entry->Asset; switch (CriteriaAdditionalCondition(reqType)) { @@ -2249,8 +2249,8 @@ void CriteriaMgr::LoadCriteriaList() std::unordered_map<uint32 /*criteriaTreeID*/, ScenarioStepEntry const*> scenarioCriteriaTreeIds; for (ScenarioStepEntry const* scenarioStep : sScenarioStepStore) - if (scenarioStep->CriteriaTreeID) - scenarioCriteriaTreeIds[scenarioStep->CriteriaTreeID] = scenarioStep; + if (scenarioStep->Criteriatreeid) + scenarioCriteriaTreeIds[scenarioStep->Criteriatreeid] = scenarioStep; std::unordered_map<uint32 /*criteriaTreeID*/, QuestObjective const*> questObjectiveCriteriaTreeIds; for (std::pair<uint32 /*questID*/, Quest const*> itr : sObjectMgr->GetQuestTemplates()) diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index e7ae717bbe2..cc0f56a3ce4 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -65,9 +65,9 @@ AuctionHouseObject* AuctionHouseMgr::GetAuctionsMap(uint32 factionTemplateId) FactionTemplateEntry const* uEntry = sFactionTemplateStore.LookupEntry(factionTemplateId); if (!uEntry) return &mNeutralAuctions; - else if (uEntry->Mask & FACTION_MASK_ALLIANCE) + else if (uEntry->FactionGroup & FACTION_MASK_ALLIANCE) return &mAllianceAuctions; - else if (uEntry->Mask & FACTION_MASK_HORDE) + else if (uEntry->FactionGroup & FACTION_MASK_HORDE) return &mHordeAuctions; else return &mNeutralAuctions; @@ -544,9 +544,9 @@ AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntry(uint32 factionTem FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId); if (!u_entry) houseid = 7; // goblin auction house - else if (u_entry->Mask & FACTION_MASK_ALLIANCE) + else if (u_entry->FactionGroup & FACTION_MASK_ALLIANCE) houseid = 1; // human auction house - else if (u_entry->Mask & FACTION_MASK_HORDE) + else if (u_entry->FactionGroup & FACTION_MASK_HORDE) houseid = 6; // orc auction house else houseid = 7; // goblin auction house diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp index 0c10e339e87..2c96b93e7fe 100644 --- a/src/server/game/BattlePets/BattlePetMgr.cpp +++ b/src/server/game/BattlePets/BattlePetMgr.cpp @@ -52,13 +52,13 @@ void BattlePetMgr::BattlePet::CalculateStats() } // modify stats by quality - for (auto itr : sBattlePetBreedQualityStore) + for (BattlePetBreedQualityEntry const* battlePetBreedQuality : sBattlePetBreedQualityStore) { - if (itr->Quality == PacketInfo.Quality) + if (battlePetBreedQuality->QualityEnum == PacketInfo.Quality) { - health *= itr->Modifier; - power *= itr->Modifier; - speed *= itr->Modifier; + health *= battlePetBreedQuality->StateMultiplier; + power *= battlePetBreedQuality->StateMultiplier; + speed *= battlePetBreedQuality->StateMultiplier; break; } // TOOD: add check if pet has existing quality @@ -86,11 +86,11 @@ void BattlePetMgr::Initialize() if (QueryResult result = LoginDatabase.Query("SELECT MAX(guid) FROM battle_pets")) sObjectMgr->GetGenerator<HighGuid::BattlePet>().Set((*result)[0].GetUInt64() + 1); - for (auto itr : sBattlePetBreedStateStore) - _battlePetBreedStates[itr->BreedID][BattlePetState(itr->State)] = itr->Value; + for (BattlePetBreedStateEntry const* battlePetBreedState : sBattlePetBreedStateStore) + _battlePetBreedStates[battlePetBreedState->BattlePetBreedID][BattlePetState(battlePetBreedState->BattlePetStateID)] = battlePetBreedState->Value; - for (auto itr : sBattlePetSpeciesStateStore) - _battlePetSpeciesStates[itr->SpeciesID][BattlePetState(itr->State)] = itr->Value; + for (BattlePetSpeciesStateEntry const* battlePetSpeciesState : sBattlePetSpeciesStateStore) + _battlePetSpeciesStates[battlePetSpeciesState->BattlePetSpeciesID][BattlePetState(battlePetSpeciesState->BattlePetStateID)] = battlePetSpeciesState->Value; LoadAvailablePetBreeds(); LoadDefaultPetQualities(); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index b75f2709eb6..a2a97faa783 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2502,10 +2502,10 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio { if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) { - if (condition->ChrSpecializationIndex >= 0 && spec->OrderIndex != uint32(condition->ChrSpecializationIndex)) + if (condition->ChrSpecializationIndex >= 0 && spec->OrderIndex != condition->ChrSpecializationIndex) return false; - if (condition->ChrSpecializationRole >= 0 && spec->Role != uint32(condition->ChrSpecializationRole)) + if (condition->ChrSpecializationRole >= 0 && spec->Role != condition->ChrSpecializationRole) return false; } } @@ -2596,10 +2596,10 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio if (condition->MovementFlags[1] && !(player->GetExtraUnitMovementFlags() & condition->MovementFlags[1])) return false; - if (condition->MainHandItemSubclassMask) + if (condition->WeaponSubclassMask) { Item* mainHand = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); - if (!mainHand || !((1 << mainHand->GetTemplate()->GetSubClass()) & condition->MainHandItemSubclassMask)) + if (!mainHand || !((1 << mainHand->GetTemplate()->GetSubClass()) & condition->WeaponSubclassMask)) return false; } @@ -2740,8 +2740,8 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio { if (condition->AuraSpellID[i]) { - if (condition->AuraCount[i]) - results[i] = player->GetAuraCount(condition->AuraSpellID[i]) >= condition->AuraCount[i]; + if (condition->AuraStacks[i]) + results[i] = player->GetAuraCount(condition->AuraSpellID[i]) >= condition->AuraStacks[i]; else results[i] = player->HasAura(condition->AuraSpellID[i]); } diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 0c2f23ca4ae..16f3f1158e4 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -33,17 +33,17 @@ struct AchievementLoadInfo { false, FT_STRING, "Title" }, { false, FT_STRING, "Description" }, { false, FT_STRING, "Reward" }, - { false, FT_INT, "Flags" }, - { true, FT_SHORT, "MapID" }, - { false, FT_SHORT, "Supercedes" }, - { false, FT_SHORT, "Category" }, - { false, FT_SHORT, "UIOrder" }, - { false, FT_SHORT, "SharesCriteria" }, + { true, FT_INT, "Flags" }, + { true, FT_SHORT, "InstanceID" }, + { true, FT_SHORT, "Supercedes" }, + { true, FT_SHORT, "Category" }, + { true, FT_SHORT, "UiOrder" }, + { true, FT_SHORT, "SharesCriteria" }, { true, FT_BYTE, "Faction" }, - { false, FT_BYTE, "Points" }, - { false, FT_BYTE, "MinimumCriteria" }, + { true, FT_BYTE, "Points" }, + { true, FT_BYTE, "MinimumCriteria" }, { false, FT_INT, "ID" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "IconFileID" }, { false, FT_INT, "CriteriaTree" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT); @@ -91,10 +91,10 @@ struct AreaTableLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "ZoneName" }, { false, FT_STRING, "AreaName" }, - { false, FT_INT, "Flags1" }, - { false, FT_INT, "Flags2" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, { false, FT_FLOAT, "AmbientMultiplier" }, - { false, FT_SHORT, "MapID" }, + { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ParentAreaID" }, { true, FT_SHORT, "AreaBit" }, { false, FT_SHORT, "AmbienceID" }, @@ -104,18 +104,18 @@ struct AreaTableLoadInfo { false, FT_SHORT, "LiquidTypeID2" }, { false, FT_SHORT, "LiquidTypeID3" }, { false, FT_SHORT, "LiquidTypeID4" }, - { false, FT_SHORT, "UWZoneMusic" }, - { false, FT_SHORT, "UWAmbience" }, - { false, FT_SHORT, "PvPCombatWorldStateID" }, + { false, FT_SHORT, "UwZoneMusic" }, + { false, FT_SHORT, "UwAmbience" }, + { true, FT_SHORT, "PvpCombatWorldStateID" }, { false, FT_BYTE, "SoundProviderPref" }, { false, FT_BYTE, "SoundProviderPrefUnderwater" }, - { false, FT_BYTE, "ExplorationLevel" }, + { true, FT_BYTE, "ExplorationLevel" }, { false, FT_BYTE, "FactionGroupMask" }, { false, FT_BYTE, "MountFlags" }, { false, FT_BYTE, "WildBattlePetLevelMin" }, { false, FT_BYTE, "WildBattlePetLevelMax" }, { false, FT_BYTE, "WindSettingsID" }, - { false, FT_INT, "UWIntroSound" }, + { false, FT_INT, "UwIntroSound" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE); return &loadInfo; @@ -136,14 +136,14 @@ struct AreaTriggerLoadInfo { false, FT_FLOAT, "BoxWidth" }, { false, FT_FLOAT, "BoxHeight" }, { false, FT_FLOAT, "BoxYaw" }, - { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_SHORT, "PhaseGroupID" }, - { false, FT_SHORT, "ShapeID" }, - { false, FT_SHORT, "AreaTriggerActionSetID" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_BYTE, "ShapeType" }, - { false, FT_BYTE, "Flag" }, + { true, FT_SHORT, "ContinentID" }, + { true, FT_SHORT, "PhaseID" }, + { true, FT_SHORT, "PhaseGroupID" }, + { true, FT_SHORT, "ShapeID" }, + { true, FT_SHORT, "AreaTriggerActionSetID" }, + { true, FT_BYTE, "PhaseUseFlags" }, + { true, FT_BYTE, "ShapeType" }, + { true, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER); @@ -158,11 +158,11 @@ struct ArmorLocationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Modifier1" }, - { false, FT_FLOAT, "Modifier2" }, - { false, FT_FLOAT, "Modifier3" }, - { false, FT_FLOAT, "Modifier4" }, - { false, FT_FLOAT, "Modifier5" }, + { false, FT_FLOAT, "Clothmodifier" }, + { false, FT_FLOAT, "Leathermodifier" }, + { false, FT_FLOAT, "Chainmodifier" }, + { false, FT_FLOAT, "Platemodifier" }, + { false, FT_FLOAT, "Modifier" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArmorLocationMeta::Instance(), HOTFIX_SEL_ARMOR_LOCATION); return &loadInfo; @@ -177,11 +177,11 @@ struct ArtifactLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_INT, "BarConnectedColor" }, - { false, FT_INT, "BarDisconnectedColor" }, - { false, FT_INT, "TitleColor" }, - { false, FT_SHORT, "ClassUiTextureKitID" }, - { false, FT_SHORT, "SpecID" }, + { true, FT_INT, "UiBarOverlayColor" }, + { true, FT_INT, "UiBarBackgroundColor" }, + { true, FT_INT, "UiNameColor" }, + { false, FT_SHORT, "UiTextureKitID" }, + { false, FT_SHORT, "ChrSpecializationID" }, { false, FT_BYTE, "ArtifactCategoryID" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "UiModelSceneID" }, @@ -199,20 +199,20 @@ struct ArtifactAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_INT, "SwatchColor" }, - { false, FT_FLOAT, "ModelDesaturation" }, - { false, FT_FLOAT, "ModelAlpha" }, - { false, FT_INT, "ShapeshiftDisplayID" }, + { true, FT_INT, "UiSwatchColor" }, + { false, FT_FLOAT, "UiModelSaturation" }, + { false, FT_FLOAT, "UiModelOpacity" }, + { false, FT_INT, "OverrideShapeshiftDisplayID" }, { false, FT_SHORT, "ArtifactAppearanceSetID" }, - { false, FT_SHORT, "Unknown" }, + { false, FT_SHORT, "UiCameraID" }, { false, FT_BYTE, "DisplayIndex" }, - { false, FT_BYTE, "AppearanceModID" }, + { false, FT_BYTE, "ItemAppearanceModifierID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ModifiesShapeshiftFormDisplay" }, + { false, FT_BYTE, "OverrideShapeshiftFormID" }, { false, FT_INT, "ID" }, - { false, FT_INT, "PlayerConditionID" }, - { false, FT_INT, "ItemAppearanceID" }, - { false, FT_INT, "AltItemAppearanceID" }, + { false, FT_INT, "UnlockPlayerConditionID" }, + { false, FT_INT, "UiItemAppearanceID" }, + { false, FT_INT, "UiAltItemAppearanceID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE); return &loadInfo; @@ -226,11 +226,11 @@ struct ArtifactAppearanceSetLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_STRING, "Name2" }, + { false, FT_STRING, "Description" }, { false, FT_SHORT, "UiCameraID" }, { false, FT_SHORT, "AltHandUICameraID" }, { false, FT_BYTE, "DisplayIndex" }, - { false, FT_BYTE, "AttachmentPoint" }, + { true, FT_BYTE, "ForgeAttachmentOverride" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, { false, FT_BYTE, "ArtifactID" }, @@ -247,8 +247,8 @@ struct ArtifactCategoryLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ArtifactKnowledgeCurrencyID" }, - { false, FT_SHORT, "ArtifactKnowledgeMultiplierCurveID" }, + { true, FT_SHORT, "XpMultCurrencyID" }, + { true, FT_SHORT, "XpMultCurveID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactCategoryMeta::Instance(), HOTFIX_SEL_ARTIFACT_CATEGORY); return &loadInfo; @@ -265,10 +265,10 @@ struct ArtifactPowerLoadInfo { false, FT_FLOAT, "PosY" }, { false, FT_BYTE, "ArtifactID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "MaxRank" }, - { false, FT_BYTE, "ArtifactTier" }, + { false, FT_BYTE, "MaxPurchasableRank" }, + { false, FT_BYTE, "Tier" }, { false, FT_INT, "ID" }, - { true, FT_INT, "RelicType" }, + { true, FT_INT, "Label" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER); return &loadInfo; @@ -282,8 +282,8 @@ struct ArtifactPowerLinkLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "FromArtifactPowerID" }, - { false, FT_SHORT, "ToArtifactPowerID" }, + { false, FT_SHORT, "PowerA" }, + { false, FT_SHORT, "PowerB" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerLinkMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_LINK); return &loadInfo; @@ -311,10 +311,10 @@ struct ArtifactPowerRankLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_FLOAT, "Value" }, - { false, FT_SHORT, "Unknown" }, - { false, FT_BYTE, "Rank" }, + { true, FT_INT, "SpellID" }, + { false, FT_FLOAT, "AuraPointsOverride" }, + { false, FT_SHORT, "ItemBonusListID" }, + { false, FT_BYTE, "RankIndex" }, { false, FT_SHORT, "ArtifactPowerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK); @@ -329,16 +329,16 @@ struct ArtifactQuestXpLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Exp1" }, - { false, FT_INT, "Exp2" }, - { false, FT_INT, "Exp3" }, - { false, FT_INT, "Exp4" }, - { false, FT_INT, "Exp5" }, - { false, FT_INT, "Exp6" }, - { false, FT_INT, "Exp7" }, - { false, FT_INT, "Exp8" }, - { false, FT_INT, "Exp9" }, - { false, FT_INT, "Exp10" }, + { false, FT_INT, "Difficulty1" }, + { false, FT_INT, "Difficulty2" }, + { false, FT_INT, "Difficulty3" }, + { false, FT_INT, "Difficulty4" }, + { false, FT_INT, "Difficulty5" }, + { false, FT_INT, "Difficulty6" }, + { false, FT_INT, "Difficulty7" }, + { false, FT_INT, "Difficulty8" }, + { false, FT_INT, "Difficulty9" }, + { false, FT_INT, "Difficulty10" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactQuestXPMeta::Instance(), HOTFIX_SEL_ARTIFACT_QUEST_XP); return &loadInfo; @@ -419,8 +419,8 @@ struct BattlePetBreedQualityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Modifier" }, - { false, FT_BYTE, "Quality" }, + { false, FT_FLOAT, "StateMultiplier" }, + { false, FT_BYTE, "QualityEnum" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetBreedQualityMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_QUALITY); return &loadInfo; @@ -434,9 +434,9 @@ struct BattlePetBreedStateLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_SHORT, "Value" }, - { false, FT_BYTE, "State" }, - { false, FT_BYTE, "BreedID" }, + { false, FT_SHORT, "Value" }, + { false, FT_BYTE, "BattlePetStateID" }, + { false, FT_BYTE, "BattlePetBreedID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE); return &loadInfo; @@ -451,15 +451,15 @@ struct BattlePetSpeciesLoadInfo { { false, FT_STRING, "SourceText" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "CreatureID" }, - { false, FT_INT, "IconFileID" }, - { false, FT_INT, "SummonSpellID" }, + { true, FT_INT, "CreatureID" }, + { true, FT_INT, "IconFileDataID" }, + { true, FT_INT, "SummonSpellID" }, { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "PetType" }, - { true, FT_BYTE, "Source" }, + { false, FT_BYTE, "PetTypeEnum" }, + { true, FT_BYTE, "SourceTypeEnum" }, { false, FT_INT, "ID" }, - { false, FT_INT, "CardModelSceneID" }, - { false, FT_INT, "LoadoutModelSceneID" }, + { true, FT_INT, "CardUIModelSceneID" }, + { true, FT_INT, "LoadoutUIModelSceneID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetSpeciesMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES); return &loadInfo; @@ -474,8 +474,8 @@ struct BattlePetSpeciesStateLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Value" }, - { false, FT_BYTE, "State" }, - { false, FT_SHORT, "SpeciesID" }, + { false, FT_BYTE, "BattlePetStateID" }, + { false, FT_SHORT, "BattlePetSpeciesID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE); return &loadInfo; @@ -493,7 +493,7 @@ struct BattlemasterListLoadInfo { false, FT_STRING, "GameType" }, { false, FT_STRING, "ShortDescription" }, { false, FT_STRING, "LongDescription" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "IconFileDataID" }, { true, FT_SHORT, "MapID1" }, { true, FT_SHORT, "MapID2" }, { true, FT_SHORT, "MapID3" }, @@ -510,17 +510,17 @@ struct BattlemasterListLoadInfo { true, FT_SHORT, "MapID14" }, { true, FT_SHORT, "MapID15" }, { true, FT_SHORT, "MapID16" }, - { false, FT_SHORT, "HolidayWorldState" }, - { false, FT_SHORT, "PlayerConditionID" }, - { false, FT_BYTE, "InstanceType" }, - { false, FT_BYTE, "GroupsAllowed" }, - { false, FT_BYTE, "MaxGroupSize" }, - { false, FT_BYTE, "MinLevel" }, - { false, FT_BYTE, "MaxLevel" }, - { false, FT_BYTE, "RatedPlayers" }, - { false, FT_BYTE, "MinPlayers" }, - { false, FT_BYTE, "MaxPlayers" }, - { false, FT_BYTE, "Flags" }, + { true, FT_SHORT, "HolidayWorldState" }, + { true, FT_SHORT, "RequiredPlayerConditionID" }, + { true, FT_BYTE, "InstanceType" }, + { true, FT_BYTE, "GroupsAllowed" }, + { true, FT_BYTE, "MaxGroupSize" }, + { true, FT_BYTE, "MinLevel" }, + { true, FT_BYTE, "MaxLevel" }, + { true, FT_BYTE, "RatedPlayers" }, + { true, FT_BYTE, "MinPlayers" }, + { true, FT_BYTE, "MaxPlayers" }, + { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST); return &loadInfo; @@ -534,20 +534,20 @@ struct BroadcastTextLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "MaleText" }, - { false, FT_STRING, "FemaleText" }, + { false, FT_STRING, "Text" }, + { false, FT_STRING, "Text1" }, { false, FT_SHORT, "EmoteID1" }, { false, FT_SHORT, "EmoteID2" }, { false, FT_SHORT, "EmoteID3" }, { false, FT_SHORT, "EmoteDelay1" }, { false, FT_SHORT, "EmoteDelay2" }, { false, FT_SHORT, "EmoteDelay3" }, - { false, FT_SHORT, "UnkEmoteID" }, - { false, FT_BYTE, "Language" }, - { false, FT_BYTE, "Type" }, - { false, FT_INT, "PlayerConditionID" }, - { false, FT_INT, "SoundID1" }, - { false, FT_INT, "SoundID2" }, + { false, FT_SHORT, "EmotesID" }, + { false, FT_BYTE, "LanguageID" }, + { false, FT_BYTE, "Flags" }, + { true, FT_INT, "ConditionID" }, + { false, FT_INT, "SoundEntriesID1" }, + { false, FT_INT, "SoundEntriesID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT); return &loadInfo; @@ -561,11 +561,11 @@ struct CharacterFacialHairStylesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Geoset1" }, - { false, FT_INT, "Geoset2" }, - { false, FT_INT, "Geoset3" }, - { false, FT_INT, "Geoset4" }, - { false, FT_INT, "Geoset5" }, + { true, FT_INT, "Geoset1" }, + { true, FT_INT, "Geoset2" }, + { true, FT_INT, "Geoset3" }, + { true, FT_INT, "Geoset4" }, + { true, FT_INT, "Geoset5" }, { false, FT_BYTE, "RaceID" }, { false, FT_BYTE, "SexID" }, { false, FT_BYTE, "VariationID" }, @@ -582,9 +582,9 @@ struct CharBaseSectionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_BYTE, "Variation" }, - { false, FT_BYTE, "ResolutionVariation" }, - { false, FT_BYTE, "Resolution" }, + { false, FT_BYTE, "VariationEnum" }, + { false, FT_BYTE, "ResolutionVariationEnum" }, + { false, FT_BYTE, "LayoutResType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharBaseSectionMeta::Instance(), HOTFIX_SEL_CHAR_BASE_SECTION); return &loadInfo; @@ -598,15 +598,15 @@ struct CharSectionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TextureFileDataID1" }, - { false, FT_INT, "TextureFileDataID2" }, - { false, FT_INT, "TextureFileDataID3" }, - { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "RaceID" }, - { false, FT_BYTE, "SexID" }, - { false, FT_BYTE, "BaseSection" }, - { false, FT_BYTE, "VariationIndex" }, - { false, FT_BYTE, "ColorIndex" }, + { true, FT_INT, "MaterialResourcesID1" }, + { true, FT_INT, "MaterialResourcesID2" }, + { true, FT_INT, "MaterialResourcesID3" }, + { true, FT_SHORT, "Flags" }, + { true, FT_BYTE, "RaceID" }, + { true, FT_BYTE, "SexID" }, + { true, FT_BYTE, "BaseSection" }, + { true, FT_BYTE, "VariationIndex" }, + { true, FT_BYTE, "ColorIndex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS); return &loadInfo; @@ -646,7 +646,7 @@ struct CharStartOutfitLoadInfo { true, FT_INT, "ItemID24" }, { false, FT_INT, "PetDisplayID" }, { false, FT_BYTE, "ClassID" }, - { false, FT_BYTE, "GenderID" }, + { false, FT_BYTE, "SexID" }, { false, FT_BYTE, "OutfitID" }, { false, FT_BYTE, "PetFamilyID" }, { false, FT_BYTE, "RaceID" }, @@ -663,10 +663,10 @@ struct CharTitlesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "NameMale" }, - { false, FT_STRING, "NameFemale" }, - { false, FT_SHORT, "MaskID" }, - { false, FT_BYTE, "Flags" }, + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Name1" }, + { true, FT_SHORT, "MaskID" }, + { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharTitlesMeta::Instance(), HOTFIX_SEL_CHAR_TITLES); return &loadInfo; @@ -682,8 +682,8 @@ struct ChatChannelsLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Shortcut" }, - { false, FT_INT, "Flags" }, - { false, FT_BYTE, "FactionGroup" }, + { true, FT_INT, "Flags" }, + { true, FT_BYTE, "FactionGroup" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChatChannelsMeta::Instance(), HOTFIX_SEL_CHAT_CHANNELS); return &loadInfo; @@ -703,18 +703,18 @@ struct ChrClassesLoadInfo { false, FT_STRING_NOT_LOCALIZED, "Filename" }, { false, FT_INT, "CreateScreenFileDataID" }, { false, FT_INT, "SelectScreenFileDataID" }, - { false, FT_INT, "IconFileDataID" }, { false, FT_INT, "LowResScreenFileDataID" }, - { false, FT_INT, "StartingLevel" }, + { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "StartingLevel" }, { false, FT_SHORT, "Flags" }, { false, FT_SHORT, "CinematicSequenceID" }, { false, FT_SHORT, "DefaultSpec" }, - { false, FT_BYTE, "PowerType" }, + { false, FT_BYTE, "DisplayPower" }, { false, FT_BYTE, "SpellClassSet" }, { false, FT_BYTE, "AttackPowerPerStrength" }, { false, FT_BYTE, "AttackPowerPerAgility" }, { false, FT_BYTE, "RangedAttackPowerPerAgility" }, - { false, FT_BYTE, "Unk1" }, + { false, FT_BYTE, "PrimaryStatPriority" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES); @@ -747,48 +747,48 @@ struct ChrRacesLoadInfo { false, FT_STRING_NOT_LOCALIZED, "ClientFileString" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "NameFemale" }, - { false, FT_STRING, "LowercaseName" }, - { false, FT_STRING, "LowercaseNameFemale" }, - { false, FT_INT, "Flags" }, - { false, FT_INT, "MaleDisplayID" }, - { false, FT_INT, "FemaleDisplayID" }, - { false, FT_INT, "CreateScreenFileDataID" }, - { false, FT_INT, "SelectScreenFileDataID" }, + { false, FT_STRING, "NameLowercase" }, + { false, FT_STRING, "NameFemaleLowercase" }, + { true, FT_INT, "Flags" }, + { false, FT_INT, "MaleDisplayId" }, + { false, FT_INT, "FemaleDisplayId" }, + { true, FT_INT, "CreateScreenFileDataID" }, + { true, FT_INT, "SelectScreenFileDataID" }, { false, FT_FLOAT, "MaleCustomizeOffset1" }, { false, FT_FLOAT, "MaleCustomizeOffset2" }, { false, FT_FLOAT, "MaleCustomizeOffset3" }, { false, FT_FLOAT, "FemaleCustomizeOffset1" }, { false, FT_FLOAT, "FemaleCustomizeOffset2" }, { false, FT_FLOAT, "FemaleCustomizeOffset3" }, - { false, FT_INT, "LowResScreenFileDataID" }, - { false, FT_INT, "StartingLevel" }, - { false, FT_INT, "UIDisplayOrder" }, - { false, FT_SHORT, "FactionID" }, - { false, FT_SHORT, "ResSicknessSpellID" }, - { false, FT_SHORT, "SplashSoundID" }, - { false, FT_SHORT, "CinematicSequenceID" }, - { false, FT_BYTE, "BaseLanguage" }, - { false, FT_BYTE, "CreatureType" }, - { false, FT_BYTE, "TeamID" }, - { false, FT_BYTE, "RaceRelated" }, - { false, FT_BYTE, "UnalteredVisualRaceID" }, - { false, FT_BYTE, "CharComponentTextureLayoutID" }, - { false, FT_BYTE, "DefaultClassID" }, - { false, FT_BYTE, "NeutralRaceID" }, - { false, FT_BYTE, "ItemAppearanceFrameRaceID" }, - { false, FT_BYTE, "CharComponentTexLayoutHiResID" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "HighResMaleDisplayID" }, - { false, FT_INT, "HighResFemaleDisplayID" }, - { false, FT_INT, "HeritageArmorAchievementID" }, - { false, FT_INT, "MaleCorpseBonesModelFileDataID" }, - { false, FT_INT, "FemaleCorpseBonesModelFileDataID" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualID1" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualID2" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualID3" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualKitID1" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualKitID2" }, - { false, FT_INT, "AlteredFormTransitionSpellVisualKitID3" }, + { true, FT_INT, "LowResScreenFileDataID" }, + { true, FT_INT, "StartingLevel" }, + { true, FT_INT, "UiDisplayOrder" }, + { true, FT_SHORT, "FactionID" }, + { true, FT_SHORT, "ResSicknessSpellID" }, + { true, FT_SHORT, "SplashSoundID" }, + { true, FT_SHORT, "CinematicSequenceID" }, + { true, FT_BYTE, "BaseLanguage" }, + { true, FT_BYTE, "CreatureType" }, + { true, FT_BYTE, "Alliance" }, + { true, FT_BYTE, "RaceRelated" }, + { true, FT_BYTE, "UnalteredVisualRaceID" }, + { true, FT_BYTE, "CharComponentTextureLayoutID" }, + { true, FT_BYTE, "DefaultClassID" }, + { true, FT_BYTE, "NeutralRaceID" }, + { true, FT_BYTE, "DisplayRaceID" }, + { true, FT_BYTE, "CharComponentTexLayoutHiResID" }, + { false, FT_INT, "ID" }, + { false, FT_INT, "HighResMaleDisplayId" }, + { false, FT_INT, "HighResFemaleDisplayId" }, + { true, FT_INT, "HeritageArmorAchievementID" }, + { true, FT_INT, "MaleSkeletonFileDataID" }, + { true, FT_INT, "FemaleSkeletonFileDataID" }, + { false, FT_INT, "AlteredFormStartVisualKitID1" }, + { false, FT_INT, "AlteredFormStartVisualKitID2" }, + { false, FT_INT, "AlteredFormStartVisualKitID3" }, + { false, FT_INT, "AlteredFormFinishVisualKitID1" }, + { false, FT_INT, "AlteredFormFinishVisualKitID2" }, + { false, FT_INT, "AlteredFormFinishVisualKitID3" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES); return &loadInfo; @@ -802,19 +802,19 @@ struct ChrSpecializationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_STRING, "Name2" }, + { false, FT_STRING, "FemaleName" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "MasterySpellID1" }, - { false, FT_INT, "MasterySpellID2" }, - { false, FT_BYTE, "ClassID" }, - { false, FT_BYTE, "OrderIndex" }, - { false, FT_BYTE, "PetTalentType" }, - { false, FT_BYTE, "Role" }, - { false, FT_BYTE, "PrimaryStatOrder" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "MasterySpellID1" }, + { true, FT_INT, "MasterySpellID2" }, + { true, FT_BYTE, "ClassID" }, + { true, FT_BYTE, "OrderIndex" }, + { true, FT_BYTE, "PetTalentType" }, + { true, FT_BYTE, "Role" }, + { true, FT_BYTE, "PrimaryStatPriority" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "SpellIconFileID" }, { false, FT_INT, "Flags" }, - { false, FT_INT, "AnimReplacementSetID" }, + { true, FT_INT, "AnimReplacements" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION); return &loadInfo; @@ -833,7 +833,7 @@ struct CinematicCameraLoadInfo { false, FT_FLOAT, "OriginY" }, { false, FT_FLOAT, "OriginZ" }, { false, FT_FLOAT, "OriginFacing" }, - { false, FT_INT, "ModelFileDataID" }, + { false, FT_INT, "FileDataID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CinematicCameraMeta::Instance(), HOTFIX_SEL_CINEMATIC_CAMERA); return &loadInfo; @@ -871,12 +871,12 @@ struct ConversationLineLoadInfo { false, FT_INT, "ID" }, { false, FT_INT, "BroadcastTextID" }, { false, FT_INT, "SpellVisualKitID" }, - { false, FT_INT, "Duration" }, - { false, FT_SHORT, "NextLineID" }, - { false, FT_SHORT, "Unk1" }, - { false, FT_BYTE, "Yell" }, - { false, FT_BYTE, "Unk2" }, - { false, FT_BYTE, "Unk3" }, + { true, FT_INT, "AdditionalDuration" }, + { false, FT_SHORT, "NextConversationLineID" }, + { false, FT_SHORT, "AnimKitID" }, + { false, FT_BYTE, "SpeechType" }, + { false, FT_BYTE, "StartAnimation" }, + { false, FT_BYTE, "EndAnimation" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ConversationLineMeta::Instance(), HOTFIX_SEL_CONVERSATION_LINE); return &loadInfo; @@ -893,27 +893,27 @@ struct CreatureDisplayInfoLoadInfo { false, FT_FLOAT, "CreatureModelScale" }, { false, FT_SHORT, "ModelID" }, { false, FT_SHORT, "NPCSoundID" }, - { false, FT_BYTE, "SizeClass" }, + { true, FT_BYTE, "SizeClass" }, { false, FT_BYTE, "Flags" }, { true, FT_BYTE, "Gender" }, - { false, FT_INT, "ExtendedDisplayInfoID" }, - { false, FT_INT, "PortraitTextureFileDataID" }, + { true, FT_INT, "ExtendedDisplayInfoID" }, + { true, FT_INT, "PortraitTextureFileDataID" }, { false, FT_BYTE, "CreatureModelAlpha" }, { false, FT_SHORT, "SoundID" }, - { false, FT_FLOAT, "PlayerModelScale" }, - { false, FT_INT, "PortraitCreatureDisplayInfoID" }, + { false, FT_FLOAT, "PlayerOverrideScale" }, + { true, FT_INT, "PortraitCreatureDisplayInfoID" }, { false, FT_BYTE, "BloodID" }, { false, FT_SHORT, "ParticleColorID" }, { false, FT_INT, "CreatureGeosetData" }, { false, FT_SHORT, "ObjectEffectPackageID" }, { false, FT_SHORT, "AnimReplacementSetID" }, - { true, FT_BYTE, "UnarmedWeaponSubclass" }, - { false, FT_INT, "StateSpellVisualKitID" }, - { false, FT_FLOAT, "InstanceOtherPlayerPetScale" }, - { false, FT_INT, "MountSpellVisualKitID" }, - { false, FT_INT, "TextureVariation1" }, - { false, FT_INT, "TextureVariation2" }, - { false, FT_INT, "TextureVariation3" }, + { true, FT_BYTE, "UnarmedWeaponType" }, + { true, FT_INT, "StateSpellVisualKitID" }, + { false, FT_FLOAT, "PetInstanceScale" }, + { true, FT_INT, "MountPoofSpellVisualKitID" }, + { true, FT_INT, "TextureVariationFileDataID1" }, + { true, FT_INT, "TextureVariationFileDataID2" }, + { true, FT_INT, "TextureVariationFileDataID3" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureDisplayInfoMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO); return &loadInfo; @@ -927,20 +927,20 @@ struct CreatureDisplayInfoExtraLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "FileDataID" }, - { false, FT_INT, "HDFileDataID" }, - { false, FT_BYTE, "DisplayRaceID" }, - { false, FT_BYTE, "DisplaySexID" }, - { false, FT_BYTE, "DisplayClassID" }, - { false, FT_BYTE, "SkinID" }, - { false, FT_BYTE, "FaceID" }, - { false, FT_BYTE, "HairStyleID" }, - { false, FT_BYTE, "HairColorID" }, - { false, FT_BYTE, "FacialHairID" }, + { true, FT_INT, "BakeMaterialResourcesID" }, + { true, FT_INT, "HDBakeMaterialResourcesID" }, + { true, FT_BYTE, "DisplayRaceID" }, + { true, FT_BYTE, "DisplaySexID" }, + { true, FT_BYTE, "DisplayClassID" }, + { true, FT_BYTE, "SkinID" }, + { true, FT_BYTE, "FaceID" }, + { true, FT_BYTE, "HairStyleID" }, + { true, FT_BYTE, "HairColorID" }, + { true, FT_BYTE, "FacialHairID" }, { false, FT_BYTE, "CustomDisplayOption1" }, { false, FT_BYTE, "CustomDisplayOption2" }, { false, FT_BYTE, "CustomDisplayOption3" }, - { false, FT_BYTE, "Flags" }, + { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA); return &loadInfo; @@ -957,13 +957,13 @@ struct CreatureFamilyLoadInfo { false, FT_STRING, "Name" }, { false, FT_FLOAT, "MinScale" }, { false, FT_FLOAT, "MaxScale" }, - { false, FT_INT, "IconFileDataID" }, - { false, FT_SHORT, "SkillLine1" }, - { false, FT_SHORT, "SkillLine2" }, - { false, FT_SHORT, "PetFoodMask" }, - { false, FT_BYTE, "MinScaleLevel" }, - { false, FT_BYTE, "MaxScaleLevel" }, - { false, FT_BYTE, "PetTalentType" }, + { true, FT_INT, "IconFileID" }, + { true, FT_SHORT, "SkillLine1" }, + { true, FT_SHORT, "SkillLine2" }, + { true, FT_SHORT, "PetFoodMask" }, + { true, FT_BYTE, "MinScaleLevel" }, + { true, FT_BYTE, "MaxScaleLevel" }, + { true, FT_BYTE, "PetTalentType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY); return &loadInfo; @@ -984,12 +984,12 @@ struct CreatureModelDataLoadInfo { false, FT_FLOAT, "CollisionWidth" }, { false, FT_FLOAT, "CollisionHeight" }, { false, FT_FLOAT, "MountHeight" }, - { false, FT_FLOAT, "GeoBoxMin1" }, - { false, FT_FLOAT, "GeoBoxMin2" }, - { false, FT_FLOAT, "GeoBoxMin3" }, - { false, FT_FLOAT, "GeoBoxMax1" }, - { false, FT_FLOAT, "GeoBoxMax2" }, - { false, FT_FLOAT, "GeoBoxMax3" }, + { false, FT_FLOAT, "GeoBox1" }, + { false, FT_FLOAT, "GeoBox2" }, + { false, FT_FLOAT, "GeoBox3" }, + { false, FT_FLOAT, "GeoBox4" }, + { false, FT_FLOAT, "GeoBox5" }, + { false, FT_FLOAT, "GeoBox6" }, { false, FT_FLOAT, "WorldEffectScale" }, { false, FT_FLOAT, "AttachedEffectScale" }, { false, FT_FLOAT, "MissileCollisionRadius" }, @@ -1006,8 +1006,8 @@ struct CreatureModelDataLoadInfo { false, FT_INT, "BloodID" }, { false, FT_INT, "FootprintTextureID" }, { false, FT_INT, "FoleyMaterialID" }, - { false, FT_INT, "FootstepEffectID" }, - { false, FT_INT, "DeathThudEffectID" }, + { false, FT_INT, "FootstepCameraEffectID" }, + { false, FT_INT, "DeathThudCameraEffectID" }, { false, FT_INT, "SoundID" }, { false, FT_INT, "CreatureGeosetDataID" }, }; @@ -1039,16 +1039,16 @@ struct CriteriaLoadInfo { { false, FT_INT, "ID" }, { false, FT_INT, "Asset" }, - { false, FT_INT, "StartAsset" }, - { false, FT_INT, "FailAsset" }, + { true, FT_INT, "StartAsset" }, + { true, FT_INT, "FailAsset" }, { false, FT_INT, "ModifierTreeId" }, { false, FT_SHORT, "StartTimer" }, - { false, FT_SHORT, "EligibilityWorldStateID" }, + { true, FT_SHORT, "EligibilityWorldStateID" }, { false, FT_BYTE, "Type" }, { false, FT_BYTE, "StartEvent" }, { false, FT_BYTE, "FailEvent" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "EligibilityWorldStateValue" }, + { true, FT_BYTE, "EligibilityWorldStateValue" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA); return &loadInfo; @@ -1063,9 +1063,9 @@ struct CriteriaTreeLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "Amount" }, - { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "Operator" }, + { true, FT_INT, "Amount" }, + { true, FT_SHORT, "Flags" }, + { true, FT_BYTE, "Operator" }, { false, FT_INT, "CriteriaID" }, { false, FT_INT, "Parent" }, { true, FT_INT, "OrderIndex" }, @@ -1090,7 +1090,7 @@ struct CurrencyTypesLoadInfo { false, FT_BYTE, "CategoryID" }, { false, FT_BYTE, "SpellCategory" }, { false, FT_BYTE, "Quality" }, - { false, FT_INT, "InventoryIconFileDataID" }, + { true, FT_INT, "InventoryIconFileID" }, { false, FT_INT, "SpellWeight" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES); @@ -1106,7 +1106,7 @@ struct CurveLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Type" }, - { false, FT_BYTE, "Unused" }, + { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurveMeta::Instance(), HOTFIX_SEL_CURVE); return &loadInfo; @@ -1120,10 +1120,10 @@ struct CurvePointLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "X" }, - { false, FT_FLOAT, "Y" }, + { false, FT_FLOAT, "PosX" }, + { false, FT_FLOAT, "PosY" }, { false, FT_SHORT, "CurveID" }, - { false, FT_BYTE, "Index" }, + { false, FT_BYTE, "OrderIndex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurvePointMeta::Instance(), HOTFIX_SEL_CURVE_POINT); return &loadInfo; @@ -1137,25 +1137,25 @@ struct DestructibleModelDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "StateDamagedDisplayID" }, - { false, FT_SHORT, "StateDestroyedDisplayID" }, - { false, FT_SHORT, "StateRebuildingDisplayID" }, - { false, FT_SHORT, "StateSmokeDisplayID" }, + { false, FT_SHORT, "State0Wmo" }, + { false, FT_SHORT, "State1Wmo" }, + { false, FT_SHORT, "State2Wmo" }, + { false, FT_SHORT, "State3Wmo" }, { false, FT_SHORT, "HealEffectSpeed" }, - { false, FT_BYTE, "StateDamagedImpactEffectDoodadSet" }, - { false, FT_BYTE, "StateDamagedAmbientDoodadSet" }, - { false, FT_BYTE, "StateDamagedNameSet" }, - { false, FT_BYTE, "StateDestroyedDestructionDoodadSet" }, - { false, FT_BYTE, "StateDestroyedImpactEffectDoodadSet" }, - { false, FT_BYTE, "StateDestroyedAmbientDoodadSet" }, - { false, FT_BYTE, "StateDestroyedNameSet" }, - { false, FT_BYTE, "StateRebuildingDestructionDoodadSet" }, - { false, FT_BYTE, "StateRebuildingImpactEffectDoodadSet" }, - { false, FT_BYTE, "StateRebuildingAmbientDoodadSet" }, - { false, FT_BYTE, "StateRebuildingNameSet" }, - { false, FT_BYTE, "StateSmokeInitDoodadSet" }, - { false, FT_BYTE, "StateSmokeAmbientDoodadSet" }, - { false, FT_BYTE, "StateSmokeNameSet" }, + { true, FT_BYTE, "State0ImpactEffectDoodadSet" }, + { false, FT_BYTE, "State0AmbientDoodadSet" }, + { true, FT_BYTE, "State0NameSet" }, + { true, FT_BYTE, "State1DestructionDoodadSet" }, + { true, FT_BYTE, "State1ImpactEffectDoodadSet" }, + { false, FT_BYTE, "State1AmbientDoodadSet" }, + { true, FT_BYTE, "State1NameSet" }, + { true, FT_BYTE, "State2DestructionDoodadSet" }, + { true, FT_BYTE, "State2ImpactEffectDoodadSet" }, + { false, FT_BYTE, "State2AmbientDoodadSet" }, + { true, FT_BYTE, "State2NameSet" }, + { false, FT_BYTE, "State3InitDoodadSet" }, + { false, FT_BYTE, "State3AmbientDoodadSet" }, + { true, FT_BYTE, "State3NameSet" }, { false, FT_BYTE, "EjectDirection" }, { false, FT_BYTE, "DoNotHighlight" }, { false, FT_BYTE, "HealEffect" }, @@ -1183,7 +1183,7 @@ struct DifficultyLoadInfo { true, FT_BYTE, "OldEnumValue" }, { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "ToggleDifficultyID" }, - { false, FT_BYTE, "ItemBonusTreeModID" }, + { false, FT_BYTE, "ItemContext" }, { false, FT_BYTE, "OrderIndex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY); @@ -1198,14 +1198,14 @@ struct DungeonEncounterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_INT, "CreatureDisplayID" }, - { false, FT_SHORT, "MapID" }, - { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "Bit" }, + { true, FT_INT, "CreatureDisplayID" }, + { true, FT_SHORT, "MapID" }, + { true, FT_BYTE, "DifficultyID" }, + { true, FT_BYTE, "Bit" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, { true, FT_INT, "OrderIndex" }, - { false, FT_INT, "TextureFileDataID" }, + { true, FT_INT, "SpellIconFileID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER); return &loadInfo; @@ -1261,7 +1261,7 @@ struct DurabilityQualityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "QualityMod" }, + { false, FT_FLOAT, "Data" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DurabilityQualityMeta::Instance(), HOTFIX_SEL_DURABILITY_QUALITY); return &loadInfo; @@ -1277,13 +1277,13 @@ struct EmotesLoadInfo { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, { false, FT_STRING_NOT_LOCALIZED, "EmoteSlashCommand" }, - { false, FT_INT, "SpellVisualKitID" }, { false, FT_INT, "EmoteFlags" }, - { false, FT_SHORT, "AnimID" }, + { false, FT_INT, "SpellVisualKitID" }, + { true, FT_SHORT, "AnimID" }, { false, FT_BYTE, "EmoteSpecProc" }, - { false, FT_INT, "EmoteSpecProcParam" }, - { false, FT_INT, "EmoteSoundID" }, { true, FT_INT, "ClassMask" }, + { false, FT_INT, "EmoteSpecProcParam" }, + { false, FT_INT, "EventSoundID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, EmotesMeta::Instance(), HOTFIX_SEL_EMOTES); return &loadInfo; @@ -1297,7 +1297,7 @@ struct EmotesTextLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, { false, FT_SHORT, "EmoteID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, EmotesTextMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT); @@ -1312,11 +1312,11 @@ struct EmotesTextSoundLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_BYTE, "RaceId" }, - { false, FT_BYTE, "SexId" }, - { false, FT_BYTE, "ClassId" }, - { false, FT_INT, "SoundId" }, - { false, FT_SHORT, "EmotesTextId" }, + { false, FT_BYTE, "RaceID" }, + { false, FT_BYTE, "SexID" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_INT, "SoundID" }, + { false, FT_SHORT, "EmotesTextID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, EmotesTextSoundMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT_SOUND); return &loadInfo; @@ -1329,10 +1329,10 @@ struct FactionLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_LONG, "ReputationRaceMask1" }, - { false, FT_LONG, "ReputationRaceMask2" }, - { false, FT_LONG, "ReputationRaceMask3" }, - { false, FT_LONG, "ReputationRaceMask4" }, + { true, FT_LONG, "ReputationRaceMask1" }, + { true, FT_LONG, "ReputationRaceMask2" }, + { true, FT_LONG, "ReputationRaceMask3" }, + { true, FT_LONG, "ReputationRaceMask4" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, { false, FT_INT, "ID" }, @@ -1340,25 +1340,25 @@ struct FactionLoadInfo { true, FT_INT, "ReputationBase2" }, { true, FT_INT, "ReputationBase3" }, { true, FT_INT, "ReputationBase4" }, - { false, FT_FLOAT, "ParentFactionModIn" }, - { false, FT_FLOAT, "ParentFactionModOut" }, - { false, FT_INT, "ReputationMax1" }, - { false, FT_INT, "ReputationMax2" }, - { false, FT_INT, "ReputationMax3" }, - { false, FT_INT, "ReputationMax4" }, + { false, FT_FLOAT, "ParentFactionMod1" }, + { false, FT_FLOAT, "ParentFactionMod2" }, + { true, FT_INT, "ReputationMax1" }, + { true, FT_INT, "ReputationMax2" }, + { true, FT_INT, "ReputationMax3" }, + { true, FT_INT, "ReputationMax4" }, { true, FT_SHORT, "ReputationIndex" }, - { false, FT_SHORT, "ReputationClassMask1" }, - { false, FT_SHORT, "ReputationClassMask2" }, - { false, FT_SHORT, "ReputationClassMask3" }, - { false, FT_SHORT, "ReputationClassMask4" }, + { true, FT_SHORT, "ReputationClassMask1" }, + { true, FT_SHORT, "ReputationClassMask2" }, + { true, FT_SHORT, "ReputationClassMask3" }, + { true, FT_SHORT, "ReputationClassMask4" }, { false, FT_SHORT, "ReputationFlags1" }, { false, FT_SHORT, "ReputationFlags2" }, { false, FT_SHORT, "ReputationFlags3" }, { false, FT_SHORT, "ReputationFlags4" }, { false, FT_SHORT, "ParentFactionID" }, { false, FT_SHORT, "ParagonFactionID" }, - { false, FT_BYTE, "ParentFactionCapIn" }, - { false, FT_BYTE, "ParentFactionCapOut" }, + { false, FT_BYTE, "ParentFactionCap1" }, + { false, FT_BYTE, "ParentFactionCap2" }, { false, FT_BYTE, "Expansion" }, { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "FriendshipRepID" }, @@ -1381,74 +1381,74 @@ struct FactionTemplateLoadInfo { false, FT_SHORT, "Enemies2" }, { false, FT_SHORT, "Enemies3" }, { false, FT_SHORT, "Enemies4" }, - { false, FT_SHORT, "Friends1" }, - { false, FT_SHORT, "Friends2" }, - { false, FT_SHORT, "Friends3" }, - { false, FT_SHORT, "Friends4" }, - { false, FT_BYTE, "Mask" }, - { false, FT_BYTE, "FriendMask" }, - { false, FT_BYTE, "EnemyMask" }, + { false, FT_SHORT, "Friend1" }, + { false, FT_SHORT, "Friend2" }, + { false, FT_SHORT, "Friend3" }, + { false, FT_SHORT, "Friend4" }, + { false, FT_BYTE, "FactionGroup" }, + { false, FT_BYTE, "FriendGroup" }, + { false, FT_BYTE, "EnemyGroup" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, FactionTemplateMeta::Instance(), HOTFIX_SEL_FACTION_TEMPLATE); return &loadInfo; } }; -struct GameobjectsLoadInfo +struct GameobjectDisplayInfoLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "Name" }, - { false, FT_FLOAT, "PositionX" }, - { false, FT_FLOAT, "PositionY" }, - { false, FT_FLOAT, "PositionZ" }, - { false, FT_FLOAT, "RotationX" }, - { false, FT_FLOAT, "RotationY" }, - { false, FT_FLOAT, "RotationZ" }, - { false, FT_FLOAT, "RotationW" }, - { false, FT_FLOAT, "Size" }, - { true, FT_INT, "Data1" }, - { true, FT_INT, "Data2" }, - { true, FT_INT, "Data3" }, - { true, FT_INT, "Data4" }, - { true, FT_INT, "Data5" }, - { true, FT_INT, "Data6" }, - { true, FT_INT, "Data7" }, - { true, FT_INT, "Data8" }, - { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "DisplayID" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_SHORT, "PhaseGroupID" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_BYTE, "Type" }, { false, FT_INT, "ID" }, + { true, FT_INT, "FileDataID" }, + { false, FT_FLOAT, "GeoBoxMinX" }, + { false, FT_FLOAT, "GeoBoxMinY" }, + { false, FT_FLOAT, "GeoBoxMinZ" }, + { false, FT_FLOAT, "GeoBoxMaxX" }, + { false, FT_FLOAT, "GeoBoxMaxY" }, + { false, FT_FLOAT, "GeoBoxMaxZ" }, + { false, FT_FLOAT, "OverrideLootEffectScale" }, + { false, FT_FLOAT, "OverrideNameScale" }, + { true, FT_SHORT, "ObjectEffectPackageID" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); return &loadInfo; } }; -struct GameobjectDisplayInfoLoadInfo +struct GameobjectsLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { + { false, FT_STRING, "Name" }, + { false, FT_FLOAT, "PosX" }, + { false, FT_FLOAT, "PosY" }, + { false, FT_FLOAT, "PosZ" }, + { false, FT_FLOAT, "Rot1" }, + { false, FT_FLOAT, "Rot2" }, + { false, FT_FLOAT, "Rot3" }, + { false, FT_FLOAT, "Rot4" }, + { false, FT_FLOAT, "Scale" }, + { true, FT_INT, "PropValue1" }, + { true, FT_INT, "PropValue2" }, + { true, FT_INT, "PropValue3" }, + { true, FT_INT, "PropValue4" }, + { true, FT_INT, "PropValue5" }, + { true, FT_INT, "PropValue6" }, + { true, FT_INT, "PropValue7" }, + { true, FT_INT, "PropValue8" }, + { false, FT_SHORT, "OwnerID" }, + { false, FT_SHORT, "DisplayID" }, + { false, FT_SHORT, "PhaseID" }, + { false, FT_SHORT, "PhaseGroupID" }, + { false, FT_BYTE, "PhaseUseFlags" }, + { false, FT_BYTE, "TypeID" }, { false, FT_INT, "ID" }, - { false, FT_INT, "FileDataID" }, - { false, FT_FLOAT, "GeoBoxMinX" }, - { false, FT_FLOAT, "GeoBoxMinY" }, - { false, FT_FLOAT, "GeoBoxMinZ" }, - { false, FT_FLOAT, "GeoBoxMaxX" }, - { false, FT_FLOAT, "GeoBoxMaxY" }, - { false, FT_FLOAT, "GeoBoxMaxZ" }, - { false, FT_FLOAT, "OverrideLootEffectScale" }, - { false, FT_FLOAT, "OverrideNameScale" }, - { false, FT_SHORT, "ObjectEffectPackageID" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS); return &loadInfo; } }; @@ -1461,11 +1461,11 @@ struct GarrAbilityLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "OtherFactionGarrAbilityID" }, + { false, FT_SHORT, "FactionChangeGarrAbilityID" }, { false, FT_BYTE, "GarrAbilityCategoryID" }, - { false, FT_BYTE, "FollowerTypeID" }, + { false, FT_BYTE, "GarrFollowerTypeID" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrAbilityMeta::Instance(), HOTFIX_SEL_GARR_ABILITY); @@ -1480,30 +1480,30 @@ struct GarrBuildingLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "NameAlliance" }, - { false, FT_STRING, "NameHorde" }, + { false, FT_STRING, "AllianceName" }, + { false, FT_STRING, "HordeName" }, { false, FT_STRING, "Description" }, { false, FT_STRING, "Tooltip" }, - { false, FT_INT, "HordeGameObjectID" }, - { false, FT_INT, "AllianceGameObjectID" }, - { false, FT_INT, "IconFileDataID" }, - { false, FT_SHORT, "CostCurrencyID" }, - { false, FT_SHORT, "HordeTexPrefixKitID" }, - { false, FT_SHORT, "AllianceTexPrefixKitID" }, - { false, FT_SHORT, "AllianceActivationScenePackageID" }, - { false, FT_SHORT, "HordeActivationScenePackageID" }, - { false, FT_SHORT, "FollowerRequiredGarrAbilityID" }, - { false, FT_SHORT, "FollowerGarrAbilityEffectID" }, - { true, FT_SHORT, "CostMoney" }, - { false, FT_BYTE, "Unknown" }, - { false, FT_BYTE, "Type" }, - { false, FT_BYTE, "Level" }, + { true, FT_INT, "HordeGameObjectID" }, + { true, FT_INT, "AllianceGameObjectID" }, + { true, FT_INT, "IconFileDataID" }, + { false, FT_SHORT, "CurrencyTypeID" }, + { false, FT_SHORT, "HordeUiTextureKitID" }, + { false, FT_SHORT, "AllianceUiTextureKitID" }, + { false, FT_SHORT, "AllianceSceneScriptPackageID" }, + { false, FT_SHORT, "HordeSceneScriptPackageID" }, + { false, FT_SHORT, "GarrAbilityID" }, + { false, FT_SHORT, "BonusGarrAbilityID" }, + { false, FT_SHORT, "GoldCost" }, + { false, FT_BYTE, "GarrSiteID" }, + { false, FT_BYTE, "BuildingType" }, + { false, FT_BYTE, "UpgradeLevel" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "MaxShipments" }, + { false, FT_BYTE, "ShipmentCapacity" }, { false, FT_BYTE, "GarrTypeID" }, - { true, FT_INT, "BuildDuration" }, - { true, FT_INT, "CostCurrencyAmount" }, - { true, FT_INT, "BonusAmount" }, + { true, FT_INT, "BuildSeconds" }, + { true, FT_INT, "CurrencyQty" }, + { true, FT_INT, "MaxAssignments" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrBuildingMeta::Instance(), HOTFIX_SEL_GARR_BUILDING); return &loadInfo; @@ -1516,8 +1516,8 @@ struct GarrBuildingPlotInstLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_FLOAT, "LandmarkOffsetX" }, - { false, FT_FLOAT, "LandmarkOffsetY" }, + { false, FT_FLOAT, "MapOffsetX" }, + { false, FT_FLOAT, "MapOffsetY" }, { false, FT_SHORT, "UiTextureAtlasMemberID" }, { false, FT_SHORT, "GarrSiteLevelPlotInstID" }, { false, FT_BYTE, "GarrBuildingID" }, @@ -1534,12 +1534,12 @@ struct GarrClassSpecLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "NameMale" }, - { false, FT_STRING, "NameFemale" }, - { false, FT_STRING, "NameGenderless" }, - { false, FT_SHORT, "ClassAtlasID" }, + { false, FT_STRING, "ClassSpec" }, + { false, FT_STRING, "ClassSpecMale" }, + { false, FT_STRING, "ClassSpecFemale" }, + { false, FT_SHORT, "UiTextureAtlasMemberID" }, { false, FT_SHORT, "GarrFollItemSetID" }, - { false, FT_BYTE, "Limit" }, + { false, FT_BYTE, "FollowerClassLimit" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, }; @@ -1556,35 +1556,35 @@ struct GarrFollowerLoadInfo { { false, FT_STRING, "HordeSourceText" }, { false, FT_STRING, "AllianceSourceText" }, - { false, FT_STRING, "Name" }, - { false, FT_INT, "HordeCreatureID" }, - { false, FT_INT, "AllianceCreatureID" }, - { false, FT_INT, "HordePortraitIconID" }, - { false, FT_INT, "AlliancePortraitIconID" }, - { false, FT_INT, "HordeAddedBroadcastTextID" }, - { false, FT_INT, "AllianceAddedBroadcastTextID" }, + { false, FT_STRING, "TitleName" }, + { true, FT_INT, "HordeCreatureID" }, + { true, FT_INT, "AllianceCreatureID" }, + { true, FT_INT, "HordeIconFileDataID" }, + { true, FT_INT, "AllianceIconFileDataID" }, + { false, FT_INT, "HordeSlottingBroadcastTextID" }, + { false, FT_INT, "AllySlottingBroadcastTextID" }, { false, FT_SHORT, "HordeGarrFollItemSetID" }, { false, FT_SHORT, "AllianceGarrFollItemSetID" }, { false, FT_SHORT, "ItemLevelWeapon" }, { false, FT_SHORT, "ItemLevelArmor" }, - { false, FT_SHORT, "HordeListPortraitTextureKitID" }, - { false, FT_SHORT, "AllianceListPortraitTextureKitID" }, - { false, FT_BYTE, "FollowerTypeID" }, - { false, FT_BYTE, "HordeUiAnimRaceInfoID" }, - { false, FT_BYTE, "AllianceUiAnimRaceInfoID" }, + { false, FT_SHORT, "HordeUITextureKitID" }, + { false, FT_SHORT, "AllianceUITextureKitID" }, + { false, FT_BYTE, "GarrFollowerTypeID" }, + { false, FT_BYTE, "HordeGarrFollRaceID" }, + { false, FT_BYTE, "AllianceGarrFollRaceID" }, { false, FT_BYTE, "Quality" }, { false, FT_BYTE, "HordeGarrClassSpecID" }, { false, FT_BYTE, "AllianceGarrClassSpecID" }, - { false, FT_BYTE, "Level" }, - { false, FT_BYTE, "Unknown1" }, + { false, FT_BYTE, "FollowerLevel" }, + { false, FT_BYTE, "Gender" }, { false, FT_BYTE, "Flags" }, - { true, FT_BYTE, "Unknown2" }, - { true, FT_BYTE, "Unknown3" }, + { true, FT_BYTE, "HordeSourceTypeEnum" }, + { true, FT_BYTE, "AllianceSourceTypeEnum" }, { false, FT_BYTE, "GarrTypeID" }, - { false, FT_BYTE, "MaxDurability" }, - { false, FT_BYTE, "Class" }, - { false, FT_BYTE, "HordeFlavorTextGarrStringID" }, - { false, FT_BYTE, "AllianceFlavorTextGarrStringID" }, + { false, FT_BYTE, "Vitality" }, + { false, FT_BYTE, "ChrClassID" }, + { false, FT_BYTE, "HordeFlavorGarrStringID" }, + { false, FT_BYTE, "AllianceFlavorGarrStringID" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrFollowerMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER); @@ -1616,13 +1616,13 @@ struct GarrPlotLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_INT, "AllianceConstructionGameObjectID" }, - { false, FT_INT, "HordeConstructionGameObjectID" }, - { false, FT_BYTE, "GarrPlotUICategoryID" }, + { true, FT_INT, "AllianceConstructObjID" }, + { true, FT_INT, "HordeConstructObjID" }, + { false, FT_BYTE, "UiCategoryID" }, { false, FT_BYTE, "PlotType" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "MinCount" }, - { false, FT_INT, "MaxCount" }, + { false, FT_INT, "UpgradeRequirement1" }, + { false, FT_INT, "UpgradeRequirement2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrPlotMeta::Instance(), HOTFIX_SEL_GARR_PLOT); return &loadInfo; @@ -1651,7 +1651,7 @@ struct GarrPlotInstanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, { false, FT_BYTE, "GarrPlotID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrPlotInstanceMeta::Instance(), HOTFIX_SEL_GARR_PLOT_INSTANCE); @@ -1666,16 +1666,16 @@ struct GarrSiteLevelLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "TownHallX" }, - { false, FT_FLOAT, "TownHallY" }, + { false, FT_FLOAT, "TownHallUiPosX" }, + { false, FT_FLOAT, "TownHallUiPosY" }, { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "SiteID" }, - { false, FT_SHORT, "MovieID" }, - { false, FT_SHORT, "UpgradeResourceCost" }, - { false, FT_SHORT, "UpgradeMoneyCost" }, - { false, FT_BYTE, "Level" }, - { false, FT_BYTE, "UITextureKitID" }, - { false, FT_BYTE, "Level2" }, + { false, FT_SHORT, "UiTextureKitID" }, + { false, FT_SHORT, "UpgradeMovieID" }, + { false, FT_SHORT, "UpgradeCost" }, + { false, FT_SHORT, "UpgradeGoldCost" }, + { false, FT_BYTE, "GarrLevel" }, + { false, FT_BYTE, "GarrSiteID" }, + { false, FT_BYTE, "MaxBuildingLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL); return &loadInfo; @@ -1689,11 +1689,11 @@ struct GarrSiteLevelPlotInstLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "LandmarkX" }, - { false, FT_FLOAT, "LandmarkY" }, + { false, FT_FLOAT, "UiMarkerPosX" }, + { false, FT_FLOAT, "UiMarkerPosY" }, { false, FT_SHORT, "GarrSiteLevelID" }, { false, FT_BYTE, "GarrPlotInstanceID" }, - { false, FT_BYTE, "Unknown" }, + { false, FT_BYTE, "UiMarkerSize" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrSiteLevelPlotInstMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST); return &loadInfo; @@ -1708,7 +1708,7 @@ struct GemPropertiesLoadInfo { { false, FT_INT, "ID" }, { false, FT_INT, "Type" }, - { false, FT_SHORT, "EnchantID" }, + { false, FT_SHORT, "EnchantId" }, { false, FT_SHORT, "MinItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GemPropertiesMeta::Instance(), HOTFIX_SEL_GEM_PROPERTIES); @@ -1723,8 +1723,8 @@ struct GlyphBindableSpellLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_SHORT, "GlyphPropertiesID" }, + { true, FT_INT, "SpellID" }, + { true, FT_SHORT, "GlyphPropertiesID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GlyphBindableSpellMeta::Instance(), HOTFIX_SEL_GLYPH_BINDABLE_SPELL); return &loadInfo; @@ -1740,7 +1740,7 @@ struct GlyphPropertiesLoadInfo { false, FT_INT, "ID" }, { false, FT_INT, "SpellID" }, { false, FT_SHORT, "SpellIconID" }, - { false, FT_BYTE, "Type" }, + { false, FT_BYTE, "GlyphType" }, { false, FT_BYTE, "GlyphExclusiveCategoryID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GlyphPropertiesMeta::Instance(), HOTFIX_SEL_GLYPH_PROPERTIES); @@ -1818,7 +1818,7 @@ struct GuildPerkSpellsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildPerkSpellsMeta::Instance(), HOTFIX_SEL_GUILD_PERK_SPELLS); return &loadInfo; @@ -1832,18 +1832,18 @@ struct HeirloomLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "SourceText" }, - { false, FT_INT, "ItemID" }, - { false, FT_INT, "OldItem1" }, - { false, FT_INT, "OldItem2" }, - { false, FT_INT, "NextDifficultyItemID" }, - { false, FT_INT, "UpgradeItemID1" }, - { false, FT_INT, "UpgradeItemID2" }, - { false, FT_INT, "UpgradeItemID3" }, - { false, FT_SHORT, "ItemBonusListID1" }, - { false, FT_SHORT, "ItemBonusListID2" }, - { false, FT_SHORT, "ItemBonusListID3" }, + { true, FT_INT, "ItemID" }, + { true, FT_INT, "LegacyItemID" }, + { true, FT_INT, "LegacyUpgradedItemID" }, + { true, FT_INT, "StaticUpgradedItemID" }, + { true, FT_INT, "UpgradeItemID1" }, + { true, FT_INT, "UpgradeItemID2" }, + { true, FT_INT, "UpgradeItemID3" }, + { false, FT_SHORT, "UpgradeItemBonusListID1" }, + { false, FT_SHORT, "UpgradeItemBonusListID2" }, + { false, FT_SHORT, "UpgradeItemBonusListID3" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "Source" }, + { true, FT_BYTE, "SourceTypeEnum" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, HeirloomMeta::Instance(), HOTFIX_SEL_HEIRLOOM); @@ -1917,10 +1917,10 @@ struct ImportPriceArmorLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ClothFactor" }, - { false, FT_FLOAT, "LeatherFactor" }, - { false, FT_FLOAT, "MailFactor" }, - { false, FT_FLOAT, "PlateFactor" }, + { false, FT_FLOAT, "ClothModifier" }, + { false, FT_FLOAT, "LeatherModifier" }, + { false, FT_FLOAT, "ChainModifier" }, + { false, FT_FLOAT, "PlateModifier" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ImportPriceArmorMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_ARMOR); return &loadInfo; @@ -1934,7 +1934,7 @@ struct ImportPriceQualityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Factor" }, + { false, FT_FLOAT, "Data" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ImportPriceQualityMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_QUALITY); return &loadInfo; @@ -1948,7 +1948,7 @@ struct ImportPriceShieldLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Factor" }, + { false, FT_FLOAT, "Data" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ImportPriceShieldMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_SHIELD); return &loadInfo; @@ -1962,7 +1962,7 @@ struct ImportPriceWeaponLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Factor" }, + { false, FT_FLOAT, "Data" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ImportPriceWeaponMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_WEAPON); return &loadInfo; @@ -1976,14 +1976,14 @@ struct ItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "FileDataID" }, - { false, FT_BYTE, "Class" }, - { false, FT_BYTE, "SubClass" }, - { true, FT_BYTE, "SoundOverrideSubclass" }, - { true, FT_BYTE, "Material" }, + { true, FT_INT, "IconFileDataID" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_BYTE, "SubclassID" }, + { true, FT_BYTE, "SoundOverrideSubclassID" }, + { false, FT_BYTE, "Material" }, { false, FT_BYTE, "InventoryType" }, - { false, FT_BYTE, "Sheath" }, - { false, FT_BYTE, "GroupSoundsID" }, + { false, FT_BYTE, "SheatheType" }, + { false, FT_BYTE, "ItemGroupSoundsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemMeta::Instance(), HOTFIX_SEL_ITEM); return &loadInfo; @@ -1997,10 +1997,10 @@ struct ItemAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "DisplayID" }, - { false, FT_INT, "IconFileDataID" }, - { false, FT_INT, "UIOrder" }, - { false, FT_BYTE, "ObjectComponentSlot" }, + { true, FT_INT, "ItemDisplayInfoID" }, + { true, FT_INT, "DefaultIconFileDataID" }, + { true, FT_INT, "UiOrder" }, + { false, FT_BYTE, "DisplayType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_APPEARANCE); return &loadInfo; @@ -2014,14 +2014,14 @@ struct ItemArmorQualityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "QualityMod1" }, - { false, FT_FLOAT, "QualityMod2" }, - { false, FT_FLOAT, "QualityMod3" }, - { false, FT_FLOAT, "QualityMod4" }, - { false, FT_FLOAT, "QualityMod5" }, - { false, FT_FLOAT, "QualityMod6" }, - { false, FT_FLOAT, "QualityMod7" }, - { false, FT_SHORT, "ItemLevel" }, + { false, FT_FLOAT, "Qualitymod1" }, + { false, FT_FLOAT, "Qualitymod2" }, + { false, FT_FLOAT, "Qualitymod3" }, + { false, FT_FLOAT, "Qualitymod4" }, + { false, FT_FLOAT, "Qualitymod5" }, + { false, FT_FLOAT, "Qualitymod6" }, + { false, FT_FLOAT, "Qualitymod7" }, + { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorQualityMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_QUALITY); return &loadInfo; @@ -2056,11 +2056,11 @@ struct ItemArmorTotalLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Value1" }, - { false, FT_FLOAT, "Value2" }, - { false, FT_FLOAT, "Value3" }, - { false, FT_FLOAT, "Value4" }, - { false, FT_SHORT, "ItemLevel" }, + { false, FT_FLOAT, "Cloth" }, + { false, FT_FLOAT, "Leather" }, + { false, FT_FLOAT, "Mail" }, + { false, FT_FLOAT, "Plate" }, + { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL); return &loadInfo; @@ -2091,9 +2091,9 @@ struct ItemBonusLoadInfo { true, FT_INT, "Value1" }, { true, FT_INT, "Value2" }, { true, FT_INT, "Value3" }, - { false, FT_SHORT, "BonusListID" }, + { false, FT_SHORT, "ParentItemBonusListID" }, { false, FT_BYTE, "Type" }, - { false, FT_BYTE, "Index" }, + { false, FT_BYTE, "OrderIndex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusMeta::Instance(), HOTFIX_SEL_ITEM_BONUS); return &loadInfo; @@ -2106,7 +2106,7 @@ struct ItemBonusListLevelDeltaLoadInfo { static DB2FieldMeta const fields[] = { - { true, FT_SHORT, "Delta" }, + { true, FT_SHORT, "ItemLevelDelta" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusListLevelDeltaMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA); @@ -2121,11 +2121,11 @@ struct ItemBonusTreeNodeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "SubTreeID" }, - { false, FT_SHORT, "BonusListID" }, - { false, FT_SHORT, "ItemLevelSelectorID" }, - { false, FT_BYTE, "BonusTreeModID" }, - { false, FT_SHORT, "BonusTreeID" }, + { false, FT_SHORT, "ChildItemBonusTreeID" }, + { false, FT_SHORT, "ChildItemBonusListID" }, + { false, FT_SHORT, "ChildItemLevelSelectorID" }, + { false, FT_BYTE, "ItemContext" }, + { false, FT_SHORT, "ParentItemBonusTreeID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE); return &loadInfo; @@ -2139,9 +2139,9 @@ struct ItemChildEquipmentLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "AltItemID" }, - { false, FT_BYTE, "AltEquipmentSlot" }, - { false, FT_INT, "ItemID" }, + { true, FT_INT, "ChildItemID" }, + { false, FT_BYTE, "ChildItemEquipSlot" }, + { true, FT_INT, "ParentItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemChildEquipmentMeta::Instance(), HOTFIX_SEL_ITEM_CHILD_EQUIPMENT); return &loadInfo; @@ -2155,9 +2155,9 @@ struct ItemClassLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { false, FT_FLOAT, "PriceMod" }, - { false, FT_BYTE, "OldEnumValue" }, + { false, FT_STRING, "ClassName" }, + { false, FT_FLOAT, "PriceModifier" }, + { true, FT_BYTE, "ClassID" }, { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS); @@ -2172,7 +2172,7 @@ struct ItemCurrencyCostLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemId" }, + { true, FT_INT, "ItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemCurrencyCostMeta::Instance(), HOTFIX_SEL_ITEM_CURRENCY_COST); return &loadInfo; @@ -2186,13 +2186,13 @@ struct ItemDamageAmmoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "DPS1" }, - { false, FT_FLOAT, "DPS2" }, - { false, FT_FLOAT, "DPS3" }, - { false, FT_FLOAT, "DPS4" }, - { false, FT_FLOAT, "DPS5" }, - { false, FT_FLOAT, "DPS6" }, - { false, FT_FLOAT, "DPS7" }, + { false, FT_FLOAT, "Quality1" }, + { false, FT_FLOAT, "Quality2" }, + { false, FT_FLOAT, "Quality3" }, + { false, FT_FLOAT, "Quality4" }, + { false, FT_FLOAT, "Quality5" }, + { false, FT_FLOAT, "Quality6" }, + { false, FT_FLOAT, "Quality7" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageAmmoMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_AMMO); @@ -2207,13 +2207,13 @@ struct ItemDamageOneHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "DPS1" }, - { false, FT_FLOAT, "DPS2" }, - { false, FT_FLOAT, "DPS3" }, - { false, FT_FLOAT, "DPS4" }, - { false, FT_FLOAT, "DPS5" }, - { false, FT_FLOAT, "DPS6" }, - { false, FT_FLOAT, "DPS7" }, + { false, FT_FLOAT, "Quality1" }, + { false, FT_FLOAT, "Quality2" }, + { false, FT_FLOAT, "Quality3" }, + { false, FT_FLOAT, "Quality4" }, + { false, FT_FLOAT, "Quality5" }, + { false, FT_FLOAT, "Quality6" }, + { false, FT_FLOAT, "Quality7" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND); @@ -2228,13 +2228,13 @@ struct ItemDamageOneHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "DPS1" }, - { false, FT_FLOAT, "DPS2" }, - { false, FT_FLOAT, "DPS3" }, - { false, FT_FLOAT, "DPS4" }, - { false, FT_FLOAT, "DPS5" }, - { false, FT_FLOAT, "DPS6" }, - { false, FT_FLOAT, "DPS7" }, + { false, FT_FLOAT, "Quality1" }, + { false, FT_FLOAT, "Quality2" }, + { false, FT_FLOAT, "Quality3" }, + { false, FT_FLOAT, "Quality4" }, + { false, FT_FLOAT, "Quality5" }, + { false, FT_FLOAT, "Quality6" }, + { false, FT_FLOAT, "Quality7" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER); @@ -2249,13 +2249,13 @@ struct ItemDamageTwoHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "DPS1" }, - { false, FT_FLOAT, "DPS2" }, - { false, FT_FLOAT, "DPS3" }, - { false, FT_FLOAT, "DPS4" }, - { false, FT_FLOAT, "DPS5" }, - { false, FT_FLOAT, "DPS6" }, - { false, FT_FLOAT, "DPS7" }, + { false, FT_FLOAT, "Quality1" }, + { false, FT_FLOAT, "Quality2" }, + { false, FT_FLOAT, "Quality3" }, + { false, FT_FLOAT, "Quality4" }, + { false, FT_FLOAT, "Quality5" }, + { false, FT_FLOAT, "Quality6" }, + { false, FT_FLOAT, "Quality7" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND); @@ -2270,13 +2270,13 @@ struct ItemDamageTwoHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "DPS1" }, - { false, FT_FLOAT, "DPS2" }, - { false, FT_FLOAT, "DPS3" }, - { false, FT_FLOAT, "DPS4" }, - { false, FT_FLOAT, "DPS5" }, - { false, FT_FLOAT, "DPS6" }, - { false, FT_FLOAT, "DPS7" }, + { false, FT_FLOAT, "Quality1" }, + { false, FT_FLOAT, "Quality2" }, + { false, FT_FLOAT, "Quality3" }, + { false, FT_FLOAT, "Quality4" }, + { false, FT_FLOAT, "Quality5" }, + { false, FT_FLOAT, "Quality6" }, + { false, FT_FLOAT, "Quality7" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER); @@ -2291,13 +2291,13 @@ struct ItemDisenchantLootLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "MinItemLevel" }, - { false, FT_SHORT, "MaxItemLevel" }, - { false, FT_SHORT, "RequiredDisenchantSkill" }, - { true, FT_BYTE, "ItemSubClass" }, - { false, FT_BYTE, "ItemQuality" }, - { true, FT_BYTE, "Expansion" }, - { false, FT_BYTE, "ItemClass" }, + { false, FT_SHORT, "MinLevel" }, + { false, FT_SHORT, "MaxLevel" }, + { false, FT_SHORT, "SkillRequired" }, + { true, FT_BYTE, "Subclass" }, + { false, FT_BYTE, "Quality" }, + { true, FT_BYTE, "ExpansionID" }, + { false, FT_BYTE, "Class" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDisenchantLootMeta::Instance(), HOTFIX_SEL_ITEM_DISENCHANT_LOOT); return &loadInfo; @@ -2311,15 +2311,15 @@ struct ItemEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { true, FT_INT, "Cooldown" }, - { true, FT_INT, "CategoryCooldown" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "CoolDownMSec" }, + { true, FT_INT, "CategoryCoolDownMSec" }, { true, FT_SHORT, "Charges" }, - { false, FT_SHORT, "Category" }, + { false, FT_SHORT, "SpellCategoryID" }, { false, FT_SHORT, "ChrSpecializationID" }, - { false, FT_BYTE, "OrderIndex" }, - { false, FT_BYTE, "Trigger" }, - { false, FT_INT, "ItemID" }, + { false, FT_BYTE, "LegacySlotIndex" }, + { true, FT_BYTE, "TriggerType" }, + { true, FT_INT, "ParentItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemEffectMeta::Instance(), HOTFIX_SEL_ITEM_EFFECT); return &loadInfo; @@ -2333,31 +2333,31 @@ struct ItemExtendedCostLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "RequiredItem1" }, - { false, FT_INT, "RequiredItem2" }, - { false, FT_INT, "RequiredItem3" }, - { false, FT_INT, "RequiredItem4" }, - { false, FT_INT, "RequiredItem5" }, - { false, FT_INT, "RequiredCurrencyCount1" }, - { false, FT_INT, "RequiredCurrencyCount2" }, - { false, FT_INT, "RequiredCurrencyCount3" }, - { false, FT_INT, "RequiredCurrencyCount4" }, - { false, FT_INT, "RequiredCurrencyCount5" }, - { false, FT_SHORT, "RequiredItemCount1" }, - { false, FT_SHORT, "RequiredItemCount2" }, - { false, FT_SHORT, "RequiredItemCount3" }, - { false, FT_SHORT, "RequiredItemCount4" }, - { false, FT_SHORT, "RequiredItemCount5" }, - { false, FT_SHORT, "RequiredPersonalArenaRating" }, - { false, FT_SHORT, "RequiredCurrency1" }, - { false, FT_SHORT, "RequiredCurrency2" }, - { false, FT_SHORT, "RequiredCurrency3" }, - { false, FT_SHORT, "RequiredCurrency4" }, - { false, FT_SHORT, "RequiredCurrency5" }, - { false, FT_BYTE, "RequiredArenaSlot" }, - { false, FT_BYTE, "RequiredFactionId" }, - { false, FT_BYTE, "RequiredFactionStanding" }, - { false, FT_BYTE, "RequirementFlags" }, + { true, FT_INT, "ItemID1" }, + { true, FT_INT, "ItemID2" }, + { true, FT_INT, "ItemID3" }, + { true, FT_INT, "ItemID4" }, + { true, FT_INT, "ItemID5" }, + { false, FT_INT, "CurrencyCount1" }, + { false, FT_INT, "CurrencyCount2" }, + { false, FT_INT, "CurrencyCount3" }, + { false, FT_INT, "CurrencyCount4" }, + { false, FT_INT, "CurrencyCount5" }, + { false, FT_SHORT, "ItemCount1" }, + { false, FT_SHORT, "ItemCount2" }, + { false, FT_SHORT, "ItemCount3" }, + { false, FT_SHORT, "ItemCount4" }, + { false, FT_SHORT, "ItemCount5" }, + { false, FT_SHORT, "RequiredArenaRating" }, + { false, FT_SHORT, "CurrencyID1" }, + { false, FT_SHORT, "CurrencyID2" }, + { false, FT_SHORT, "CurrencyID3" }, + { false, FT_SHORT, "CurrencyID4" }, + { false, FT_SHORT, "CurrencyID5" }, + { false, FT_BYTE, "ArenaBracket" }, + { false, FT_BYTE, "MinFactionID" }, + { false, FT_BYTE, "MinReputation" }, + { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "RequiredAchievement" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemExtendedCostMeta::Instance(), HOTFIX_SEL_ITEM_EXTENDED_COST); @@ -2372,7 +2372,7 @@ struct ItemLevelSelectorLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ItemLevel" }, + { false, FT_SHORT, "MinItemLevel" }, { false, FT_SHORT, "ItemLevelSelectorQualitySetID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemLevelSelectorMeta::Instance(), HOTFIX_SEL_ITEM_LEVEL_SELECTOR); @@ -2387,9 +2387,9 @@ struct ItemLevelSelectorQualityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemBonusListID" }, - { false, FT_BYTE, "Quality" }, - { false, FT_SHORT, "ItemLevelSelectorQualitySetID" }, + { true, FT_INT, "QualityItemBonusListID" }, + { true, FT_BYTE, "Quality" }, + { true, FT_SHORT, "ParentILSQualitySetID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemLevelSelectorQualityMeta::Instance(), HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY); return &loadInfo; @@ -2403,8 +2403,8 @@ struct ItemLevelSelectorQualitySetLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ItemLevelMin" }, - { false, FT_SHORT, "ItemLevelMax" }, + { true, FT_SHORT, "IlvlRare" }, + { true, FT_SHORT, "IlvlEpic" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemLevelSelectorQualitySetMeta::Instance(), HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET); return &loadInfo; @@ -2433,12 +2433,12 @@ struct ItemModifiedAppearanceLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ItemID" }, + { true, FT_INT, "ItemID" }, { false, FT_INT, "ID" }, - { false, FT_BYTE, "AppearanceModID" }, - { false, FT_SHORT, "AppearanceID" }, - { false, FT_BYTE, "Index" }, - { false, FT_BYTE, "SourceType" }, + { false, FT_BYTE, "ItemAppearanceModifierID" }, + { false, FT_SHORT, "ItemAppearanceID" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_BYTE, "TransmogSourceTypeEnum" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemModifiedAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE); return &loadInfo; @@ -2452,8 +2452,8 @@ struct ItemPriceBaseLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ArmorFactor" }, - { false, FT_FLOAT, "WeaponFactor" }, + { false, FT_FLOAT, "Armor" }, + { false, FT_FLOAT, "Weapon" }, { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemPriceBaseMeta::Instance(), HOTFIX_SEL_ITEM_PRICE_BASE); @@ -2510,22 +2510,22 @@ struct ItemSearchNameLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_LONG, "AllowableRace" }, - { false, FT_STRING, "Name" }, + { true, FT_LONG, "AllowableRace" }, + { false, FT_STRING, "Display" }, { false, FT_INT, "ID" }, - { false, FT_INT, "Flags1" }, - { false, FT_INT, "Flags2" }, - { false, FT_INT, "Flags3" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, { false, FT_SHORT, "ItemLevel" }, - { false, FT_BYTE, "Quality" }, - { false, FT_BYTE, "RequiredExpansion" }, - { false, FT_BYTE, "RequiredLevel" }, - { false, FT_SHORT, "RequiredReputationFaction" }, - { false, FT_BYTE, "RequiredReputationRank" }, + { false, FT_BYTE, "OverallQualityID" }, + { false, FT_BYTE, "ExpansionID" }, + { true, FT_BYTE, "RequiredLevel" }, + { false, FT_SHORT, "MinFactionID" }, + { false, FT_BYTE, "MinReputation" }, { true, FT_INT, "AllowableClass" }, { false, FT_SHORT, "RequiredSkill" }, { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_INT, "RequiredSpell" }, + { false, FT_INT, "RequiredAbility" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSearchNameMeta::Instance(), HOTFIX_SEL_ITEM_SEARCH_NAME); return &loadInfo; @@ -2559,7 +2559,7 @@ struct ItemSetLoadInfo { false, FT_INT, "ItemID17" }, { false, FT_SHORT, "RequiredSkillRank" }, { false, FT_INT, "RequiredSkill" }, - { false, FT_INT, "Flags" }, + { false, FT_INT, "SetFlags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSetMeta::Instance(), HOTFIX_SEL_ITEM_SET); return &loadInfo; @@ -2591,53 +2591,53 @@ struct ItemSparseLoadInfo { { false, FT_INT, "ID" }, { true, FT_LONG, "AllowableRace" }, - { false, FT_STRING, "Name" }, - { false, FT_STRING, "Name2" }, - { false, FT_STRING, "Name3" }, - { false, FT_STRING, "Name4" }, + { false, FT_STRING, "Display" }, + { false, FT_STRING, "Display1" }, + { false, FT_STRING, "Display2" }, + { false, FT_STRING, "Display3" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "Flags1" }, - { false, FT_INT, "Flags2" }, - { false, FT_INT, "Flags3" }, - { false, FT_INT, "Flags4" }, - { false, FT_FLOAT, "Unk1" }, - { false, FT_FLOAT, "Unk2" }, - { false, FT_INT, "BuyCount" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, + { true, FT_INT, "Flags4" }, + { false, FT_FLOAT, "PriceRandomValue" }, + { false, FT_FLOAT, "PriceVariance" }, + { false, FT_INT, "VendorStackCount" }, { false, FT_INT, "BuyPrice" }, { false, FT_INT, "SellPrice" }, - { false, FT_INT, "RequiredSpell" }, - { false, FT_INT, "MaxCount" }, - { false, FT_INT, "Stackable" }, - { true, FT_INT, "ItemStatAllocation1" }, - { true, FT_INT, "ItemStatAllocation2" }, - { true, FT_INT, "ItemStatAllocation3" }, - { true, FT_INT, "ItemStatAllocation4" }, - { true, FT_INT, "ItemStatAllocation5" }, - { true, FT_INT, "ItemStatAllocation6" }, - { true, FT_INT, "ItemStatAllocation7" }, - { true, FT_INT, "ItemStatAllocation8" }, - { true, FT_INT, "ItemStatAllocation9" }, - { true, FT_INT, "ItemStatAllocation10" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier1" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier2" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier3" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier4" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier5" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier6" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier7" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier8" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier9" }, - { false, FT_FLOAT, "ItemStatSocketCostMultiplier10" }, - { false, FT_FLOAT, "RangedModRange" }, + { false, FT_INT, "RequiredAbility" }, + { true, FT_INT, "MaxCount" }, + { true, FT_INT, "Stackable" }, + { true, FT_INT, "StatPercentEditor1" }, + { true, FT_INT, "StatPercentEditor2" }, + { true, FT_INT, "StatPercentEditor3" }, + { true, FT_INT, "StatPercentEditor4" }, + { true, FT_INT, "StatPercentEditor5" }, + { true, FT_INT, "StatPercentEditor6" }, + { true, FT_INT, "StatPercentEditor7" }, + { true, FT_INT, "StatPercentEditor8" }, + { true, FT_INT, "StatPercentEditor9" }, + { true, FT_INT, "StatPercentEditor10" }, + { false, FT_FLOAT, "StatPercentageOfSocket1" }, + { false, FT_FLOAT, "StatPercentageOfSocket2" }, + { false, FT_FLOAT, "StatPercentageOfSocket3" }, + { false, FT_FLOAT, "StatPercentageOfSocket4" }, + { false, FT_FLOAT, "StatPercentageOfSocket5" }, + { false, FT_FLOAT, "StatPercentageOfSocket6" }, + { false, FT_FLOAT, "StatPercentageOfSocket7" }, + { false, FT_FLOAT, "StatPercentageOfSocket8" }, + { false, FT_FLOAT, "StatPercentageOfSocket9" }, + { false, FT_FLOAT, "StatPercentageOfSocket10" }, + { false, FT_FLOAT, "ItemRange" }, { false, FT_INT, "BagFamily" }, - { false, FT_FLOAT, "ArmorDamageModifier" }, - { false, FT_INT, "Duration" }, - { false, FT_FLOAT, "StatScalingFactor" }, + { false, FT_FLOAT, "QualityModifier" }, + { false, FT_INT, "DurationInInventory" }, + { false, FT_FLOAT, "DmgVariance" }, { true, FT_SHORT, "AllowableClass" }, { false, FT_SHORT, "ItemLevel" }, { false, FT_SHORT, "RequiredSkill" }, { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_SHORT, "RequiredReputationFaction" }, + { false, FT_SHORT, "MinFactionID" }, { true, FT_SHORT, "ItemStatValue1" }, { true, FT_SHORT, "ItemStatValue2" }, { true, FT_SHORT, "ItemStatValue3" }, @@ -2648,53 +2648,53 @@ struct ItemSparseLoadInfo { true, FT_SHORT, "ItemStatValue8" }, { true, FT_SHORT, "ItemStatValue9" }, { true, FT_SHORT, "ItemStatValue10" }, - { false, FT_SHORT, "ScalingStatDistribution" }, - { false, FT_SHORT, "Delay" }, - { false, FT_SHORT, "PageText" }, - { false, FT_SHORT, "StartQuest" }, + { false, FT_SHORT, "ScalingStatDistributionID" }, + { false, FT_SHORT, "ItemDelay" }, + { false, FT_SHORT, "PageID" }, + { false, FT_SHORT, "StartQuestID" }, { false, FT_SHORT, "LockID" }, - { false, FT_SHORT, "RandomProperty" }, - { false, FT_SHORT, "RandomSuffix" }, + { false, FT_SHORT, "RandomSelect" }, + { false, FT_SHORT, "ItemRandomSuffixGroupID" }, { false, FT_SHORT, "ItemSet" }, - { false, FT_SHORT, "Area" }, - { false, FT_SHORT, "Map" }, - { false, FT_SHORT, "TotemCategory" }, - { false, FT_SHORT, "SocketBonus" }, + { false, FT_SHORT, "ZoneBound" }, + { false, FT_SHORT, "InstanceBound" }, + { false, FT_SHORT, "TotemCategoryID" }, + { false, FT_SHORT, "SocketMatchEnchantmentId" }, { false, FT_SHORT, "GemProperties" }, - { false, FT_SHORT, "ItemLimitCategory" }, - { false, FT_SHORT, "HolidayID" }, - { false, FT_SHORT, "RequiredTransmogHolidayID" }, + { false, FT_SHORT, "LimitCategory" }, + { false, FT_SHORT, "RequiredHoliday" }, + { false, FT_SHORT, "RequiredTransmogHoliday" }, { false, FT_SHORT, "ItemNameDescriptionID" }, - { false, FT_BYTE, "Quality" }, + { false, FT_BYTE, "OverallQualityID" }, { false, FT_BYTE, "InventoryType" }, { true, FT_BYTE, "RequiredLevel" }, - { false, FT_BYTE, "RequiredHonorRank" }, - { false, FT_BYTE, "RequiredCityRank" }, - { false, FT_BYTE, "RequiredReputationRank" }, + { false, FT_BYTE, "RequiredPVPRank" }, + { false, FT_BYTE, "RequiredPVPMedal" }, + { false, FT_BYTE, "MinReputation" }, { false, FT_BYTE, "ContainerSlots" }, - { true, FT_BYTE, "ItemStatType1" }, - { true, FT_BYTE, "ItemStatType2" }, - { true, FT_BYTE, "ItemStatType3" }, - { true, FT_BYTE, "ItemStatType4" }, - { true, FT_BYTE, "ItemStatType5" }, - { true, FT_BYTE, "ItemStatType6" }, - { true, FT_BYTE, "ItemStatType7" }, - { true, FT_BYTE, "ItemStatType8" }, - { true, FT_BYTE, "ItemStatType9" }, - { true, FT_BYTE, "ItemStatType10" }, - { false, FT_BYTE, "DamageType" }, + { true, FT_BYTE, "StatModifierBonusStat1" }, + { true, FT_BYTE, "StatModifierBonusStat2" }, + { true, FT_BYTE, "StatModifierBonusStat3" }, + { true, FT_BYTE, "StatModifierBonusStat4" }, + { true, FT_BYTE, "StatModifierBonusStat5" }, + { true, FT_BYTE, "StatModifierBonusStat6" }, + { true, FT_BYTE, "StatModifierBonusStat7" }, + { true, FT_BYTE, "StatModifierBonusStat8" }, + { true, FT_BYTE, "StatModifierBonusStat9" }, + { true, FT_BYTE, "StatModifierBonusStat10" }, + { false, FT_BYTE, "DamageDamageType" }, { false, FT_BYTE, "Bonding" }, { false, FT_BYTE, "LanguageID" }, - { false, FT_BYTE, "PageMaterial" }, - { true, FT_BYTE, "Material" }, - { false, FT_BYTE, "Sheath" }, - { false, FT_BYTE, "SocketColor1" }, - { false, FT_BYTE, "SocketColor2" }, - { false, FT_BYTE, "SocketColor3" }, - { false, FT_BYTE, "CurrencySubstitutionID" }, - { false, FT_BYTE, "CurrencySubstitutionCount" }, + { false, FT_BYTE, "PageMaterialID" }, + { false, FT_BYTE, "Material" }, + { false, FT_BYTE, "SheatheType" }, + { false, FT_BYTE, "SocketType1" }, + { false, FT_BYTE, "SocketType2" }, + { false, FT_BYTE, "SocketType3" }, + { false, FT_BYTE, "SpellWeightCategory" }, + { false, FT_BYTE, "SpellWeight" }, { false, FT_BYTE, "ArtifactID" }, - { false, FT_BYTE, "RequiredExpansion" }, + { false, FT_BYTE, "ExpansionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSparseMeta::Instance(), HOTFIX_SEL_ITEM_SPARSE); return &loadInfo; @@ -2708,7 +2708,7 @@ struct ItemSpecLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "SpecID" }, + { false, FT_SHORT, "SpecializationID" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, { false, FT_BYTE, "ItemType" }, @@ -2728,7 +2728,7 @@ struct ItemSpecOverrideLoadInfo { { false, FT_INT, "ID" }, { false, FT_SHORT, "SpecID" }, - { false, FT_INT, "ItemID" }, + { true, FT_INT, "ItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSpecOverrideMeta::Instance(), HOTFIX_SEL_ITEM_SPEC_OVERRIDE); return &loadInfo; @@ -2742,11 +2742,11 @@ struct ItemUpgradeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "CurrencyCost" }, - { false, FT_SHORT, "PrevItemUpgradeID" }, - { false, FT_SHORT, "CurrencyID" }, + { false, FT_INT, "CurrencyAmount" }, + { false, FT_SHORT, "PrerequisiteID" }, + { false, FT_SHORT, "CurrencyType" }, { false, FT_BYTE, "ItemUpgradePathID" }, - { false, FT_BYTE, "ItemLevelBonus" }, + { false, FT_BYTE, "ItemLevelIncrement" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemUpgradeMeta::Instance(), HOTFIX_SEL_ITEM_UPGRADE); return &loadInfo; @@ -2760,8 +2760,8 @@ struct ItemXBonusTreeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "BonusTreeID" }, - { false, FT_INT, "ItemID" }, + { false, FT_SHORT, "ItemBonusTreeID" }, + { true, FT_INT, "ItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemXBonusTreeMeta::Instance(), HOTFIX_SEL_ITEM_X_BONUS_TREE); return &loadInfo; @@ -2822,24 +2822,24 @@ struct LfgDungeonsLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "Flags" }, - { false, FT_FLOAT, "MinItemLevel" }, + { true, FT_INT, "Flags" }, + { false, FT_FLOAT, "MinGear" }, { false, FT_SHORT, "MaxLevel" }, { false, FT_SHORT, "TargetLevelMax" }, { true, FT_SHORT, "MapID" }, { false, FT_SHORT, "RandomID" }, { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "LastBossJournalEncounterID" }, + { false, FT_SHORT, "FinalEncounterID" }, { false, FT_SHORT, "BonusReputationAmount" }, { false, FT_SHORT, "MentorItemLevel" }, - { false, FT_SHORT, "PlayerConditionID" }, + { false, FT_SHORT, "RequiredPlayerConditionId" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "TargetLevel" }, { false, FT_BYTE, "TargetLevelMin" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "Type" }, - { false, FT_BYTE, "Faction" }, - { false, FT_BYTE, "Expansion" }, + { false, FT_BYTE, "TypeID" }, + { true, FT_BYTE, "Faction" }, + { false, FT_BYTE, "ExpansionLevel" }, { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "GroupID" }, { false, FT_BYTE, "CountTank" }, @@ -2848,11 +2848,11 @@ struct LfgDungeonsLoadInfo { false, FT_BYTE, "MinCountTank" }, { false, FT_BYTE, "MinCountHealer" }, { false, FT_BYTE, "MinCountDamage" }, - { false, FT_BYTE, "SubType" }, + { false, FT_BYTE, "Subtype" }, { false, FT_BYTE, "MentorCharLevel" }, - { true, FT_INT, "TextureFileDataID" }, - { true, FT_INT, "RewardIconFileDataID" }, - { true, FT_INT, "ProposalTextureFileDataID" }, + { true, FT_INT, "IconTextureFileID" }, + { true, FT_INT, "RewardsBgTextureFileID" }, + { true, FT_INT, "PopupBgTextureFileID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LFGDungeonsMeta::Instance(), HOTFIX_SEL_LFG_DUNGEONS); return &loadInfo; @@ -2866,12 +2866,12 @@ struct LightLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "PosX" }, - { false, FT_FLOAT, "PosY" }, - { false, FT_FLOAT, "PosZ" }, - { false, FT_FLOAT, "FalloffStart" }, - { false, FT_FLOAT, "FalloffEnd" }, - { false, FT_SHORT, "MapID" }, + { false, FT_FLOAT, "GameCoordsX" }, + { false, FT_FLOAT, "GameCoordsY" }, + { false, FT_FLOAT, "GameCoordsZ" }, + { false, FT_FLOAT, "GameFalloffStart" }, + { false, FT_FLOAT, "GameFalloffEnd" }, + { true, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "LightParamsID1" }, { false, FT_SHORT, "LightParamsID2" }, { false, FT_SHORT, "LightParamsID3" }, @@ -2893,7 +2893,7 @@ struct LiquidTypeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, { false, FT_STRING_NOT_LOCALIZED, "Texture1" }, { false, FT_STRING_NOT_LOCALIZED, "Texture2" }, { false, FT_STRING_NOT_LOCALIZED, "Texture3" }, @@ -2906,8 +2906,8 @@ struct LiquidTypeLoadInfo { false, FT_FLOAT, "AmbDarkenIntensity" }, { false, FT_FLOAT, "DirDarkenIntensity" }, { false, FT_FLOAT, "ParticleScale" }, - { false, FT_INT, "Color1" }, - { false, FT_INT, "Color2" }, + { true, FT_INT, "Color1" }, + { true, FT_INT, "Color2" }, { false, FT_FLOAT, "Float1" }, { false, FT_FLOAT, "Float2" }, { false, FT_FLOAT, "Float3" }, @@ -2932,16 +2932,16 @@ struct LiquidTypeLoadInfo { false, FT_INT, "Int4" }, { false, FT_SHORT, "Flags" }, { false, FT_SHORT, "LightID" }, - { false, FT_BYTE, "Type" }, + { false, FT_BYTE, "SoundBank" }, { false, FT_BYTE, "ParticleMovement" }, { false, FT_BYTE, "ParticleTexSlots" }, { false, FT_BYTE, "MaterialID" }, - { false, FT_BYTE, "DepthTexCount1" }, - { false, FT_BYTE, "DepthTexCount2" }, - { false, FT_BYTE, "DepthTexCount3" }, - { false, FT_BYTE, "DepthTexCount4" }, - { false, FT_BYTE, "DepthTexCount5" }, - { false, FT_BYTE, "DepthTexCount6" }, + { false, FT_BYTE, "FrameCountTexture1" }, + { false, FT_BYTE, "FrameCountTexture2" }, + { false, FT_BYTE, "FrameCountTexture3" }, + { false, FT_BYTE, "FrameCountTexture4" }, + { false, FT_BYTE, "FrameCountTexture5" }, + { false, FT_BYTE, "FrameCountTexture6" }, { false, FT_INT, "SoundID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LiquidTypeMeta::Instance(), HOTFIX_SEL_LIQUID_TYPE); @@ -2956,14 +2956,14 @@ struct LockLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Index1" }, - { false, FT_INT, "Index2" }, - { false, FT_INT, "Index3" }, - { false, FT_INT, "Index4" }, - { false, FT_INT, "Index5" }, - { false, FT_INT, "Index6" }, - { false, FT_INT, "Index7" }, - { false, FT_INT, "Index8" }, + { true, FT_INT, "Index1" }, + { true, FT_INT, "Index2" }, + { true, FT_INT, "Index3" }, + { true, FT_INT, "Index4" }, + { true, FT_INT, "Index5" }, + { true, FT_INT, "Index6" }, + { true, FT_INT, "Index7" }, + { true, FT_INT, "Index8" }, { false, FT_SHORT, "Skill1" }, { false, FT_SHORT, "Skill2" }, { false, FT_SHORT, "Skill3" }, @@ -3019,22 +3019,22 @@ struct MapLoadInfo { false, FT_STRING, "MapName" }, { false, FT_STRING, "MapDescription0" }, { false, FT_STRING, "MapDescription1" }, - { false, FT_STRING, "ShortDescription" }, - { false, FT_STRING, "LongDescription" }, - { false, FT_INT, "Flags1" }, - { false, FT_INT, "Flags2" }, + { false, FT_STRING, "PvpShortDescription" }, + { false, FT_STRING, "PvpLongDescription" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, { false, FT_FLOAT, "MinimapIconScale" }, - { false, FT_FLOAT, "CorpsePosX" }, - { false, FT_FLOAT, "CorpsePosY" }, + { false, FT_FLOAT, "CorpseX" }, + { false, FT_FLOAT, "CorpseY" }, { false, FT_SHORT, "AreaTableID" }, - { false, FT_SHORT, "LoadingScreenID" }, + { true, FT_SHORT, "LoadingScreenID" }, { true, FT_SHORT, "CorpseMapID" }, - { false, FT_SHORT, "TimeOfDayOverride" }, + { true, FT_SHORT, "TimeOfDayOverride" }, { true, FT_SHORT, "ParentMapID" }, { true, FT_SHORT, "CosmeticParentMapID" }, - { false, FT_SHORT, "WindSettingsID" }, + { true, FT_SHORT, "WindSettingsID" }, { false, FT_BYTE, "InstanceType" }, - { false, FT_BYTE, "unk5" }, + { false, FT_BYTE, "MapType" }, { false, FT_BYTE, "ExpansionID" }, { false, FT_BYTE, "MaxPlayers" }, { false, FT_BYTE, "TimeOffset" }, @@ -3053,12 +3053,12 @@ struct MapDifficultyLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Message" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "RaidDurationType" }, + { false, FT_BYTE, "ResetInterval" }, { false, FT_BYTE, "MaxPlayers" }, { false, FT_BYTE, "LockID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ItemBonusTreeModID" }, - { false, FT_INT, "Context" }, + { false, FT_BYTE, "ItemContext" }, + { false, FT_INT, "ItemContextPickerID" }, { false, FT_SHORT, "MapID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapDifficultyMeta::Instance(), HOTFIX_SEL_MAP_DIFFICULTY); @@ -3073,13 +3073,13 @@ struct ModifierTreeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Asset1" }, - { false, FT_INT, "Asset2" }, + { true, FT_INT, "Asset" }, + { true, FT_INT, "SecondaryAsset" }, { false, FT_INT, "Parent" }, { false, FT_BYTE, "Type" }, - { false, FT_BYTE, "Unk700" }, - { false, FT_BYTE, "Operator" }, - { false, FT_BYTE, "Amount" }, + { true, FT_BYTE, "TertiaryAsset" }, + { true, FT_BYTE, "Operator" }, + { true, FT_BYTE, "Amount" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ModifierTreeMeta::Instance(), HOTFIX_SEL_MODIFIER_TREE); return &loadInfo; @@ -3094,14 +3094,14 @@ struct MountLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { false, FT_STRING, "SourceDescription" }, - { false, FT_INT, "SpellId" }, - { false, FT_FLOAT, "CameraPivotMultiplier" }, - { false, FT_SHORT, "MountTypeId" }, + { false, FT_STRING, "SourceText" }, + { true, FT_INT, "SourceSpellID" }, + { false, FT_FLOAT, "MountFlyRideHeight" }, + { false, FT_SHORT, "MountTypeID" }, { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "Source" }, + { true, FT_BYTE, "SourceTypeEnum" }, { false, FT_INT, "ID" }, - { false, FT_INT, "PlayerConditionId" }, + { false, FT_INT, "PlayerConditionID" }, { true, FT_INT, "UiModelSceneID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountMeta::Instance(), HOTFIX_SEL_MOUNT); @@ -3115,14 +3115,14 @@ struct MountCapabilityLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "RequiredSpell" }, - { false, FT_INT, "SpeedModSpell" }, - { false, FT_SHORT, "RequiredRidingSkill" }, - { false, FT_SHORT, "RequiredArea" }, - { true, FT_SHORT, "RequiredMap" }, + { true, FT_INT, "ReqSpellKnownID" }, + { true, FT_INT, "ModSpellAuraID" }, + { false, FT_SHORT, "ReqRidingSkill" }, + { false, FT_SHORT, "ReqAreaID" }, + { true, FT_SHORT, "ReqMapID" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, - { false, FT_INT, "RequiredAura" }, + { false, FT_INT, "ReqSpellAuraID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_CAPABILITY); return &loadInfo; @@ -3152,9 +3152,9 @@ struct MountXDisplayLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "DisplayID" }, + { true, FT_INT, "CreatureDisplayInfoID" }, { false, FT_INT, "PlayerConditionID" }, - { false, FT_INT, "MountID" }, + { true, FT_INT, "MountID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountXDisplayMeta::Instance(), HOTFIX_SEL_MOUNT_X_DISPLAY); return &loadInfo; @@ -3185,8 +3185,8 @@ struct NameGenLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { false, FT_BYTE, "Race" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, + { false, FT_BYTE, "RaceID" }, { false, FT_BYTE, "Sex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, NameGenMeta::Instance(), HOTFIX_SEL_NAME_GEN); @@ -3245,17 +3245,17 @@ struct OverrideSpellDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID1" }, - { false, FT_INT, "SpellID2" }, - { false, FT_INT, "SpellID3" }, - { false, FT_INT, "SpellID4" }, - { false, FT_INT, "SpellID5" }, - { false, FT_INT, "SpellID6" }, - { false, FT_INT, "SpellID7" }, - { false, FT_INT, "SpellID8" }, - { false, FT_INT, "SpellID9" }, - { false, FT_INT, "SpellID10" }, - { false, FT_INT, "PlayerActionbarFileDataID" }, + { true, FT_INT, "Spells1" }, + { true, FT_INT, "Spells2" }, + { true, FT_INT, "Spells3" }, + { true, FT_INT, "Spells4" }, + { true, FT_INT, "Spells5" }, + { true, FT_INT, "Spells6" }, + { true, FT_INT, "Spells7" }, + { true, FT_INT, "Spells8" }, + { true, FT_INT, "Spells9" }, + { true, FT_INT, "Spells10" }, + { true, FT_INT, "PlayerActionBarFileDataID" }, { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, OverrideSpellDataMeta::Instance(), HOTFIX_SEL_OVERRIDE_SPELL_DATA); @@ -3314,7 +3314,7 @@ struct PlayerConditionLoadInfo { false, FT_SHORT, "MaxFactionID" }, { false, FT_BYTE, "MaxReputation" }, { false, FT_INT, "ReputationLogic" }, - { false, FT_BYTE, "Unknown1" }, + { true, FT_BYTE, "CurrentPvpFaction" }, { false, FT_BYTE, "MinPVPRank" }, { false, FT_BYTE, "MaxPVPRank" }, { false, FT_BYTE, "PvpMedal" }, @@ -3354,7 +3354,7 @@ struct PlayerConditionLoadInfo { false, FT_BYTE, "PowerTypeComp" }, { false, FT_BYTE, "PowerTypeValue" }, { false, FT_INT, "ModifierTreeID" }, - { true, FT_INT, "MainHandItemSubclassMask" }, + { true, FT_INT, "WeaponSubclassMask" }, { false, FT_SHORT, "SkillID1" }, { false, FT_SHORT, "SkillID2" }, { false, FT_SHORT, "SkillID3" }, @@ -3401,14 +3401,14 @@ struct PlayerConditionLoadInfo { false, FT_SHORT, "Explored2" }, { false, FT_INT, "Time1" }, { false, FT_INT, "Time2" }, - { false, FT_INT, "AuraSpellID1" }, - { false, FT_INT, "AuraSpellID2" }, - { false, FT_INT, "AuraSpellID3" }, - { false, FT_INT, "AuraSpellID4" }, - { false, FT_BYTE, "AuraCount1" }, - { false, FT_BYTE, "AuraCount2" }, - { false, FT_BYTE, "AuraCount3" }, - { false, FT_BYTE, "AuraCount4" }, + { true, FT_INT, "AuraSpellID1" }, + { true, FT_INT, "AuraSpellID2" }, + { true, FT_INT, "AuraSpellID3" }, + { true, FT_INT, "AuraSpellID4" }, + { false, FT_BYTE, "AuraStacks1" }, + { false, FT_BYTE, "AuraStacks2" }, + { false, FT_BYTE, "AuraStacks3" }, + { false, FT_BYTE, "AuraStacks4" }, { false, FT_SHORT, "Achievement1" }, { false, FT_SHORT, "Achievement2" }, { false, FT_SHORT, "Achievement3" }, @@ -3459,7 +3459,7 @@ struct PowerDisplayLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "GlobalStringBaseTag" }, - { false, FT_BYTE, "PowerType" }, + { false, FT_BYTE, "ActualType" }, { false, FT_BYTE, "Red" }, { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, @@ -3476,18 +3476,18 @@ struct PowerTypeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING_NOT_LOCALIZED, "PowerTypeToken" }, - { false, FT_STRING_NOT_LOCALIZED, "PowerCostToken" }, - { false, FT_FLOAT, "RegenerationPeace" }, - { false, FT_FLOAT, "RegenerationCombat" }, - { true, FT_SHORT, "MaxPower" }, - { false, FT_SHORT, "RegenerationDelay" }, - { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "PowerTypeEnum" }, - { true, FT_BYTE, "RegenerationMin" }, - { true, FT_BYTE, "RegenerationCenter" }, - { true, FT_BYTE, "RegenerationMax" }, - { false, FT_BYTE, "UIModifier" }, + { false, FT_STRING_NOT_LOCALIZED, "NameGlobalStringTag" }, + { false, FT_STRING_NOT_LOCALIZED, "CostGlobalStringTag" }, + { false, FT_FLOAT, "RegenPeace" }, + { false, FT_FLOAT, "RegenCombat" }, + { true, FT_SHORT, "MaxBasePower" }, + { true, FT_SHORT, "RegenInterruptTimeMS" }, + { true, FT_SHORT, "Flags" }, + { true, FT_BYTE, "PowerTypeEnum" }, + { true, FT_BYTE, "MinPower" }, + { true, FT_BYTE, "CenterPower" }, + { true, FT_BYTE, "DefaultPower" }, + { true, FT_BYTE, "DisplayModifier" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PowerTypeMeta::Instance(), HOTFIX_SEL_POWER_TYPE); return &loadInfo; @@ -3501,8 +3501,8 @@ struct PrestigeLevelInfoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "PrestigeText" }, - { false, FT_INT, "IconID" }, + { false, FT_STRING, "Name" }, + { true, FT_INT, "BadgeTextureFileDataID" }, { false, FT_BYTE, "PrestigeLevel" }, { false, FT_BYTE, "Flags" }, }; @@ -3518,7 +3518,7 @@ struct PvpDifficultyLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_BYTE, "BracketID" }, + { false, FT_BYTE, "RangeIndex" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, { false, FT_SHORT, "MapID" }, @@ -3535,8 +3535,8 @@ struct PvpItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemID" }, - { false, FT_BYTE, "ItemLevelBonus" }, + { true, FT_INT, "ItemID" }, + { false, FT_BYTE, "ItemLevelDelta" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PVPItemMeta::Instance(), HOTFIX_SEL_PVP_ITEM); return &loadInfo; @@ -3550,9 +3550,9 @@ struct PvpRewardLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "HonorLevel" }, - { false, FT_INT, "Prestige" }, - { false, FT_INT, "RewardPackID" }, + { true, FT_INT, "HonorLevel" }, + { true, FT_INT, "PrestigeLevel" }, + { true, FT_INT, "RewardPackID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpRewardMeta::Instance(), HOTFIX_SEL_PVP_REWARD); return &loadInfo; @@ -3569,7 +3569,7 @@ struct PvpTalentLoadInfo { false, FT_STRING, "Description" }, { true, FT_INT, "SpellID" }, { true, FT_INT, "OverridesSpellID" }, - { true, FT_INT, "ExtraSpellID" }, + { true, FT_INT, "ActionBarSpellID" }, { true, FT_INT, "TierID" }, { true, FT_INT, "ColumnIndex" }, { true, FT_INT, "Flags" }, @@ -3605,16 +3605,16 @@ struct QuestFactionRewardLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_SHORT, "QuestRewFactionValue1" }, - { true, FT_SHORT, "QuestRewFactionValue2" }, - { true, FT_SHORT, "QuestRewFactionValue3" }, - { true, FT_SHORT, "QuestRewFactionValue4" }, - { true, FT_SHORT, "QuestRewFactionValue5" }, - { true, FT_SHORT, "QuestRewFactionValue6" }, - { true, FT_SHORT, "QuestRewFactionValue7" }, - { true, FT_SHORT, "QuestRewFactionValue8" }, - { true, FT_SHORT, "QuestRewFactionValue9" }, - { true, FT_SHORT, "QuestRewFactionValue10" }, + { true, FT_SHORT, "Difficulty1" }, + { true, FT_SHORT, "Difficulty2" }, + { true, FT_SHORT, "Difficulty3" }, + { true, FT_SHORT, "Difficulty4" }, + { true, FT_SHORT, "Difficulty5" }, + { true, FT_SHORT, "Difficulty6" }, + { true, FT_SHORT, "Difficulty7" }, + { true, FT_SHORT, "Difficulty8" }, + { true, FT_SHORT, "Difficulty9" }, + { true, FT_SHORT, "Difficulty10" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestFactionRewardMeta::Instance(), HOTFIX_SEL_QUEST_FACTION_REWARD); return &loadInfo; @@ -3628,16 +3628,16 @@ struct QuestMoneyRewardLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Money1" }, - { false, FT_INT, "Money2" }, - { false, FT_INT, "Money3" }, - { false, FT_INT, "Money4" }, - { false, FT_INT, "Money5" }, - { false, FT_INT, "Money6" }, - { false, FT_INT, "Money7" }, - { false, FT_INT, "Money8" }, - { false, FT_INT, "Money9" }, - { false, FT_INT, "Money10" }, + { false, FT_INT, "Difficulty1" }, + { false, FT_INT, "Difficulty2" }, + { false, FT_INT, "Difficulty3" }, + { false, FT_INT, "Difficulty4" }, + { false, FT_INT, "Difficulty5" }, + { false, FT_INT, "Difficulty6" }, + { false, FT_INT, "Difficulty7" }, + { false, FT_INT, "Difficulty8" }, + { false, FT_INT, "Difficulty9" }, + { false, FT_INT, "Difficulty10" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestMoneyRewardMeta::Instance(), HOTFIX_SEL_QUEST_MONEY_REWARD); return &loadInfo; @@ -3651,10 +3651,10 @@ struct QuestPackageItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemID" }, - { false, FT_SHORT, "QuestPackageID" }, - { false, FT_BYTE, "FilterType" }, - { false, FT_INT, "ItemCount" }, + { true, FT_INT, "ItemID" }, + { false, FT_SHORT, "PackageID" }, + { false, FT_BYTE, "DisplayType" }, + { false, FT_INT, "ItemQuantity" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM); return &loadInfo; @@ -3669,7 +3669,7 @@ struct QuestSortLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "SortName" }, - { false, FT_BYTE, "SortOrder" }, + { true, FT_BYTE, "UiOrderIndex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestSortMeta::Instance(), HOTFIX_SEL_QUEST_SORT); return &loadInfo; @@ -3697,16 +3697,16 @@ struct QuestXpLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "Exp1" }, - { false, FT_SHORT, "Exp2" }, - { false, FT_SHORT, "Exp3" }, - { false, FT_SHORT, "Exp4" }, - { false, FT_SHORT, "Exp5" }, - { false, FT_SHORT, "Exp6" }, - { false, FT_SHORT, "Exp7" }, - { false, FT_SHORT, "Exp8" }, - { false, FT_SHORT, "Exp9" }, - { false, FT_SHORT, "Exp10" }, + { false, FT_SHORT, "Difficulty1" }, + { false, FT_SHORT, "Difficulty2" }, + { false, FT_SHORT, "Difficulty3" }, + { false, FT_SHORT, "Difficulty4" }, + { false, FT_SHORT, "Difficulty5" }, + { false, FT_SHORT, "Difficulty6" }, + { false, FT_SHORT, "Difficulty7" }, + { false, FT_SHORT, "Difficulty8" }, + { false, FT_SHORT, "Difficulty9" }, + { false, FT_SHORT, "Difficulty10" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestXPMeta::Instance(), HOTFIX_SEL_QUEST_XP); return &loadInfo; @@ -3720,21 +3720,21 @@ struct RandPropPointsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "EpicPropertiesPoints1" }, - { false, FT_INT, "EpicPropertiesPoints2" }, - { false, FT_INT, "EpicPropertiesPoints3" }, - { false, FT_INT, "EpicPropertiesPoints4" }, - { false, FT_INT, "EpicPropertiesPoints5" }, - { false, FT_INT, "RarePropertiesPoints1" }, - { false, FT_INT, "RarePropertiesPoints2" }, - { false, FT_INT, "RarePropertiesPoints3" }, - { false, FT_INT, "RarePropertiesPoints4" }, - { false, FT_INT, "RarePropertiesPoints5" }, - { false, FT_INT, "UncommonPropertiesPoints1" }, - { false, FT_INT, "UncommonPropertiesPoints2" }, - { false, FT_INT, "UncommonPropertiesPoints3" }, - { false, FT_INT, "UncommonPropertiesPoints4" }, - { false, FT_INT, "UncommonPropertiesPoints5" }, + { false, FT_INT, "Epic1" }, + { false, FT_INT, "Epic2" }, + { false, FT_INT, "Epic3" }, + { false, FT_INT, "Epic4" }, + { false, FT_INT, "Epic5" }, + { false, FT_INT, "Superior1" }, + { false, FT_INT, "Superior2" }, + { false, FT_INT, "Superior3" }, + { false, FT_INT, "Superior4" }, + { false, FT_INT, "Superior5" }, + { false, FT_INT, "Good1" }, + { false, FT_INT, "Good2" }, + { false, FT_INT, "Good3" }, + { false, FT_INT, "Good4" }, + { false, FT_INT, "Good5" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RandPropPointsMeta::Instance(), HOTFIX_SEL_RAND_PROP_POINTS); return &loadInfo; @@ -3750,10 +3750,10 @@ struct RewardPackLoadInfo { false, FT_INT, "ID" }, { false, FT_INT, "Money" }, { false, FT_FLOAT, "ArtifactXPMultiplier" }, - { false, FT_BYTE, "ArtifactXPDifficulty" }, - { false, FT_BYTE, "ArtifactCategoryID" }, - { false, FT_INT, "TitleID" }, - { false, FT_INT, "Unused" }, + { true, FT_BYTE, "ArtifactXPDifficulty" }, + { false, FT_BYTE, "ArtifactXPCategoryID" }, + { true, FT_INT, "CharTitleID" }, + { false, FT_INT, "TreasurePickerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RewardPackMeta::Instance(), HOTFIX_SEL_REWARD_PACK); return &loadInfo; @@ -3767,9 +3767,9 @@ struct RewardPackXItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemID" }, - { false, FT_INT, "Amount" }, - { false, FT_INT, "RewardPackID" }, + { true, FT_INT, "ItemID" }, + { true, FT_INT, "ItemQuantity" }, + { true, FT_INT, "RewardPackID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RewardPackXItemMeta::Instance(), HOTFIX_SEL_REWARD_PACK_X_ITEM); return &loadInfo; @@ -3783,7 +3783,7 @@ struct RulesetItemUpgradeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ItemID" }, + { true, FT_INT, "ItemID" }, { false, FT_SHORT, "ItemUpgradeID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RulesetItemUpgradeMeta::Instance(), HOTFIX_SEL_RULESET_ITEM_UPGRADE); @@ -3798,9 +3798,9 @@ struct SandboxScalingLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "MinLevel" }, - { false, FT_INT, "MaxLevel" }, - { false, FT_INT, "Flags" }, + { true, FT_INT, "MinLevel" }, + { true, FT_INT, "MaxLevel" }, + { true, FT_INT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SandboxScalingMeta::Instance(), HOTFIX_SEL_SANDBOX_SCALING); return &loadInfo; @@ -3814,9 +3814,9 @@ struct ScalingStatDistributionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ItemLevelCurveID" }, - { false, FT_INT, "MinLevel" }, - { false, FT_INT, "MaxLevel" }, + { false, FT_SHORT, "PlayerLevelToItemLevelCurveID" }, + { true, FT_INT, "MinLevel" }, + { true, FT_INT, "MaxLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScalingStatDistributionMeta::Instance(), HOTFIX_SEL_SCALING_STAT_DISTRIBUTION); return &loadInfo; @@ -3831,7 +3831,7 @@ struct ScenarioLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_SHORT, "Data" }, + { false, FT_SHORT, "AreaTableID" }, { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "Type" }, }; @@ -3848,14 +3848,14 @@ struct ScenarioStepLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { false, FT_STRING, "Name" }, + { false, FT_STRING, "Title" }, { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "PreviousStepID" }, - { false, FT_SHORT, "QuestRewardID" }, - { false, FT_BYTE, "Step" }, + { false, FT_SHORT, "Supersedes" }, + { false, FT_SHORT, "RewardQuestID" }, + { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "CriteriaTreeID" }, - { false, FT_INT, "BonusRequiredStepID" }, + { false, FT_INT, "Criteriatreeid" }, + { true, FT_INT, "RelatedStep" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScenarioStepMeta::Instance(), HOTFIX_SEL_SCENARIO_STEP); return &loadInfo; @@ -3869,8 +3869,8 @@ struct SceneScriptLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "PrevScriptId" }, - { false, FT_SHORT, "NextScriptId" }, + { false, FT_SHORT, "FirstSceneScriptID" }, + { false, FT_SHORT, "NextSceneScriptID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SceneScriptMeta::Instance(), HOTFIX_SEL_SCENE_SCRIPT); return &loadInfo; @@ -3932,9 +3932,9 @@ struct SkillLineLoadInfo { false, FT_STRING, "Description" }, { false, FT_STRING, "AlternateVerb" }, { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "CategoryID" }, - { false, FT_BYTE, "CanLink" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_BYTE, "CategoryID" }, + { true, FT_BYTE, "CanLink" }, + { true, FT_INT, "SpellIconFileID" }, { false, FT_INT, "ParentSkillLineID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE); @@ -3948,20 +3948,20 @@ struct SkillLineAbilityLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_LONG, "RaceMask" }, + { true, FT_LONG, "RaceMask" }, { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "SupercedesSpell" }, - { false, FT_SHORT, "SkillLine" }, - { false, FT_SHORT, "TrivialSkillLineRankHigh" }, - { false, FT_SHORT, "TrivialSkillLineRankLow" }, - { false, FT_SHORT, "UniqueBit" }, - { false, FT_SHORT, "TradeSkillCategoryID" }, - { false, FT_BYTE, "NumSkillUps" }, + { true, FT_INT, "Spell" }, + { true, FT_INT, "SupercedesSpell" }, + { true, FT_SHORT, "SkillLine" }, + { true, FT_SHORT, "TrivialSkillLineRankHigh" }, + { true, FT_SHORT, "TrivialSkillLineRankLow" }, + { true, FT_SHORT, "UniqueBit" }, + { true, FT_SHORT, "TradeSkillCategoryID" }, + { true, FT_BYTE, "NumSkillUps" }, { true, FT_INT, "ClassMask" }, - { false, FT_SHORT, "MinSkillLineRank" }, - { false, FT_BYTE, "AcquireMethod" }, - { false, FT_BYTE, "Flags" }, + { true, FT_SHORT, "MinSkillLineRank" }, + { true, FT_BYTE, "AcquireMethod" }, + { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY); return &loadInfo; @@ -3976,11 +3976,11 @@ struct SkillRaceClassInfoLoadInfo { { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, - { false, FT_SHORT, "SkillID" }, + { true, FT_SHORT, "SkillID" }, { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "SkillTierID" }, - { false, FT_BYTE, "Availability" }, - { false, FT_BYTE, "MinLevel" }, + { true, FT_SHORT, "SkillTierID" }, + { true, FT_BYTE, "Availability" }, + { true, FT_BYTE, "MinLevel" }, { true, FT_INT, "ClassMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillRaceClassInfoMeta::Instance(), HOTFIX_SEL_SKILL_RACE_CLASS_INFO); @@ -4009,7 +4009,7 @@ struct SoundKitLoadInfo { false, FT_FLOAT, "PitchVariationMinus" }, { false, FT_FLOAT, "PitchAdjust" }, { false, FT_SHORT, "BusOverwriteID" }, - { false, FT_BYTE, "Unk700" }, + { false, FT_BYTE, "MaxInstances" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SoundKitMeta::Instance(), HOTFIX_SEL_SOUND_KIT); return &loadInfo; @@ -4023,10 +4023,10 @@ struct SpecializationSpellsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Description" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "OverridesSpellID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "OverridesSpellID" }, { false, FT_SHORT, "SpecID" }, - { false, FT_BYTE, "OrderIndex" }, + { false, FT_BYTE, "DisplayOrder" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpecializationSpellsMeta::Instance(), HOTFIX_SEL_SPECIALIZATION_SPELLS); @@ -4058,14 +4058,14 @@ struct SpellAuraOptionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "ProcCharges" }, - { false, FT_INT, "ProcTypeMask" }, - { false, FT_INT, "ProcCategoryRecovery" }, + { true, FT_INT, "ProcCharges" }, + { true, FT_INT, "ProcTypeMask" }, + { true, FT_INT, "ProcCategoryRecovery" }, { false, FT_SHORT, "CumulativeAura" }, { false, FT_SHORT, "SpellProcsPerMinuteID" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "ProcChance" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraOptionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_OPTIONS); return &loadInfo; @@ -4079,16 +4079,16 @@ struct SpellAuraRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "CasterAuraSpell" }, - { false, FT_INT, "TargetAuraSpell" }, - { false, FT_INT, "ExcludeCasterAuraSpell" }, - { false, FT_INT, "ExcludeTargetAuraSpell" }, + { true, FT_INT, "CasterAuraSpell" }, + { true, FT_INT, "TargetAuraSpell" }, + { true, FT_INT, "ExcludeCasterAuraSpell" }, + { true, FT_INT, "ExcludeTargetAuraSpell" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "CasterAuraState" }, { false, FT_BYTE, "TargetAuraState" }, { false, FT_BYTE, "ExcludeCasterAuraState" }, { false, FT_BYTE, "ExcludeTargetAuraState" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_RESTRICTIONS); return &loadInfo; @@ -4102,9 +4102,9 @@ struct SpellCastTimesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "CastTime" }, - { true, FT_INT, "MinCastTime" }, - { true, FT_SHORT, "CastTimePerLevel" }, + { true, FT_INT, "Base" }, + { true, FT_INT, "Minimum" }, + { true, FT_SHORT, "PerLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastTimesMeta::Instance(), HOTFIX_SEL_SPELL_CAST_TIMES); return &loadInfo; @@ -4118,12 +4118,12 @@ struct SpellCastingRequirementsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, { false, FT_SHORT, "MinFactionID" }, { false, FT_SHORT, "RequiredAreasID" }, { false, FT_SHORT, "RequiresSpellFocus" }, { false, FT_BYTE, "FacingCasterFlags" }, - { false, FT_BYTE, "MinReputation" }, + { true, FT_BYTE, "MinReputation" }, { false, FT_BYTE, "RequiredAuraVision" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastingRequirementsMeta::Instance(), HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS); @@ -4138,15 +4138,15 @@ struct SpellCategoriesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "Category" }, - { false, FT_SHORT, "StartRecoveryCategory" }, - { false, FT_SHORT, "ChargeCategory" }, + { true, FT_SHORT, "Category" }, + { true, FT_SHORT, "StartRecoveryCategory" }, + { true, FT_SHORT, "ChargeCategory" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "DefenseType" }, - { false, FT_BYTE, "DispelType" }, - { false, FT_BYTE, "Mechanic" }, - { false, FT_BYTE, "PreventionType" }, - { false, FT_INT, "SpellID" }, + { true, FT_BYTE, "DefenseType" }, + { true, FT_BYTE, "DispelType" }, + { true, FT_BYTE, "Mechanic" }, + { true, FT_BYTE, "PreventionType" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoriesMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORIES); return &loadInfo; @@ -4162,10 +4162,10 @@ struct SpellCategoryLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { true, FT_INT, "ChargeRecoveryTime" }, - { false, FT_BYTE, "Flags" }, + { true, FT_BYTE, "Flags" }, { false, FT_BYTE, "UsesPerWeek" }, - { false, FT_BYTE, "MaxCharges" }, - { false, FT_INT, "ChargeCategoryType" }, + { true, FT_BYTE, "MaxCharges" }, + { true, FT_INT, "TypeMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoryMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORY); return &loadInfo; @@ -4179,7 +4179,7 @@ struct SpellClassOptionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, { false, FT_INT, "SpellClassMask1" }, { false, FT_INT, "SpellClassMask2" }, { false, FT_INT, "SpellClassMask3" }, @@ -4199,11 +4199,11 @@ struct SpellCooldownsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "CategoryRecoveryTime" }, - { false, FT_INT, "RecoveryTime" }, - { false, FT_INT, "StartRecoveryTime" }, + { true, FT_INT, "CategoryRecoveryTime" }, + { true, FT_INT, "RecoveryTime" }, + { true, FT_INT, "StartRecoveryTime" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCooldownsMeta::Instance(), HOTFIX_SEL_SPELL_COOLDOWNS); return &loadInfo; @@ -4219,7 +4219,7 @@ struct SpellDurationLoadInfo { false, FT_INT, "ID" }, { true, FT_INT, "Duration" }, { true, FT_INT, "MaxDuration" }, - { true, FT_INT, "DurationPerLevel" }, + { false, FT_INT, "DurationPerLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION); return &loadInfo; @@ -4235,39 +4235,39 @@ struct SpellEffectLoadInfo { false, FT_INT, "ID" }, { false, FT_INT, "Effect" }, { true, FT_INT, "EffectBasePoints" }, - { false, FT_INT, "EffectIndex" }, - { false, FT_INT, "EffectAura" }, - { false, FT_INT, "DifficultyID" }, + { true, FT_INT, "EffectIndex" }, + { true, FT_INT, "EffectAura" }, + { true, FT_INT, "DifficultyID" }, { false, FT_FLOAT, "EffectAmplitude" }, - { false, FT_INT, "EffectAuraPeriod" }, + { true, FT_INT, "EffectAuraPeriod" }, { false, FT_FLOAT, "EffectBonusCoefficient" }, { false, FT_FLOAT, "EffectChainAmplitude" }, - { false, FT_INT, "EffectChainTargets" }, + { true, FT_INT, "EffectChainTargets" }, { true, FT_INT, "EffectDieSides" }, - { false, FT_INT, "EffectItemType" }, - { false, FT_INT, "EffectMechanic" }, + { true, FT_INT, "EffectItemType" }, + { true, FT_INT, "EffectMechanic" }, { false, FT_FLOAT, "EffectPointsPerResource" }, { false, FT_FLOAT, "EffectRealPointsPerLevel" }, - { false, FT_INT, "EffectTriggerSpell" }, + { true, FT_INT, "EffectTriggerSpell" }, { false, FT_FLOAT, "EffectPosFacing" }, - { false, FT_INT, "EffectAttributes" }, + { true, FT_INT, "EffectAttributes" }, { false, FT_FLOAT, "BonusCoefficientFromAP" }, - { false, FT_FLOAT, "PvPMultiplier" }, + { false, FT_FLOAT, "PvpMultiplier" }, { false, FT_FLOAT, "Coefficient" }, { false, FT_FLOAT, "Variance" }, { false, FT_FLOAT, "ResourceCoefficient" }, - { false, FT_FLOAT, "GroupSizeCoefficient" }, + { false, FT_FLOAT, "GroupSizeBasePointsCoefficient" }, { false, FT_INT, "EffectSpellClassMask1" }, { false, FT_INT, "EffectSpellClassMask2" }, { false, FT_INT, "EffectSpellClassMask3" }, { false, FT_INT, "EffectSpellClassMask4" }, - { true, FT_INT, "EffectMiscValue" }, - { true, FT_INT, "EffectMiscValueB" }, - { false, FT_INT, "EffectRadiusIndex" }, - { false, FT_INT, "EffectRadiusMaxIndex" }, + { true, FT_INT, "EffectMiscValue1" }, + { true, FT_INT, "EffectMiscValue2" }, + { false, FT_INT, "EffectRadiusIndex1" }, + { false, FT_INT, "EffectRadiusIndex2" }, { false, FT_INT, "ImplicitTarget1" }, { false, FT_INT, "ImplicitTarget2" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT); return &loadInfo; @@ -4281,9 +4281,9 @@ struct SpellEquippedItemsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { true, FT_INT, "EquippedItemInventoryTypeMask" }, - { true, FT_INT, "EquippedItemSubClassMask" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "EquippedItemInvTypes" }, + { true, FT_INT, "EquippedItemSubclass" }, { true, FT_BYTE, "EquippedItemClass" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEquippedItemsMeta::Instance(), HOTFIX_SEL_SPELL_EQUIPPED_ITEMS); @@ -4313,12 +4313,12 @@ struct SpellInterruptsLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_SHORT, "InterruptFlags" }, - { false, FT_INT, "AuraInterruptFlags1" }, - { false, FT_INT, "AuraInterruptFlags2" }, - { false, FT_INT, "ChannelInterruptFlags1" }, - { false, FT_INT, "ChannelInterruptFlags2" }, - { false, FT_INT, "SpellID" }, + { true, FT_SHORT, "InterruptFlags" }, + { true, FT_INT, "AuraInterruptFlags1" }, + { true, FT_INT, "AuraInterruptFlags2" }, + { true, FT_INT, "ChannelInterruptFlags1" }, + { true, FT_INT, "ChannelInterruptFlags2" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellInterruptsMeta::Instance(), HOTFIX_SEL_SPELL_INTERRUPTS); return &loadInfo; @@ -4333,17 +4333,17 @@ struct SpellItemEnchantmentLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_INT, "EffectSpellID1" }, - { false, FT_INT, "EffectSpellID2" }, - { false, FT_INT, "EffectSpellID3" }, + { false, FT_INT, "EffectArg1" }, + { false, FT_INT, "EffectArg2" }, + { false, FT_INT, "EffectArg3" }, { false, FT_FLOAT, "EffectScalingPoints1" }, { false, FT_FLOAT, "EffectScalingPoints2" }, { false, FT_FLOAT, "EffectScalingPoints3" }, { false, FT_INT, "TransmogCost" }, - { false, FT_INT, "TextureFileDataID" }, - { false, FT_SHORT, "EffectPointsMin1" }, - { false, FT_SHORT, "EffectPointsMin2" }, - { false, FT_SHORT, "EffectPointsMin3" }, + { false, FT_INT, "IconFileDataID" }, + { true, FT_SHORT, "EffectPointsMin1" }, + { true, FT_SHORT, "EffectPointsMin2" }, + { true, FT_SHORT, "EffectPointsMin3" }, { false, FT_SHORT, "ItemVisual" }, { false, FT_SHORT, "Flags" }, { false, FT_SHORT, "RequiredSkillID" }, @@ -4358,7 +4358,7 @@ struct SpellItemEnchantmentLoadInfo { false, FT_BYTE, "MaxLevel" }, { true, FT_BYTE, "ScalingClass" }, { true, FT_BYTE, "ScalingClassRestricted" }, - { false, FT_INT, "PlayerConditionID" }, + { false, FT_INT, "TransmogPlayerConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellItemEnchantmentMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT); return &loadInfo; @@ -4372,31 +4372,31 @@ struct SpellItemEnchantmentConditionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "LTOperand1" }, - { false, FT_INT, "LTOperand2" }, - { false, FT_INT, "LTOperand3" }, - { false, FT_INT, "LTOperand4" }, - { false, FT_INT, "LTOperand5" }, - { false, FT_BYTE, "LTOperandType1" }, - { false, FT_BYTE, "LTOperandType2" }, - { false, FT_BYTE, "LTOperandType3" }, - { false, FT_BYTE, "LTOperandType4" }, - { false, FT_BYTE, "LTOperandType5" }, + { false, FT_INT, "LtOperand1" }, + { false, FT_INT, "LtOperand2" }, + { false, FT_INT, "LtOperand3" }, + { false, FT_INT, "LtOperand4" }, + { false, FT_INT, "LtOperand5" }, + { false, FT_BYTE, "LtOperandType1" }, + { false, FT_BYTE, "LtOperandType2" }, + { false, FT_BYTE, "LtOperandType3" }, + { false, FT_BYTE, "LtOperandType4" }, + { false, FT_BYTE, "LtOperandType5" }, { false, FT_BYTE, "Operator1" }, { false, FT_BYTE, "Operator2" }, { false, FT_BYTE, "Operator3" }, { false, FT_BYTE, "Operator4" }, { false, FT_BYTE, "Operator5" }, - { false, FT_BYTE, "RTOperandType1" }, - { false, FT_BYTE, "RTOperandType2" }, - { false, FT_BYTE, "RTOperandType3" }, - { false, FT_BYTE, "RTOperandType4" }, - { false, FT_BYTE, "RTOperandType5" }, - { false, FT_BYTE, "RTOperand1" }, - { false, FT_BYTE, "RTOperand2" }, - { false, FT_BYTE, "RTOperand3" }, - { false, FT_BYTE, "RTOperand4" }, - { false, FT_BYTE, "RTOperand5" }, + { false, FT_BYTE, "RtOperandType1" }, + { false, FT_BYTE, "RtOperandType2" }, + { false, FT_BYTE, "RtOperandType3" }, + { false, FT_BYTE, "RtOperandType4" }, + { false, FT_BYTE, "RtOperandType5" }, + { false, FT_BYTE, "RtOperand1" }, + { false, FT_BYTE, "RtOperand2" }, + { false, FT_BYTE, "RtOperand3" }, + { false, FT_BYTE, "RtOperand4" }, + { false, FT_BYTE, "RtOperand5" }, { false, FT_BYTE, "Logic1" }, { false, FT_BYTE, "Logic2" }, { false, FT_BYTE, "Logic3" }, @@ -4415,9 +4415,9 @@ struct SpellLearnSpellLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "LearnSpellID" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "OverridesSpellID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "LearnSpellID" }, + { true, FT_INT, "OverridesSpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellLearnSpellMeta::Instance(), HOTFIX_SEL_SPELL_LEARN_SPELL); return &loadInfo; @@ -4431,12 +4431,12 @@ struct SpellLevelsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "BaseLevel" }, - { false, FT_SHORT, "MaxLevel" }, - { false, FT_SHORT, "SpellLevel" }, + { true, FT_SHORT, "BaseLevel" }, + { true, FT_SHORT, "MaxLevel" }, + { true, FT_SHORT, "SpellLevel" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "MaxUsableLevel" }, - { false, FT_INT, "SpellID" }, + { false, FT_BYTE, "MaxPassiveAuraLevel" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellLevelsMeta::Instance(), HOTFIX_SEL_SPELL_LEVELS); return &loadInfo; @@ -4454,26 +4454,26 @@ struct SpellMiscLoadInfo { false, FT_SHORT, "DurationIndex" }, { false, FT_SHORT, "RangeIndex" }, { false, FT_BYTE, "SchoolMask" }, - { false, FT_INT, "IconFileDataID" }, + { true, FT_INT, "SpellIconFileDataID" }, { false, FT_FLOAT, "Speed" }, - { false, FT_INT, "ActiveIconFileDataID" }, - { false, FT_FLOAT, "MultistrikeSpeedMod" }, + { true, FT_INT, "ActiveIconFileDataID" }, + { false, FT_FLOAT, "LaunchDelay" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_INT, "Attributes" }, - { false, FT_INT, "AttributesEx" }, - { false, FT_INT, "AttributesExB" }, - { false, FT_INT, "AttributesExC" }, - { false, FT_INT, "AttributesExD" }, - { false, FT_INT, "AttributesExE" }, - { false, FT_INT, "AttributesExF" }, - { false, FT_INT, "AttributesExG" }, - { false, FT_INT, "AttributesExH" }, - { false, FT_INT, "AttributesExI" }, - { false, FT_INT, "AttributesExJ" }, - { false, FT_INT, "AttributesExK" }, - { false, FT_INT, "AttributesExL" }, - { false, FT_INT, "AttributesExM" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "Attributes1" }, + { true, FT_INT, "Attributes2" }, + { true, FT_INT, "Attributes3" }, + { true, FT_INT, "Attributes4" }, + { true, FT_INT, "Attributes5" }, + { true, FT_INT, "Attributes6" }, + { true, FT_INT, "Attributes7" }, + { true, FT_INT, "Attributes8" }, + { true, FT_INT, "Attributes9" }, + { true, FT_INT, "Attributes10" }, + { true, FT_INT, "Attributes11" }, + { true, FT_INT, "Attributes12" }, + { true, FT_INT, "Attributes13" }, + { true, FT_INT, "Attributes14" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellMiscMeta::Instance(), HOTFIX_SEL_SPELL_MISC); return &loadInfo; @@ -4487,19 +4487,19 @@ struct SpellPowerLoadInfo static DB2FieldMeta const fields[] = { { true, FT_INT, "ManaCost" }, - { false, FT_FLOAT, "ManaCostPercentage" }, - { false, FT_FLOAT, "ManaCostPercentagePerSecond" }, - { false, FT_INT, "RequiredAura" }, - { false, FT_FLOAT, "HealthCostPercentage" }, - { false, FT_BYTE, "PowerIndex" }, - { false, FT_BYTE, "PowerType" }, + { false, FT_FLOAT, "PowerCostPct" }, + { false, FT_FLOAT, "PowerPctPerSecond" }, + { true, FT_INT, "RequiredAuraSpellID" }, + { false, FT_FLOAT, "PowerCostMaxPct" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_BYTE, "PowerType" }, { false, FT_INT, "ID" }, { true, FT_INT, "ManaCostPerLevel" }, - { true, FT_INT, "ManaCostPerSecond" }, - { true, FT_INT, "ManaCostAdditional" }, + { true, FT_INT, "ManaPerSecond" }, + { false, FT_INT, "OptionalCost" }, { false, FT_INT, "PowerDisplayID" }, - { false, FT_INT, "UnitPowerBarID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "AltPowerBarID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerMeta::Instance(), HOTFIX_SEL_SPELL_POWER); return &loadInfo; @@ -4513,7 +4513,7 @@ struct SpellPowerDifficultyLoadInfo static DB2FieldMeta const fields[] = { { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "PowerIndex" }, + { false, FT_BYTE, "OrderIndex" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerDifficultyMeta::Instance(), HOTFIX_SEL_SPELL_POWER_DIFFICULTY); @@ -4544,7 +4544,7 @@ struct SpellProcsPerMinuteModLoadInfo { { false, FT_INT, "ID" }, { false, FT_FLOAT, "Coeff" }, - { false, FT_SHORT, "Param" }, + { true, FT_SHORT, "Param" }, { false, FT_BYTE, "Type" }, { false, FT_SHORT, "SpellProcsPerMinuteID" }, }; @@ -4579,10 +4579,10 @@ struct SpellRangeLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "DisplayName" }, { false, FT_STRING, "DisplayNameShort" }, - { false, FT_FLOAT, "MinRangeHostile" }, - { false, FT_FLOAT, "MinRangeFriend" }, - { false, FT_FLOAT, "MaxRangeHostile" }, - { false, FT_FLOAT, "MaxRangeFriend" }, + { false, FT_FLOAT, "RangeMin1" }, + { false, FT_FLOAT, "RangeMin2" }, + { false, FT_FLOAT, "RangeMax1" }, + { false, FT_FLOAT, "RangeMax2" }, { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellRangeMeta::Instance(), HOTFIX_SEL_SPELL_RANGE); @@ -4597,7 +4597,7 @@ struct SpellReagentsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, { true, FT_INT, "Reagent1" }, { true, FT_INT, "Reagent2" }, { true, FT_INT, "Reagent3" }, @@ -4606,14 +4606,14 @@ struct SpellReagentsLoadInfo { true, FT_INT, "Reagent6" }, { true, FT_INT, "Reagent7" }, { true, FT_INT, "Reagent8" }, - { false, FT_SHORT, "ReagentCount1" }, - { false, FT_SHORT, "ReagentCount2" }, - { false, FT_SHORT, "ReagentCount3" }, - { false, FT_SHORT, "ReagentCount4" }, - { false, FT_SHORT, "ReagentCount5" }, - { false, FT_SHORT, "ReagentCount6" }, - { false, FT_SHORT, "ReagentCount7" }, - { false, FT_SHORT, "ReagentCount8" }, + { true, FT_SHORT, "ReagentCount1" }, + { true, FT_SHORT, "ReagentCount2" }, + { true, FT_SHORT, "ReagentCount3" }, + { true, FT_SHORT, "ReagentCount4" }, + { true, FT_SHORT, "ReagentCount5" }, + { true, FT_SHORT, "ReagentCount6" }, + { true, FT_SHORT, "ReagentCount7" }, + { true, FT_SHORT, "ReagentCount8" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellReagentsMeta::Instance(), HOTFIX_SEL_SPELL_REAGENTS); return &loadInfo; @@ -4627,9 +4627,9 @@ struct SpellScalingLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_SHORT, "ScalesFromItemLevel" }, - { true, FT_INT, "ScalingClass" }, + { true, FT_INT, "SpellID" }, + { true, FT_SHORT, "ScalesFromItemLevel" }, + { true, FT_INT, "Class" }, { false, FT_INT, "MinScalingLevel" }, { false, FT_INT, "MaxScalingLevel" }, }; @@ -4645,12 +4645,12 @@ struct SpellShapeshiftLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "ShapeshiftExclude1" }, - { false, FT_INT, "ShapeshiftExclude2" }, - { false, FT_INT, "ShapeshiftMask1" }, - { false, FT_INT, "ShapeshiftMask2" }, - { false, FT_BYTE, "StanceBarOrder" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "ShapeshiftExclude1" }, + { true, FT_INT, "ShapeshiftExclude2" }, + { true, FT_INT, "ShapeshiftMask1" }, + { true, FT_INT, "ShapeshiftMask2" }, + { true, FT_BYTE, "StanceBarOrder" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellShapeshiftMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT); return &loadInfo; @@ -4665,13 +4665,13 @@ struct SpellShapeshiftFormLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_FLOAT, "WeaponDamageVariance" }, - { false, FT_INT, "Flags" }, - { false, FT_SHORT, "CombatRoundTime" }, + { false, FT_FLOAT, "DamageVariance" }, + { true, FT_INT, "Flags" }, + { true, FT_SHORT, "CombatRoundTime" }, { false, FT_SHORT, "MountTypeID" }, { true, FT_BYTE, "CreatureType" }, - { false, FT_BYTE, "BonusActionBar" }, - { false, FT_INT, "AttackIconFileDataID" }, + { true, FT_BYTE, "BonusActionBar" }, + { true, FT_INT, "AttackIconFileID" }, { false, FT_INT, "CreatureDisplayID1" }, { false, FT_INT, "CreatureDisplayID2" }, { false, FT_INT, "CreatureDisplayID3" }, @@ -4697,14 +4697,14 @@ struct SpellTargetRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ConeAngle" }, + { false, FT_FLOAT, "ConeDegrees" }, { false, FT_FLOAT, "Width" }, - { false, FT_INT, "Targets" }, - { false, FT_SHORT, "TargetCreatureType" }, + { true, FT_INT, "Targets" }, + { true, FT_SHORT, "TargetCreatureType" }, { false, FT_BYTE, "DifficultyID" }, - { false, FT_BYTE, "MaxAffectedTargets" }, + { false, FT_BYTE, "MaxTargets" }, { false, FT_INT, "MaxTargetLevel" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellTargetRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS); return &loadInfo; @@ -4718,9 +4718,9 @@ struct SpellTotemsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "Totem1" }, - { false, FT_INT, "Totem2" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "Totem1" }, + { true, FT_INT, "Totem2" }, { false, FT_SHORT, "RequiredTotemCategoryID1" }, { false, FT_SHORT, "RequiredTotemCategoryID2" }, }; @@ -4737,17 +4737,17 @@ struct SpellXSpellVisualLoadInfo { { false, FT_INT, "SpellVisualID" }, { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Chance" }, + { false, FT_FLOAT, "Probability" }, { false, FT_SHORT, "CasterPlayerConditionID" }, { false, FT_SHORT, "CasterUnitConditionID" }, - { false, FT_SHORT, "PlayerConditionID" }, - { false, FT_SHORT, "UnitConditionID" }, - { false, FT_INT, "IconFileDataID" }, - { false, FT_INT, "ActiveIconFileDataID" }, + { false, FT_SHORT, "ViewerPlayerConditionID" }, + { false, FT_SHORT, "ViewerUnitConditionID" }, + { true, FT_INT, "SpellIconFileID" }, + { true, FT_INT, "ActiveIconFileID" }, { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "Priority" }, - { false, FT_INT, "SpellID" }, + { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL); return &loadInfo; @@ -4761,10 +4761,10 @@ struct SummonPropertiesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Flags" }, - { false, FT_INT, "Category" }, - { false, FT_INT, "Faction" }, - { true, FT_INT, "Type" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "Control" }, + { true, FT_INT, "Faction" }, + { true, FT_INT, "Title" }, { true, FT_INT, "Slot" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SummonPropertiesMeta::Instance(), HOTFIX_SEL_SUMMON_PROPERTIES); @@ -4835,19 +4835,19 @@ struct TaxiNodesLoadInfo { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, - { false, FT_INT, "MountCreatureID1" }, - { false, FT_INT, "MountCreatureID2" }, + { true, FT_INT, "MountCreatureID1" }, + { true, FT_INT, "MountCreatureID2" }, { false, FT_FLOAT, "MapOffsetX" }, { false, FT_FLOAT, "MapOffsetY" }, - { false, FT_FLOAT, "Unk730" }, + { false, FT_FLOAT, "Facing" }, { false, FT_FLOAT, "FlightMapOffsetX" }, { false, FT_FLOAT, "FlightMapOffsetY" }, - { false, FT_SHORT, "MapID" }, + { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ConditionID" }, - { false, FT_SHORT, "LearnableIndex" }, + { false, FT_SHORT, "CharacterBitNumber" }, { false, FT_BYTE, "Flags" }, - { true, FT_INT, "UiTextureKitPrefixID" }, - { false, FT_INT, "SpecialAtlasIconPlayerConditionID" }, + { true, FT_INT, "UiTextureKitID" }, + { false, FT_INT, "SpecialIconConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TaxiNodesMeta::Instance(), HOTFIX_SEL_TAXI_NODES); return &loadInfo; @@ -4860,8 +4860,8 @@ struct TaxiPathLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_SHORT, "From" }, - { false, FT_SHORT, "To" }, + { false, FT_SHORT, "FromTaxiNode" }, + { false, FT_SHORT, "ToTaxiNode" }, { false, FT_INT, "ID" }, { false, FT_INT, "Cost" }, }; @@ -4880,7 +4880,7 @@ struct TaxiPathNodeLoadInfo { false, FT_FLOAT, "LocY" }, { false, FT_FLOAT, "LocZ" }, { false, FT_SHORT, "PathID" }, - { false, FT_SHORT, "MapID" }, + { false, FT_SHORT, "ContinentID" }, { false, FT_BYTE, "NodeIndex" }, { false, FT_INT, "ID" }, { false, FT_BYTE, "Flags" }, @@ -4901,8 +4901,8 @@ struct TotemCategoryLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_INT, "CategoryMask" }, - { false, FT_BYTE, "CategoryType" }, + { true, FT_INT, "TotemCategoryMask" }, + { false, FT_BYTE, "TotemCategoryType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TotemCategoryMeta::Instance(), HOTFIX_SEL_TOTEM_CATEGORY); return &loadInfo; @@ -4915,10 +4915,10 @@ struct ToyLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "Description" }, - { false, FT_INT, "ItemID" }, + { false, FT_STRING, "SourceText" }, + { true, FT_INT, "ItemID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "CategoryFilter" }, + { true, FT_BYTE, "SourceTypeEnum" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ToyMeta::Instance(), HOTFIX_SEL_TOY); @@ -4933,7 +4933,7 @@ struct TransmogHolidayLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "HolidayID" }, + { true, FT_INT, "RequiredTransmogHoliday" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransmogHolidayMeta::Instance(), HOTFIX_SEL_TRANSMOG_HOLIDAY); return &loadInfo; @@ -4947,12 +4947,12 @@ struct TransmogSetLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_SHORT, "BaseSetID" }, - { false, FT_SHORT, "UIOrder" }, + { false, FT_SHORT, "ParentTransmogSetID" }, + { true, FT_SHORT, "UiOrder" }, { false, FT_BYTE, "ExpansionID" }, { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, - { true, FT_INT, "QuestID" }, + { false, FT_INT, "TrackingQuestID" }, { true, FT_INT, "ClassMask" }, { true, FT_INT, "ItemNameDescriptionID" }, { false, FT_INT, "TransmogSetGroupID" }, @@ -4968,7 +4968,7 @@ struct TransmogSetGroupLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "Label" }, + { false, FT_STRING, "Name" }, { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransmogSetGroupMeta::Instance(), HOTFIX_SEL_TRANSMOG_SET_GROUP); @@ -5004,7 +5004,7 @@ struct TransportAnimationLoadInfo { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, { false, FT_BYTE, "SequenceID" }, - { false, FT_INT, "TransportID" }, + { true, FT_INT, "TransportID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportAnimationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ANIMATION); return &loadInfo; @@ -5019,11 +5019,11 @@ struct TransportRotationLoadInfo { { false, FT_INT, "ID" }, { false, FT_INT, "TimeIndex" }, - { false, FT_FLOAT, "X" }, - { false, FT_FLOAT, "Y" }, - { false, FT_FLOAT, "Z" }, - { false, FT_FLOAT, "W" }, - { false, FT_INT, "TransportID" }, + { false, FT_FLOAT, "Rot1" }, + { false, FT_FLOAT, "Rot2" }, + { false, FT_FLOAT, "Rot3" }, + { false, FT_FLOAT, "Rot4" }, + { true, FT_INT, "GameObjectsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportRotationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ROTATION); return &loadInfo; @@ -5043,18 +5043,18 @@ struct UnitPowerBarLoadInfo { false, FT_STRING, "ToolTip" }, { false, FT_FLOAT, "RegenerationPeace" }, { false, FT_FLOAT, "RegenerationCombat" }, - { false, FT_INT, "FileDataID1" }, - { false, FT_INT, "FileDataID2" }, - { false, FT_INT, "FileDataID3" }, - { false, FT_INT, "FileDataID4" }, - { false, FT_INT, "FileDataID5" }, - { false, FT_INT, "FileDataID6" }, - { false, FT_INT, "Color1" }, - { false, FT_INT, "Color2" }, - { false, FT_INT, "Color3" }, - { false, FT_INT, "Color4" }, - { false, FT_INT, "Color5" }, - { false, FT_INT, "Color6" }, + { true, FT_INT, "FileDataID1" }, + { true, FT_INT, "FileDataID2" }, + { true, FT_INT, "FileDataID3" }, + { true, FT_INT, "FileDataID4" }, + { true, FT_INT, "FileDataID5" }, + { true, FT_INT, "FileDataID6" }, + { true, FT_INT, "Color1" }, + { true, FT_INT, "Color2" }, + { true, FT_INT, "Color3" }, + { true, FT_INT, "Color4" }, + { true, FT_INT, "Color5" }, + { true, FT_INT, "Color6" }, { false, FT_FLOAT, "StartInset" }, { false, FT_FLOAT, "EndInset" }, { false, FT_SHORT, "StartPower" }, @@ -5076,7 +5076,7 @@ struct VehicleLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Flags" }, + { true, FT_INT, "Flags" }, { false, FT_FLOAT, "TurnSpeed" }, { false, FT_FLOAT, "PitchSpeed" }, { false, FT_FLOAT, "PitchMin" }, @@ -5101,7 +5101,7 @@ struct VehicleLoadInfo { false, FT_SHORT, "PowerDisplayID2" }, { false, FT_SHORT, "PowerDisplayID3" }, { false, FT_BYTE, "FlagsB" }, - { false, FT_BYTE, "UILocomotionType" }, + { false, FT_BYTE, "UiLocomotionType" }, { true, FT_INT, "MissileTargetingID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, VehicleMeta::Instance(), HOTFIX_SEL_VEHICLE); @@ -5116,9 +5116,9 @@ struct VehicleSeatLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Flags1" }, - { false, FT_INT, "Flags2" }, - { false, FT_INT, "Flags3" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "FlagsB" }, + { true, FT_INT, "FlagsC" }, { false, FT_FLOAT, "AttachmentOffsetX" }, { false, FT_FLOAT, "AttachmentOffsetY" }, { false, FT_FLOAT, "AttachmentOffsetZ" }, @@ -5153,7 +5153,7 @@ struct VehicleSeatLoadInfo { false, FT_FLOAT, "CameraEnteringZoom" }, { false, FT_FLOAT, "CameraSeatZoomMin" }, { false, FT_FLOAT, "CameraSeatZoomMax" }, - { false, FT_INT, "UISkinFileDataID" }, + { true, FT_INT, "UiSkinFileDataID" }, { true, FT_SHORT, "EnterAnimStart" }, { true, FT_SHORT, "EnterAnimLoop" }, { true, FT_SHORT, "RideAnimStart" }, @@ -5166,19 +5166,19 @@ struct VehicleSeatLoadInfo { true, FT_SHORT, "VehicleEnterAnim" }, { true, FT_SHORT, "VehicleExitAnim" }, { true, FT_SHORT, "VehicleRideAnimLoop" }, - { false, FT_SHORT, "EnterAnimKitID" }, - { false, FT_SHORT, "RideAnimKitID" }, - { false, FT_SHORT, "ExitAnimKitID" }, - { false, FT_SHORT, "VehicleEnterAnimKitID" }, - { false, FT_SHORT, "VehicleRideAnimKitID" }, - { false, FT_SHORT, "VehicleExitAnimKitID" }, - { false, FT_SHORT, "CameraModeID" }, + { true, FT_SHORT, "EnterAnimKitID" }, + { true, FT_SHORT, "RideAnimKitID" }, + { true, FT_SHORT, "ExitAnimKitID" }, + { true, FT_SHORT, "VehicleEnterAnimKitID" }, + { true, FT_SHORT, "VehicleRideAnimKitID" }, + { true, FT_SHORT, "VehicleExitAnimKitID" }, + { true, FT_SHORT, "CameraModeID" }, { true, FT_BYTE, "AttachmentID" }, { true, FT_BYTE, "PassengerAttachmentID" }, { true, FT_BYTE, "VehicleEnterAnimBone" }, { true, FT_BYTE, "VehicleExitAnimBone" }, { true, FT_BYTE, "VehicleRideAnimLoopBone" }, - { false, FT_BYTE, "VehicleAbilityDisplay" }, + { true, FT_BYTE, "VehicleAbilityDisplay" }, { false, FT_INT, "EnterUISoundID" }, { false, FT_INT, "ExitUISoundID" }, }; @@ -5194,20 +5194,20 @@ struct WmoAreaTableLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "AreaName" }, - { true, FT_INT, "WMOGroupID" }, + { true, FT_INT, "WmoGroupID" }, { false, FT_SHORT, "AmbienceID" }, { false, FT_SHORT, "ZoneMusic" }, { false, FT_SHORT, "IntroSound" }, { false, FT_SHORT, "AreaTableID" }, - { false, FT_SHORT, "UWIntroSound" }, - { false, FT_SHORT, "UWAmbience" }, - { true, FT_BYTE, "NameSet" }, + { false, FT_SHORT, "UwIntroSound" }, + { false, FT_SHORT, "UwAmbience" }, + { false, FT_BYTE, "NameSetID" }, { false, FT_BYTE, "SoundProviderPref" }, { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "ID" }, - { false, FT_INT, "UWZoneMusic" }, - { true, FT_SHORT, "WMOID" }, + { false, FT_INT, "UwZoneMusic" }, + { false, FT_SHORT, "WmoID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WMOAreaTableMeta::Instance(), HOTFIX_SEL_WMO_AREA_TABLE); return &loadInfo; @@ -5221,7 +5221,7 @@ struct WorldEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TargetAsset" }, + { true, FT_INT, "TargetAsset" }, { false, FT_SHORT, "CombatConditionID" }, { false, FT_BYTE, "TargetType" }, { false, FT_BYTE, "WhenToDisplay" }, @@ -5245,17 +5245,17 @@ struct WorldMapAreaLoadInfo { false, FT_FLOAT, "LocTop" }, { false, FT_FLOAT, "LocBottom" }, { false, FT_INT, "Flags" }, - { false, FT_SHORT, "MapID" }, + { true, FT_SHORT, "MapID" }, { false, FT_SHORT, "AreaID" }, { true, FT_SHORT, "DisplayMapID" }, - { true, FT_SHORT, "DefaultDungeonFloor" }, + { false, FT_SHORT, "DefaultDungeonFloor" }, { false, FT_SHORT, "ParentWorldMapID" }, { false, FT_BYTE, "LevelRangeMin" }, { false, FT_BYTE, "LevelRangeMax" }, { false, FT_BYTE, "BountySetID" }, - { false, FT_BYTE, "BountyBoardLocation" }, + { false, FT_BYTE, "BountyDisplayLocation" }, { false, FT_INT, "ID" }, - { false, FT_INT, "PlayerConditionID" }, + { false, FT_INT, "VisibilityPlayerConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapAreaMeta::Instance(), HOTFIX_SEL_WORLD_MAP_AREA); return &loadInfo; @@ -5273,10 +5273,6 @@ struct WorldMapOverlayLoadInfo { false, FT_SHORT, "TextureWidth" }, { false, FT_SHORT, "TextureHeight" }, { false, FT_INT, "MapAreaID" }, - { false, FT_INT, "AreaID1" }, - { false, FT_INT, "AreaID2" }, - { false, FT_INT, "AreaID3" }, - { false, FT_INT, "AreaID4" }, { true, FT_INT, "OffsetX" }, { true, FT_INT, "OffsetY" }, { true, FT_INT, "HitRectTop" }, @@ -5285,6 +5281,10 @@ struct WorldMapOverlayLoadInfo { true, FT_INT, "HitRectRight" }, { false, FT_INT, "PlayerConditionID" }, { false, FT_INT, "Flags" }, + { false, FT_INT, "AreaID1" }, + { false, FT_INT, "AreaID2" }, + { false, FT_INT, "AreaID3" }, + { false, FT_INT, "AreaID4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapOverlayMeta::Instance(), HOTFIX_SEL_WORLD_MAP_OVERLAY); return &loadInfo; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 99b8f08495a..dd3d58b1340 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -93,16 +93,16 @@ DB2Storage<EmotesTextEntry> sEmotesTextStore("EmotesText.db2 DB2Storage<EmotesTextSoundEntry> sEmotesTextSoundStore("EmotesTextSound.db2", EmotesTextSoundLoadInfo::Instance()); DB2Storage<FactionEntry> sFactionStore("Faction.db2", FactionLoadInfo::Instance()); DB2Storage<FactionTemplateEntry> sFactionTemplateStore("FactionTemplate.db2", FactionTemplateLoadInfo::Instance()); -DB2Storage<GameObjectsEntry> sGameObjectsStore("GameObjects.db2", GameobjectsLoadInfo::Instance()); DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", GameobjectDisplayInfoLoadInfo::Instance()); +DB2Storage<GameObjectsEntry> sGameObjectsStore("GameObjects.db2", GameobjectsLoadInfo::Instance()); DB2Storage<GarrAbilityEntry> sGarrAbilityStore("GarrAbility.db2", GarrAbilityLoadInfo::Instance()); DB2Storage<GarrBuildingEntry> sGarrBuildingStore("GarrBuilding.db2", GarrBuildingLoadInfo::Instance()); DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore("GarrBuildingPlotInst.db2", GarrBuildingPlotInstLoadInfo::Instance()); DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore("GarrClassSpec.db2", GarrClassSpecLoadInfo::Instance()); DB2Storage<GarrFollowerEntry> sGarrFollowerStore("GarrFollower.db2", GarrFollowerLoadInfo::Instance()); DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", GarrFollowerXAbilityLoadInfo::Instance()); -DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingLoadInfo::Instance()); DB2Storage<GarrPlotEntry> sGarrPlotStore("GarrPlot.db2", GarrPlotLoadInfo::Instance()); +DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingLoadInfo::Instance()); DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore("GarrPlotInstance.db2", GarrPlotInstanceLoadInfo::Instance()); DB2Storage<GarrSiteLevelEntry> sGarrSiteLevelStore("GarrSiteLevel.db2", GarrSiteLevelLoadInfo::Instance()); DB2Storage<GarrSiteLevelPlotInstEntry> sGarrSiteLevelPlotInstStore("GarrSiteLevelPlotInst.db2", GarrSiteLevelPlotInstLoadInfo::Instance()); @@ -321,7 +321,7 @@ typedef std::unordered_map<uint32, std::unordered_map<uint32, std::vector<SpellP typedef std::unordered_map<uint32, std::vector<SpellProcsPerMinuteModEntry const*>> SpellProcsPerMinuteModContainer; typedef std::vector<TalentEntry const*> TalentsByPosition[MAX_CLASSES][MAX_TALENT_TIERS][MAX_TALENT_COLUMNS]; typedef std::unordered_set<uint32> ToyItemIdsContainer; -typedef std::tuple<int16, int8, int32> WMOAreaTableKey; +typedef std::tuple<uint16, uint8, int32> WMOAreaTableKey; typedef std::map<WMOAreaTableKey, WMOAreaTableEntry const*> WMOAreaTableLookupContainer; typedef std::unordered_map<uint32, WorldMapAreaEntry const*> WorldMapAreaByAreaIDContainer; @@ -707,12 +707,12 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (ArtifactPowerLinkEntry const* artifactPowerLink : sArtifactPowerLinkStore) { - _artifactPowerLinks[artifactPowerLink->FromArtifactPowerID].insert(artifactPowerLink->ToArtifactPowerID); - _artifactPowerLinks[artifactPowerLink->ToArtifactPowerID].insert(artifactPowerLink->FromArtifactPowerID); + _artifactPowerLinks[artifactPowerLink->PowerA].insert(artifactPowerLink->PowerB); + _artifactPowerLinks[artifactPowerLink->PowerB].insert(artifactPowerLink->PowerA); } for (ArtifactPowerRankEntry const* artifactPowerRank : sArtifactPowerRankStore) - _artifactPowerRanks[std::pair<uint32, uint8>{ artifactPowerRank->ArtifactPowerID, artifactPowerRank->Rank }] = artifactPowerRank; + _artifactPowerRanks[std::pair<uint32, uint8>{ artifactPowerRank->ArtifactPowerID, artifactPowerRank->RankIndex }] = artifactPowerRank; ASSERT(BATTLE_PET_SPECIES_MAX_ID >= sBattlePetSpeciesStore.GetNumRows(), "BATTLE_PET_SPECIES_MAX_ID (%d) must be equal to or greater than %u", BATTLE_PET_SPECIES_MAX_ID, sBattlePetSpeciesStore.GetNumRows()); @@ -723,12 +723,12 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) std::array<CharBaseSectionVariation, SECTION_TYPE_MAX> sectionToBase = { {} }; for (CharBaseSectionEntry const* charBaseSection : sCharBaseSectionStore) { - ASSERT(charBaseSection->ResolutionVariation < SECTION_TYPE_MAX, - "SECTION_TYPE_MAX (%d) must be equal to or greater than %u", uint32(SECTION_TYPE_MAX), uint32(charBaseSection->ResolutionVariation + 1)); - ASSERT(charBaseSection->Variation < AsUnderlyingType(CharBaseSectionVariation::Count), - "CharBaseSectionVariation::Count %u must be equal to or greater than %u", uint32(CharBaseSectionVariation::Count), uint32(charBaseSection->Variation + 1)); + ASSERT(charBaseSection->ResolutionVariationEnum < SECTION_TYPE_MAX, + "SECTION_TYPE_MAX (%d) must be equal to or greater than %u", uint32(SECTION_TYPE_MAX), uint32(charBaseSection->ResolutionVariationEnum + 1)); + ASSERT(charBaseSection->VariationEnum < AsUnderlyingType(CharBaseSectionVariation::Count), + "CharBaseSectionVariation::Count %u must be equal to or greater than %u", uint32(CharBaseSectionVariation::Count), uint32(charBaseSection->VariationEnum + 1)); - sectionToBase[charBaseSection->ResolutionVariation] = static_cast<CharBaseSectionVariation>(charBaseSection->Variation); + sectionToBase[charBaseSection->ResolutionVariationEnum] = static_cast<CharBaseSectionVariation>(charBaseSection->VariationEnum); } std::map<std::tuple<uint8, uint8, CharBaseSectionVariation>, std::set<std::pair<uint8, uint8>>> addedSections; @@ -747,7 +747,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) } for (CharStartOutfitEntry const* outfit : sCharStartOutfitStore) - _charStartOutfits[outfit->RaceID | (outfit->ClassID << 8) | (outfit->GenderID << 16)] = outfit; + _charStartOutfits[outfit->RaceID | (outfit->ClassID << 8) | (outfit->SexID << 16)] = outfit; { std::set<ChrClassesXPowerTypesEntry const*, ChrClassesXPowerTypesEntryComparator> powers; @@ -794,14 +794,14 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) _curvePoints[curvePoint->CurveID].push_back(curvePoint); for (auto itr = _curvePoints.begin(); itr != _curvePoints.end(); ++itr) - std::sort(itr->second.begin(), itr->second.end(), [](CurvePointEntry const* point1, CurvePointEntry const* point2) { return point1->Index < point2->Index; }); + std::sort(itr->second.begin(), itr->second.end(), [](CurvePointEntry const* point1, CurvePointEntry const* point2) { return point1->OrderIndex < point2->OrderIndex; }); ASSERT(MAX_DIFFICULTY >= sDifficultyStore.GetNumRows(), "MAX_DIFFICULTY is not large enough to contain all difficulties! (current value %d, required %d)", MAX_DIFFICULTY, sDifficultyStore.GetNumRows()); for (EmotesTextSoundEntry const* emoteTextSound : sEmotesTextSoundStore) - _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextId, emoteTextSound->RaceId, emoteTextSound->SexId, emoteTextSound->ClassId)] = emoteTextSound; + _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextID, emoteTextSound->RaceID, emoteTextSound->SexID, emoteTextSound->ClassID)] = emoteTextSound; for (FactionEntry const* faction : sFactionStore) if (faction->ParentFactionID) @@ -827,44 +827,44 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) _glyphRequiredSpecs[glyphRequiredSpec->GlyphPropertiesID].push_back(glyphRequiredSpec->ChrSpecializationID); for (ItemBonusEntry const* bonus : sItemBonusStore) - _itemBonusLists[bonus->BonusListID].push_back(bonus); + _itemBonusLists[bonus->ParentItemBonusListID].push_back(bonus); for (ItemBonusListLevelDeltaEntry const* itemBonusListLevelDelta : sItemBonusListLevelDeltaStore) - _itemLevelDeltaToBonusListContainer[itemBonusListLevelDelta->Delta] = itemBonusListLevelDelta->ID; + _itemLevelDeltaToBonusListContainer[itemBonusListLevelDelta->ItemLevelDelta] = itemBonusListLevelDelta->ID; for (ItemBonusTreeNodeEntry const* bonusTreeNode : sItemBonusTreeNodeStore) { - uint32 bonusTreeId = bonusTreeNode->BonusTreeID; + uint32 bonusTreeId = bonusTreeNode->ParentItemBonusTreeID; while (bonusTreeNode) { _itemBonusTrees[bonusTreeId].insert(bonusTreeNode); - bonusTreeNode = sItemBonusTreeNodeStore.LookupEntry(bonusTreeNode->SubTreeID); + bonusTreeNode = sItemBonusTreeNodeStore.LookupEntry(bonusTreeNode->ChildItemBonusTreeID); } } for (ItemChildEquipmentEntry const* itemChildEquipment : sItemChildEquipmentStore) { - ASSERT(_itemChildEquipment.find(itemChildEquipment->ItemID) == _itemChildEquipment.end(), "Item must have max 1 child item."); - _itemChildEquipment[itemChildEquipment->ItemID] = itemChildEquipment; + ASSERT(_itemChildEquipment.find(itemChildEquipment->ParentItemID) == _itemChildEquipment.end(), "Item must have max 1 child item."); + _itemChildEquipment[itemChildEquipment->ParentItemID] = itemChildEquipment; } for (ItemClassEntry const* itemClass : sItemClassStore) { - ASSERT(itemClass->OldEnumValue < _itemClassByOldEnum.size()); - ASSERT(!_itemClassByOldEnum[itemClass->OldEnumValue]); - _itemClassByOldEnum[itemClass->OldEnumValue] = itemClass; + ASSERT(itemClass->ClassID < int32(_itemClassByOldEnum.size())); + ASSERT(!_itemClassByOldEnum[itemClass->ClassID]); + _itemClassByOldEnum[itemClass->ClassID] = itemClass; } for (ItemCurrencyCostEntry const* itemCurrencyCost : sItemCurrencyCostStore) - _itemsWithCurrencyCost.insert(itemCurrencyCost->ItemId); + _itemsWithCurrencyCost.insert(itemCurrencyCost->ItemID); for (ItemLevelSelectorQualityEntry const* itemLevelSelectorQuality : sItemLevelSelectorQualityStore) - _itemLevelQualitySelectorQualities[itemLevelSelectorQuality->ItemLevelSelectorQualitySetID].insert(itemLevelSelectorQuality); + _itemLevelQualitySelectorQualities[itemLevelSelectorQuality->ParentILSQualitySetID].insert(itemLevelSelectorQuality); for (ItemModifiedAppearanceEntry const* appearanceMod : sItemModifiedAppearanceStore) { ASSERT(appearanceMod->ItemID <= 0xFFFFFF); - _itemModifiedAppearancesByItem[appearanceMod->ItemID | (appearanceMod->AppearanceModID << 24)] = appearanceMod; + _itemModifiedAppearancesByItem[appearanceMod->ItemID | (appearanceMod->ItemAppearanceModifierID << 24)] = appearanceMod; } for (ItemSetSpellEntry const* itemSetSpell : sItemSetSpellStore) @@ -874,14 +874,14 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) _itemSpecOverrides[itemSpecOverride->ItemID].push_back(itemSpecOverride); for (ItemXBonusTreeEntry const* itemBonusTreeAssignment : sItemXBonusTreeStore) - _itemToBonusTree.insert({ itemBonusTreeAssignment->ItemID, itemBonusTreeAssignment->BonusTreeID }); + _itemToBonusTree.insert({ itemBonusTreeAssignment->ItemID, itemBonusTreeAssignment->ItemBonusTreeID }); 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 for (MountEntry const* mount : sMountStore) - _mountsBySpellId[mount->SpellId] = mount; + _mountsBySpellId[mount->SourceSpellID] = mount; for (MountTypeXCapabilityEntry const* mountTypeCapability : sMountTypeXCapabilityStore) _mountCapabilitiesByType[mountTypeCapability->MountTypeID].insert(mountTypeCapability); @@ -890,7 +890,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) _mountDisplays[mountDisplay->MountID].push_back(mountDisplay); for (NameGenEntry const* nameGen : sNameGenStore) - _nameGenData[nameGen->Race][nameGen->Sex].push_back(nameGen); + _nameGenData[nameGen->RaceID][nameGen->Sex].push_back(nameGen); for (NamesProfanityEntry const* namesProfanity : sNamesProfanityStore) { @@ -947,14 +947,14 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (PVPDifficultyEntry const* entry : sPVPDifficultyStore) { - ASSERT(entry->BracketID < MAX_BATTLEGROUND_BRACKETS, "PvpDifficulty bracket (%d) exceeded max allowed value (%d)", entry->BracketID, MAX_BATTLEGROUND_BRACKETS); + ASSERT(entry->RangeIndex < MAX_BATTLEGROUND_BRACKETS, "PvpDifficulty bracket (%d) exceeded max allowed value (%d)", entry->RangeIndex, MAX_BATTLEGROUND_BRACKETS); } for (PVPItemEntry const* pvpItem : sPVPItemStore) - _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelBonus; + _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta; for (PvpRewardEntry const* pvpReward : sPvpRewardStore) - _pvpRewardPack[std::make_pair(pvpReward->Prestige, pvpReward->HonorLevel)] = pvpReward->RewardPackID; + _pvpRewardPack[std::make_pair(pvpReward->PrestigeLevel, pvpReward->HonorLevel)] = pvpReward->RewardPackID; for (PvpTalentEntry const* talentInfo : sPvpTalentStore) { @@ -979,10 +979,10 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (QuestPackageItemEntry const* questPackageItem : sQuestPackageItemStore) { - if (questPackageItem->FilterType != QUEST_PACKAGE_FILTER_UNMATCHED) - _questPackages[questPackageItem->QuestPackageID].first.push_back(questPackageItem); + if (questPackageItem->DisplayType != QUEST_PACKAGE_FILTER_UNMATCHED) + _questPackages[questPackageItem->PackageID].first.push_back(questPackageItem); else - _questPackages[questPackageItem->QuestPackageID].second.push_back(questPackageItem); + _questPackages[questPackageItem->PackageID].second.push_back(questPackageItem); } for (RewardPackXItemEntry const* rewardPackXItem : sRewardPackXItemStore) @@ -1006,18 +1006,18 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) if (SpellPowerDifficultyEntry const* powerDifficulty = sSpellPowerDifficultyStore.LookupEntry(power->ID)) { std::vector<SpellPowerEntry const*>& powers = _spellPowerDifficulties[power->SpellID][powerDifficulty->DifficultyID]; - if (powers.size() <= powerDifficulty->PowerIndex) - powers.resize(powerDifficulty->PowerIndex + 1); + if (powers.size() <= powerDifficulty->OrderIndex) + powers.resize(powerDifficulty->OrderIndex + 1); - powers[powerDifficulty->PowerIndex] = power; + powers[powerDifficulty->OrderIndex] = power; } else { std::vector<SpellPowerEntry const*>& powers = _spellPowers[power->SpellID]; - if (powers.size() <= power->PowerIndex) - powers.resize(power->PowerIndex + 1); + if (powers.size() <= power->OrderIndex) + powers.resize(power->OrderIndex + 1); - powers[power->PowerIndex] = power; + powers[power->OrderIndex] = power; } } @@ -1034,7 +1034,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) } for (TaxiPathEntry const* entry : sTaxiPathStore) - sTaxiPathSetBySource[entry->From][entry->To] = TaxiPathBySourceAndDestination(entry->ID, entry->Cost); + sTaxiPathSetBySource[entry->FromTaxiNode][entry->ToTaxiNode] = TaxiPathBySourceAndDestination(entry->ID, entry->Cost); uint32 pathCount = sTaxiPathStore.GetNumRows(); @@ -1084,7 +1084,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) sAllianceTaxiNodesMask[field] |= submask; uint32 nodeMap; - DeterminaAlternateMapPosition(node->MapID, node->Pos.X, node->Pos.Y, node->Pos.Z, &nodeMap); + DeterminaAlternateMapPosition(node->ContinentID, node->Pos.X, node->Pos.Y, node->Pos.Z, &nodeMap); if (nodeMap < 2) sOldContinentsNodesMask[field] |= submask; } @@ -1104,7 +1104,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) } for (WMOAreaTableEntry const* entry : sWMOAreaTableStore) - _wmoAreaTableLookup[WMOAreaTableKey(entry->WMOID, entry->NameSet, entry->WMOGroupID)] = entry; + _wmoAreaTableLookup[WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry; for (WorldMapAreaEntry const* worldMapArea : sWorldMapAreaStore) _worldMapAreaByAreaID[worldMapArea->AreaID] = worldMapArea; @@ -1259,18 +1259,18 @@ ArtifactPowerRankEntry const* DB2Manager::GetArtifactPowerRank(uint32 artifactPo char const* DB2Manager::GetBroadcastTextValue(BroadcastTextEntry const* broadcastText, LocaleConstant locale /*= DEFAULT_LOCALE*/, uint8 gender /*= GENDER_MALE*/, bool forceGender /*= false*/) { - if ((gender == GENDER_FEMALE || gender == GENDER_NONE) && (forceGender || broadcastText->FemaleText->Str[DEFAULT_LOCALE][0] != '\0')) + if ((gender == GENDER_FEMALE || gender == GENDER_NONE) && (forceGender || broadcastText->Text1->Str[DEFAULT_LOCALE][0] != '\0')) { - if (broadcastText->FemaleText->Str[locale][0] != '\0') - return broadcastText->FemaleText->Str[locale]; + if (broadcastText->Text1->Str[locale][0] != '\0') + return broadcastText->Text1->Str[locale]; - return broadcastText->FemaleText->Str[DEFAULT_LOCALE]; + return broadcastText->Text1->Str[DEFAULT_LOCALE]; } - if (broadcastText->MaleText->Str[locale][0] != '\0') - return broadcastText->MaleText->Str[locale]; + if (broadcastText->Text->Str[locale][0] != '\0') + return broadcastText->Text->Str[locale]; - return broadcastText->MaleText->Str[DEFAULT_LOCALE]; + return broadcastText->Text->Str[DEFAULT_LOCALE]; } bool DB2Manager::HasCharacterFacialHairStyle(uint8 race, uint8 gender, uint8 variationId) const @@ -1416,82 +1416,82 @@ float DB2Manager::GetCurveValueAt(uint32 curveId, float x) const case CurveInterpolationMode::Linear: { std::size_t pointIndex = 0; - while (pointIndex < points.size() && points[pointIndex]->X <= x) + while (pointIndex < points.size() && points[pointIndex]->Pos.X <= x) ++pointIndex; if (!pointIndex) - return points[0]->Y; + return points[0]->Pos.Y; if (pointIndex >= points.size()) - return points.back()->Y; - float xDiff = points[pointIndex]->X - points[pointIndex - 1]->X; + return points.back()->Pos.Y; + float xDiff = points[pointIndex]->Pos.X - points[pointIndex - 1]->Pos.X; if (xDiff == 0.0) - return points[pointIndex]->Y; - return (((x - points[pointIndex - 1]->X) / xDiff) * (points[pointIndex]->Y - points[pointIndex - 1]->Y)) + points[pointIndex - 1]->Y; + return points[pointIndex]->Pos.Y; + return (((x - points[pointIndex - 1]->Pos.X) / xDiff) * (points[pointIndex]->Pos.Y - points[pointIndex - 1]->Pos.Y)) + points[pointIndex - 1]->Pos.Y; } case CurveInterpolationMode::Cosine: { std::size_t pointIndex = 0; - while (pointIndex < points.size() && points[pointIndex]->X <= x) + while (pointIndex < points.size() && points[pointIndex]->Pos.X <= x) ++pointIndex; if (!pointIndex) - return points[0]->Y; + return points[0]->Pos.Y; if (pointIndex >= points.size()) - return points.back()->Y; - float xDiff = points[pointIndex]->X - points[pointIndex - 1]->X; + return points.back()->Pos.Y; + float xDiff = points[pointIndex]->Pos.X - points[pointIndex - 1]->Pos.X; if (xDiff == 0.0) - return points[pointIndex]->Y; - return ((points[pointIndex]->Y - points[pointIndex - 1]->Y) * (1.0f - std::cos((x - points[pointIndex - 1]->X) / xDiff * float(M_PI))) * 0.5f) + points[pointIndex - 1]->Y; + return points[pointIndex]->Pos.Y; + return ((points[pointIndex]->Pos.Y - points[pointIndex - 1]->Pos.Y) * (1.0f - std::cos((x - points[pointIndex - 1]->Pos.X) / xDiff * float(M_PI))) * 0.5f) + points[pointIndex - 1]->Pos.Y; } case CurveInterpolationMode::CatmullRom: { std::size_t pointIndex = 1; - while (pointIndex < points.size() && points[pointIndex]->X <= x) + while (pointIndex < points.size() && points[pointIndex]->Pos.X <= x) ++pointIndex; if (pointIndex == 1) - return points[1]->Y; + return points[1]->Pos.Y; if (pointIndex >= points.size() - 1) - return points[points.size() - 2]->Y; - float xDiff = points[pointIndex]->X - points[pointIndex - 1]->X; + return points[points.size() - 2]->Pos.Y; + float xDiff = points[pointIndex]->Pos.X - points[pointIndex - 1]->Pos.X; if (xDiff == 0.0) - return points[pointIndex]->Y; + return points[pointIndex]->Pos.Y; - float mu = (x - points[pointIndex - 1]->X) / xDiff; - float a0 = -0.5f * points[pointIndex - 2]->Y + 1.5f * points[pointIndex - 1]->Y - 1.5f * points[pointIndex]->Y + 0.5f * points[pointIndex + 1]->Y; - float a1 = points[pointIndex - 2]->Y - 2.5f * points[pointIndex - 1]->Y + 2.0f * points[pointIndex]->Y - 0.5f * points[pointIndex + 1]->Y; - float a2 = -0.5f * points[pointIndex - 2]->Y + 0.5f * points[pointIndex]->Y; - float a3 = points[pointIndex - 1]->Y; + float mu = (x - points[pointIndex - 1]->Pos.X) / xDiff; + float a0 = -0.5f * points[pointIndex - 2]->Pos.Y + 1.5f * points[pointIndex - 1]->Pos.Y - 1.5f * points[pointIndex]->Pos.Y + 0.5f * points[pointIndex + 1]->Pos.Y; + float a1 = points[pointIndex - 2]->Pos.Y - 2.5f * points[pointIndex - 1]->Pos.Y + 2.0f * points[pointIndex]->Pos.Y - 0.5f * points[pointIndex + 1]->Pos.Y; + float a2 = -0.5f * points[pointIndex - 2]->Pos.Y + 0.5f * points[pointIndex]->Pos.Y; + float a3 = points[pointIndex - 1]->Pos.Y; return a0 * mu * mu * mu + a1 * mu * mu + a2 * mu + a3; } case CurveInterpolationMode::Bezier3: { - float xDiff = points[2]->X - points[0]->X; + float xDiff = points[2]->Pos.X - points[0]->Pos.X; if (xDiff == 0.0) - return points[1]->Y; - float mu = (x - points[0]->X) / xDiff; - return ((1.0f - mu) * (1.0f - mu) * points[0]->Y) + (1.0f - mu) * 2.0f * mu * points[1]->Y + mu * mu * points[2]->Y; + return points[1]->Pos.Y; + float mu = (x - points[0]->Pos.X) / xDiff; + return ((1.0f - mu) * (1.0f - mu) * points[0]->Pos.Y) + (1.0f - mu) * 2.0f * mu * points[1]->Pos.Y + mu * mu * points[2]->Pos.Y; } case CurveInterpolationMode::Bezier4: { - float xDiff = points[3]->X - points[0]->X; + float xDiff = points[3]->Pos.X - points[0]->Pos.X; if (xDiff == 0.0) - return points[1]->Y; - float mu = (x - points[0]->X) / xDiff; - return (1.0f - mu) * (1.0f - mu) * (1.0f - mu) * points[0]->Y - + 3.0f * mu * (1.0f - mu) * (1.0f - mu) * points[1]->Y - + 3.0f * mu * mu * (1.0f - mu) * points[2]->Y - + mu * mu * mu * points[3]->Y; + return points[1]->Pos.Y; + float mu = (x - points[0]->Pos.X) / xDiff; + return (1.0f - mu) * (1.0f - mu) * (1.0f - mu) * points[0]->Pos.Y + + 3.0f * mu * (1.0f - mu) * (1.0f - mu) * points[1]->Pos.Y + + 3.0f * mu * mu * (1.0f - mu) * points[2]->Pos.Y + + mu * mu * mu * points[3]->Pos.Y; } case CurveInterpolationMode::Bezier: { - float xDiff = points.back()->X - points[0]->X; + float xDiff = points.back()->Pos.X - points[0]->Pos.X; if (xDiff == 0.0f) - return points.back()->Y; + return points.back()->Pos.Y; std::vector<float> tmp(points.size()); for (std::size_t i = 0; i < points.size(); ++i) - tmp[i] = points[i]->Y; + tmp[i] = points[i]->Pos.Y; - float mu = (x - points[0]->X) / xDiff; + float mu = (x - points[0]->Pos.X) / xDiff; int32 i = int32(points.size()) - 1; while (i > 0) { @@ -1505,7 +1505,7 @@ float DB2Manager::GetCurveValueAt(uint32 curveId, float x) const return tmp[0]; } case CurveInterpolationMode::Constant: - return points[0]->Y; + return points[0]->Pos.Y; default: break; } @@ -1580,7 +1580,7 @@ uint32 DB2Manager::GetItemBonusListForItemLevelDelta(int16 delta) const return 0; } -std::set<uint32> DB2Manager::GetItemBonusTree(uint32 itemId, uint32 itemBonusTreeMod) const +std::set<uint32> DB2Manager::GetItemBonusTree(uint32 itemId, uint32 itemContext) const { std::set<uint32> bonusListIDs; @@ -1600,20 +1600,20 @@ std::set<uint32> DB2Manager::GetItemBonusTree(uint32 itemId, uint32 itemBonusTre for (ItemBonusTreeNodeEntry const* bonusTreeNode : treeItr->second) { - if (bonusTreeNode->BonusTreeModID != itemBonusTreeMod) + if (bonusTreeNode->ItemContext != itemContext) continue; - if (bonusTreeNode->BonusListID) + if (bonusTreeNode->ChildItemBonusListID) { - bonusListIDs.insert(bonusTreeNode->BonusListID); + bonusListIDs.insert(bonusTreeNode->ChildItemBonusListID); } - else if (bonusTreeNode->ItemLevelSelectorID) + else if (bonusTreeNode->ChildItemLevelSelectorID) { - ItemLevelSelectorEntry const* selector = sItemLevelSelectorStore.LookupEntry(bonusTreeNode->ItemLevelSelectorID); + ItemLevelSelectorEntry const* selector = sItemLevelSelectorStore.LookupEntry(bonusTreeNode->ChildItemLevelSelectorID); if (!selector) continue; - int16 delta = int16(selector->ItemLevel) - proto->ItemLevel; + int16 delta = int16(selector->MinItemLevel) - proto->ItemLevel; if (uint32 bonus = GetItemBonusListForItemLevelDelta(delta)) bonusListIDs.insert(bonus); @@ -1624,16 +1624,16 @@ std::set<uint32> DB2Manager::GetItemBonusTree(uint32 itemId, uint32 itemBonusTre if (itemSelectorQualities != _itemLevelQualitySelectorQualities.end()) { ItemQualities quality = ITEM_QUALITY_UNCOMMON; - if (selector->ItemLevel >= selectorQualitySet->ItemLevelMax) + if (selector->MinItemLevel >= selectorQualitySet->IlvlEpic) quality = ITEM_QUALITY_EPIC; - else if (selector->ItemLevel >= selectorQualitySet->ItemLevelMin) + else if (selector->MinItemLevel >= selectorQualitySet->IlvlRare) quality = ITEM_QUALITY_RARE; auto itemSelectorQuality = std::lower_bound(itemSelectorQualities->second.begin(), itemSelectorQualities->second.end(), quality, ItemLevelSelectorQualityEntryComparator{}); if (itemSelectorQuality != itemSelectorQualities->second.end()) - bonusListIDs.insert((*itemSelectorQuality)->ItemBonusListID); + bonusListIDs.insert((*itemSelectorQuality)->QualityItemBonusListID); } } } @@ -1665,8 +1665,8 @@ bool DB2Manager::HasItemCurrencyCost(uint32 itemId) const uint32 DB2Manager::GetItemDisplayId(uint32 itemId, uint32 appearanceModId) const { if (ItemModifiedAppearanceEntry const* modifiedAppearance = GetItemModifiedAppearance(itemId, appearanceModId)) - if (ItemAppearanceEntry const* itemAppearance = sItemAppearanceStore.LookupEntry(modifiedAppearance->AppearanceID)) - return itemAppearance->DisplayID; + if (ItemAppearanceEntry const* itemAppearance = sItemAppearanceStore.LookupEntry(modifiedAppearance->ItemAppearanceID)) + return itemAppearance->ItemDisplayInfoID; return 0; } @@ -1732,7 +1732,7 @@ uint32 DB2Manager::GetDefaultMapLight(uint32 mapId) if (!light) continue; - if (light->MapID == mapId && light->Pos.X == 0.0f && light->Pos.Y == 0.0f && light->Pos.Z == 0.0f) + if (light->ContinentID == int32(mapId) && light->GameCoords.X == 0.0f && light->GameCoords.Y == 0.0f && light->GameCoords.Z == 0.0f) return uint32(i); } @@ -1742,7 +1742,7 @@ uint32 DB2Manager::GetDefaultMapLight(uint32 mapId) uint32 DB2Manager::GetLiquidFlags(uint32 liquidType) { if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(liquidType)) - return 1 << liq->Type; + return 1 << liq->SoundBank; return 0; } @@ -1846,7 +1846,7 @@ DB2Manager::MountXDisplayContainer const* DB2Manager::GetMountDisplays(uint32 mo return Trinity::Containers::MapGetValuePtr(_mountDisplays, mountId); } -std::string DB2Manager::GetNameGenEntry(uint8 race, uint8 gender, LocaleConstant locale, LocaleConstant defaultLocale) const +std::string DB2Manager::GetNameGenEntry(uint8 race, uint8 gender) const { ASSERT(gender < GENDER_NONE); auto ritr = _nameGenData.find(race); @@ -1856,11 +1856,7 @@ std::string DB2Manager::GetNameGenEntry(uint8 race, uint8 gender, LocaleConstant if (ritr->second[gender].empty()) return ""; - LocalizedString* data = Trinity::Containers::SelectRandomContainerElement(ritr->second[gender])->Name; - if (*data->Str[locale] != '\0') - return data->Str[locale]; - - return data->Str[defaultLocale]; + return Trinity::Containers::SelectRandomContainerElement(ritr->second[gender])->Name; } ResponseCodes DB2Manager::ValidateName(std::wstring const& name, LocaleConstant locale) const @@ -1986,7 +1982,7 @@ PowerTypeEntry const* DB2Manager::GetPowerTypeByName(std::string const& name) co { for (PowerTypeEntry const* powerType : sPowerTypeStore) { - std::string powerName = powerType->PowerTypeToken; + std::string powerName = powerType->NameGlobalStringTag; std::transform(powerName.begin(), powerName.end(), powerName.begin(), [](char c) { return char(::tolower(c)); }); if (powerName == name) return powerType; @@ -2076,8 +2072,8 @@ std::vector<SpellPowerEntry const*> DB2Manager::GetSpellPowers(uint32 spellId, D powers.resize(powerDifficultyItr->second.size()); for (SpellPowerEntry const* difficultyPower : powerDifficultyItr->second) - if (!powers[difficultyPower->PowerIndex]) - powers[difficultyPower->PowerIndex] = difficultyPower; + if (!powers[difficultyPower->OrderIndex]) + powers[difficultyPower->OrderIndex] = difficultyPower; } difficultyEntry = sDifficultyStore.LookupEntry(difficultyEntry->FallbackDifficultyID); @@ -2091,8 +2087,8 @@ std::vector<SpellPowerEntry const*> DB2Manager::GetSpellPowers(uint32 spellId, D powers.resize(itr->second.size()); for (SpellPowerEntry const* power : itr->second) - if (!powers[power->PowerIndex]) - powers[power->PowerIndex] = power; + if (!powers[power->OrderIndex]) + powers[power->OrderIndex] = power; } return powers; @@ -2126,10 +2122,10 @@ bool DB2Manager::IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint3 if (!reqEntry) return false; - if (itemEntry->CategoryType != reqEntry->CategoryType) + if (itemEntry->TotemCategoryType != reqEntry->TotemCategoryType) return false; - return (itemEntry->CategoryMask & reqEntry->CategoryMask) == reqEntry->CategoryMask; + return (itemEntry->TotemCategoryMask & reqEntry->TotemCategoryMask) == reqEntry->TotemCategoryMask; } bool DB2Manager::IsToyItem(uint32 toy) const diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index f81a79a7bae..886ab57822f 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -82,16 +82,16 @@ TC_GAME_API extern DB2Storage<EmotesEntry> sEmotesStore TC_GAME_API extern DB2Storage<EmotesTextEntry> sEmotesTextStore; TC_GAME_API extern DB2Storage<FactionEntry> sFactionStore; TC_GAME_API extern DB2Storage<FactionTemplateEntry> sFactionTemplateStore; -TC_GAME_API extern DB2Storage<GameObjectsEntry> sGameObjectsStore; TC_GAME_API extern DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore; +TC_GAME_API extern DB2Storage<GameObjectsEntry> sGameObjectsStore; TC_GAME_API extern DB2Storage<GarrAbilityEntry> sGarrAbilityStore; TC_GAME_API extern DB2Storage<GarrBuildingEntry> sGarrBuildingStore; TC_GAME_API extern DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore; 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<GarrPlotBuildingEntry> sGarrPlotBuildingStore; TC_GAME_API extern DB2Storage<GarrPlotEntry> sGarrPlotStore; +TC_GAME_API extern DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore; TC_GAME_API extern DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore; TC_GAME_API extern DB2Storage<GarrSiteLevelEntry> sGarrSiteLevelStore; TC_GAME_API extern DB2Storage<GarrSiteLevelPlotInstEntry> sGarrSiteLevelPlotInstStore; @@ -280,7 +280,7 @@ public: std::vector<uint32> const* GetGlyphRequiredSpecs(uint32 glyphPropertiesId) const; ItemBonusList const* GetItemBonusList(uint32 bonusListId) const; uint32 GetItemBonusListForItemLevelDelta(int16 delta) const; - std::set<uint32> GetItemBonusTree(uint32 itemId, uint32 itemBonusTreeMod) const; + std::set<uint32> GetItemBonusTree(uint32 itemId, uint32 itemContext) const; ItemChildEquipmentEntry const* GetItemChildEquipment(uint32 itemId) const; ItemClassEntry const* GetItemClassByOldEnum(uint32 itemClass) const; bool HasItemCurrencyCost(uint32 itemId) const; @@ -296,7 +296,7 @@ public: MapDifficultyEntry const* GetDefaultMapDifficulty(uint32 mapId, Difficulty* difficulty = nullptr) const; MapDifficultyEntry const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty) const; MapDifficultyEntry const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty) const; - std::string GetNameGenEntry(uint8 race, uint8 gender, LocaleConstant locale, LocaleConstant defaultLocale) const; + std::string GetNameGenEntry(uint8 race, uint8 gender) const; MountEntry const* GetMount(uint32 spellId) const; MountEntry const* GetMountById(uint32 id) const; MountTypeXCapabilitySet const* GetMountCapabilities(uint32 mountType) const; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index c5cbaf90105..57c73c701b0 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -31,17 +31,17 @@ struct AchievementEntry LocalizedString* Title; LocalizedString* Description; LocalizedString* Reward; - uint32 Flags; - int16 MapID; // -1 = none - uint16 Supercedes; // its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin) - uint16 Category; - uint16 UIOrder; - uint16 SharesCriteria; // referenced achievement (counting of all completed criterias) - int8 Faction; // -1 = all, 0 = horde, 1 = alliance - uint8 Points; - uint8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias) - uint32 ID; - uint32 IconFileDataID; + int32 Flags; + int16 InstanceID; // -1 = none + int16 Supercedes; // its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin) + int16 Category; + int16 UiOrder; + int16 SharesCriteria; // referenced achievement (counting of all completed criterias) + int8 Faction; // -1 = all, 0 = horde, 1 = alliance + int8 Points; + int8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias) + uint32 ID; + int32 IconFileID; uint32 CriteriaTree; }; @@ -65,32 +65,32 @@ struct AreaTableEntry uint32 ID; char const* ZoneName; LocalizedString* AreaName; - uint32 Flags[2]; + int32 Flags[2]; float AmbientMultiplier; - uint16 MapID; + uint16 ContinentID; uint16 ParentAreaID; int16 AreaBit; uint16 AmbienceID; uint16 ZoneMusic; uint16 IntroSound; uint16 LiquidTypeID[4]; - uint16 UWZoneMusic; - uint16 UWAmbience; - uint16 PvPCombatWorldStateID; + uint16 UwZoneMusic; + uint16 UwAmbience; + int16 PvpCombatWorldStateID; uint8 SoundProviderPref; uint8 SoundProviderPrefUnderwater; - uint8 ExplorationLevel; + int8 ExplorationLevel; uint8 FactionGroupMask; uint8 MountFlags; uint8 WildBattlePetLevelMin; uint8 WildBattlePetLevelMax; uint8 WindSettingsID; - uint32 UWIntroSound; + uint32 UwIntroSound; // helpers bool IsSanctuary() const { - if (MapID == 609) + if (ContinentID == 609) return true; return (Flags[0] & AREA_FLAG_SANCTUARY) != 0; } @@ -104,32 +104,36 @@ struct AreaTriggerEntry float BoxWidth; float BoxHeight; float BoxYaw; - uint16 MapID; - uint16 PhaseID; - uint16 PhaseGroupID; - uint16 ShapeID; - uint16 AreaTriggerActionSetID; - uint8 PhaseUseFlags; - uint8 ShapeType; - uint8 Flag; + int16 ContinentID; + int16 PhaseID; + int16 PhaseGroupID; + int16 ShapeID; + int16 AreaTriggerActionSetID; + int8 PhaseUseFlags; + int8 ShapeType; + int8 Flags; uint32 ID; }; struct ArmorLocationEntry { uint32 ID; - float Modifier[5]; + float Clothmodifier; + float Leathermodifier; + float Chainmodifier; + float Platemodifier; + float Modifier; }; struct ArtifactEntry { uint32 ID; LocalizedString* Name; - uint32 BarConnectedColor; - uint32 BarDisconnectedColor; - uint32 TitleColor; - uint16 ClassUiTextureKitID; - uint16 SpecID; + int32 UiBarOverlayColor; + int32 UiBarBackgroundColor; + int32 UiNameColor; + uint16 UiTextureKitID; + uint16 ChrSpecializationID; uint8 ArtifactCategoryID; uint8 Flags; uint32 UiModelSceneID; @@ -139,30 +143,30 @@ struct ArtifactEntry struct ArtifactAppearanceEntry { LocalizedString* Name; - uint32 SwatchColor; - float ModelDesaturation; - float ModelAlpha; - uint32 ShapeshiftDisplayID; + int32 UiSwatchColor; + float UiModelSaturation; + float UiModelOpacity; + uint32 OverrideShapeshiftDisplayID; uint16 ArtifactAppearanceSetID; - uint16 Unknown; + uint16 UiCameraID; uint8 DisplayIndex; - uint8 AppearanceModID; + uint8 ItemAppearanceModifierID; uint8 Flags; - uint8 ModifiesShapeshiftFormDisplay; + uint8 OverrideShapeshiftFormID; uint32 ID; - uint32 PlayerConditionID; - uint32 ItemAppearanceID; - uint32 AltItemAppearanceID; + uint32 UnlockPlayerConditionID; + uint32 UiItemAppearanceID; + uint32 UiAltItemAppearanceID; }; struct ArtifactAppearanceSetEntry { LocalizedString* Name; - LocalizedString* Name2; + LocalizedString* Description; uint16 UiCameraID; uint16 AltHandUICameraID; uint8 DisplayIndex; - uint8 AttachmentPoint; + int8 ForgeAttachmentOverride; uint8 Flags; uint32 ID; uint8 ArtifactID; @@ -171,8 +175,8 @@ struct ArtifactAppearanceSetEntry struct ArtifactCategoryEntry { uint32 ID; - uint16 ArtifactKnowledgeCurrencyID; - uint16 ArtifactKnowledgeMultiplierCurveID; + int16 XpMultCurrencyID; + int16 XpMultCurveID; }; struct ArtifactPowerEntry @@ -180,17 +184,17 @@ struct ArtifactPowerEntry DBCPosition2D Pos; uint8 ArtifactID; uint8 Flags; - uint8 MaxRank; - uint8 ArtifactTier; + uint8 MaxPurchasableRank; + uint8 Tier; uint32 ID; - int32 RelicType; + int32 Label; }; struct ArtifactPowerLinkEntry { uint32 ID; - uint16 FromArtifactPowerID; - uint16 ToArtifactPowerID; + uint16 PowerA; + uint16 PowerB; }; struct ArtifactPowerPickerEntry @@ -202,17 +206,17 @@ struct ArtifactPowerPickerEntry struct ArtifactPowerRankEntry { uint32 ID; - uint32 SpellID; - float Value; - uint16 Unknown; - uint8 Rank; + int32 SpellID; + float AuraPointsOverride; + uint16 ItemBonusListID; + uint8 RankIndex; uint16 ArtifactPowerID; }; struct ArtifactQuestXPEntry { uint32 ID; - uint32 Exp[10]; + uint32 Difficulty[10]; }; struct AuctionHouseEntry @@ -253,39 +257,39 @@ struct BarberShopStyleEntry struct BattlePetBreedQualityEntry { uint32 ID; - float Modifier; - uint8 Quality; + float StateMultiplier; + uint8 QualityEnum; }; struct BattlePetBreedStateEntry { uint32 ID; - int16 Value; - uint8 State; - uint8 BreedID; + uint16 Value; + uint8 BattlePetStateID; + uint8 BattlePetBreedID; }; struct BattlePetSpeciesEntry { LocalizedString* SourceText; LocalizedString* Description; - uint32 CreatureID; - uint32 IconFileID; - uint32 SummonSpellID; + int32 CreatureID; + int32 IconFileDataID; + int32 SummonSpellID; uint16 Flags; - uint8 PetType; - int8 Source; + uint8 PetTypeEnum; + int8 SourceTypeEnum; uint32 ID; - uint32 CardModelSceneID; - uint32 LoadoutModelSceneID; + int32 CardUIModelSceneID; + int32 LoadoutUIModelSceneID; }; struct BattlePetSpeciesStateEntry { uint32 ID; int32 Value; - uint8 State; - uint16 SpeciesID; + uint8 BattlePetStateID; + uint16 BattlePetSpeciesID; }; struct BattlemasterListEntry @@ -295,19 +299,19 @@ struct BattlemasterListEntry LocalizedString* GameType; LocalizedString* ShortDescription; LocalizedString* LongDescription; - uint32 IconFileDataID; + int32 IconFileDataID; int16 MapID[16]; - uint16 HolidayWorldState; - uint16 PlayerConditionID; - uint8 InstanceType; - uint8 GroupsAllowed; - uint8 MaxGroupSize; - uint8 MinLevel; - uint8 MaxLevel; - uint8 RatedPlayers; - uint8 MinPlayers; - uint8 MaxPlayers; - uint8 Flags; + int16 HolidayWorldState; + int16 RequiredPlayerConditionID; + int8 InstanceType; + int8 GroupsAllowed; + int8 MaxGroupSize; + int8 MinLevel; + int8 MaxLevel; + int8 RatedPlayers; + int8 MinPlayers; + int8 MaxPlayers; + int8 Flags; }; #define MAX_BROADCAST_TEXT_EMOTES 3 @@ -315,21 +319,21 @@ struct BattlemasterListEntry struct BroadcastTextEntry { uint32 ID; - LocalizedString* MaleText; - LocalizedString* FemaleText; + LocalizedString* Text; + LocalizedString* Text1; uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; - uint16 UnkEmoteID; - uint8 Language; - uint8 Type; - uint32 PlayerConditionID; - uint32 SoundID[2]; + uint16 EmotesID; + uint8 LanguageID; + uint8 Flags; + int32 ConditionID; + uint32 SoundEntriesID[2]; }; struct CharacterFacialHairStylesEntry { uint32 ID; - uint32 Geoset[5]; + int32 Geoset[5]; uint8 RaceID; uint8 SexID; uint8 VariationID; @@ -338,21 +342,21 @@ struct CharacterFacialHairStylesEntry struct CharBaseSectionEntry { uint32 ID; - uint8 Variation; - uint8 ResolutionVariation; - uint8 Resolution; + uint8 VariationEnum; + uint8 ResolutionVariationEnum; + uint8 LayoutResType; }; struct CharSectionsEntry { uint32 ID; - uint32 TextureFileDataID[3]; - uint16 Flags; - uint8 RaceID; - uint8 SexID; - uint8 BaseSection; - uint8 VariationIndex; - uint8 ColorIndex; + int32 MaterialResourcesID[3]; + int16 Flags; + int8 RaceID; + int8 SexID; + int8 BaseSection; + int8 VariationIndex; + int8 ColorIndex; }; #define MAX_OUTFIT_ITEMS 24 @@ -363,7 +367,7 @@ struct CharStartOutfitEntry int32 ItemID[MAX_OUTFIT_ITEMS]; uint32 PetDisplayID; // Pet Model ID for starting pet uint8 ClassID; - uint8 GenderID; + uint8 SexID; uint8 OutfitID; uint8 PetFamilyID; // Pet Family Entry for starting pet uint8 RaceID; @@ -372,10 +376,10 @@ struct CharStartOutfitEntry struct CharTitlesEntry { uint32 ID; - LocalizedString* NameMale; - LocalizedString* NameFemale; - uint16 MaskID; - uint8 Flags; + LocalizedString* Name; + LocalizedString* Name1; + int16 MaskID; + int8 Flags; }; struct ChatChannelsEntry @@ -383,8 +387,8 @@ struct ChatChannelsEntry uint32 ID; LocalizedString* Name; LocalizedString* Shortcut; - uint32 Flags; - uint8 FactionGroup; + int32 Flags; + int8 FactionGroup; }; struct ChrClassesEntry @@ -396,18 +400,18 @@ struct ChrClassesEntry char const* Filename; uint32 CreateScreenFileDataID; uint32 SelectScreenFileDataID; - uint32 IconFileDataID; uint32 LowResScreenFileDataID; - uint32 StartingLevel; + uint32 IconFileDataID; + int32 StartingLevel; uint16 Flags; uint16 CinematicSequenceID; uint16 DefaultSpec; - uint8 PowerType; + uint8 DisplayPower; uint8 SpellClassSet; uint8 AttackPowerPerStrength; uint8 AttackPowerPerAgility; uint8 RangedAttackPowerPerAgility; - uint8 Unk1; + uint8 PrimaryStatPriority; uint32 ID; }; @@ -424,40 +428,40 @@ struct ChrRacesEntry char const* ClientFileString; LocalizedString* Name; LocalizedString* NameFemale; - LocalizedString* LowercaseName; - LocalizedString* LowercaseNameFemale; - uint32 Flags; - uint32 MaleDisplayID; - uint32 FemaleDisplayID; - uint32 CreateScreenFileDataID; - uint32 SelectScreenFileDataID; + LocalizedString* NameLowercase; + LocalizedString* NameFemaleLowercase; + int32 Flags; + uint32 MaleDisplayId; + uint32 FemaleDisplayId; + int32 CreateScreenFileDataID; + int32 SelectScreenFileDataID; float MaleCustomizeOffset[3]; float FemaleCustomizeOffset[3]; - uint32 LowResScreenFileDataID; - uint32 StartingLevel; - uint32 UIDisplayOrder; - uint16 FactionID; - uint16 ResSicknessSpellID; - uint16 SplashSoundID; - uint16 CinematicSequenceID; - uint8 BaseLanguage; - uint8 CreatureType; - uint8 TeamID; - uint8 RaceRelated; - uint8 UnalteredVisualRaceID; - uint8 CharComponentTextureLayoutID; - uint8 DefaultClassID; - uint8 NeutralRaceID; - uint8 ItemAppearanceFrameRaceID; - uint8 CharComponentTexLayoutHiResID; - uint32 ID; - uint32 HighResMaleDisplayID; - uint32 HighResFemaleDisplayID; - uint32 HeritageArmorAchievementID; - uint32 MaleCorpseBonesModelFileDataID; - uint32 FemaleCorpseBonesModelFileDataID; - uint32 AlteredFormTransitionSpellVisualID[3]; - uint32 AlteredFormTransitionSpellVisualKitID[3]; + int32 LowResScreenFileDataID; + int32 StartingLevel; + int32 UiDisplayOrder; + int16 FactionID; + int16 ResSicknessSpellID; + int16 SplashSoundID; + int16 CinematicSequenceID; + int8 BaseLanguage; + int8 CreatureType; + int8 Alliance; + int8 RaceRelated; + int8 UnalteredVisualRaceID; + int8 CharComponentTextureLayoutID; + int8 DefaultClassID; + int8 NeutralRaceID; + int8 DisplayRaceID; + int8 CharComponentTexLayoutHiResID; + uint32 ID; + uint32 HighResMaleDisplayId; + uint32 HighResFemaleDisplayId; + int32 HeritageArmorAchievementID; + int32 MaleSkeletonFileDataID; + int32 FemaleSkeletonFileDataID; + uint32 AlteredFormStartVisualKitID[3]; + uint32 AlteredFormFinishVisualKitID[3]; }; #define MAX_MASTERY_SPELLS 2 @@ -465,18 +469,18 @@ struct ChrRacesEntry struct ChrSpecializationEntry { LocalizedString* Name; - LocalizedString* Name2; + LocalizedString* FemaleName; LocalizedString* Description; - uint32 MasterySpellID[MAX_MASTERY_SPELLS]; - uint8 ClassID; - uint8 OrderIndex; - uint8 PetTalentType; - uint8 Role; - uint8 PrimaryStatOrder; - uint32 ID; - uint32 IconFileDataID; + int32 MasterySpellID[MAX_MASTERY_SPELLS]; + int8 ClassID; + int8 OrderIndex; + int8 PetTalentType; + int8 Role; + int8 PrimaryStatPriority; + uint32 ID; + int32 SpellIconFileID; uint32 Flags; - uint32 AnimReplacementSetID; + int32 AnimReplacements; bool IsPetSpecialization() const { @@ -489,8 +493,8 @@ struct CinematicCameraEntry uint32 ID; uint32 SoundID; // Sound ID (voiceover for cinematic) DBCPosition3D Origin; // Position in map used for basis for M2 co-ordinates - float OriginFacing; // Orientation in map used for basis for M2 co-ordinates - uint32 ModelFileDataID; // Model + float OriginFacing; // Orientation in map used for basis for M2 co- + uint32 FileDataID; // Model }; struct CinematicSequencesEntry @@ -505,12 +509,12 @@ struct ConversationLineEntry uint32 ID; uint32 BroadcastTextID; uint32 SpellVisualKitID; - uint32 Duration; - uint16 NextLineID; - uint16 Unk1; - uint8 Yell; - uint8 Unk2; - uint8 Unk3; + int32 AdditionalDuration; + uint16 NextConversationLineID; + uint16 AnimKitID; + uint8 SpeechType; + uint8 StartAnimation; + uint8 EndAnimation; }; struct CreatureDisplayInfoEntry @@ -519,42 +523,42 @@ struct CreatureDisplayInfoEntry float CreatureModelScale; uint16 ModelID; uint16 NPCSoundID; - uint8 SizeClass; + int8 SizeClass; uint8 Flags; int8 Gender; - uint32 ExtendedDisplayInfoID; - uint32 PortraitTextureFileDataID; + int32 ExtendedDisplayInfoID; + int32 PortraitTextureFileDataID; uint8 CreatureModelAlpha; uint16 SoundID; - float PlayerModelScale; - uint32 PortraitCreatureDisplayInfoID; + float PlayerOverrideScale; + int32 PortraitCreatureDisplayInfoID; uint8 BloodID; uint16 ParticleColorID; uint32 CreatureGeosetData; uint16 ObjectEffectPackageID; uint16 AnimReplacementSetID; - int8 UnarmedWeaponSubclass; - uint32 StateSpellVisualKitID; - float InstanceOtherPlayerPetScale; // scale of not own player pets inside dungeons/raids/scenarios - uint32 MountSpellVisualKitID; - uint32 TextureVariation[3]; + int8 UnarmedWeaponType; + int32 StateSpellVisualKitID; + float PetInstanceScale; // scale of not own player pets inside dungeons/raids/scenarios + int32 MountPoofSpellVisualKitID; + int32 TextureVariationFileDataID[3]; }; struct CreatureDisplayInfoExtraEntry { uint32 ID; - uint32 FileDataID; - uint32 HDFileDataID; - uint8 DisplayRaceID; - uint8 DisplaySexID; - uint8 DisplayClassID; - uint8 SkinID; - uint8 FaceID; - uint8 HairStyleID; - uint8 HairColorID; - uint8 FacialHairID; + int32 BakeMaterialResourcesID; + int32 HDBakeMaterialResourcesID; + int8 DisplayRaceID; + int8 DisplaySexID; + int8 DisplayClassID; + int8 SkinID; + int8 FaceID; + int8 HairStyleID; + int8 HairColorID; + int8 FacialHairID; uint8 CustomDisplayOption[3]; - uint8 Flags; + int8 Flags; }; struct CreatureFamilyEntry @@ -563,12 +567,12 @@ struct CreatureFamilyEntry LocalizedString* Name; float MinScale; float MaxScale; - uint32 IconFileDataID; - uint16 SkillLine[2]; - uint16 PetFoodMask; - uint8 MinScaleLevel; - uint8 MaxScaleLevel; - uint8 PetTalentType; + int32 IconFileID; + int16 SkillLine[2]; + int16 PetFoodMask; + int8 MinScaleLevel; + int8 MaxScaleLevel; + int8 PetTalentType; }; struct CreatureModelDataEntry @@ -581,8 +585,7 @@ struct CreatureModelDataEntry float CollisionWidth; float CollisionHeight; float MountHeight; - float GeoBoxMin[3]; - float GeoBoxMax[3]; + float GeoBox[6]; float WorldEffectScale; float AttachedEffectScale; float MissileCollisionRadius; @@ -599,8 +602,8 @@ struct CreatureModelDataEntry uint32 BloodID; uint32 FootprintTextureID; uint32 FoleyMaterialID; - uint32 FootstepEffectID; - uint32 DeathThudEffectID; + uint32 FootstepCameraEffectID; + uint32 DeathThudCameraEffectID; uint32 SoundID; uint32 CreatureGeosetDataID; }; @@ -609,7 +612,7 @@ struct CreatureTypeEntry { uint32 ID; LocalizedString* Name; - uint8 Flags; // no exp? critters, non-combat pets, gas cloud. + uint8 Flags; }; struct CriteriaEntry @@ -744,25 +747,25 @@ struct CriteriaEntry // CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 uint32 ArtifactPowerID; } Asset; - uint32 StartAsset; - uint32 FailAsset; + int32 StartAsset; + int32 FailAsset; uint32 ModifierTreeId; uint16 StartTimer; - uint16 EligibilityWorldStateID; + int16 EligibilityWorldStateID; uint8 Type; uint8 StartEvent; uint8 FailEvent; uint8 Flags; - uint8 EligibilityWorldStateValue; + int8 EligibilityWorldStateValue; }; struct CriteriaTreeEntry { uint32 ID; LocalizedString* Description; - uint32 Amount; - uint16 Flags; - uint8 Operator; + int32 Amount; + int16 Flags; + int8 Operator; uint32 CriteriaID; uint32 Parent; int32 OrderIndex; @@ -779,7 +782,7 @@ struct CurrencyTypesEntry uint8 CategoryID; uint8 SpellCategory; uint8 Quality; - uint32 InventoryIconFileDataID; + int32 InventoryIconFileID; uint32 SpellWeight; }; @@ -787,40 +790,39 @@ struct CurveEntry { uint32 ID; uint8 Type; - uint8 Unused; + uint8 Flags; }; struct CurvePointEntry { uint32 ID; - float X; - float Y; + DBCPosition2D Pos; uint16 CurveID; - uint8 Index; + uint8 OrderIndex; }; struct DestructibleModelDataEntry { uint32 ID; - uint16 StateDamagedDisplayID; - uint16 StateDestroyedDisplayID; - uint16 StateRebuildingDisplayID; - uint16 StateSmokeDisplayID; + uint16 State0Wmo; + uint16 State1Wmo; + uint16 State2Wmo; + uint16 State3Wmo; uint16 HealEffectSpeed; - uint8 StateDamagedImpactEffectDoodadSet; - uint8 StateDamagedAmbientDoodadSet; - uint8 StateDamagedNameSet; - uint8 StateDestroyedDestructionDoodadSet; - uint8 StateDestroyedImpactEffectDoodadSet; - uint8 StateDestroyedAmbientDoodadSet; - uint8 StateDestroyedNameSet; - uint8 StateRebuildingDestructionDoodadSet; - uint8 StateRebuildingImpactEffectDoodadSet; - uint8 StateRebuildingAmbientDoodadSet; - uint8 StateRebuildingNameSet; - uint8 StateSmokeInitDoodadSet; - uint8 StateSmokeAmbientDoodadSet; - uint8 StateSmokeNameSet; + int8 State0ImpactEffectDoodadSet; + uint8 State0AmbientDoodadSet; + int8 State0NameSet; + int8 State1DestructionDoodadSet; + int8 State1ImpactEffectDoodadSet; + uint8 State1AmbientDoodadSet; + int8 State1NameSet; + int8 State2DestructionDoodadSet; + int8 State2ImpactEffectDoodadSet; + uint8 State2AmbientDoodadSet; + int8 State2NameSet; + uint8 State3InitDoodadSet; + uint8 State3AmbientDoodadSet; + int8 State3NameSet; uint8 EjectDirection; uint8 DoNotHighlight; uint8 HealEffect; @@ -840,21 +842,21 @@ struct DifficultyEntry int8 OldEnumValue; uint8 Flags; uint8 ToggleDifficultyID; - uint8 ItemBonusTreeModID; + uint8 ItemContext; uint8 OrderIndex; }; struct DungeonEncounterEntry { LocalizedString* Name; - uint32 CreatureDisplayID; - uint16 MapID; - uint8 DifficultyID; - uint8 Bit; + int32 CreatureDisplayID; + int16 MapID; + int8 DifficultyID; + int8 Bit; uint8 Flags; uint32 ID; int32 OrderIndex; - uint32 TextureFileDataID; + int32 SpellIconFileID; }; struct DurabilityCostsEntry @@ -867,7 +869,7 @@ struct DurabilityCostsEntry struct DurabilityQualityEntry { uint32 ID; - float QualityMod; + float Data; }; struct EmotesEntry @@ -875,49 +877,47 @@ struct EmotesEntry uint32 ID; int64 RaceMask; char const* EmoteSlashCommand; - uint32 SpellVisualKitID; uint32 EmoteFlags; - uint16 AnimID; + uint32 SpellVisualKitID; + int16 AnimID; uint8 EmoteSpecProc; - uint32 EmoteSpecProcParam; - uint32 EmoteSoundID; int32 ClassMask; + uint32 EmoteSpecProcParam; + uint32 EventSoundID; }; struct EmotesTextEntry { uint32 ID; - LocalizedString* Name; + char const* Name; uint16 EmoteID; }; struct EmotesTextSoundEntry { uint32 ID; - uint8 RaceId; - uint8 SexId; - uint8 ClassId; - uint32 SoundId; - uint16 EmotesTextId; + uint8 RaceID; + uint8 SexID; + uint8 ClassID; + uint32 SoundID; + uint16 EmotesTextID; }; struct FactionEntry { - uint64 ReputationRaceMask[4]; + int64 ReputationRaceMask[4]; LocalizedString* Name; LocalizedString* Description; uint32 ID; int32 ReputationBase[4]; - float ParentFactionModIn; // Faction gains incoming rep * ParentFactionModIn - float ParentFactionModOut; // Faction outputs rep * ParentFactionModOut as spillover reputation - uint32 ReputationMax[4]; + float ParentFactionMod[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation + int32 ReputationMax[4]; int16 ReputationIndex; - uint16 ReputationClassMask[4]; + int16 ReputationClassMask[4]; uint16 ReputationFlags[4]; uint16 ParentFactionID; uint16 ParagonFactionID; - uint8 ParentFactionCapIn; // The highest rank the faction will profit from incoming spillover - uint8 ParentFactionCapOut; + uint8 ParentFactionCap[2]; // The highest rank the faction will profit from incoming spillover uint8 Expansion; uint8 Flags; uint8 FriendshipRepID; @@ -937,10 +937,10 @@ struct FactionTemplateEntry uint16 Faction; uint16 Flags; uint16 Enemies[MAX_FACTION_RELATIONS]; - uint16 Friends[MAX_FACTION_RELATIONS]; - uint8 Mask; - uint8 FriendMask; - uint8 EnemyMask; + uint16 Friend[MAX_FACTION_RELATIONS]; + uint8 FactionGroup; + uint8 FriendGroup; + uint8 EnemyGroup; //------------------------------------------------------- end structure @@ -955,10 +955,10 @@ struct FactionTemplateEntry if (Enemies[i] == entry->Faction) return false; for (int32 i = 0; i < MAX_FACTION_RELATIONS; ++i) - if (Friends[i] == entry->Faction) + if (Friend[i] == entry->Faction) return true; } - return (FriendMask & entry->Mask) || (Mask & entry->FriendMask); + return (FriendGroup & entry->FactionGroup) || (FactionGroup & entry->FriendGroup); } bool IsHostileTo(FactionTemplateEntry const* entry) const { @@ -970,97 +970,94 @@ struct FactionTemplateEntry if (Enemies[i] == entry->Faction) return true; for (int32 i = 0; i < MAX_FACTION_RELATIONS; ++i) - if (Friends[i] == entry->Faction) + if (Friend[i] == entry->Faction) return false; } - return (EnemyMask & entry->Mask) != 0; + return (EnemyGroup & entry->FactionGroup) != 0; } - bool IsHostileToPlayers() const { return (EnemyMask & FACTION_MASK_PLAYER) !=0; } + bool IsHostileToPlayers() const { return (EnemyGroup & FACTION_MASK_PLAYER) !=0; } bool IsNeutralToAll() const { for (int i = 0; i < MAX_FACTION_RELATIONS; ++i) if (Enemies[i] != 0) return false; - return EnemyMask == 0 && FriendMask == 0; + return EnemyGroup == 0 && FriendGroup == 0; } bool IsContestedGuardFaction() const { return (Flags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD) != 0; } bool ShouldSparAttack() const { return (Flags & FACTION_TEMPLATE_ENEMY_SPAR) != 0; } }; +struct GameObjectDisplayInfoEntry +{ + uint32 ID; + int32 FileDataID; + DBCPosition3D GeoBoxMin; + DBCPosition3D GeoBoxMax; + float OverrideLootEffectScale; + float OverrideNameScale; + int16 ObjectEffectPackageID; +}; + struct GameObjectsEntry { LocalizedString* Name; - DBCPosition3D Position; - float RotationX; - float RotationY; - float RotationZ; - float RotationW; - float Size; - int32 Data[8]; - uint16 MapID; + DBCPosition3D Pos; + float Rot[4]; + float Scale; + int32 PropValue[8]; + uint16 OwnerID; uint16 DisplayID; uint16 PhaseID; uint16 PhaseGroupID; uint8 PhaseUseFlags; - uint8 Type; + uint8 TypeID; uint32 ID; }; -struct GameObjectDisplayInfoEntry -{ - uint32 ID; - uint32 FileDataID; - DBCPosition3D GeoBoxMin; - DBCPosition3D GeoBoxMax; - float OverrideLootEffectScale; - float OverrideNameScale; - uint16 ObjectEffectPackageID; -}; - struct GarrAbilityEntry { LocalizedString* Name; LocalizedString* Description; - uint32 IconFileDataID; + int32 IconFileDataID; uint16 Flags; - uint16 OtherFactionGarrAbilityID; + uint16 FactionChangeGarrAbilityID; uint8 GarrAbilityCategoryID; - uint8 FollowerTypeID; + uint8 GarrFollowerTypeID; uint32 ID; }; struct GarrBuildingEntry { uint32 ID; - LocalizedString* NameAlliance; - LocalizedString* NameHorde; + LocalizedString* AllianceName; + LocalizedString* HordeName; LocalizedString* Description; LocalizedString* Tooltip; - uint32 HordeGameObjectID; - uint32 AllianceGameObjectID; - uint32 IconFileDataID; - uint16 CostCurrencyID; - uint16 HordeTexPrefixKitID; - uint16 AllianceTexPrefixKitID; - uint16 AllianceActivationScenePackageID; - uint16 HordeActivationScenePackageID; - uint16 FollowerRequiredGarrAbilityID; - uint16 FollowerGarrAbilityEffectID; - int16 CostMoney; - uint8 Unknown; - uint8 Type; - uint8 Level; + int32 HordeGameObjectID; + int32 AllianceGameObjectID; + int32 IconFileDataID; + uint16 CurrencyTypeID; + uint16 HordeUiTextureKitID; + uint16 AllianceUiTextureKitID; + uint16 AllianceSceneScriptPackageID; + uint16 HordeSceneScriptPackageID; + uint16 GarrAbilityID; + uint16 BonusGarrAbilityID; + uint16 GoldCost; + uint8 GarrSiteID; + uint8 BuildingType; + uint8 UpgradeLevel; uint8 Flags; - uint8 MaxShipments; + uint8 ShipmentCapacity; uint8 GarrTypeID; - int32 BuildDuration; - int32 CostCurrencyAmount; - int32 BonusAmount; + int32 BuildSeconds; + int32 CurrencyQty; + int32 MaxAssignments; }; struct GarrBuildingPlotInstEntry { - DBCPosition2D LandmarkOffset; + DBCPosition2D MapOffset; uint16 UiTextureAtlasMemberID; uint16 GarrSiteLevelPlotInstID; uint8 GarrBuildingID; @@ -1069,12 +1066,12 @@ struct GarrBuildingPlotInstEntry struct GarrClassSpecEntry { - LocalizedString* NameMale; - LocalizedString* NameFemale; - LocalizedString* NameGenderless; - uint16 ClassAtlasID; // UiTextureAtlasMember.db2 ref + LocalizedString* ClassSpec; + LocalizedString* ClassSpecMale; + LocalizedString* ClassSpecFemale; + uint16 UiTextureAtlasMemberID; uint16 GarrFollItemSetID; - uint8 Limit; + uint8 FollowerClassLimit; uint8 Flags; uint32 ID; }; @@ -1083,35 +1080,35 @@ struct GarrFollowerEntry { LocalizedString* HordeSourceText; LocalizedString* AllianceSourceText; - LocalizedString* Name; - uint32 HordeCreatureID; - uint32 AllianceCreatureID; - uint32 HordePortraitIconID; - uint32 AlliancePortraitIconID; - uint32 HordeAddedBroadcastTextID; - uint32 AllianceAddedBroadcastTextID; + LocalizedString* TitleName; + int32 HordeCreatureID; + int32 AllianceCreatureID; + int32 HordeIconFileDataID; + int32 AllianceIconFileDataID; + uint32 HordeSlottingBroadcastTextID; + uint32 AllySlottingBroadcastTextID; uint16 HordeGarrFollItemSetID; uint16 AllianceGarrFollItemSetID; uint16 ItemLevelWeapon; uint16 ItemLevelArmor; - uint16 HordeListPortraitTextureKitID; - uint16 AllianceListPortraitTextureKitID; - uint8 FollowerTypeID; - uint8 HordeUiAnimRaceInfoID; - uint8 AllianceUiAnimRaceInfoID; + uint16 HordeUITextureKitID; + uint16 AllianceUITextureKitID; + uint8 GarrFollowerTypeID; + uint8 HordeGarrFollRaceID; + uint8 AllianceGarrFollRaceID; uint8 Quality; uint8 HordeGarrClassSpecID; uint8 AllianceGarrClassSpecID; - uint8 Level; - uint8 Unknown1; + uint8 FollowerLevel; + uint8 Gender; uint8 Flags; - int8 Unknown2; - int8 Unknown3; + int8 HordeSourceTypeEnum; + int8 AllianceSourceTypeEnum; uint8 GarrTypeID; - uint8 MaxDurability; - uint8 Class; - uint8 HordeFlavorTextGarrStringID; - uint8 AllianceFlavorTextGarrStringID; + uint8 Vitality; + uint8 ChrClassID; + uint8 HordeFlavorGarrStringID; + uint8 AllianceFlavorGarrStringID; uint32 ID; }; @@ -1127,13 +1124,12 @@ struct GarrPlotEntry { uint32 ID; LocalizedString* Name; - uint32 AllianceConstructionGameObjectID; - uint32 HordeConstructionGameObjectID; - uint8 GarrPlotUICategoryID; + int32 AllianceConstructObjID; + int32 HordeConstructObjID; + uint8 UiCategoryID; uint8 PlotType; uint8 Flags; - uint32 MinCount; - uint32 MaxCount; + uint32 UpgradeRequirement[2]; }; struct GarrPlotBuildingEntry @@ -1146,46 +1142,46 @@ struct GarrPlotBuildingEntry struct GarrPlotInstanceEntry { uint32 ID; - LocalizedString* Name; + char const* Name; uint8 GarrPlotID; }; struct GarrSiteLevelEntry { uint32 ID; - DBCPosition2D TownHall; + DBCPosition2D TownHallUiPos; uint16 MapID; - uint16 SiteID; - uint16 MovieID; - uint16 UpgradeResourceCost; - uint16 UpgradeMoneyCost; - uint8 Level; - uint8 UITextureKitID; - uint8 Level2; + uint16 UiTextureKitID; + uint16 UpgradeMovieID; + uint16 UpgradeCost; + uint16 UpgradeGoldCost; + uint8 GarrLevel; + uint8 GarrSiteID; + uint8 MaxBuildingLevel; }; struct GarrSiteLevelPlotInstEntry { uint32 ID; - DBCPosition2D Landmark; + DBCPosition2D UiMarkerPos; uint16 GarrSiteLevelID; uint8 GarrPlotInstanceID; - uint8 Unknown; + uint8 UiMarkerSize; }; struct GemPropertiesEntry { uint32 ID; uint32 Type; - uint16 EnchantID; + uint16 EnchantId; uint16 MinItemLevel; }; struct GlyphBindableSpellEntry { uint32 ID; - uint32 SpellID; - uint16 GlyphPropertiesID; + int32 SpellID; + int16 GlyphPropertiesID; }; struct GlyphPropertiesEntry @@ -1193,7 +1189,7 @@ struct GlyphPropertiesEntry uint32 ID; uint32 SpellID; uint16 SpellIconID; - uint8 Type; + uint8 GlyphType; uint8 GlyphExclusiveCategoryID; }; @@ -1231,19 +1227,20 @@ struct GuildColorEmblemEntry struct GuildPerkSpellsEntry { uint32 ID; - uint32 SpellID; + int32 SpellID; }; struct HeirloomEntry { LocalizedString* SourceText; - uint32 ItemID; - uint32 OldItem[2]; - uint32 NextDifficultyItemID; - uint32 UpgradeItemID[3]; - uint16 ItemBonusListID[3]; + int32 ItemID; + int32 LegacyItemID; + int32 LegacyUpgradedItemID; + int32 StaticUpgradedItemID; + int32 UpgradeItemID[3]; + uint16 UpgradeItemBonusListID[3]; uint8 Flags; - uint8 Source; + int8 SourceTypeEnum; uint32 ID; }; @@ -1270,57 +1267,57 @@ struct HolidaysEntry struct ImportPriceArmorEntry { uint32 ID; - float ClothFactor; - float LeatherFactor; - float MailFactor; - float PlateFactor; + float ClothModifier; + float LeatherModifier; + float ChainModifier; + float PlateModifier; }; struct ImportPriceQualityEntry { uint32 ID; - float Factor; + float Data; }; struct ImportPriceShieldEntry { uint32 ID; - float Factor; + float Data; }; struct ImportPriceWeaponEntry { uint32 ID; - float Factor; + float Data; }; struct ItemEntry { uint32 ID; - uint32 FileDataID; - uint8 Class; - uint8 SubClass; - int8 SoundOverrideSubclass; - int8 Material; + int32 IconFileDataID; + uint8 ClassID; + uint8 SubclassID; + int8 SoundOverrideSubclassID; + uint8 Material; uint8 InventoryType; - uint8 Sheath; - uint8 GroupSoundsID; + uint8 SheatheType; + uint8 ItemGroupSoundsID; }; struct ItemAppearanceEntry { uint32 ID; - uint32 DisplayID; - uint32 IconFileDataID; - uint32 UIOrder; - uint8 ObjectComponentSlot; + int32 ItemDisplayInfoID; + int32 DefaultIconFileDataID; + int32 UiOrder; + uint8 DisplayType; }; struct ItemArmorQualityEntry { uint32 ID; - float QualityMod[7]; - uint16 ItemLevel; + float Qualitymod[7]; + int16 ItemLevel; }; struct ItemArmorShieldEntry @@ -1333,8 +1330,11 @@ struct ItemArmorShieldEntry struct ItemArmorTotalEntry { uint32 ID; - float Value[4]; - uint16 ItemLevel; + float Cloth; + float Leather; + float Mail; + float Plate; + int16 ItemLevel; }; struct ItemBagFamilyEntry @@ -1347,109 +1347,109 @@ struct ItemBonusEntry { uint32 ID; int32 Value[3]; - uint16 BonusListID; + uint16 ParentItemBonusListID; uint8 Type; - uint8 Index; + uint8 OrderIndex; }; struct ItemBonusListLevelDeltaEntry { - int16 Delta; + int16 ItemLevelDelta; uint32 ID; }; struct ItemBonusTreeNodeEntry { uint32 ID; - uint16 SubTreeID; - uint16 BonusListID; - uint16 ItemLevelSelectorID; - uint8 BonusTreeModID; - uint16 BonusTreeID; + uint16 ChildItemBonusTreeID; + uint16 ChildItemBonusListID; + uint16 ChildItemLevelSelectorID; + uint8 ItemContext; + uint16 ParentItemBonusTreeID; }; struct ItemChildEquipmentEntry { uint32 ID; - uint32 AltItemID; - uint8 AltEquipmentSlot; - uint32 ItemID; + int32 ChildItemID; + uint8 ChildItemEquipSlot; + int32 ParentItemID; }; struct ItemClassEntry { uint32 ID; - LocalizedString* Name; - float PriceMod; - uint8 OldEnumValue; + LocalizedString* ClassName; + float PriceModifier; + int8 ClassID; uint8 Flags; }; struct ItemCurrencyCostEntry { uint32 ID; - uint32 ItemId; + int32 ItemID; }; struct ItemDamageAmmoEntry { uint32 ID; - float DPS[7]; + float Quality[7]; uint16 ItemLevel; }; struct ItemDamageOneHandEntry { uint32 ID; - float DPS[7]; + float Quality[7]; uint16 ItemLevel; }; struct ItemDamageOneHandCasterEntry { uint32 ID; - float DPS[7]; + float Quality[7]; uint16 ItemLevel; }; struct ItemDamageTwoHandEntry { uint32 ID; - float DPS[7]; + float Quality[7]; uint16 ItemLevel; }; struct ItemDamageTwoHandCasterEntry { uint32 ID; - float DPS[7]; + float Quality[7]; uint16 ItemLevel; }; struct ItemDisenchantLootEntry { uint32 ID; - uint16 MinItemLevel; - uint16 MaxItemLevel; - uint16 RequiredDisenchantSkill; - int8 ItemSubClass; - uint8 ItemQuality; - int8 Expansion; - uint8 ItemClass; + uint16 MinLevel; + uint16 MaxLevel; + uint16 SkillRequired; + int8 Subclass; + uint8 Quality; + int8 ExpansionID; + uint8 Class; }; struct ItemEffectEntry { uint32 ID; - uint32 SpellID; - int32 Cooldown; - int32 CategoryCooldown; + int32 SpellID; + int32 CoolDownMSec; + int32 CategoryCoolDownMSec; int16 Charges; - uint16 Category; + uint16 SpellCategoryID; uint16 ChrSpecializationID; - uint8 OrderIndex; - uint8 Trigger; - uint32 ItemID; + uint8 LegacySlotIndex; + int8 TriggerType; + int32 ParentItemID; }; #define MAX_ITEM_EXT_COST_ITEMS 5 @@ -1458,38 +1458,38 @@ struct ItemEffectEntry struct ItemExtendedCostEntry { uint32 ID; - uint32 RequiredItem[MAX_ITEM_EXT_COST_ITEMS]; // required item id - uint32 RequiredCurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count - uint16 RequiredItemCount[MAX_ITEM_EXT_COST_ITEMS]; // required count of 1st item - uint16 RequiredPersonalArenaRating; // required personal arena rating - uint16 RequiredCurrency[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency id - uint8 RequiredArenaSlot; // arena slot restrictions (min slot value) - uint8 RequiredFactionId; - uint8 RequiredFactionStanding; - uint8 RequirementFlags; + int32 ItemID[MAX_ITEM_EXT_COST_ITEMS]; // required item id + uint32 CurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count + uint16 ItemCount[MAX_ITEM_EXT_COST_ITEMS]; // required count of 1st item + uint16 RequiredArenaRating; // required personal arena rating + uint16 CurrencyID[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency id + uint8 ArenaBracket; // arena slot restrictions (min slot value) + uint8 MinFactionID; + uint8 MinReputation; + uint8 Flags; uint8 RequiredAchievement; }; struct ItemLevelSelectorEntry { uint32 ID; - uint16 ItemLevel; + uint16 MinItemLevel; uint16 ItemLevelSelectorQualitySetID; }; struct ItemLevelSelectorQualityEntry { uint32 ID; - uint32 ItemBonusListID; - uint8 Quality; - uint16 ItemLevelSelectorQualitySetID; + int32 QualityItemBonusListID; + int8 Quality; + int16 ParentILSQualitySetID; }; struct ItemLevelSelectorQualitySetEntry { uint32 ID; - uint16 ItemLevelMin; - uint16 ItemLevelMax; + int16 IlvlRare; + int16 IlvlEpic; }; struct ItemLimitCategoryEntry @@ -1502,19 +1502,19 @@ struct ItemLimitCategoryEntry struct ItemModifiedAppearanceEntry { - uint32 ItemID; + int32 ItemID; uint32 ID; - uint8 AppearanceModID; - uint16 AppearanceID; - uint8 Index; - uint8 SourceType; + uint8 ItemAppearanceModifierID; + uint16 ItemAppearanceID; + uint8 OrderIndex; + int8 TransmogSourceTypeEnum; }; struct ItemPriceBaseEntry { uint32 ID; - float ArmorFactor; - float WeaponFactor; + float Armor; + float Weapon; uint16 ItemLevel; }; @@ -1537,20 +1537,20 @@ struct ItemRandomSuffixEntry struct ItemSearchNameEntry { - uint64 AllowableRace; - LocalizedString* Name; + int64 AllowableRace; + LocalizedString* Display; uint32 ID; - uint32 Flags[3]; + int32 Flags[3]; uint16 ItemLevel; - uint8 Quality; - uint8 RequiredExpansion; - uint8 RequiredLevel; - uint16 RequiredReputationFaction; - uint8 RequiredReputationRank; + uint8 OverallQualityID; + uint8 ExpansionID; + int8 RequiredLevel; + uint16 MinFactionID; + uint8 MinReputation; int32 AllowableClass; uint16 RequiredSkill; uint16 RequiredSkillRank; - uint32 RequiredSpell; + uint32 RequiredAbility; }; #define MAX_ITEM_SET_ITEMS 17 @@ -1562,7 +1562,7 @@ struct ItemSetEntry uint32 ItemID[MAX_ITEM_SET_ITEMS]; uint16 RequiredSkillRank; uint32 RequiredSkill; - uint32 Flags; + uint32 SetFlags; }; struct ItemSetSpellEntry @@ -1578,75 +1578,75 @@ struct ItemSparseEntry { uint32 ID; int64 AllowableRace; - LocalizedString* Name; - LocalizedString* Name2; - LocalizedString* Name3; - LocalizedString* Name4; + LocalizedString* Display; + LocalizedString* Display1; + LocalizedString* Display2; + LocalizedString* Display3; LocalizedString* Description; - uint32 Flags[MAX_ITEM_PROTO_FLAGS]; - float Unk1; - float Unk2; - uint32 BuyCount; + int32 Flags[MAX_ITEM_PROTO_FLAGS]; + float PriceRandomValue; + float PriceVariance; + uint32 VendorStackCount; uint32 BuyPrice; uint32 SellPrice; - uint32 RequiredSpell; - uint32 MaxCount; - uint32 Stackable; - int32 ItemStatAllocation[MAX_ITEM_PROTO_STATS]; - float ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]; - float RangedModRange; + uint32 RequiredAbility; + int32 MaxCount; + int32 Stackable; + int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]; + float StatPercentageOfSocket[MAX_ITEM_PROTO_STATS]; + float ItemRange; uint32 BagFamily; - float ArmorDamageModifier; - uint32 Duration; - float StatScalingFactor; + float QualityModifier; + uint32 DurationInInventory; + float DmgVariance; int16 AllowableClass; uint16 ItemLevel; uint16 RequiredSkill; uint16 RequiredSkillRank; - uint16 RequiredReputationFaction; + uint16 MinFactionID; int16 ItemStatValue[MAX_ITEM_PROTO_STATS]; - uint16 ScalingStatDistribution; - uint16 Delay; - uint16 PageText; - uint16 StartQuest; + uint16 ScalingStatDistributionID; + uint16 ItemDelay; + uint16 PageID; + uint16 StartQuestID; uint16 LockID; - uint16 RandomProperty; - uint16 RandomSuffix; + uint16 RandomSelect; + uint16 ItemRandomSuffixGroupID; uint16 ItemSet; - uint16 Area; - uint16 Map; - uint16 TotemCategory; - uint16 SocketBonus; + uint16 ZoneBound; + uint16 InstanceBound; + uint16 TotemCategoryID; + uint16 SocketMatchEnchantmentId; uint16 GemProperties; - uint16 ItemLimitCategory; - uint16 HolidayID; - uint16 RequiredTransmogHolidayID; + uint16 LimitCategory; + uint16 RequiredHoliday; + uint16 RequiredTransmogHoliday; uint16 ItemNameDescriptionID; - uint8 Quality; + uint8 OverallQualityID; uint8 InventoryType; int8 RequiredLevel; - uint8 RequiredHonorRank; - uint8 RequiredCityRank; - uint8 RequiredReputationRank; + uint8 RequiredPVPRank; + uint8 RequiredPVPMedal; + uint8 MinReputation; uint8 ContainerSlots; - int8 ItemStatType[MAX_ITEM_PROTO_STATS]; - uint8 DamageType; + int8 StatModifierBonusStat[MAX_ITEM_PROTO_STATS]; + uint8 DamageDamageType; uint8 Bonding; uint8 LanguageID; - uint8 PageMaterial; - int8 Material; - uint8 Sheath; - uint8 SocketColor[MAX_ITEM_PROTO_SOCKETS]; - uint8 CurrencySubstitutionID; - uint8 CurrencySubstitutionCount; + uint8 PageMaterialID; + uint8 Material; + uint8 SheatheType; + uint8 SocketType[MAX_ITEM_PROTO_SOCKETS]; + uint8 SpellWeightCategory; + uint8 SpellWeight; uint8 ArtifactID; - uint8 RequiredExpansion; + uint8 ExpansionID; }; struct ItemSpecEntry { uint32 ID; - uint16 SpecID; + uint16 SpecializationID; uint8 MinLevel; uint8 MaxLevel; uint8 ItemType; @@ -1658,24 +1658,24 @@ struct ItemSpecOverrideEntry { uint32 ID; uint16 SpecID; - uint32 ItemID; + int32 ItemID; }; struct ItemUpgradeEntry { uint32 ID; - uint32 CurrencyCost; - uint16 PrevItemUpgradeID; - uint16 CurrencyID; + uint32 CurrencyAmount; + uint16 PrerequisiteID; + uint16 CurrencyType; uint8 ItemUpgradePathID; - uint8 ItemLevelBonus; + uint8 ItemLevelIncrement; }; struct ItemXBonusTreeEntry { uint32 ID; - uint16 BonusTreeID; - uint32 ItemID; + uint16 ItemBonusTreeID; + int32 ItemID; }; #define KEYCHAIN_SIZE 32 @@ -1691,24 +1691,24 @@ struct LFGDungeonsEntry uint32 ID; LocalizedString* Name; LocalizedString* Description; - uint32 Flags; - float MinItemLevel; + int32 Flags; + float MinGear; uint16 MaxLevel; uint16 TargetLevelMax; int16 MapID; uint16 RandomID; uint16 ScenarioID; - uint16 LastBossJournalEncounterID; + uint16 FinalEncounterID; uint16 BonusReputationAmount; uint16 MentorItemLevel; - uint16 PlayerConditionID; + uint16 RequiredPlayerConditionId; uint8 MinLevel; uint8 TargetLevel; uint8 TargetLevelMin; uint8 DifficultyID; - uint8 Type; - uint8 Faction; - uint8 Expansion; + uint8 TypeID; + int8 Faction; + uint8 ExpansionLevel; uint8 OrderIndex; uint8 GroupID; uint8 CountTank; @@ -1717,30 +1717,30 @@ struct LFGDungeonsEntry uint8 MinCountTank; uint8 MinCountHealer; uint8 MinCountDamage; - uint8 SubType; + uint8 Subtype; uint8 MentorCharLevel; - int32 TextureFileDataID; - int32 RewardIconFileDataID; - int32 ProposalTextureFileDataID; + int32 IconTextureFileID; + int32 RewardsBgTextureFileID; + int32 PopupBgTextureFileID; // Helpers - uint32 Entry() const { return ID + (Type << 24); } + uint32 Entry() const { return ID + (TypeID << 24); } }; struct LightEntry { uint32 ID; - DBCPosition3D Pos; - float FalloffStart; - float FalloffEnd; - uint16 MapID; + DBCPosition3D GameCoords; + float GameFalloffStart; + float GameFalloffEnd; + int16 ContinentID; uint16 LightParamsID[8]; }; struct LiquidTypeEntry { uint32 ID; - LocalizedString* Name; + char const* Name; char const* Texture[6]; uint32 SpellID; float MaxDarkenDepth; @@ -1748,16 +1748,16 @@ struct LiquidTypeEntry float AmbDarkenIntensity; float DirDarkenIntensity; float ParticleScale; - uint32 Color[2]; + int32 Color[2]; float Float[18]; uint32 Int[4]; uint16 Flags; uint16 LightID; - uint8 Type; + uint8 SoundBank; // used to be "type", maybe needs fixing (works well for now) uint8 ParticleMovement; uint8 ParticleTexSlots; uint8 MaterialID; - uint8 DepthTexCount[6]; + uint8 FrameCountTexture[6]; uint32 SoundID; }; @@ -1766,7 +1766,7 @@ struct LiquidTypeEntry struct LockEntry { uint32 ID; - uint32 Index[MAX_LOCK_CASE]; + int32 Index[MAX_LOCK_CASE]; uint16 Skill[MAX_LOCK_CASE]; uint8 Type[MAX_LOCK_CASE]; uint8 Action[MAX_LOCK_CASE]; @@ -1781,24 +1781,24 @@ struct MailTemplateEntry struct MapEntry { uint32 ID; - char* Directory; + char const* Directory; LocalizedString* MapName; LocalizedString* MapDescription0; // Horde LocalizedString* MapDescription1; // Alliance - LocalizedString* ShortDescription; - LocalizedString* LongDescription; - uint32 Flags[2]; + LocalizedString* PvpShortDescription; + LocalizedString* PvpLongDescription; + int32 Flags[2]; float MinimapIconScale; - DBCPosition2D CorpsePos; // entrance coordinates in ghost mode (in most cases = normal entrance) + DBCPosition2D Corpse; // entrance coordinates in ghost mode (in most cases = normal entrance) uint16 AreaTableID; - uint16 LoadingScreenID; + int16 LoadingScreenID; int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance) - uint16 TimeOfDayOverride; + int16 TimeOfDayOverride; int16 ParentMapID; int16 CosmeticParentMapID; - uint16 WindSettingsID; + int16 WindSettingsID; uint8 InstanceType; - uint8 unk5; + uint8 MapType; uint8 ExpansionID; uint8 MaxPlayers; uint8 TimeOffset; @@ -1821,8 +1821,8 @@ struct MapEntry return false; mapid = CorpseMapID; - x = CorpsePos.X; - y = CorpsePos.Y; + x = Corpse.X; + y = Corpse.Y; return true; } @@ -1838,21 +1838,21 @@ struct MapEntry struct MapDifficultyEntry { uint32 ID; - LocalizedString* Message_lang; // m_message_lang (text showed when transfer to map failed) + LocalizedString* Message; // m_message_lang (text showed when transfer to map failed) uint8 DifficultyID; - uint8 RaidDurationType; // 1 means daily reset, 2 means weekly - uint8 MaxPlayers; // m_maxPlayers some heroic versions have 0 when expected same amount as in normal version + uint8 ResetInterval; + uint8 MaxPlayers; uint8 LockID; uint8 Flags; - uint8 ItemBonusTreeModID; - uint32 Context; + uint8 ItemContext; + uint32 ItemContextPickerID; uint16 MapID; uint32 GetRaidDuration() const { - if (RaidDurationType == 1) + if (ResetInterval == 1) return 86400; - if (RaidDurationType == 2) + if (ResetInterval == 2) return 604800; return 0; } @@ -1861,26 +1861,27 @@ struct MapDifficultyEntry struct ModifierTreeEntry { uint32 ID; - uint32 Asset[2]; + int32 Asset; + int32 SecondaryAsset; uint32 Parent; uint8 Type; - uint8 Unk700; - uint8 Operator; - uint8 Amount; + int8 TertiaryAsset; + int8 Operator; + int8 Amount; }; struct MountEntry { LocalizedString* Name; LocalizedString* Description; - LocalizedString* SourceDescription; - uint32 SpellId; - float CameraPivotMultiplier; - uint16 MountTypeId; + LocalizedString* SourceText; + int32 SourceSpellID; + float MountFlyRideHeight; + uint16 MountTypeID; uint16 Flags; - uint8 Source; + int8 SourceTypeEnum; uint32 ID; - uint32 PlayerConditionId; + uint32 PlayerConditionID; int32 UiModelSceneID; bool IsSelfMount() const { return (Flags & MOUNT_FLAG_SELF_MOUNT) != 0; } @@ -1888,14 +1889,14 @@ struct MountEntry struct MountCapabilityEntry { - uint32 RequiredSpell; - uint32 SpeedModSpell; - uint16 RequiredRidingSkill; - uint16 RequiredArea; - int16 RequiredMap; + int32 ReqSpellKnownID; + int32 ModSpellAuraID; + uint16 ReqRidingSkill; + uint16 ReqAreaID; + int16 ReqMapID; uint8 Flags; uint32 ID; - uint32 RequiredAura; + uint32 ReqSpellAuraID; }; struct MountTypeXCapabilityEntry @@ -1909,9 +1910,9 @@ struct MountTypeXCapabilityEntry struct MountXDisplayEntry { uint32 ID; - uint32 DisplayID; + int32 CreatureDisplayInfoID; uint32 PlayerConditionID; - uint32 MountID; + int32 MountID; }; struct MovieEntry @@ -1926,8 +1927,8 @@ struct MovieEntry struct NameGenEntry { uint32 ID; - LocalizedString* Name; - uint8 Race; + char const* Name; + uint8 RaceID; uint8 Sex; }; @@ -1956,8 +1957,8 @@ struct NamesReservedLocaleEntry struct OverrideSpellDataEntry { uint32 ID; - uint32 SpellID[MAX_OVERRIDE_SPELL]; - uint32 PlayerActionbarFileDataID; + int32 Spells[MAX_OVERRIDE_SPELL]; + int32 PlayerActionBarFileDataID; uint8 Flags; }; @@ -1992,7 +1993,7 @@ struct PlayerConditionEntry uint16 MaxFactionID; uint8 MaxReputation; uint32 ReputationLogic; - uint8 Unknown1; + int8 CurrentPvpFaction; uint8 MinPVPRank; uint8 MaxPVPRank; uint8 PvpMedal; @@ -2032,7 +2033,7 @@ struct PlayerConditionEntry uint8 PowerTypeComp; uint8 PowerTypeValue; uint32 ModifierTreeID; - int32 MainHandItemSubclassMask; + int32 WeaponSubclassMask; uint16 SkillID[4]; uint16 MinSkill[4]; uint16 MaxSkill[4]; @@ -2046,8 +2047,8 @@ struct PlayerConditionEntry uint32 ItemCount[4]; uint16 Explored[2]; uint32 Time[2]; - uint32 AuraSpellID[4]; - uint8 AuraCount[4]; + int32 AuraSpellID[4]; + uint8 AuraStacks[4]; uint16 Achievement[4]; uint8 LfgStatus[4]; uint8 LfgCompare[4]; @@ -2063,7 +2064,7 @@ struct PowerDisplayEntry { uint32 ID; char const* GlobalStringBaseTag; - uint8 PowerType; + uint8 ActualType; uint8 Red; uint8 Green; uint8 Blue; @@ -2072,25 +2073,25 @@ struct PowerDisplayEntry struct PowerTypeEntry { uint32 ID; - char const* PowerTypeToken; - char const* PowerCostToken; - float RegenerationPeace; - float RegenerationCombat; - int16 MaxPower; - uint16 RegenerationDelay; - uint16 Flags; - uint8 PowerTypeEnum; - int8 RegenerationMin; - int8 RegenerationCenter; - int8 RegenerationMax; - uint8 UIModifier; + char const* NameGlobalStringTag; + char const* CostGlobalStringTag; + float RegenPeace; + float RegenCombat; + int16 MaxBasePower; + int16 RegenInterruptTimeMS; + int16 Flags; + int8 PowerTypeEnum; + int8 MinPower; + int8 CenterPower; + int8 DefaultPower; + int8 DisplayModifier; }; struct PrestigeLevelInfoEntry { uint32 ID; - LocalizedString* PrestigeText; - uint32 IconID; + LocalizedString* Name; + int32 BadgeTextureFileDataID; uint8 PrestigeLevel; uint8 Flags; @@ -2100,28 +2101,28 @@ struct PrestigeLevelInfoEntry struct PVPDifficultyEntry { uint32 ID; - uint8 BracketID; + uint8 RangeIndex; uint8 MinLevel; uint8 MaxLevel; uint16 MapID; // helpers - BattlegroundBracketId GetBracketId() const { return BattlegroundBracketId(BracketID); } + BattlegroundBracketId GetBracketId() const { return BattlegroundBracketId(RangeIndex); } }; struct PVPItemEntry { uint32 ID; - uint32 ItemID; - uint8 ItemLevelBonus; + int32 ItemID; + uint8 ItemLevelDelta; }; struct PvpRewardEntry { uint32 ID; - uint32 HonorLevel; - uint32 Prestige; - uint32 RewardPackID; + int32 HonorLevel; + int32 PrestigeLevel; + int32 RewardPackID; }; struct PvpTalentEntry @@ -2130,7 +2131,7 @@ struct PvpTalentEntry LocalizedString* Description; int32 SpellID; int32 OverridesSpellID; - int32 ExtraSpellID; + int32 ActionBarSpellID; int32 TierID; int32 ColumnIndex; int32 Flags; @@ -2150,29 +2151,29 @@ struct PvpTalentUnlockEntry struct QuestFactionRewardEntry { uint32 ID; - int16 QuestRewFactionValue[10]; + int16 Difficulty[10]; }; struct QuestMoneyRewardEntry { uint32 ID; - uint32 Money[10]; + uint32 Difficulty[10]; }; struct QuestPackageItemEntry { uint32 ID; - uint32 ItemID; - uint16 QuestPackageID; - uint8 FilterType; - uint32 ItemCount; + int32 ItemID; + uint16 PackageID; + uint8 DisplayType; + uint32 ItemQuantity; }; struct QuestSortEntry { uint32 ID; LocalizedString* SortName; - uint8 SortOrder; + int8 UiOrderIndex; }; struct QuestV2Entry @@ -2184,15 +2185,15 @@ struct QuestV2Entry struct QuestXPEntry { uint32 ID; - uint16 Exp[10]; + uint16 Difficulty[10]; }; struct RandPropPointsEntry { uint32 ID; - uint32 EpicPropertiesPoints[5]; - uint32 RarePropertiesPoints[5]; - uint32 UncommonPropertiesPoints[5]; + uint32 Epic[5]; + uint32 Superior[5]; + uint32 Good[5]; }; struct RewardPackEntry @@ -2200,48 +2201,48 @@ struct RewardPackEntry uint32 ID; uint32 Money; float ArtifactXPMultiplier; - uint8 ArtifactXPDifficulty; - uint8 ArtifactCategoryID; - uint32 TitleID; - uint32 Unused; + int8 ArtifactXPDifficulty; + uint8 ArtifactXPCategoryID; + int32 CharTitleID; + uint32 TreasurePickerID; }; struct RewardPackXItemEntry { uint32 ID; - uint32 ItemID; - uint32 Amount; - uint32 RewardPackID; + int32 ItemID; + int32 ItemQuantity; + int32 RewardPackID; }; struct RulesetItemUpgradeEntry { uint32 ID; - uint32 ItemID; + int32 ItemID; uint16 ItemUpgradeID; }; struct SandboxScalingEntry { uint32 ID; - uint32 MinLevel; - uint32 MaxLevel; - uint32 Flags; + int32 MinLevel; + int32 MaxLevel; + int32 Flags; }; struct ScalingStatDistributionEntry { uint32 ID; - uint16 ItemLevelCurveID; - uint32 MinLevel; - uint32 MaxLevel; + uint16 PlayerLevelToItemLevelCurveID; + int32 MinLevel; + int32 MaxLevel; }; struct ScenarioEntry { uint32 ID; LocalizedString* Name; - uint16 Data; // Seems to indicate different things, for zone invasions, this is the area id + uint16 AreaTableID; uint8 Flags; uint8 Type; }; @@ -2250,14 +2251,14 @@ struct ScenarioStepEntry { uint32 ID; LocalizedString* Description; - LocalizedString* Name; + LocalizedString* Title; uint16 ScenarioID; - uint16 PreviousStepID; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) - uint16 QuestRewardID; - uint8 Step; + uint16 Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) + uint16 RewardQuestID; + uint8 OrderIndex; uint8 Flags; - uint32 CriteriaTreeID; - uint32 BonusRequiredStepID; // Bonus step can only be completed if scenario is in the step specified in this field + uint32 Criteriatreeid; + int32 RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field // helpers bool IsBonusObjective() const @@ -2269,8 +2270,8 @@ struct ScenarioStepEntry struct SceneScriptEntry { uint32 ID; - uint16 PrevScriptId; - uint16 NextScriptId; + uint16 FirstSceneScriptID; + uint16 NextSceneScriptID; }; struct SceneScriptGlobalTextEntry @@ -2300,39 +2301,39 @@ struct SkillLineEntry LocalizedString* Description; LocalizedString* AlternateVerb; uint16 Flags; - uint8 CategoryID; - uint8 CanLink; - uint32 IconFileDataID; + int8 CategoryID; + int8 CanLink; + int32 SpellIconFileID; uint32 ParentSkillLineID; }; struct SkillLineAbilityEntry { - uint64 RaceMask; + int64 RaceMask; uint32 ID; - uint32 SpellID; - uint32 SupercedesSpell; - uint16 SkillLine; - uint16 TrivialSkillLineRankHigh; - uint16 TrivialSkillLineRankLow; - uint16 UniqueBit; - uint16 TradeSkillCategoryID; - uint8 NumSkillUps; + int32 Spell; + int32 SupercedesSpell; + int16 SkillLine; + int16 TrivialSkillLineRankHigh; + int16 TrivialSkillLineRankLow; + int16 UniqueBit; + int16 TradeSkillCategoryID; + int8 NumSkillUps; int32 ClassMask; - uint16 MinSkillLineRank; - uint8 AcquireMethod; - uint8 Flags; + int16 MinSkillLineRank; + int8 AcquireMethod; + int8 Flags; }; struct SkillRaceClassInfoEntry { uint32 ID; int64 RaceMask; - uint16 SkillID; + int16 SkillID; uint16 Flags; - uint16 SkillTierID; - uint8 Availability; - uint8 MinLevel; + int16 SkillTierID; + int8 Availability; + int8 MinLevel; int32 ClassMask; }; @@ -2353,16 +2354,16 @@ struct SoundKitEntry float PitchVariationMinus; float PitchAdjust; uint16 BusOverwriteID; - uint8 Unk700; + uint8 MaxInstances; }; struct SpecializationSpellsEntry { LocalizedString* Description; - uint32 SpellID; - uint32 OverridesSpellID; + int32 SpellID; + int32 OverridesSpellID; uint16 SpecID; - uint8 OrderIndex; + uint8 DisplayOrder; uint32 ID; }; @@ -2378,63 +2379,63 @@ struct SpellEntry struct SpellAuraOptionsEntry { uint32 ID; - uint32 ProcCharges; - uint32 ProcTypeMask; - uint32 ProcCategoryRecovery; + int32 ProcCharges; + int32 ProcTypeMask; + int32 ProcCategoryRecovery; uint16 CumulativeAura; uint16 SpellProcsPerMinuteID; uint8 DifficultyID; uint8 ProcChance; - uint32 SpellID; + int32 SpellID; }; struct SpellAuraRestrictionsEntry { uint32 ID; - uint32 CasterAuraSpell; - uint32 TargetAuraSpell; - uint32 ExcludeCasterAuraSpell; - uint32 ExcludeTargetAuraSpell; + int32 CasterAuraSpell; + int32 TargetAuraSpell; + int32 ExcludeCasterAuraSpell; + int32 ExcludeTargetAuraSpell; uint8 DifficultyID; uint8 CasterAuraState; uint8 TargetAuraState; uint8 ExcludeCasterAuraState; uint8 ExcludeTargetAuraState; - uint32 SpellID; + int32 SpellID; }; struct SpellCastTimesEntry { uint32 ID; - int32 CastTime; - int32 MinCastTime; - int16 CastTimePerLevel; + int32 Base; + int32 Minimum; + int16 PerLevel; }; struct SpellCastingRequirementsEntry { uint32 ID; - uint32 SpellID; + int32 SpellID; uint16 MinFactionID; uint16 RequiredAreasID; uint16 RequiresSpellFocus; uint8 FacingCasterFlags; - uint8 MinReputation; + int8 MinReputation; uint8 RequiredAuraVision; }; struct SpellCategoriesEntry { uint32 ID; - uint16 Category; - uint16 StartRecoveryCategory; - uint16 ChargeCategory; + int16 Category; + int16 StartRecoveryCategory; + int16 ChargeCategory; uint8 DifficultyID; - uint8 DefenseType; - uint8 DispelType; - uint8 Mechanic; - uint8 PreventionType; - uint32 SpellID; + int8 DefenseType; + int8 DispelType; + int8 Mechanic; + int8 PreventionType; + int32 SpellID; }; struct SpellCategoryEntry @@ -2442,16 +2443,16 @@ struct SpellCategoryEntry uint32 ID; LocalizedString* Name; int32 ChargeRecoveryTime; - uint8 Flags; + int8 Flags; uint8 UsesPerWeek; - uint8 MaxCharges; - uint32 ChargeCategoryType; + int8 MaxCharges; + int32 TypeMask; }; struct SpellClassOptionsEntry { uint32 ID; - uint32 SpellID; + int32 SpellID; flag128 SpellClassMask; uint8 SpellClassSet; uint32 ModalNextSpell; @@ -2460,11 +2461,11 @@ struct SpellClassOptionsEntry struct SpellCooldownsEntry { uint32 ID; - uint32 CategoryRecoveryTime; - uint32 RecoveryTime; - uint32 StartRecoveryTime; + int32 CategoryRecoveryTime; + int32 RecoveryTime; + int32 StartRecoveryTime; uint8 DifficultyID; - uint32 SpellID; + int32 SpellID; }; struct SpellDurationEntry @@ -2472,7 +2473,7 @@ struct SpellDurationEntry uint32 ID; int32 Duration; int32 MaxDuration; - int32 DurationPerLevel; + uint32 DurationPerLevel; }; struct SpellEffectEntry @@ -2480,43 +2481,41 @@ struct SpellEffectEntry uint32 ID; uint32 Effect; int32 EffectBasePoints; - uint32 EffectIndex; - uint32 EffectAura; - uint32 DifficultyID; + int32 EffectIndex; + int32 EffectAura; + int32 DifficultyID; float EffectAmplitude; - uint32 EffectAuraPeriod; + int32 EffectAuraPeriod; float EffectBonusCoefficient; float EffectChainAmplitude; - uint32 EffectChainTargets; + int32 EffectChainTargets; int32 EffectDieSides; - uint32 EffectItemType; - uint32 EffectMechanic; + int32 EffectItemType; + int32 EffectMechanic; float EffectPointsPerResource; float EffectRealPointsPerLevel; - uint32 EffectTriggerSpell; + int32 EffectTriggerSpell; float EffectPosFacing; - uint32 EffectAttributes; + int32 EffectAttributes; float BonusCoefficientFromAP; - float PvPMultiplier; + float PvpMultiplier; float Coefficient; float Variance; float ResourceCoefficient; - float GroupSizeCoefficient; + float GroupSizeBasePointsCoefficient; flag128 EffectSpellClassMask; - int32 EffectMiscValue; - int32 EffectMiscValueB; - uint32 EffectRadiusIndex; - uint32 EffectRadiusMaxIndex; + int32 EffectMiscValue[2]; + uint32 EffectRadiusIndex[2]; uint32 ImplicitTarget[2]; - uint32 SpellID; + int32 SpellID; }; struct SpellEquippedItemsEntry { uint32 ID; - uint32 SpellID; - int32 EquippedItemInventoryTypeMask; - int32 EquippedItemSubClassMask; + int32 SpellID; + int32 EquippedItemInvTypes; + int32 EquippedItemSubclass; int8 EquippedItemClass; }; @@ -2530,10 +2529,10 @@ struct SpellInterruptsEntry { uint32 ID; uint8 DifficultyID; - uint16 InterruptFlags; - uint32 AuraInterruptFlags[MAX_SPELL_AURA_INTERRUPT_FLAGS]; - uint32 ChannelInterruptFlags[MAX_SPELL_AURA_INTERRUPT_FLAGS]; - uint32 SpellID; + int16 InterruptFlags; + int32 AuraInterruptFlags[MAX_SPELL_AURA_INTERRUPT_FLAGS]; + int32 ChannelInterruptFlags[MAX_SPELL_AURA_INTERRUPT_FLAGS]; + int32 SpellID; }; #define MAX_ITEM_ENCHANTMENT_EFFECTS 3 @@ -2542,11 +2541,11 @@ struct SpellItemEnchantmentEntry { uint32 ID; LocalizedString* Name; - uint32 EffectSpellID[MAX_ITEM_ENCHANTMENT_EFFECTS]; + uint32 EffectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]; float EffectScalingPoints[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint32 TransmogCost; - uint32 TextureFileDataID; - uint16 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; + uint32 IconFileDataID; + int16 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint16 ItemVisual; uint16 Flags; uint16 RequiredSkillID; @@ -2559,37 +2558,37 @@ struct SpellItemEnchantmentEntry uint8 MaxLevel; int8 ScalingClass; int8 ScalingClassRestricted; - uint32 PlayerConditionID; + uint32 TransmogPlayerConditionID; }; struct SpellItemEnchantmentConditionEntry { uint32 ID; - uint32 LTOperand[5]; - uint8 LTOperandType[5]; + uint32 LtOperand[5]; + uint8 LtOperandType[5]; uint8 Operator[5]; - uint8 RTOperandType[5]; - uint8 RTOperand[5]; + uint8 RtOperandType[5]; + uint8 RtOperand[5]; uint8 Logic[5]; }; struct SpellLearnSpellEntry { uint32 ID; - uint32 LearnSpellID; - uint32 SpellID; - uint32 OverridesSpellID; + int32 SpellID; + int32 LearnSpellID; + int32 OverridesSpellID; }; struct SpellLevelsEntry { uint32 ID; - uint16 BaseLevel; - uint16 MaxLevel; - uint16 SpellLevel; + int16 BaseLevel; + int16 MaxLevel; + int16 SpellLevel; uint8 DifficultyID; - uint8 MaxUsableLevel; - uint32 SpellID; + uint8 MaxPassiveAuraLevel; + int32 SpellID; }; struct SpellMiscEntry @@ -2599,51 +2598,38 @@ struct SpellMiscEntry uint16 DurationIndex; uint16 RangeIndex; uint8 SchoolMask; - uint32 IconFileDataID; + int32 SpellIconFileDataID; float Speed; - uint32 ActiveIconFileDataID; - float MultistrikeSpeedMod; + int32 ActiveIconFileDataID; + float LaunchDelay; uint8 DifficultyID; - uint32 Attributes; - uint32 AttributesEx; - uint32 AttributesExB; - uint32 AttributesExC; - uint32 AttributesExD; - uint32 AttributesExE; - uint32 AttributesExF; - uint32 AttributesExG; - uint32 AttributesExH; - uint32 AttributesExI; - uint32 AttributesExJ; - uint32 AttributesExK; - uint32 AttributesExL; - uint32 AttributesExM; - uint32 SpellID; + int32 Attributes[14]; + int32 SpellID; }; struct SpellPowerEntry { int32 ManaCost; - float ManaCostPercentage; - float ManaCostPercentagePerSecond; - uint32 RequiredAura; - float HealthCostPercentage; - uint8 PowerIndex; - uint8 PowerType; + float PowerCostPct; + float PowerPctPerSecond; + int32 RequiredAuraSpellID; + float PowerCostMaxPct; + uint8 OrderIndex; + int8 PowerType; uint32 ID; int32 ManaCostPerLevel; - int32 ManaCostPerSecond; - int32 ManaCostAdditional; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource + int32 ManaPerSecond; + uint32 OptionalCost; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource // only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG uint32 PowerDisplayID; - uint32 UnitPowerBarID; - uint32 SpellID; + int32 AltPowerBarID; + int32 SpellID; }; struct SpellPowerDifficultyEntry { uint8 DifficultyID; - uint8 PowerIndex; + uint8 OrderIndex; uint32 ID; }; @@ -2658,7 +2644,7 @@ struct SpellProcsPerMinuteModEntry { uint32 ID; float Coeff; - uint16 Param; + int16 Param; uint8 Type; uint16 SpellProcsPerMinuteID; }; @@ -2677,10 +2663,8 @@ struct SpellRangeEntry uint32 ID; LocalizedString* DisplayName; LocalizedString* DisplayNameShort; - float MinRangeHostile; - float MinRangeFriend; - float MaxRangeHostile; - float MaxRangeFriend; + float RangeMin[2]; + float RangeMax[2]; uint8 Flags; }; @@ -2689,17 +2673,17 @@ struct SpellRangeEntry struct SpellReagentsEntry { uint32 ID; - uint32 SpellID; + int32 SpellID; int32 Reagent[MAX_SPELL_REAGENTS]; - uint16 ReagentCount[MAX_SPELL_REAGENTS]; + int16 ReagentCount[MAX_SPELL_REAGENTS]; }; struct SpellScalingEntry { uint32 ID; - uint32 SpellID; - uint16 ScalesFromItemLevel; - int32 ScalingClass; + int32 SpellID; + int16 ScalesFromItemLevel; + int32 Class; uint32 MinScalingLevel; uint32 MaxScalingLevel; }; @@ -2707,10 +2691,10 @@ struct SpellScalingEntry struct SpellShapeshiftEntry { uint32 ID; - uint32 SpellID; - uint32 ShapeshiftExclude[2]; - uint32 ShapeshiftMask[2]; - uint8 StanceBarOrder; + int32 SpellID; + int32 ShapeshiftExclude[2]; + int32 ShapeshiftMask[2]; + int8 StanceBarOrder; }; #define MAX_SHAPESHIFT_SPELLS 8 @@ -2719,13 +2703,13 @@ struct SpellShapeshiftFormEntry { uint32 ID; LocalizedString* Name; - float WeaponDamageVariance; - uint32 Flags; - uint16 CombatRoundTime; + float DamageVariance; + int32 Flags; + int16 CombatRoundTime; uint16 MountTypeID; int8 CreatureType; - uint8 BonusActionBar; - uint32 AttackIconFileDataID; + int8 BonusActionBar; + int32 AttackIconFileID; uint32 CreatureDisplayID[4]; uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS]; }; @@ -2733,14 +2717,14 @@ struct SpellShapeshiftFormEntry struct SpellTargetRestrictionsEntry { uint32 ID; - float ConeAngle; + float ConeDegrees; float Width; - uint32 Targets; - uint16 TargetCreatureType; + int32 Targets; + int16 TargetCreatureType; uint8 DifficultyID; - uint8 MaxAffectedTargets; + uint8 MaxTargets; uint32 MaxTargetLevel; - uint32 SpellID; + int32 SpellID; }; #define MAX_SPELL_TOTEMS 2 @@ -2748,8 +2732,8 @@ struct SpellTargetRestrictionsEntry struct SpellTotemsEntry { uint32 ID; - uint32 SpellID; - uint32 Totem[MAX_SPELL_TOTEMS]; + int32 SpellID; + int32 Totem[MAX_SPELL_TOTEMS]; uint16 RequiredTotemCategoryID[MAX_SPELL_TOTEMS]; }; @@ -2757,26 +2741,26 @@ struct SpellXSpellVisualEntry { uint32 SpellVisualID; uint32 ID; - float Chance; + float Probability; uint16 CasterPlayerConditionID; uint16 CasterUnitConditionID; - uint16 PlayerConditionID; - uint16 UnitConditionID; - uint32 IconFileDataID; - uint32 ActiveIconFileDataID; + uint16 ViewerPlayerConditionID; + uint16 ViewerUnitConditionID; + int32 SpellIconFileID; + int32 ActiveIconFileID; uint8 Flags; uint8 DifficultyID; uint8 Priority; - uint32 SpellID; + int32 SpellID; }; struct SummonPropertiesEntry { uint32 ID; - uint32 Flags; - uint32 Category; - uint32 Faction; - int32 Type; + int32 Flags; + int32 Control; + int32 Faction; + int32 Title; int32 Slot; }; @@ -2807,22 +2791,22 @@ struct TaxiNodesEntry uint32 ID; LocalizedString* Name; DBCPosition3D Pos; - uint32 MountCreatureID[2]; + int32 MountCreatureID[2]; DBCPosition2D MapOffset; - float Unk730; + float Facing; DBCPosition2D FlightMapOffset; - uint16 MapID; + uint16 ContinentID; uint16 ConditionID; - uint16 LearnableIndex; + uint16 CharacterBitNumber; uint8 Flags; - int32 UiTextureKitPrefixID; - uint32 SpecialAtlasIconPlayerConditionID; + int32 UiTextureKitID; + uint32 SpecialIconConditionID; }; struct TaxiPathEntry { - uint16 From; - uint16 To; + uint16 FromTaxiNode; + uint16 ToTaxiNode; uint32 ID; uint32 Cost; }; @@ -2831,7 +2815,7 @@ struct TaxiPathNodeEntry { DBCPosition3D Loc; uint16 PathID; - uint16 MapID; + uint16 ContinentID; uint8 NodeIndex; uint32 ID; uint8 Flags; @@ -2844,34 +2828,34 @@ struct TotemCategoryEntry { uint32 ID; LocalizedString* Name; - uint32 CategoryMask; - uint8 CategoryType; + int32 TotemCategoryMask; + uint8 TotemCategoryType; }; struct ToyEntry { - LocalizedString* Description; - uint32 ItemID; + LocalizedString* SourceText; + int32 ItemID; uint8 Flags; - uint8 CategoryFilter; + int8 SourceTypeEnum; uint32 ID; }; struct TransmogHolidayEntry { uint32 ID; - int32 HolidayID; + int32 RequiredTransmogHoliday; }; struct TransmogSetEntry { LocalizedString* Name; - uint16 BaseSetID; - uint16 UIOrder; + uint16 ParentTransmogSetID; + int16 UiOrder; uint8 ExpansionID; uint32 ID; int32 Flags; - int32 QuestID; + uint32 TrackingQuestID; int32 ClassMask; int32 ItemNameDescriptionID; uint32 TransmogSetGroupID; @@ -2879,7 +2863,7 @@ struct TransmogSetEntry struct TransmogSetGroupEntry { - LocalizedString* Label; + LocalizedString* Name; uint32 ID; }; @@ -2897,18 +2881,15 @@ struct TransportAnimationEntry uint32 TimeIndex; DBCPosition3D Pos; uint8 SequenceID; - uint32 TransportID; + int32 TransportID; }; struct TransportRotationEntry { uint32 ID; uint32 TimeIndex; - float X; - float Y; - float Z; - float W; - uint32 TransportID; + float Rot[4]; + int32 GameObjectsID; }; struct UnitPowerBarEntry @@ -2920,8 +2901,8 @@ struct UnitPowerBarEntry LocalizedString* ToolTip; float RegenerationPeace; float RegenerationCombat; - uint32 FileDataID[6]; - uint32 Color[6]; + int32 FileDataID[6]; + int32 Color[6]; float StartInset; float EndInset; uint16 StartPower; @@ -2937,7 +2918,7 @@ struct UnitPowerBarEntry struct VehicleEntry { uint32 ID; - uint32 Flags; + int32 Flags; float TurnSpeed; float PitchSpeed; float PitchMin; @@ -2953,14 +2934,16 @@ struct VehicleEntry uint16 VehicleUIIndicatorID; uint16 PowerDisplayID[3]; uint8 FlagsB; - uint8 UILocomotionType; + uint8 UiLocomotionType; int32 MissileTargetingID; }; struct VehicleSeatEntry { uint32 ID; - uint32 Flags[3]; + int32 Flags; + int32 FlagsB; + int32 FlagsC; DBCPosition3D AttachmentOffset; float EnterPreDelay; float EnterSpeed; @@ -2991,7 +2974,7 @@ struct VehicleSeatEntry float CameraEnteringZoom; float CameraSeatZoomMin; float CameraSeatZoomMax; - uint32 UISkinFileDataID; + int32 UiSkinFileDataID; int16 EnterAnimStart; int16 EnterAnimLoop; int16 RideAnimStart; @@ -3004,61 +2987,61 @@ struct VehicleSeatEntry int16 VehicleEnterAnim; int16 VehicleExitAnim; int16 VehicleRideAnimLoop; - uint16 EnterAnimKitID; - uint16 RideAnimKitID; - uint16 ExitAnimKitID; - uint16 VehicleEnterAnimKitID; - uint16 VehicleRideAnimKitID; - uint16 VehicleExitAnimKitID; - uint16 CameraModeID; + int16 EnterAnimKitID; + int16 RideAnimKitID; + int16 ExitAnimKitID; + int16 VehicleEnterAnimKitID; + int16 VehicleRideAnimKitID; + int16 VehicleExitAnimKitID; + int16 CameraModeID; int8 AttachmentID; int8 PassengerAttachmentID; int8 VehicleEnterAnimBone; int8 VehicleExitAnimBone; int8 VehicleRideAnimLoopBone; - uint8 VehicleAbilityDisplay; + int8 VehicleAbilityDisplay; uint32 EnterUISoundID; uint32 ExitUISoundID; bool CanEnterOrExit() const { - return ((Flags[0] & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT) != 0 || + return ((Flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT) != 0 || //If it has anmation for enter/ride, means it can be entered/exited by logic - (Flags[0] & (VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER | VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_RIDE)) != 0); + (Flags & (VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER | VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_RIDE)) != 0); } - bool CanSwitchFromSeat() const { return (Flags[0] & VEHICLE_SEAT_FLAG_CAN_SWITCH) != 0; } + bool CanSwitchFromSeat() const { return (Flags & VEHICLE_SEAT_FLAG_CAN_SWITCH) != 0; } bool IsUsableByOverride() const { - return (Flags[0] & (VEHICLE_SEAT_FLAG_UNCONTROLLED | VEHICLE_SEAT_FLAG_UNK18) - || (Flags[1] & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 | + return (Flags & (VEHICLE_SEAT_FLAG_UNCONTROLLED | VEHICLE_SEAT_FLAG_UNK18) + || (FlagsB & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4))); } - bool IsEjectable() const { return (Flags[1] & VEHICLE_SEAT_FLAG_B_EJECTABLE) != 0; } + bool IsEjectable() const { return (FlagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE) != 0; } }; struct WMOAreaTableEntry { LocalizedString* AreaName; - int32 WMOGroupID; // used in group WMO + int32 WmoGroupID; // used in group WMO uint16 AmbienceID; uint16 ZoneMusic; uint16 IntroSound; uint16 AreaTableID; - uint16 UWIntroSound; - uint16 UWAmbience; - int8 NameSet; // used in adt file + uint16 UwIntroSound; + uint16 UwAmbience; + uint8 NameSetID; // used in adt file uint8 SoundProviderPref; uint8 SoundProviderPrefUnderwater; uint8 Flags; uint32 ID; - uint32 UWZoneMusic; - int16 WMOID; // used in root WMO + uint32 UwZoneMusic; + uint16 WmoID; // used in root WMO }; struct WorldEffectEntry { uint32 ID; - uint32 TargetAsset; + int32 TargetAsset; uint16 CombatConditionID; uint8 TargetType; uint8 WhenToDisplay; @@ -3074,17 +3057,17 @@ struct WorldMapAreaEntry float LocTop; float LocBottom; uint32 Flags; - uint16 MapID; + int16 MapID; uint16 AreaID; int16 DisplayMapID; - int16 DefaultDungeonFloor; + uint16 DefaultDungeonFloor; uint16 ParentWorldMapID; uint8 LevelRangeMin; uint8 LevelRangeMax; uint8 BountySetID; - uint8 BountyBoardLocation; + uint8 BountyDisplayLocation; uint32 ID; - uint32 PlayerConditionID; + uint32 VisibilityPlayerConditionID; }; #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 @@ -3096,7 +3079,6 @@ struct WorldMapOverlayEntry uint16 TextureWidth; uint16 TextureHeight; uint32 MapAreaID; // idx in WorldMapArea.dbc - uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; int32 OffsetX; int32 OffsetY; int32 HitRectTop; @@ -3105,6 +3087,7 @@ struct WorldMapOverlayEntry int32 HitRectRight; uint32 PlayerConditionID; uint32 Flags; + uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; }; struct WorldMapTransformsEntry diff --git a/src/server/game/DataStores/M2Stores.cpp b/src/server/game/DataStores/M2Stores.cpp index 5d74b353a63..0fa8c388d97 100644 --- a/src/server/game/DataStores/M2Stores.cpp +++ b/src/server/game/DataStores/M2Stores.cpp @@ -186,7 +186,7 @@ TC_GAME_API void LoadM2Cameras(std::string const& dataPath) uint32 oldMSTime = getMSTime(); for (CinematicCameraEntry const* cameraEntry : sCinematicCameraStore) { - boost::filesystem::path filename = camerasPath / Trinity::StringFormat("FILE%08X.xxx", cameraEntry->ModelFileDataID); + boost::filesystem::path filename = camerasPath / Trinity::StringFormat("FILE%08X.xxx", cameraEntry->FileDataID); // Convert to native format filename.make_preferred(); diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 18ca6f2881c..48ea6f04f0c 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -49,7 +49,7 @@ requiredItemLevel(0) } LFGDungeonData::LFGDungeonData(LFGDungeonsEntry const* dbc) : id(dbc->ID), name(dbc->Name->Str[sWorld->GetDefaultDbcLocale()]), map(dbc->MapID), -type(uint8(dbc->Type)), expansion(uint8(dbc->Expansion)), group(uint8(dbc->GroupID)), +type(uint8(dbc->TypeID)), expansion(uint8(dbc->ExpansionLevel)), group(uint8(dbc->GroupID)), minlevel(uint8(dbc->MinLevel)), maxlevel(uint8(dbc->MaxLevel)), difficulty(Difficulty(dbc->DifficultyID)), seasonal((dbc->Flags & LFG_FLAG_SEASONAL) != 0), x(0.0f), y(0.0f), z(0.0f), o(0.0f), requiredItemLevel(0) @@ -199,7 +199,7 @@ void LFGMgr::LoadLFGDungeons(bool reload /* = false */) if (!dungeon) continue; - switch (dungeon->Type) + switch (dungeon->TypeID) { case LFG_TYPE_DUNGEON: case LFG_TYPE_HEROIC: diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 94850995151..b13c85cf36c 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -324,7 +324,7 @@ void Minion::RemoveFromWorld() bool Minion::IsGuardianPet() const { - return IsPet() || (m_Properties && m_Properties->Category == SUMMON_CATEGORY_PET); + return IsPet() || (m_Properties && m_Properties->Control == SUMMON_CATEGORY_PET); } Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : Minion(properties, owner, isWorldObject) @@ -332,7 +332,7 @@ Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool is { memset(m_statFromOwner, 0, sizeof(float)*MAX_STATS); m_unitTypeMask |= UNIT_MASK_GUARDIAN; - if (properties && (properties->Type == SUMMON_TYPE_PET || properties->Category == SUMMON_CATEGORY_PET)) + if (properties && (properties->Title == SUMMON_TYPE_PET || properties->Control == SUMMON_CATEGORY_PET)) { m_unitTypeMask |= UNIT_MASK_CONTROLABLE_GUARDIAN; InitCharmInfo(); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 59773082cce..26d70dcb2a1 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2209,8 +2209,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) - if (modelData->StateDamagedDisplayID) - modelId = modelData->StateDamagedDisplayID; + if (modelData->State0Wmo) + modelId = modelData->State0Wmo; SetDisplayId(modelId); if (setHealth) @@ -2237,8 +2237,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) - if (modelData->StateDestroyedDisplayID) - modelId = modelData->StateDestroyedDisplayID; + if (modelData->State1Wmo) + modelId = modelData->State1Wmo; SetDisplayId(modelId); if (setHealth) @@ -2256,8 +2256,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) - if (modelData->StateRebuildingDisplayID) - modelId = modelData->StateRebuildingDisplayID; + if (modelData->State2Wmo) + modelId = modelData->State2Wmo; SetDisplayId(modelId); // restores to full health diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 6815d9f6c91..fa8edb4a6cb 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -56,7 +56,7 @@ void AddItemsSetItem(Player* player, Item* item) if (set->RequiredSkill && player->GetSkillValue(set->RequiredSkill) < set->RequiredSkillRank) return; - if (set->Flags & ITEM_SET_FLAG_LEGACY_INACTIVE) + if (set->SetFlags & ITEM_SET_FLAG_LEGACY_INACTIVE) return; ItemSetEffect* eff = NULL; @@ -337,12 +337,12 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne if (itemProto->GetArtifactID() != artifactAppearanceSet->ArtifactID) continue; - if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactAppearance->PlayerConditionID)) + if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactAppearance->UnlockPlayerConditionID)) if (!owner || !sConditionMgr->IsPlayerMeetingCondition(owner, playerCondition)) continue; SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearance->ID); - SetAppearanceModId(artifactAppearance->AppearanceModID); + SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); break; } } @@ -799,7 +799,7 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, xp); SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearanceId); if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifactAppearanceId)) - SetAppearanceModId(artifactAppearance->AppearanceModID); + SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); uint8 totalPurchasedRanks = 0; for (ItemDynamicFieldArtifactPowers& power : powers) @@ -817,21 +817,21 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI switch (enchant->Effect[i]) { case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE: - if (uint32(artifactPower->RelicType) == enchant->EffectSpellID[i]) + if (uint32(artifactPower->Label) == enchant->EffectArg[i]) power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; break; case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID: - if (artifactPower->ID == enchant->EffectSpellID[i]) + if (artifactPower->ID == enchant->EffectArg[i]) power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; break; case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER: if (_bonusData.GemRelicType[e - SOCK_ENCHANTMENT_SLOT] != -1) { - if (ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectSpellID[i])) + if (ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectArg[i])) { PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactPowerPicker->PlayerConditionID); if (!playerCondition || sConditionMgr->IsPlayerMeetingCondition(owner, playerCondition)) - if (artifactPower->RelicType == _bonusData.GemRelicType[e - SOCK_ENCHANTMENT_SLOT]) + if (artifactPower->Label == _bonusData.GemRelicType[e - SOCK_ENCHANTMENT_SLOT]) power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; } } @@ -1244,7 +1244,7 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin { if (GemPropertiesEntry const* gemProperties = sGemPropertiesStore.LookupEntry(gemTemplate->GetGemProperties())) { - if (SpellItemEnchantmentEntry const* gemEnchant = sSpellItemEnchantmentStore.LookupEntry(gemProperties->EnchantID)) + if (SpellItemEnchantmentEntry const* gemEnchant = sSpellItemEnchantmentStore.LookupEntry(gemProperties->EnchantId)) { BonusData gemBonus; gemBonus.Initialize(gemTemplate); @@ -1255,7 +1255,7 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin uint32 gemBaseItemLevel = gemTemplate->GetBaseItemLevel(); if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(gemBonus.ScalingStatDistribution)) - if (uint32 scaledIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->ItemLevelCurveID, gemScalingLevel))) + if (uint32 scaledIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->PlayerLevelToItemLevelCurveID, gemScalingLevel))) gemBaseItemLevel = scaledIlvl; _bonusData.GemRelicType[slot] = gemBonus.RelicType; @@ -1266,7 +1266,7 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin { case ITEM_ENCHANTMENT_TYPE_BONUS_LIST_ID: { - if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(gemEnchant->EffectSpellID[i])) + if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(gemEnchant->EffectArg[i])) for (ItemBonusEntry const* itemBonus : *bonuses) if (itemBonus->Type == ITEM_BONUS_ITEM_LEVEL) _bonusData.GemItemLevelBonus[slot] += itemBonus->Value[0]; @@ -1841,7 +1841,7 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL if (!basePrice) return 0; - float qualityFactor = qualityPrice->Factor; + float qualityFactor = qualityPrice->Data; float baseFactor = 0.0f; uint32 inventoryType = proto->GetInventoryType(); @@ -1853,9 +1853,9 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL inventoryType == INVTYPE_RANGED || inventoryType == INVTYPE_THROWN || inventoryType == INVTYPE_RANGEDRIGHT) - baseFactor = basePrice->WeaponFactor; + baseFactor = basePrice->Weapon; else - baseFactor = basePrice->ArmorFactor; + baseFactor = basePrice->Armor; if (inventoryType == INVTYPE_ROBE) inventoryType = INVTYPE_CHEST; @@ -1863,7 +1863,7 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL if (proto->GetClass() == ITEM_CLASS_GEM && proto->GetSubClass() == ITEM_SUBCLASS_GEM_ARTIFACT_RELIC) { inventoryType = INVTYPE_WEAPON; - baseFactor = basePrice->WeaponFactor / 3.0f; + baseFactor = basePrice->Weapon / 3.0f; } float typeFactor = 0.0f; @@ -1893,16 +1893,16 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL { case ITEM_SUBCLASS_ARMOR_MISCELLANEOUS: case ITEM_SUBCLASS_ARMOR_CLOTH: - typeFactor = armorPrice->ClothFactor; + typeFactor = armorPrice->ClothModifier; break; case ITEM_SUBCLASS_ARMOR_LEATHER: - typeFactor = armorPrice->LeatherFactor; + typeFactor = armorPrice->LeatherModifier; break; case ITEM_SUBCLASS_ARMOR_MAIL: - typeFactor = armorPrice->MailFactor; + typeFactor = armorPrice->ChainModifier; break; case ITEM_SUBCLASS_ARMOR_PLATE: - typeFactor = armorPrice->PlateFactor; + typeFactor = armorPrice->PlateModifier; break; default: typeFactor = 1.0f; @@ -1917,7 +1917,7 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL if (!shieldPrice) return 0; - typeFactor = shieldPrice->Factor; + typeFactor = shieldPrice->Data; break; } case INVTYPE_WEAPONMAINHAND: @@ -1947,11 +1947,11 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL if (!weaponPrice) return 0; - typeFactor = weaponPrice->Factor; + typeFactor = weaponPrice->Data; } standardPrice = false; - return uint32(proto->GetUnk2() * typeFactor * baseFactor * qualityFactor * proto->GetUnk1()); + return uint32(proto->GetPriceVariance() * typeFactor * baseFactor * qualityFactor * proto->GetPriceRandomValue()); } uint32 Item::GetSellPrice(Player const* owner) const @@ -1973,7 +1973,7 @@ uint32 Item::GetSellPrice(ItemTemplate const* proto, uint32 quality, uint32 item if (ItemClassEntry const* classEntry = sDB2Manager.GetItemClassByOldEnum(proto->GetClass())) { uint32 buyCount = std::max(proto->GetBuyCount(), 1u); - return cost * classEntry->PriceMod / buyCount; + return cost * classEntry->PriceModifier / buyCount; } return 0; @@ -2195,13 +2195,13 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon if (fixedLevel) level = fixedLevel; else - level = std::min(std::max(level, ssd->MinLevel), ssd->MaxLevel); + level = std::min(std::max(int32(level), ssd->MinLevel), ssd->MaxLevel); if (SandboxScalingEntry const* sandbox = sSandboxScalingStore.LookupEntry(bonusData.SandboxScalingId)) if ((sandbox->Flags & 2 || sandbox->MinLevel || sandbox->MaxLevel) && !(sandbox->Flags & 4)) - level = std::min(std::max(level, sandbox->MinLevel), sandbox->MaxLevel); + level = std::min(std::max(int32(level), sandbox->MinLevel), sandbox->MaxLevel); - if (uint32 heirloomIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->ItemLevelCurveID, level))) + if (uint32 heirloomIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->PlayerLevelToItemLevelCurveID, level))) itemLevel = heirloomIlvl; } @@ -2212,7 +2212,7 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon uint32 itemLevelBeforeUpgrades = itemLevel; if (ItemUpgradeEntry const* upgrade = sItemUpgradeStore.LookupEntry(upgradeId)) - itemLevel += upgrade->ItemLevelBonus; + itemLevel += upgrade->ItemLevelIncrement; if (pvpBonus) itemLevel += sDB2Manager.GetPvpItemLevelBonus(itemTemplate->GetId()); @@ -2266,19 +2266,19 @@ ItemDisenchantLootEntry const* Item::GetDisenchantLoot(ItemTemplate const* itemT uint8 expansion = itemTemplate->GetRequiredExpansion(); for (ItemDisenchantLootEntry const* disenchant : sItemDisenchantLootStore) { - if (disenchant->ItemClass != itemClass) + if (disenchant->Class != itemClass) continue; - if (disenchant->ItemSubClass >= 0 && itemSubClass) + if (disenchant->Subclass >= 0 && itemSubClass) continue; - if (disenchant->ItemQuality != quality) + if (disenchant->Quality != quality) continue; - if (disenchant->MinItemLevel > itemLevel || disenchant->MaxItemLevel < itemLevel) + if (disenchant->MinLevel > itemLevel || disenchant->MaxLevel < itemLevel) continue; - if (disenchant->Expansion != -2 && disenchant->Expansion != expansion) + if (disenchant->ExpansionID != -2 && disenchant->ExpansionID != expansion) continue; return disenchant; @@ -2294,8 +2294,8 @@ uint32 Item::GetDisplayId(Player const* owner) const transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) - if (ItemAppearanceEntry const* itemAppearance = sItemAppearanceStore.LookupEntry(transmog->AppearanceID)) - return itemAppearance->DisplayID; + if (ItemAppearanceEntry const* itemAppearance = sItemAppearanceStore.LookupEntry(transmog->ItemAppearanceID)) + return itemAppearance->ItemDisplayInfoID; return sDB2Manager.GetItemDisplayId(GetEntry(), GetAppearanceModId()); } @@ -2335,7 +2335,7 @@ uint16 Item::GetVisibleAppearanceModId(Player const* owner) const transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) - return transmog->AppearanceModID; + return transmog->ItemAppearanceModifierID; return uint16(GetAppearanceModId()); } @@ -2407,7 +2407,7 @@ void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier) { for (ArtifactPowerEntry const* artifactPower : sDB2Manager.GetArtifactPowers(artifactId)) { - if (artifactPower->ArtifactTier != artifactTier) + if (artifactPower->Tier != artifactTier) continue; if (m_artifactPowerIdToIndex.find(artifactPower->ID) != m_artifactPowerIdToIndex.end()) @@ -2442,7 +2442,7 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE: for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers()) { - if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->RelicType) == enchant->EffectSpellID[i]) + if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label) == enchant->EffectArg[i]) { ItemDynamicFieldArtifactPowers newPower = artifactPower; if (apply) @@ -2459,7 +2459,7 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc } break; case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID: - if (ItemDynamicFieldArtifactPowers const* artifactPower = GetArtifactPower(enchant->EffectSpellID[i])) + if (ItemDynamicFieldArtifactPowers const* artifactPower = GetArtifactPower(enchant->EffectArg[i])) { ItemDynamicFieldArtifactPowers newPower = *artifactPower; if (apply) @@ -2477,14 +2477,14 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER: if (slot >= SOCK_ENCHANTMENT_SLOT && slot <= SOCK_ENCHANTMENT_SLOT_3 && _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT] != -1) { - if (ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectSpellID[i])) + if (ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectArg[i])) { PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactPowerPicker->PlayerConditionID); if (!playerCondition || sConditionMgr->IsPlayerMeetingCondition(owner, playerCondition)) { for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers()) { - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->RelicType == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT]) + if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT]) { ItemDynamicFieldArtifactPowers newPower = artifactPower; if (apply) @@ -2531,7 +2531,7 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego if (sourceItem && sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL)) artifactKnowledgeLevel = sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL); else - artifactKnowledgeLevel = owner->GetCurrency(artifactCategory->ArtifactKnowledgeCurrencyID) + 1; + artifactKnowledgeLevel = owner->GetCurrency(artifactCategory->XpMultCurrencyID) + 1; if (GtArtifactKnowledgeMultiplierEntry const* artifactKnowledge = sArtifactKnowledgeMultiplierGameTable.GetRow(artifactKnowledgeLevel)) amount = uint64(amount * artifactKnowledge->Multiplier); diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 7a7ddedae7b..052e52db633 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -253,14 +253,14 @@ TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uin switch (quality) { case ITEM_QUALITY_UNCOMMON: - return randPropPointsEntry->UncommonPropertiesPoints[propIndex]; + return randPropPointsEntry->Good[propIndex]; case ITEM_QUALITY_RARE: case ITEM_QUALITY_HEIRLOOM: - return randPropPointsEntry->RarePropertiesPoints[propIndex]; + return randPropPointsEntry->Superior[propIndex]; case ITEM_QUALITY_EPIC: case ITEM_QUALITY_LEGENDARY: case ITEM_QUALITY_ARTIFACT: - return randPropPointsEntry->EpicPropertiesPoints[propIndex]; + return randPropPointsEntry->Epic[propIndex]; } return 0; diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index 97907e8f88d..d541f70215d 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -46,10 +46,10 @@ uint32 const SocketColorToGemTypeMask[19] = char const* ItemTemplate::GetName(LocaleConstant locale) const { - if (!strlen(ExtendedData->Name->Str[locale])) + if (!strlen(ExtendedData->Display->Str[locale])) return GetDefaultLocaleName(); - return ExtendedData->Name->Str[locale]; + return ExtendedData->Display->Str[locale]; } @@ -113,7 +113,7 @@ uint32 ItemTemplate::GetSkill() const char const* ItemTemplate::GetDefaultLocaleName() const { - return ExtendedData->Name->Str[sWorld->GetDefaultDbcLocale()]; + return ExtendedData->Display->Str[sWorld->GetDefaultDbcLocale()]; } uint32 ItemTemplate::GetArmor(uint32 itemLevel) const @@ -141,7 +141,31 @@ uint32 ItemTemplate::GetArmor(uint32 itemLevel) const if (GetSubClass() < ITEM_SUBCLASS_ARMOR_CLOTH || GetSubClass() > ITEM_SUBCLASS_ARMOR_PLATE) return 0; - return uint32(armorQuality->QualityMod[quality] * armorTotal->Value[GetSubClass() - 1] * location->Modifier[GetSubClass() - 1] + 0.5f); + float total = 1.0f; + float locationModifier = 1.0f; + switch (GetSubClass()) + { + case ITEM_SUBCLASS_ARMOR_CLOTH: + total = armorTotal->Cloth; + locationModifier = location->Clothmodifier; + break; + case ITEM_SUBCLASS_ARMOR_LEATHER: + total = armorTotal->Leather; + locationModifier = location->Leathermodifier; + break; + case ITEM_SUBCLASS_ARMOR_MAIL: + total = armorTotal->Mail; + locationModifier = location->Chainmodifier; + break; + case ITEM_SUBCLASS_ARMOR_PLATE: + total = armorTotal->Plate; + locationModifier = location->Platemodifier; + break; + default: + break; + } + + return uint32(armorQuality->Qualitymod[quality] * total * locationModifier + 0.5f); } // shields @@ -167,13 +191,13 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag switch (GetInventoryType()) { case INVTYPE_AMMO: - dps = sItemDamageAmmoStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageAmmoStore.AssertEntry(itemLevel)->Quality[quality]; break; case INVTYPE_2HWEAPON: if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) - dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else - dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->Quality[quality]; break; case INVTYPE_RANGED: case INVTYPE_THROWN: @@ -181,15 +205,15 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag switch (GetSubClass()) { case ITEM_SUBCLASS_WEAPON_WAND: - dps = sItemDamageOneHandCasterStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageOneHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; break; case ITEM_SUBCLASS_WEAPON_BOW: case ITEM_SUBCLASS_WEAPON_GUN: case ITEM_SUBCLASS_WEAPON_CROSSBOW: if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) - dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else - dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->Quality[quality]; break; default: return; @@ -199,17 +223,17 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag case INVTYPE_WEAPONMAINHAND: case INVTYPE_WEAPONOFFHAND: if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) - dps = sItemDamageOneHandCasterStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageOneHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else - dps = sItemDamageOneHandStore.AssertEntry(itemLevel)->DPS[quality]; + dps = sItemDamageOneHandStore.AssertEntry(itemLevel)->Quality[quality]; break; default: return; } float avgDamage = dps * GetDelay() * 0.001f; - minDamage = (GetStatScalingFactor() * -0.5f + 1.0f) * avgDamage; - maxDamage = floor(float(avgDamage * (GetStatScalingFactor() * 0.5f + 1.0f) + 0.5f)); + minDamage = (GetDmgVariance() * -0.5f + 1.0f) * avgDamage; + maxDamage = floor(float(avgDamage * (GetDmgVariance() * 0.5f + 1.0f) + 0.5f)); } bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 89a20ab6459..c5e83ff6bab 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -707,16 +707,16 @@ struct TC_GAME_API ItemTemplate ItemSparseEntry const* ExtendedData; uint32 GetId() const { return BasicData->ID; } - uint32 GetClass() const { return BasicData->Class; } - uint32 GetSubClass() const { return BasicData->SubClass; } - uint32 GetQuality() const { return ExtendedData->Quality; } + uint32 GetClass() const { return BasicData->ClassID; } + uint32 GetSubClass() const { return BasicData->SubclassID; } + uint32 GetQuality() const { return ExtendedData->OverallQualityID; } uint32 GetFlags() const { return ExtendedData->Flags[0]; } uint32 GetFlags2() const { return ExtendedData->Flags[1]; } uint32 GetFlags3() const { return ExtendedData->Flags[2]; } uint32 GetFlags4() const { return ExtendedData->Flags[3]; } - float GetUnk1() const { return ExtendedData->Unk1; } - float GetUnk2() const { return ExtendedData->Unk2; } - uint32 GetBuyCount() const { return std::max<uint32>(ExtendedData->BuyCount, 1u); } + float GetPriceRandomValue() const { return ExtendedData->PriceRandomValue; } + float GetPriceVariance() const { return ExtendedData->PriceVariance; } + uint32 GetBuyCount() const { return std::max<uint32>(ExtendedData->VendorStackCount, 1u); } uint32 GetBuyPrice() const { return ExtendedData->BuyPrice; } uint32 GetSellPrice() const { return ExtendedData->SellPrice; } InventoryType GetInventoryType() const { return InventoryType(ExtendedData->InventoryType); } @@ -726,41 +726,41 @@ struct TC_GAME_API ItemTemplate int32 GetBaseRequiredLevel() const { return ExtendedData->RequiredLevel; } uint32 GetRequiredSkill() const { return ExtendedData->RequiredSkill; } uint32 GetRequiredSkillRank() const { return ExtendedData->RequiredSkillRank; } - uint32 GetRequiredSpell() const { return ExtendedData->RequiredSpell; } - uint32 GetRequiredReputationFaction() const { return ExtendedData->RequiredReputationFaction; } - uint32 GetRequiredReputationRank() const { return ExtendedData->RequiredReputationRank; } + uint32 GetRequiredSpell() const { return ExtendedData->RequiredAbility; } + uint32 GetRequiredReputationFaction() const { return ExtendedData->MinFactionID; } + uint32 GetRequiredReputationRank() const { return ExtendedData->MinReputation; } uint32 GetMaxCount() const { return ExtendedData->MaxCount; } uint32 GetContainerSlots() const { return ExtendedData->ContainerSlots; } - int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->ItemStatType[index]; } + int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatModifierBonusStat[index]; } int32 GetItemStatValue(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->ItemStatValue[index]; } - int32 GetItemStatAllocation(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->ItemStatAllocation[index]; } - float GetItemStatSocketCostMultiplier(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->ItemStatSocketCostMultiplier[index]; } - uint32 GetScalingStatDistribution() const { return ExtendedData->ScalingStatDistribution; } - uint32 GetDamageType() const { return ExtendedData->DamageType; } - uint32 GetDelay() const { return ExtendedData->Delay; } - float GetRangedModRange() const { return ExtendedData->RangedModRange; } + int32 GetItemStatAllocation(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentEditor[index]; } + float GetItemStatSocketCostMultiplier(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentageOfSocket[index]; } + uint32 GetScalingStatDistribution() const { return ExtendedData->ScalingStatDistributionID; } + uint32 GetDamageType() const { return ExtendedData->DamageDamageType; } + uint32 GetDelay() const { return ExtendedData->ItemDelay; } + float GetRangedModRange() const { return ExtendedData->ItemRange; } ItemBondingType GetBonding() const { return ItemBondingType(ExtendedData->Bonding); } char const* GetName(LocaleConstant locale) const; - uint32 GetPageText() const { return ExtendedData->PageText; } - uint32 GetStartQuest() const { return ExtendedData->StartQuest; } + uint32 GetPageText() const { return ExtendedData->PageID; } + uint32 GetStartQuest() const { return ExtendedData->StartQuestID; } uint32 GetLockID() const { return ExtendedData->LockID; } - uint32 GetRandomProperty() const { return ExtendedData->RandomProperty; } - uint32 GetRandomSuffix() const { return ExtendedData->RandomSuffix; } + uint32 GetRandomProperty() const { return ExtendedData->RandomSelect; } + uint32 GetRandomSuffix() const { return ExtendedData->ItemRandomSuffixGroupID; } uint32 GetItemSet() const { return ExtendedData->ItemSet; } - uint32 GetArea() const { return ExtendedData->Area; } - uint32 GetMap() const { return ExtendedData->Map; } + uint32 GetArea() const { return ExtendedData->ZoneBound; } + uint32 GetMap() const { return ExtendedData->InstanceBound; } uint32 GetBagFamily() const { return ExtendedData->BagFamily; } - uint32 GetTotemCategory() const { return ExtendedData->TotemCategory; } - SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(ExtendedData->SocketColor[index]); } - uint32 GetSocketBonus() const { return ExtendedData->SocketBonus; } + uint32 GetTotemCategory() const { return ExtendedData->TotemCategoryID; } + SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(ExtendedData->SocketType[index]); } + uint32 GetSocketBonus() const { return ExtendedData->SocketMatchEnchantmentId; } uint32 GetGemProperties() const { return ExtendedData->GemProperties; } - float GetArmorDamageModifier() const { return ExtendedData->ArmorDamageModifier; } - uint32 GetDuration() const { return ExtendedData->Duration; } - uint32 GetItemLimitCategory() const { return ExtendedData->ItemLimitCategory; } - HolidayIds GetHolidayID() const { return HolidayIds(ExtendedData->HolidayID); } - float GetStatScalingFactor() const { return ExtendedData->StatScalingFactor; } + float GetQualityModifier() const { return ExtendedData->QualityModifier; } + uint32 GetDuration() const { return ExtendedData->DurationInInventory; } + uint32 GetItemLimitCategory() const { return ExtendedData->LimitCategory; } + HolidayIds GetHolidayID() const { return HolidayIds(ExtendedData->RequiredHoliday); } + float GetDmgVariance() const { return ExtendedData->DmgVariance; } uint8 GetArtifactID() const { return ExtendedData->ArtifactID; } - uint8 GetRequiredExpansion() const { return ExtendedData->RequiredExpansion; } + uint8 GetRequiredExpansion() const { return ExtendedData->ExpansionID; } uint32 MaxDurability; std::vector<ItemEffectEntry const*> Effects; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 75fd5ed1248..05f7a37abb0 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2356,7 +2356,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert uint32 mask = UNIT_MASK_SUMMON; if (properties) { - switch (properties->Category) + switch (properties->Control) { case SUMMON_CATEGORY_PET: mask = UNIT_MASK_GUARDIAN; @@ -2371,7 +2371,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert case SUMMON_CATEGORY_ALLY: case SUMMON_CATEGORY_UNK: { - switch (properties->Type) + switch (properties->Title) { case SUMMON_TYPE_MINION: case SUMMON_TYPE_GUARDIAN: diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index 8f9885de9be..eb4834967ba 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -163,11 +163,11 @@ void CollectionMgr::LoadAccountHeirlooms(PreparedQueryResult result) uint32 bonusId = 0; if (flags & HEIRLOOM_FLAG_BONUS_LEVEL_110) - bonusId = heirloom->ItemBonusListID[2]; + bonusId = heirloom->UpgradeItemBonusListID[2]; else if (flags & HEIRLOOM_FLAG_BONUS_LEVEL_100) - bonusId = heirloom->ItemBonusListID[1]; + bonusId = heirloom->UpgradeItemBonusListID[1]; else if (flags & HEIRLOOM_FLAG_BONUS_LEVEL_90) - bonusId = heirloom->ItemBonusListID[0]; + bonusId = heirloom->UpgradeItemBonusListID[0]; _heirlooms[itemId] = HeirloomData(flags, bonusId); } while (result->NextRow()); @@ -218,7 +218,7 @@ void CollectionMgr::AddHeirloom(uint32 itemId, uint32 flags) } } -void CollectionMgr::UpgradeHeirloom(uint32 itemId, uint32 castItem) +void CollectionMgr::UpgradeHeirloom(uint32 itemId, int32 castItem) { Player* player = _owner->GetPlayer(); if (!player) @@ -238,17 +238,17 @@ void CollectionMgr::UpgradeHeirloom(uint32 itemId, uint32 castItem) if (heirloom->UpgradeItemID[0] == castItem) { flags |= HEIRLOOM_FLAG_BONUS_LEVEL_90; - bonusId = heirloom->ItemBonusListID[0]; + bonusId = heirloom->UpgradeItemBonusListID[0]; } if (heirloom->UpgradeItemID[1] == castItem) { flags |= HEIRLOOM_FLAG_BONUS_LEVEL_100; - bonusId = heirloom->ItemBonusListID[1]; + bonusId = heirloom->UpgradeItemBonusListID[1]; } if (heirloom->UpgradeItemID[2] == castItem) { flags |= HEIRLOOM_FLAG_BONUS_LEVEL_110; - bonusId = heirloom->ItemBonusListID[2]; + bonusId = heirloom->UpgradeItemBonusListID[2]; } for (Item* item : player->GetItemListByEntry(itemId, true)) @@ -277,14 +277,14 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item) return; // Check for heirloom pairs (normal - heroic, heroic - mythic) - uint32 heirloomItemId = heirloom->NextDifficultyItemID; + uint32 heirloomItemId = heirloom->StaticUpgradedItemID; uint32 newItemId = 0; while (HeirloomEntry const* heirloomDiff = sDB2Manager.GetHeirloomByItemId(heirloomItemId)) { if (player->GetItemByEntry(heirloomDiff->ItemID)) newItemId = heirloomDiff->ItemID; - if (HeirloomEntry const* heirloomSub = sDB2Manager.GetHeirloomByItemId(heirloomDiff->NextDifficultyItemID)) + if (HeirloomEntry const* heirloomSub = sDB2Manager.GetHeirloomByItemId(heirloomDiff->StaticUpgradedItemID)) { heirloomItemId = heirloomSub->ItemID; continue; @@ -390,10 +390,10 @@ bool CollectionMgr::AddMount(uint32 spellId, MountStatusFlags flags, bool factio _mounts.insert(MountContainer::value_type(spellId, flags)); // Mount condition only applies to using it, should still learn it. - if (mount->PlayerConditionId) + if (mount->PlayerConditionID) { - PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mount->PlayerConditionId); - if (!ConditionMgr::IsPlayerMeetingCondition(player, playerCondition)) + PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mount->PlayerConditionID); + if (playerCondition && !ConditionMgr::IsPlayerMeetingCondition(player, playerCondition)) return false; } @@ -655,7 +655,7 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi if (!itemModifiedAppearance) return false; - if (itemModifiedAppearance->SourceType == 6 || itemModifiedAppearance->SourceType == 9) + if (itemModifiedAppearance->TransmogSourceTypeEnum == 6 || itemModifiedAppearance->TransmogSourceTypeEnum == 9) return false; if (!sItemSearchNameStore.LookupEntry(itemModifiedAppearance->ItemID)) diff --git a/src/server/game/Entities/Player/CollectionMgr.h b/src/server/game/Entities/Player/CollectionMgr.h index 04a05298b81..1c7f9b7036e 100644 --- a/src/server/game/Entities/Player/CollectionMgr.h +++ b/src/server/game/Entities/Player/CollectionMgr.h @@ -93,7 +93,7 @@ public: void LoadAccountHeirlooms(PreparedQueryResult result); void SaveAccountHeirlooms(SQLTransaction& trans); void AddHeirloom(uint32 itemId, uint32 flags); - void UpgradeHeirloom(uint32 itemId, uint32 castItem); + void UpgradeHeirloom(uint32 itemId, int32 castItem); void CheckHeirloomUpgrades(Item* item); bool UpdateAccountHeirlooms(uint32 itemId, uint32 flags); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e8b285d628a..3c69bdc7b83 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -440,7 +440,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac SetMap(sMapMgr->CreateMap(info->mapId, this)); - uint8 powertype = cEntry->PowerType; + uint8 powertype = cEntry->DisplayPower; SetObjectScale(1.0f); @@ -634,7 +634,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac { if (iProto->Effects.size() >= 1) { - switch (iProto->Effects[0]->Category) + switch (iProto->Effects[0]->SpellCategoryID) { case SPELL_CATEGORY_FOOD: // food count = getClass() == CLASS_DEATH_KNIGHT ? 10 : 4; @@ -1852,13 +1852,13 @@ void Player::Regenerate(Powers power) float addvalue = 0.0f; if (!IsInCombat()) { - if (powerType->RegenerationDelay && GetMSTimeDiffToNow(m_combatExitTime) < powerType->RegenerationDelay) + if (powerType->RegenInterruptTimeMS && GetMSTimeDiffToNow(m_combatExitTime) < uint32(powerType->RegenInterruptTimeMS)) return; - addvalue = (powerType->RegenerationPeace + GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; + addvalue = (powerType->RegenPeace + GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; } else - addvalue = (powerType->RegenerationCombat + GetFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; + addvalue = (powerType->RegenCombat + GetFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; static Rates const RatesForPower[MAX_POWERS] = { @@ -1894,7 +1894,7 @@ void Player::Regenerate(Powers power) addvalue += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power) * ((power != POWER_ENERGY) ? m_regenTimerCount : m_regenTimer) / (5 * IN_MILLISECONDS); } - int32 minPower = powerType->RegenerationMin; + int32 minPower = powerType->MinPower; int32 maxPower = GetMaxPower(power); if (addvalue < 0.0f) @@ -1913,17 +1913,17 @@ void Player::Regenerate(Powers power) addvalue += m_powerFraction[powerIndex]; int32 integerValue = int32(std::fabs(addvalue)); - if (powerType->RegenerationCenter) + if (powerType->CenterPower) { - if (curValue > powerType->RegenerationCenter) + if (curValue > powerType->CenterPower) { addvalue = -std::abs(addvalue); - minPower = powerType->RegenerationCenter; + minPower = powerType->CenterPower; } - else if (curValue < powerType->RegenerationCenter) + else if (curValue < powerType->CenterPower) { addvalue = std::abs(addvalue); - maxPower = powerType->RegenerationCenter; + maxPower = powerType->CenterPower; } else return; @@ -2154,7 +2154,7 @@ void Player::SetInWater(bool apply) bool Player::IsInAreaTriggerRadius(const AreaTriggerEntry* trigger) const { - if (!trigger || GetMapId() != trigger->MapID) + if (!trigger || int32(GetMapId()) != trigger->ContinentID) return false; if (trigger->Radius > 0.f) @@ -2835,7 +2835,7 @@ void Player::RemoveTalent(TalentEntry const* talent) plrTalent->second = PLAYERSPELL_REMOVED; } -bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, uint32 fromSkill /*= 0*/) +bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, int32 fromSkill /*= 0*/) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) @@ -3146,7 +3146,7 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent // need to add Battle pets automatically into pet journal for (BattlePetSpeciesEntry const* entry : sBattlePetSpeciesStore) { - if (entry->SummonSpellID == spellId && GetSession()->GetBattlePetMgr()->GetPetCount(entry->ID) == 0) + if (entry->SummonSpellID == int32(spellId) && GetSession()->GetBattlePetMgr()->GetPetCount(entry->ID) == 0) { GetSession()->GetBattlePetMgr()->AddPet(entry->ID, entry->CreatureID, BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID)); UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET_COUNT); @@ -3212,12 +3212,12 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const bool Player::IsCurrentSpecMasterySpell(SpellInfo const* spellInfo) const { if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) - return spellInfo->Id == chrSpec->MasterySpellID[0] || spellInfo->Id == chrSpec->MasterySpellID[1]; + return spellInfo->Id == uint32(chrSpec->MasterySpellID[0]) || spellInfo->Id == uint32(chrSpec->MasterySpellID[1]); return false; } -void Player::LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill /*= 0*/) +void Player::LearnSpell(uint32 spell_id, bool dependent, int32 fromSkill /*= 0*/) { PlayerSpellMap::iterator itr = m_spells.find(spell_id); @@ -4559,7 +4559,7 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g else if (ditemProto->GetClass() == ITEM_CLASS_ARMOR) dmultiplier = dcost->ArmorSubClassCost[ditemProto->GetSubClass()]; - uint32 costs = uint32(LostDurability * dmultiplier * double(dQualitymodEntry->QualityMod) * item->GetRepairCostMultiplier()); + uint32 costs = uint32(LostDurability * dmultiplier * double(dQualitymodEntry->Data) * item->GetRepairCostMultiplier()); costs = uint32(costs * discountMod * sWorld->getRate(RATE_REPAIRCOST)); @@ -5511,7 +5511,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) if (SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j)) if (pAbility->SkillLine == id) - RemoveSpell(sSpellMgr->GetFirstSpellInChain(pAbility->SpellID)); + RemoveSpell(sSpellMgr->GetFirstSpellInChain(pAbility->Spell)); // Clear profession lines if (GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1) == id) @@ -5789,7 +5789,7 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) co return false; } - if (!HasSpell(mount->SpellId)) + if (!HasSpell(mount->SourceSpellID)) { TC_LOG_ERROR("entities.player", "Player::IsActionButtonDataValid: Mount action %u not added into button %u for player %s (%s): Player does not know this mount", action, button, GetName().c_str(), GetGUID().ToString().c_str()); @@ -6004,12 +6004,12 @@ uint32 Player::TeamForRace(uint8 race) { if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race)) { - switch (rEntry->TeamID) + switch (rEntry->Alliance) { case 0: return ALLIANCE; case 1: return HORDE; } - TC_LOG_ERROR("entities.player", "Race (%u) has wrong teamid (%u) in DBC: wrong DBC files?", uint32(race), rEntry->TeamID); + TC_LOG_ERROR("entities.player", "Race (%u) has wrong teamid (%u) in DBC: wrong DBC files?", uint32(race), rEntry->Alliance); } else TC_LOG_ERROR("entities.player", "Race (%u) not found in DBC: wrong DBC files?", uint32(race)); @@ -6020,7 +6020,7 @@ uint32 Player::TeamForRace(uint8 race) TeamId Player::TeamIdForRace(uint8 race) { if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race)) - return TeamId(rEntry->TeamID); + return TeamId(rEntry->Alliance); TC_LOG_ERROR("entities.player", "Race (%u) not found in DBC: wrong DBC files?", race); return TEAM_NEUTRAL; @@ -6196,7 +6196,7 @@ void Player::RewardReputation(Quest const* quest) if (QuestFactionRewardEntry const* questFactionRewEntry = sQuestFactionRewardStore.LookupEntry(row)) { uint32 field = abs(quest->RewardFactionValue[i]); - rep = questFactionRewEntry->QuestRewFactionValue[field]; + rep = questFactionRewEntry->Difficulty[field]; } } @@ -6428,13 +6428,13 @@ void Player::RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry) if (!rewardPackEntry) return; - if (CharTitlesEntry const* charTitlesEntry = sCharTitlesStore.LookupEntry(rewardPackEntry->TitleID)) + if (CharTitlesEntry const* charTitlesEntry = sCharTitlesStore.LookupEntry(rewardPackEntry->CharTitleID)) SetTitle(charTitlesEntry); ModifyMoney(rewardPackEntry->Money); if (std::vector<RewardPackXItemEntry const*> const* rewardPackXItems = sDB2Manager.GetRewardPackItemsByRewardID(rewardPackEntry->ID)) for (RewardPackXItemEntry const* rewardPackXItem : *rewardPackXItems) - AddItem(rewardPackXItem->ItemID, rewardPackXItem->Amount); + AddItem(rewardPackXItem->ItemID, rewardPackXItem->ItemQuantity); } void Player::AddHonorXP(uint32 xp) @@ -7667,7 +7667,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool formChange /*= fal ItemEffectEntry const* effectData = proto->Effects[i]; // wrong triggering type - if (apply && effectData->Trigger != ITEM_SPELLTRIGGER_ON_EQUIP) + if (apply && effectData->TriggerType != ITEM_SPELLTRIGGER_ON_EQUIP) continue; // check if it is valid spell @@ -7781,7 +7781,7 @@ void Player::ApplyArtifactPowers(Item* item, bool apply) } if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(item->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID))) - if (artifactAppearance->ShapeshiftDisplayID && GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->ModifiesShapeshiftFormDisplay)) + if (artifactAppearance->OverrideShapeshiftDisplayID && GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID)) RestoreDisplayId(); } @@ -7804,7 +7804,7 @@ void Player::ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const continue; if (powerAura->HasEffect(auraEffect->GetEffIndex())) - auraEffect->ChangeAmount(artifactPowerRank->Value ? artifactPowerRank->Value : auraEffect->GetSpellEffectInfo()->CalcValue()); + auraEffect->ChangeAmount(artifactPowerRank->AuraPointsOverride ? artifactPowerRank->AuraPointsOverride : auraEffect->GetSpellEffectInfo()->CalcValue()); } } else @@ -7813,10 +7813,10 @@ void Player::ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const else if (apply) { CustomSpellValues csv; - if (artifactPowerRank->Value) + if (artifactPowerRank->AuraPointsOverride) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (spellInfo->GetEffect(i)) - csv.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), artifactPowerRank->Value); + csv.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), artifactPowerRank->AuraPointsOverride); CastCustomSpell(artifactPowerRank->SpellID, csv, this, TRIGGERED_FULL_MASK, artifact); } @@ -7905,7 +7905,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT ItemEffectEntry const* effectData = proto->Effects[i]; // wrong triggering type - if (effectData->Trigger != ITEM_SPELLTRIGGER_CHANCE_ON_HIT) + if (effectData->TriggerType != ITEM_SPELLTRIGGER_CHANCE_ON_HIT) continue; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(effectData->SpellID); @@ -7963,11 +7963,11 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT continue; } - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->EffectSpellID[s]); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->EffectArg[s]); if (!spellInfo) { TC_LOG_ERROR("entities.player.items", "Player::CastItemCombatSpell: Player '%s' (%s) cast unknown spell (EnchantID: %u, SpellID: %i), ignoring", - GetName().c_str(), GetGUID().ToString().c_str(), enchant_id, pEnchant->EffectSpellID[s]); + GetName().c_str(), GetGUID().ToString().c_str(), enchant_id, pEnchant->EffectArg[s]); continue; } @@ -7982,7 +7982,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT } // Apply spell mods - ApplySpellMod(pEnchant->EffectSpellID[s], SPELLMOD_CHANCE_OF_SUCCESS, chance); + ApplySpellMod(pEnchant->EffectArg[s], SPELLMOD_CHANCE_OF_SUCCESS, chance); // Shiv has 100% chance to apply the poison if (FindCurrentSpellBySpellId(5938) && e_slot == TEMP_ENCHANTMENT_SLOT) @@ -8039,7 +8039,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, Objec ItemEffectEntry const* effectData = proto->Effects[i]; // wrong triggering type - if (effectData->Trigger != ITEM_SPELLTRIGGER_ON_USE) + if (effectData->TriggerType != ITEM_SPELLTRIGGER_ON_USE) continue; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(effectData->SpellID); @@ -8076,10 +8076,10 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, Objec if (pEnchant->Effect[s] != ITEM_ENCHANTMENT_TYPE_USE_SPELL) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->EffectSpellID[s]); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->EffectArg[s]); if (!spellInfo) { - TC_LOG_ERROR("entities.player", "Player::CastItemUseSpell: Enchant %i, cast unknown spell %i", enchant_id, pEnchant->EffectSpellID[s]); + TC_LOG_ERROR("entities.player", "Player::CastItemUseSpell: Enchant %i, cast unknown spell %i", enchant_id, pEnchant->EffectArg[s]); continue; } @@ -11233,11 +11233,11 @@ InventoryResult Player::CanEquipChildItem(Item* parentItem) const if (!childEquipement) return EQUIP_ERR_OK; - Item* dstItem = GetItemByPos(INVENTORY_SLOT_BAG_0, childEquipement->AltEquipmentSlot); + Item* dstItem = GetItemByPos(INVENTORY_SLOT_BAG_0, childEquipement->ChildItemEquipSlot); if (!dstItem) return EQUIP_ERR_OK; - uint16 childDest = (INVENTORY_SLOT_BAG_0 << 8) | childEquipement->AltEquipmentSlot; + uint16 childDest = (INVENTORY_SLOT_BAG_0 << 8) | childEquipement->ChildItemEquipSlot; InventoryResult msg = CanUnequipItem(childDest, !childItem->IsBag()); if (msg != EQUIP_ERR_OK) return msg; @@ -11595,7 +11595,7 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const return EQUIP_ERR_INTERNAL_BAG_ERROR; if (ArtifactEntry const* artifact = sArtifactStore.LookupEntry(proto->GetArtifactID())) - if (artifact->SpecID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (artifact->ChrSpecializationID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) return EQUIP_ERR_CANT_USE_ITEM; return EQUIP_ERR_OK; @@ -11720,7 +11720,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat if (ItemChildEquipmentEntry const* childItemEntry = sDB2Manager.GetItemChildEquipment(itemId)) { - if (ItemTemplate const* childTemplate = sObjectMgr->GetItemTemplate(childItemEntry->AltItemID)) + if (ItemTemplate const* childTemplate = sObjectMgr->GetItemTemplate(childItemEntry->ChildItemID)) { ItemPosCountVec childDest; CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, childDest, childTemplate, count, false, nullptr, NULL_BAG, NULL_SLOT); @@ -11822,7 +11822,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool const ItemTemplate* proto = pItem->GetTemplate(); for (uint8 i = 0; i < proto->Effects.size(); ++i) - if (proto->Effects[i]->Trigger == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger + if (proto->Effects[i]->TriggerType == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger if (bag == INVENTORY_SLOT_BAG_0 || (bag >= INVENTORY_SLOT_BAG_START && bag < INVENTORY_SLOT_BAG_END)) if (!HasAura(proto->Effects[i]->SpellID)) CastSpell(this, proto->Effects[i]->SpellID, true, pItem); @@ -11865,7 +11865,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool const ItemTemplate* proto = pItem2->GetTemplate(); for (uint8 i = 0; i < proto->Effects.size(); ++i) - if (proto->Effects[i]->Trigger == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger + if (proto->Effects[i]->TriggerType == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger if (bag == INVENTORY_SLOT_BAG_0 || (bag >= INVENTORY_SLOT_BAG_START && bag < INVENTORY_SLOT_BAG_END)) if (!HasAura(proto->Effects[i]->SpellID)) CastSpell(this, proto->Effects[i]->SpellID, true, pItem2); @@ -12003,7 +12003,7 @@ void Player::EquipChildItem(uint8 parentBag, uint8 parentSlot, Item* parentItem) { if (Item* childItem = GetChildItemByGuid(parentItem->GetChildItem())) { - uint16 childDest = (INVENTORY_SLOT_BAG_0 << 8) | itemChildEquipment->AltEquipmentSlot; + uint16 childDest = (INVENTORY_SLOT_BAG_0 << 8) | itemChildEquipment->ChildItemEquipSlot; if (childItem->GetPos() != childDest) { Item* dstItem = GetItemByPos(childDest); @@ -12329,7 +12329,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) const ItemTemplate* proto = pItem->GetTemplate(); for (uint8 i = 0; i < proto->Effects.size(); ++i) - if (proto->Effects[i]->Trigger == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger + if (proto->Effects[i]->TriggerType == ITEM_SPELLTRIGGER_ON_OBTAIN) // On obtain trigger RemoveAurasDueToSpell(proto->Effects[i]->SpellID); ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount()); @@ -13724,7 +13724,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool { uint32 enchant_display_type = pEnchant->Effect[s]; uint32 enchant_amount = pEnchant->EffectPointsMin[s]; - uint32 enchant_spell_id = pEnchant->EffectSpellID[s]; + uint32 enchant_spell_id = pEnchant->EffectArg[s]; switch (enchant_display_type) { @@ -14952,13 +14952,13 @@ bool Player::CanRewardQuest(Quest const* quest, uint32 reward, bool msg) { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != reward) + if (questPackageItem->ItemID != int32(reward)) continue; if (CanSelectQuestPackageItem(questPackageItem)) { hasFilteredQuestPackageReward = true; - InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemCount); + InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemQuantity); if (res != EQUIP_ERR_OK) { SendEquipError(res, nullptr, nullptr, questPackageItem->ItemID); @@ -14974,10 +14974,10 @@ bool Player::CanRewardQuest(Quest const* quest, uint32 reward, bool msg) { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != reward) + if (questPackageItem->ItemID != int32(reward)) continue; - InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemCount); + InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemQuantity); if (res != EQUIP_ERR_OK) { SendEquipError(res, nullptr, nullptr, questPackageItem->ItemID); @@ -15154,7 +15154,7 @@ bool Player::CanSelectQuestPackageItem(QuestPackageItemEntry const* questPackage (rewardProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() != HORDE)) return false; - switch (questPackageItem->FilterType) + switch (questPackageItem->DisplayType) { case QUEST_PACKAGE_FILTER_LOOT_SPECIALIZATION: return rewardProto->IsUsableByLootSpecialization(this, true); @@ -15176,17 +15176,17 @@ void Player::RewardQuestPackage(uint32 questPackageId, uint32 onlyItemId /*= 0*/ { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (onlyItemId && questPackageItem->ItemID != onlyItemId) + if (onlyItemId && questPackageItem->ItemID != int32(onlyItemId)) continue; if (CanSelectQuestPackageItem(questPackageItem)) { hasFilteredQuestPackageReward = true; ItemPosCountVec dest; - if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemCount) == EQUIP_ERR_OK) + if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemQuantity) == EQUIP_ERR_OK) { Item* item = StoreNewItem(dest, questPackageItem->ItemID, true, GenerateItemRandomPropertyId(questPackageItem->ItemID)); - SendNewItem(item, questPackageItem->ItemCount, true, false); + SendNewItem(item, questPackageItem->ItemQuantity, true, false); } } } @@ -15198,14 +15198,14 @@ void Player::RewardQuestPackage(uint32 questPackageId, uint32 onlyItemId /*= 0*/ { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (onlyItemId && questPackageItem->ItemID != onlyItemId) + if (onlyItemId && questPackageItem->ItemID != int32(onlyItemId)) continue; ItemPosCountVec dest; - if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemCount) == EQUIP_ERR_OK) + if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, questPackageItem->ItemID, questPackageItem->ItemQuantity) == EQUIP_ERR_OK) { Item* item = StoreNewItem(dest, questPackageItem->ItemID, true, GenerateItemRandomPropertyId(questPackageItem->ItemID)); - SendNewItem(item, questPackageItem->ItemCount, true, false); + SendNewItem(item, questPackageItem->ItemQuantity, true, false); } } } @@ -17805,7 +17805,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) else // has start node, teleport to it { TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) has too short taxi destination list, teleport to original node.", GetGUID().ToString().c_str()); - mapId = nodeEntry->MapID; + mapId = nodeEntry->ContinentID; Relocate(nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z, 0.0f); } m_taxi.ClearTaxiDestinations(); @@ -17815,10 +17815,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) { // save source node as recall coord to prevent recall and fall from sky TaxiNodesEntry const* nodeEntry = sTaxiNodesStore.LookupEntry(node_id); - if (nodeEntry && nodeEntry->MapID == GetMapId()) + if (nodeEntry && nodeEntry->ContinentID == GetMapId()) { ASSERT(nodeEntry); // checked in m_taxi.LoadTaxiDestinationsFromString - mapId = nodeEntry->MapID; + mapId = nodeEntry->ContinentID; Relocate(nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z, 0.0f); } @@ -18519,8 +18519,8 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti artifactPowerData.PurchasedRank = fields[4].GetUInt8(); if (ArtifactPowerEntry const* artifactPower = sArtifactPowerStore.LookupEntry(artifactPowerData.ArtifactPowerId)) { - if (artifactPowerData.PurchasedRank > artifactPower->MaxRank) - artifactPowerData.PurchasedRank = artifactPower->MaxRank; + if (artifactPowerData.PurchasedRank > artifactPower->MaxPurchasableRank) + artifactPowerData.PurchasedRank = artifactPower->MaxPurchasableRank; artifactPowerData.CurrentRankWithBonus = (artifactPower->Flags & ARTIFACT_POWER_FLAG_FIRST) ? 1 : 0; @@ -19652,7 +19652,7 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report { if (missingQuest && !ar->questFailedText.empty()) ChatHandler(GetSession()).PSendSysMessage("%s", ar->questFailedText.c_str()); - else if (mapDiff->Message_lang->Str[sWorld->GetDefaultDbcLocale()][0] != '\0') // if (missingAchievement) covered by this case + else if (mapDiff->Message->Str[sWorld->GetDefaultDbcLocale()][0] != '\0') // if (missingAchievement) covered by this case SendTransferAborted(target_map, TRANSFER_ABORT_DIFFICULTY, target_difficulty); else if (missingItem) GetSession()->SendNotification(GetSession()->GetTrinityString(LANG_LEVEL_MINREQUIRED_AND_ITEM), LevelMin, ASSERT_NOTNULL(sObjectMgr->GetItemTemplate(missingItem))->GetName(GetSession()->GetSessionDbcLocale())); @@ -22076,7 +22076,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc // check node starting pos data set case if provided if (node->Pos.X != 0.0f || node->Pos.Y != 0.0f || node->Pos.Z != 0.0f) { - if (node->MapID != GetMapId() || !IsInDist(node->Pos.X, node->Pos.Y, node->Pos.Z, 2 * INTERACTION_DISTANCE)) + if (node->ContinentID != GetMapId() || !IsInDist(node->Pos.X, node->Pos.Y, node->Pos.Z, 2 * INTERACTION_DISTANCE)) { GetSession()->SendActivateTaxiReply(ERR_TAXITOOFARAWAY); return false; @@ -22191,7 +22191,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc m_taxi.ClearTaxiDestinations(); ModifyMoney(-int64(totalcost)); UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost); - TeleportTo(lastPathNode->MapID, lastPathNode->Pos.X, lastPathNode->Pos.Y, lastPathNode->Pos.Z, GetOrientation()); + TeleportTo(lastPathNode->ContinentID, lastPathNode->Pos.X, lastPathNode->Pos.Y, lastPathNode->Pos.Z, GetOrientation()); return false; } else @@ -22213,8 +22213,8 @@ bool Player::ActivateTaxiPathTo(uint32 taxi_path_id, uint32 spellid /*= 0*/) std::vector<uint32> nodes; nodes.resize(2); - nodes[0] = entry->From; - nodes[1] = entry->To; + nodes[0] = entry->FromTaxiNode; + nodes[1] = entry->ToTaxiNode; return ActivateTaxiPathTo(nodes, nullptr, spellid); } @@ -22255,7 +22255,7 @@ void Player::ContinueTaxiFlight() const TaxiPathNodeEntry const* prevNode = nodeList[i-1]; // skip nodes at another map - if (node->MapID != GetMapId()) + if (node->ContinentID != GetMapId()) continue; distPrev = distNext; @@ -22348,17 +22348,17 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c ASSERT(iece); for (int i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (iece->RequiredItem[i]) - DestroyItemCount(iece->RequiredItem[i], iece->RequiredItemCount[i] * stacks, true); + if (iece->ItemID[i]) + DestroyItemCount(iece->ItemID[i], iece->ItemCount[i] * stacks, true); } for (int i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) continue; - if (iece->RequiredCurrency[i]) - ModifyCurrency(iece->RequiredCurrency[i], -int32(iece->RequiredCurrencyCount[i] * stacks), true, true); + if (iece->CurrencyID[i]) + ModifyCurrency(iece->CurrencyID[i], -int32(iece->CurrencyCount[i] * stacks), true, true); } } @@ -22460,7 +22460,7 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) { - if (iece->RequiredItem[i] && !HasItemCount(iece->RequiredItem[i], (iece->RequiredItemCount[i] * stacks))) + if (iece->ItemID[i] && !HasItemCount(iece->ItemID[i], (iece->ItemCount[i] * stacks))) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); return false; @@ -22469,23 +22469,23 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (!iece->RequiredCurrency[i]) + if (!iece->CurrencyID[i]) continue; - CurrencyTypesEntry const* entry = sCurrencyTypesStore.LookupEntry(iece->RequiredCurrency[i]); + CurrencyTypesEntry const* entry = sCurrencyTypesStore.LookupEntry(iece->CurrencyID[i]); if (!entry) { SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, currency, 0); // Find correct error return false; } - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) { // Not implemented SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); // Find correct error return false; } - else if (!HasCurrency(iece->RequiredCurrency[i], (iece->RequiredCurrencyCount[i] * stacks))) + else if (!HasCurrency(iece->CurrencyID[i], (iece->CurrencyCount[i] * stacks))) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); // Find correct error return false; @@ -22493,20 +22493,20 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, } // check for personal arena rating requirement - if (GetMaxPersonalArenaRatingRequirement(iece->RequiredArenaSlot) < iece->RequiredPersonalArenaRating) + if (GetMaxPersonalArenaRatingRequirement(iece->ArenaBracket) < iece->RequiredArenaRating) { // probably not the proper equip err SendEquipError(EQUIP_ERR_CANT_EQUIP_RANK, nullptr, nullptr); return false; } - if (iece->RequiredFactionId && uint32(GetReputationRank(iece->RequiredFactionId)) < iece->RequiredFactionStanding) + if (iece->MinFactionID && uint32(GetReputationRank(iece->MinFactionID)) < iece->RequiredAchievement) { SendBuyError(BUY_ERR_REPUTATION_REQUIRE, creature, currency, 0); return false; } - if (iece->RequirementFlags & ITEM_EXT_COST_FLAG_REQUIRE_GUILD && !GetGuildId()) + if (iece->Flags & ITEM_EXT_COST_FLAG_REQUIRE_GUILD && !GetGuildId()) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); // Find correct error return false; @@ -22529,21 +22529,21 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, { for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) { - if (!iece->RequiredItem[i]) + if (!iece->ItemID[i]) continue; - DestroyItemCount(iece->RequiredItem[i], iece->RequiredItemCount[i] * stacks, true); + DestroyItemCount(iece->ItemID[i], iece->ItemCount[i] * stacks, true); } for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (!iece->RequiredCurrency[i]) + if (!iece->CurrencyID[i]) continue; - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) continue; - ModifyCurrency(iece->RequiredCurrency[i], -int32(iece->RequiredCurrencyCount[i]) * stacks, false, true); + ModifyCurrency(iece->CurrencyID[i], -int32(iece->CurrencyCount[i]) * stacks, false, true); } } @@ -22661,7 +22661,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) { - if (iece->RequiredItem[i] && !HasItemCount(iece->RequiredItem[i], iece->RequiredItemCount[i] * stacks)) + if (iece->ItemID[i] && !HasItemCount(iece->ItemID[i], iece->ItemCount[i] * stacks)) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); return false; @@ -22670,22 +22670,22 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (!iece->RequiredCurrency[i]) + if (!iece->CurrencyID[i]) continue; - CurrencyTypesEntry const* entry = sCurrencyTypesStore.LookupEntry(iece->RequiredCurrency[i]); + CurrencyTypesEntry const* entry = sCurrencyTypesStore.LookupEntry(iece->CurrencyID[i]); if (!entry) { SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, item, 0); return false; } - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); // Find correct error return false; } - else if (!HasCurrency(iece->RequiredCurrency[i], iece->RequiredCurrencyCount[i] * stacks)) + else if (!HasCurrency(iece->CurrencyID[i], iece->CurrencyCount[i] * stacks)) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); return false; @@ -22693,20 +22693,20 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin } // check for personal arena rating requirement - if (GetMaxPersonalArenaRatingRequirement(iece->RequiredArenaSlot) < iece->RequiredPersonalArenaRating) + if (GetMaxPersonalArenaRatingRequirement(iece->ArenaBracket) < iece->RequiredArenaRating) { // probably not the proper equip err SendEquipError(EQUIP_ERR_CANT_EQUIP_RANK, nullptr, nullptr); return false; } - if (iece->RequiredFactionId && uint32(GetReputationRank(iece->RequiredFactionId)) < iece->RequiredFactionStanding) + if (iece->MinFactionID && uint32(GetReputationRank(iece->MinFactionID)) < iece->MinReputation) { SendBuyError(BUY_ERR_REPUTATION_REQUIRE, creature, item, 0); return false; } - if (iece->RequirementFlags & ITEM_EXT_COST_FLAG_REQUIRE_GUILD && !GetGuildId()) + if (iece->Flags & ITEM_EXT_COST_FLAG_REQUIRE_GUILD && !GetGuildId()) { SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, nullptr, nullptr); // Find correct error return false; @@ -22898,7 +22898,7 @@ void Player::UpdatePotionCooldown(Spell* spell) // spell/item pair let set proper cooldown (except non-existing charged spell cooldown spellmods for potions) if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(m_lastPotionId)) for (uint8 idx = 0; idx < proto->Effects.size(); ++idx) - if (proto->Effects[idx]->Trigger == ITEM_SPELLTRIGGER_ON_USE) + if (proto->Effects[idx]->TriggerType == ITEM_SPELLTRIGGER_ON_USE) if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(proto->Effects[idx]->SpellID)) GetSpellHistory()->SendCooldownEvent(spellInfo, m_lastPotionId); } @@ -22964,13 +22964,13 @@ bool Player::EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) for (uint8 i = 0; i < 5; i++) { - if (!Condition->LTOperandType[i]) + if (!Condition->LtOperandType[i]) continue; - uint32 _cur_gem = curcount[Condition->LTOperandType[i] - 1]; + uint32 _cur_gem = curcount[Condition->LtOperandType[i] - 1]; // if have <CompareColor> use them as count, else use <value> from Condition - uint32 _cmp_gem = Condition->RTOperandType[i] ? curcount[Condition->RTOperandType[i] - 1]: Condition->RTOperand[i]; + uint32 _cmp_gem = Condition->RtOperandType[i] ? curcount[Condition->RtOperandType[i] - 1]: Condition->RtOperand[i]; switch (Condition->Operator[i]) { @@ -23850,7 +23850,7 @@ void Player::ApplyEquipCooldown(Item* pItem) ItemEffectEntry const* effectData = proto->Effects[i]; // apply proc cooldown to equip auras if we have any - if (effectData->Trigger == ITEM_SPELLTRIGGER_ON_EQUIP) + if (effectData->TriggerType == ITEM_SPELLTRIGGER_ON_EQUIP) { SpellProcEntry const* procEntry = sSpellMgr->GetSpellProcEntry(effectData->SpellID); if (!procEntry) @@ -23862,7 +23862,7 @@ void Player::ApplyEquipCooldown(Item* pItem) } // wrong triggering type - if (effectData->Trigger != ITEM_SPELLTRIGGER_ON_USE) + if (effectData->TriggerType != ITEM_SPELLTRIGGER_ON_USE) continue; // Don't replace longer cooldowns by equip cooldown if we have any. @@ -24087,10 +24087,10 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) { SkillLineAbilityEntry const* ability = sSkillLineAbilityStore.LookupEntry(j); - if (!ability || ability->SkillLine != skillId) + if (!ability || ability->SkillLine != int32(skillId)) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(ability->SpellID); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(ability->Spell); if (!spellInfo) continue; @@ -24114,13 +24114,13 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) continue; // need unlearn spell - if (skillValue < ability->MinSkillLineRank && ability->AcquireMethod == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) - RemoveSpell(ability->SpellID); + if (int32(skillValue) < ability->MinSkillLineRank && ability->AcquireMethod == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) + RemoveSpell(ability->Spell); // need learn else if (!IsInWorld()) - AddSpell(ability->SpellID, true, true, true, false, false, ability->SkillLine); + AddSpell(ability->Spell, true, true, true, false, false, ability->SkillLine); else - LearnSpell(ability->SpellID, true, ability->SkillLine); + LearnSpell(ability->Spell, true, ability->SkillLine); } } @@ -27133,17 +27133,17 @@ void Player::SendRefundInfo(Item* item) for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) // item cost data { - setItemPurchaseData.Contents.Items[i].ItemCount = iece->RequiredItemCount[i]; - setItemPurchaseData.Contents.Items[i].ItemID = iece->RequiredItem[i]; + setItemPurchaseData.Contents.Items[i].ItemCount = iece->ItemCount[i]; + setItemPurchaseData.Contents.Items[i].ItemID = iece->ItemID[i]; } for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) // currency cost data { - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) continue; - setItemPurchaseData.Contents.Currencies[i].CurrencyCount = iece->RequiredCurrencyCount[i]; - setItemPurchaseData.Contents.Currencies[i].CurrencyID = iece->RequiredCurrency[i]; + setItemPurchaseData.Contents.Currencies[i].CurrencyCount = iece->CurrencyCount[i]; + setItemPurchaseData.Contents.Currencies[i].CurrencyID = iece->CurrencyID[i]; } GetSession()->SendPacket(setItemPurchaseData.Write()); @@ -27183,17 +27183,17 @@ void Player::SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, itemPurchaseRefundResult.Contents->Money = item->GetPaidMoney(); for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) // item cost data { - itemPurchaseRefundResult.Contents->Items[i].ItemCount = iece->RequiredItemCount[i]; - itemPurchaseRefundResult.Contents->Items[i].ItemID = iece->RequiredItem[i]; + itemPurchaseRefundResult.Contents->Items[i].ItemCount = iece->ItemCount[i]; + itemPurchaseRefundResult.Contents->Items[i].ItemID = iece->ItemID[i]; } for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) // currency cost data { - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) continue; - itemPurchaseRefundResult.Contents->Currencies[i].CurrencyCount = iece->RequiredCurrencyCount[i]; - itemPurchaseRefundResult.Contents->Currencies[i].CurrencyID = iece->RequiredCurrency[i]; + itemPurchaseRefundResult.Contents->Currencies[i].CurrencyCount = iece->CurrencyCount[i]; + itemPurchaseRefundResult.Contents->Currencies[i].CurrencyID = iece->CurrencyID[i]; } } @@ -27232,8 +27232,8 @@ void Player::RefundItem(Item* item) bool store_error = false; for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) { - uint32 count = iece->RequiredItemCount[i]; - uint32 itemid = iece->RequiredItem[i]; + uint32 count = iece->ItemCount[i]; + uint32 itemid = iece->ItemID[i]; if (count && itemid) { @@ -27270,8 +27270,8 @@ void Player::RefundItem(Item* item) // Grant back extendedcost items for (uint8 i = 0; i < MAX_ITEM_EXT_COST_ITEMS; ++i) { - uint32 count = iece->RequiredItemCount[i]; - uint32 itemid = iece->RequiredItem[i]; + uint32 count = iece->ItemCount[i]; + uint32 itemid = iece->ItemID[i]; if (count && itemid) { ItemPosCountVec dest; @@ -27285,11 +27285,11 @@ void Player::RefundItem(Item* item) // Grant back currencies for (uint8 i = 0; i < MAX_ITEM_EXT_COST_CURRENCIES; ++i) { - if (iece->RequirementFlags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) + if (iece->Flags & (ITEM_EXT_COST_CURRENCY_REQ_IS_SEASON_EARNED_1 << i)) continue; - uint32 count = iece->RequiredCurrencyCount[i]; - uint32 currencyid = iece->RequiredCurrency[i]; + uint32 count = iece->CurrencyCount[i]; + uint32 currencyid = iece->CurrencyID[i]; if (count && currencyid) ModifyCurrency(currencyid, count, true, true); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 9b60c05df1e..3884a0cbbc8 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1598,8 +1598,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask) const; void SendKnownSpells(); - bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, uint32 fromSkill = 0); - void LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill = 0); + bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, int32 fromSkill = 0); + void LearnSpell(uint32 spell_id, bool dependent, int32 fromSkill = 0); void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); void ResetSpells(bool myClassOnly = false); void LearnCustomSpells(); diff --git a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp index 513426f0f74..3ec90f577a7 100644 --- a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp +++ b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp @@ -40,8 +40,8 @@ void TaxiPathGraph::Initialize() // Initialize here for (TaxiPathEntry const* path : sTaxiPathStore) { - TaxiNodesEntry const* from = sTaxiNodesStore.LookupEntry(path->From); - TaxiNodesEntry const* to = sTaxiNodesStore.LookupEntry(path->To); + TaxiNodesEntry const* from = sTaxiNodesStore.LookupEntry(path->FromTaxiNode); + TaxiNodesEntry const* to = sTaxiNodesStore.LookupEntry(path->ToTaxiNode); if (from && to && from->Flags & (TAXI_NODE_FLAG_ALLIANCE | TAXI_NODE_FLAG_HORDE) && to->Flags & (TAXI_NODE_FLAG_ALLIANCE | TAXI_NODE_FLAG_HORDE)) AddVerticeAndEdgeFromNodeInfo(from, to, path->ID, edges); } @@ -67,7 +67,7 @@ uint32 TaxiPathGraph::GetNodeIDFromVertexID(vertex_descriptor vertexID) TaxiPathGraph::vertex_descriptor TaxiPathGraph::GetVertexIDFromNodeID(TaxiNodesEntry const* node) { - return node->LearnableIndex; + return node->CharacterBitNumber; } std::size_t TaxiPathGraph::GetVertexCount() @@ -107,8 +107,8 @@ void TaxiPathGraph::AddVerticeAndEdgeFromNodeInfo(TaxiNodesEntry const* from, Ta uint32 map1, map2; DBCPosition2D pos1, pos2; - DB2Manager::DeterminaAlternateMapPosition(nodes[i - 1]->MapID, nodes[i - 1]->Loc.X, nodes[i - 1]->Loc.Y, nodes[i - 1]->Loc.Z, &map1, &pos1); - DB2Manager::DeterminaAlternateMapPosition(nodes[i]->MapID, nodes[i]->Loc.X, nodes[i]->Loc.Y, nodes[i]->Loc.Z, &map2, &pos2); + DB2Manager::DeterminaAlternateMapPosition(nodes[i - 1]->ContinentID, nodes[i - 1]->Loc.X, nodes[i - 1]->Loc.Y, nodes[i - 1]->Loc.Z, &map1, &pos1); + DB2Manager::DeterminaAlternateMapPosition(nodes[i]->ContinentID, nodes[i]->Loc.X, nodes[i]->Loc.Y, nodes[i]->Loc.Z, &map2, &pos2); if (map1 != map2) continue; @@ -179,11 +179,11 @@ std::size_t TaxiPathGraph::GetCompleteNodeRoute(TaxiNodesEntry const* from, Taxi TaxiPathGraph::vertex_descriptor TaxiPathGraph::CreateVertexFromFromNodeInfoIfNeeded(TaxiNodesEntry const* node) { //Check if we need a new one or if it may be already created - if (m_vertices.size() <= node->LearnableIndex) - m_vertices.resize(node->LearnableIndex + 1); + if (m_vertices.size() <= node->CharacterBitNumber) + m_vertices.resize(node->CharacterBitNumber + 1); - m_vertices[node->LearnableIndex] = node; - return node->LearnableIndex; + m_vertices[node->CharacterBitNumber] = node; + return node->CharacterBitNumber; } uint32 TaxiPathGraph::EdgeCost::EvaluateDistance(Player const* player) const diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 5a687b8387b..a9343c68466 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -183,13 +183,13 @@ void Transport::Update(uint32 diff) MoveToNextWaypoint(); - sScriptMgr->OnRelocate(this, _currentFrame->Node->NodeIndex, _currentFrame->Node->MapID, _currentFrame->Node->Loc.X, _currentFrame->Node->Loc.Y, _currentFrame->Node->Loc.Z); + sScriptMgr->OnRelocate(this, _currentFrame->Node->NodeIndex, _currentFrame->Node->ContinentID, _currentFrame->Node->Loc.X, _currentFrame->Node->Loc.Y, _currentFrame->Node->Loc.Z); - TC_LOG_DEBUG("entities.transport", "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->NodeIndex, _currentFrame->Node->MapID, _currentFrame->Node->Loc.X, _currentFrame->Node->Loc.Y, _currentFrame->Node->Loc.Z); + TC_LOG_DEBUG("entities.transport", "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->NodeIndex, _currentFrame->Node->ContinentID, _currentFrame->Node->Loc.X, _currentFrame->Node->Loc.Y, _currentFrame->Node->Loc.Z); // Departure event if (_currentFrame->IsTeleportFrame()) - if (TeleportTransport(_nextFrame->Node->MapID, _nextFrame->Node->Loc.X, _nextFrame->Node->Loc.Y, _nextFrame->Node->Loc.Z, _nextFrame->InitialOrientation)) + if (TeleportTransport(_nextFrame->Node->ContinentID, _nextFrame->Node->Loc.X, _nextFrame->Node->Loc.Y, _nextFrame->Node->Loc.Z, _nextFrame->InitialOrientation)) return; // Update more in new map thread } @@ -394,7 +394,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu uint32 mask = UNIT_MASK_SUMMON; if (properties) { - switch (properties->Category) + switch (properties->Control) { case SUMMON_CATEGORY_PET: mask = UNIT_MASK_GUARDIAN; @@ -409,7 +409,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu case SUMMON_CATEGORY_ALLY: case SUMMON_CATEGORY_UNK: { - switch (properties->Type) + switch (properties->Title) { case SUMMON_TYPE_MINION: case SUMMON_TYPE_GUARDIAN: @@ -654,7 +654,7 @@ void Transport::DelayedTeleportTransport() return; _delayedTeleport = false; - Map* newMap = sMapMgr->CreateBaseMap(_nextFrame->Node->MapID); + Map* newMap = sMapMgr->CreateBaseMap(_nextFrame->Node->ContinentID); GetMap()->RemoveFromMap<Transport>(this, false); SetMap(newMap); @@ -674,7 +674,7 @@ void Transport::DelayedTeleportTransport() switch (obj->GetTypeId()) { case TYPEID_PLAYER: - if (!obj->ToPlayer()->TeleportTo(_nextFrame->Node->MapID, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT)) + if (!obj->ToPlayer()->TeleportTo(_nextFrame->Node->ContinentID, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT)) RemovePassenger(obj); break; case TYPEID_DYNAMICOBJECT: diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index fb84f81138e..14037920628 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -779,8 +779,8 @@ void Player::UpdateAllRunesRegen() PowerTypeEntry const* runeEntry = sDB2Manager.GetPowerTypeEntry(POWER_RUNES); uint32 cooldown = GetRuneBaseCooldown(); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenerationPeace); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenerationCombat); + SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenPeace); + SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenCombat); } void Player::_ApplyAllStatBonuses() diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 92d63991e56..4a03028ae15 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5188,15 +5188,15 @@ void Unit::UpdateDisplayPower() else if (GetTypeId() == TYPEID_PLAYER) { ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(getClass()); - if (cEntry && cEntry->PowerType < MAX_POWERS) - displayPower = Powers(cEntry->PowerType); + if (cEntry && cEntry->DisplayPower < MAX_POWERS) + displayPower = Powers(cEntry->DisplayPower); } else if (GetTypeId() == TYPEID_UNIT) { - if (Vehicle* vehicle = GetVehicle()) + if (Vehicle* vehicle = GetVehicleKit()) { if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(vehicle->GetVehicleInfo()->PowerDisplayID[0])) - displayPower = Powers(powerDisplay->PowerType); + displayPower = Powers(powerDisplay->ActualType); else if (getClass() == CLASS_ROGUE) displayPower = POWER_ENERGY; } @@ -5880,7 +5880,7 @@ void Unit::SetMinion(Minion *minion, bool apply) } } - if (minion->m_Properties && minion->m_Properties->Type == SUMMON_TYPE_MINIPET) + if (minion->m_Properties && minion->m_Properties->Title == SUMMON_TYPE_MINIPET) { SetCritterGUID(minion->GetGUID()); if (GetTypeId() == TYPEID_PLAYER) @@ -5911,7 +5911,7 @@ void Unit::SetMinion(Minion *minion, bool apply) m_Controlled.erase(minion); - if (minion->m_Properties && minion->m_Properties->Type == SUMMON_TYPE_MINIPET) + if (minion->m_Properties && minion->m_Properties->Title == SUMMON_TYPE_MINIPET) if (GetCritterGUID() == minion->GetGUID()) SetCritterGUID(ObjectGuid::Empty); @@ -7589,7 +7589,7 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const if (!mountCapability) continue; - if (ridingSkill < mountCapability->RequiredRidingSkill) + if (ridingSkill < mountCapability->ReqRidingSkill) continue; if (!(mountCapability->Flags & MOUNT_CAPABIILTY_FLAG_IGNORE_RESTRICTIONS)) @@ -7623,19 +7623,19 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const else if (!(mountCapability->Flags & MOUNT_CAPABILITY_FLAG_FLOAT)) continue; - if (mountCapability->RequiredMap != -1 && - int32(GetMapId()) != mountCapability->RequiredMap && - GetMap()->GetEntry()->CosmeticParentMapID != mountCapability->RequiredMap && - GetMap()->GetEntry()->ParentMapID != mountCapability->RequiredMap) + if (mountCapability->ReqMapID != -1 && + int32(GetMapId()) != mountCapability->ReqMapID && + GetMap()->GetEntry()->CosmeticParentMapID != mountCapability->ReqMapID && + GetMap()->GetEntry()->ParentMapID != mountCapability->ReqMapID) continue; - if (mountCapability->RequiredArea && !DB2Manager::IsInArea(areaId, mountCapability->RequiredArea)) + if (mountCapability->ReqAreaID && !DB2Manager::IsInArea(areaId, mountCapability->ReqAreaID)) continue; - if (mountCapability->RequiredAura && !HasAura(mountCapability->RequiredAura)) + if (mountCapability->ReqSpellAuraID && !HasAura(mountCapability->ReqSpellAuraID)) continue; - if (mountCapability->RequiredSpell && !HasSpell(mountCapability->RequiredSpell)) + if (mountCapability->ReqSpellKnownID && !HasSpell(mountCapability->ReqSpellKnownID)) continue; return mountCapability; @@ -9022,7 +9022,7 @@ float Unit::GetSpellMaxRangeForTarget(Unit const* target, SpellInfo const* spell { if (!spellInfo->RangeEntry) return 0; - if (spellInfo->RangeEntry->MaxRangeFriend == spellInfo->RangeEntry->MaxRangeHostile) + if (spellInfo->RangeEntry->RangeMax[0] == spellInfo->RangeEntry->RangeMax[1]) return spellInfo->GetMaxRange(); if (!target) return spellInfo->GetMaxRange(true); @@ -9033,7 +9033,7 @@ float Unit::GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spell { if (!spellInfo->RangeEntry) return 0; - if (spellInfo->RangeEntry->MinRangeFriend == spellInfo->RangeEntry->MinRangeHostile) + if (spellInfo->RangeEntry->RangeMin[0] == spellInfo->RangeEntry->RangeMin[1]) return spellInfo->GetMinRange(); if (!target) return spellInfo->GetMinRange(true); @@ -9461,7 +9461,7 @@ int32 Unit::GetCreatePowers(Powers power) const return GetCreateMana(); if (PowerTypeEntry const* powerType = sDB2Manager.GetPowerTypeEntry(power)) - return powerType->MaxPower; + return powerType->MaxBasePower; return 0; } @@ -12096,8 +12096,8 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const if (Aura* artifactAura = GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) if (Item* artifact = ToPlayer()->GetItemByGuid(artifactAura->GetCastItemGUID())) if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID))) - if (ShapeshiftForm(artifactAppearance->ModifiesShapeshiftFormDisplay) == form) - return artifactAppearance->ShapeshiftDisplayID; + if (ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID) == form) + return artifactAppearance->OverrideShapeshiftDisplayID; switch (form) { diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 636a1e83fe1..e19938b7c2d 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -77,7 +77,7 @@ void Vehicle::Install() if (_me->GetTypeId() == TYPEID_UNIT) { if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->PowerDisplayID[0])) - _me->SetPowerType(Powers(powerDisplay->PowerType)); + _me->SetPowerType(Powers(powerDisplay->ActualType)); else if (_me->getClass() == CLASS_ROGUE) _me->SetPowerType(POWER_ENERGY); } @@ -480,12 +480,12 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit) _me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); // Remove UNIT_FLAG_NOT_SELECTABLE if passenger did not have it before entering vehicle - if (seat->second.SeatInfo->Flags[0] & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable) + if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable) unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); seat->second.Passenger.Reset(); - if (_me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER && seat->second.SeatInfo->Flags[0] & VEHICLE_SEAT_FLAG_CAN_CONTROL) + if (_me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER && seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_CAN_CONTROL) _me->RemoveCharmedBy(unit); if (_me->IsInWorld()) @@ -787,11 +787,11 @@ bool VehicleJoinEvent::Execute(uint64, uint32) player->StopCastingCharm(); player->StopCastingBindSight(); player->SendOnCancelExpectedVehicleRideAura(); - if (!(veSeat->Flags[1] & VEHICLE_SEAT_FLAG_B_KEEP_PET)) + if (!(veSeat->FlagsB & VEHICLE_SEAT_FLAG_B_KEEP_PET)) player->UnsummonPetTemporaryIfAny(); } - if (Seat->second.SeatInfo->Flags[0] & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE) + if (Seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE) Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Passenger->m_movementInfo.transport.pos.Relocate(veSeat->AttachmentOffset.X, veSeat->AttachmentOffset.Y, veSeat->AttachmentOffset.Z); @@ -801,7 +801,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Passenger->m_movementInfo.transport.vehicleId = Target->GetVehicleInfo()->ID; if (Target->GetBase()->GetTypeId() == TYPEID_UNIT && Passenger->GetTypeId() == TYPEID_PLAYER && - Seat->second.SeatInfo->Flags[0] & VEHICLE_SEAT_FLAG_CAN_CONTROL) + Seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_CAN_CONTROL) ASSERT(Target->GetBase()->SetCharmedBy(Passenger, CHARM_TYPE_VEHICLE)); // SMSG_CLIENT_CONTROL Passenger->SendClearTarget(); // SMSG_BREAK_TARGET diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index e344e19b8f9..1e2766a93d5 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -248,7 +248,7 @@ void Garrison::Delete() WorldPackets::Garrison::GarrisonDeleteResult garrisonDelete; garrisonDelete.Result = GARRISON_SUCCESS; - garrisonDelete.GarrSiteID = _siteLevel->SiteID; + garrisonDelete.GarrSiteID = _siteLevel->GarrSiteID; _owner->SendDirectMessage(garrisonDelete.Write()); } @@ -270,7 +270,7 @@ void Garrison::InitializePlots() Plot& plotInfo = _plots[garrPlotInstanceId]; plotInfo.PacketInfo.GarrPlotInstanceID = garrPlotInstanceId; - plotInfo.PacketInfo.PlotPos = Position(gameObject->Position.X, gameObject->Position.Y, gameObject->Position.Z, 2 * std::acos(gameObject->RotationW)); + plotInfo.PacketInfo.PlotPos = Position(gameObject->Pos.X, gameObject->Pos.Y, gameObject->Pos.Z, 2 * std::acos(gameObject->Rot[3])); plotInfo.PacketInfo.PlotType = plot->PlotType; plotInfo.EmptyGameObjectId = gameObject->ID; plotInfo.GarrSiteLevelPlotInstId = plots->at(i)->ID; @@ -396,7 +396,7 @@ void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId) if (plot->BuildingInfo.PacketInfo) { oldBuildingId = plot->BuildingInfo.PacketInfo->GarrBuildingID; - if (sGarrBuildingStore.AssertEntry(oldBuildingId)->Type != building->Type) + if (sGarrBuildingStore.AssertEntry(oldBuildingId)->BuildingType != building->BuildingType) plot->ClearBuildingInfo(_owner); } @@ -405,8 +405,8 @@ void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId) if (GameObject* go = plot->CreateGameObject(map, GetFaction())) map->AddToMap(go); - _owner->ModifyCurrency(building->CostCurrencyID, -building->CostCurrencyAmount, false, true); - _owner->ModifyMoney(-building->CostMoney * GOLD, false); + _owner->ModifyCurrency(building->CurrencyTypeID, -building->CurrencyQty, false, true); + _owner->ModifyMoney(-building->GoldCost * GOLD, false); if (oldBuildingId) { @@ -445,13 +445,13 @@ void Garrison::CancelBuildingConstruction(uint32 garrPlotInstanceId) GarrBuildingEntry const* constructing = sGarrBuildingStore.AssertEntry(buildingRemoved.GarrBuildingID); // Refund construction/upgrade cost - _owner->ModifyCurrency(constructing->CostCurrencyID, constructing->CostCurrencyAmount, false, true); - _owner->ModifyMoney(constructing->CostMoney * GOLD, false); + _owner->ModifyCurrency(constructing->CurrencyTypeID, constructing->CurrencyQty, false, true); + _owner->ModifyMoney(constructing->GoldCost * GOLD, false); - if (constructing->Level > 1) + if (constructing->UpgradeLevel > 1) { // Restore previous level building - uint32 restored = sGarrisonMgr.GetPreviousLevelBuildingId(constructing->Type, constructing->Level); + uint32 restored = sGarrisonMgr.GetPreviousLevelBuildingId(constructing->BuildingType, constructing->UpgradeLevel); ASSERT(restored); WorldPackets::Garrison::GarrisonPlaceBuildingResult placeBuildingResult; @@ -513,7 +513,7 @@ void Garrison::AddFollower(uint32 garrFollowerId) follower.PacketInfo.DbID = dbId; follower.PacketInfo.GarrFollowerID = garrFollowerId; follower.PacketInfo.Quality = followerEntry->Quality; // TODO: handle magic upgrades - follower.PacketInfo.FollowerLevel = followerEntry->Level; + follower.PacketInfo.FollowerLevel = followerEntry->FollowerLevel; follower.PacketInfo.ItemLevelWeapon = followerEntry->ItemLevelWeapon; follower.PacketInfo.ItemLevelArmor = followerEntry->ItemLevelArmor; follower.PacketInfo.Xp = 0; @@ -545,7 +545,7 @@ void Garrison::SendInfo() WorldPackets::Garrison::GarrisonInfo& garrison = garrisonInfo.Garrisons.back(); garrison.GarrTypeID = GARRISON_TYPE_GARRISON; - garrison.GarrSiteID = _siteLevel->SiteID; + garrison.GarrSiteID = _siteLevel->GarrSiteID; garrison.GarrSiteLevelID = _siteLevel->ID; garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday; for (auto& p : _plots) @@ -624,7 +624,7 @@ GarrisonError Garrison::CheckBuildingPlacement(uint32 garrPlotInstanceId, uint32 return GARRISON_ERROR_INVALID_PLOT_BUILDING; // Cannot place buldings of higher level than garrison level - if (building->Level > _siteLevel->Level) + if (building->UpgradeLevel > _siteLevel->MaxBuildingLevel) return GARRISON_ERROR_INVALID_BUILDINGID; if (building->Flags & GARRISON_BUILDING_FLAG_NEEDS_PLAN) @@ -642,16 +642,16 @@ GarrisonError Garrison::CheckBuildingPlacement(uint32 garrPlotInstanceId, uint32 if (p.second.BuildingInfo.PacketInfo) { existingBuilding = sGarrBuildingStore.AssertEntry(p.second.BuildingInfo.PacketInfo->GarrBuildingID); - if (existingBuilding->Type == building->Type) - if (p.first != garrPlotInstanceId || existingBuilding->Level + 1 != building->Level) // check if its an upgrade in same plot + if (existingBuilding->BuildingType == building->BuildingType) + if (p.first != garrPlotInstanceId || existingBuilding->UpgradeLevel + 1 != building->UpgradeLevel) // check if its an upgrade in same plot return GARRISON_ERROR_BUILDING_EXISTS; } } - if (!_owner->HasCurrency(building->CostCurrencyID, building->CostCurrencyAmount)) + if (!_owner->HasCurrency(building->CurrencyTypeID, building->CurrencyQty)) return GARRISON_ERROR_NOT_ENOUGH_CURRENCY; - if (!_owner->HasEnoughMoney(uint64(building->CostMoney) * GOLD)) + if (!_owner->HasEnoughMoney(uint64(building->GoldCost) * GOLD)) return GARRISON_ERROR_NOT_ENOUGH_GOLD; // New building cannot replace another building currently under construction @@ -719,7 +719,7 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact GarrPlotInstanceEntry const* plotInstance = sGarrPlotInstanceStore.AssertEntry(PacketInfo.GarrPlotInstanceID); GarrPlotEntry const* plot = sGarrPlotStore.AssertEntry(plotInstance->GarrPlotID); GarrBuildingEntry const* building = sGarrBuildingStore.AssertEntry(BuildingInfo.PacketInfo->GarrBuildingID); - entry = faction == GARRISON_FACTION_INDEX_HORDE ? plot->HordeConstructionGameObjectID : plot->AllianceConstructionGameObjectID; + entry = faction == GARRISON_FACTION_INDEX_HORDE ? plot->HordeConstructObjID : plot->AllianceConstructObjID; if (BuildingInfo.PacketInfo->Active || !entry) entry = faction == GARRISON_FACTION_INDEX_HORDE ? building->HordeGameObjectID : building->AllianceGameObjectID; } @@ -830,7 +830,7 @@ bool Garrison::Building::CanActivate() const if (PacketInfo) { GarrBuildingEntry const* building = sGarrBuildingStore.AssertEntry(PacketInfo->GarrBuildingID); - if (PacketInfo->TimeBuilt + building->BuildDuration <= time(nullptr)) + if (PacketInfo->TimeBuilt + building->BuildSeconds <= time(nullptr)) return true; } diff --git a/src/server/game/Garrison/GarrisonMgr.cpp b/src/server/game/Garrison/GarrisonMgr.cpp index cd6763db3c1..4a1eb11727b 100644 --- a/src/server/game/Garrison/GarrisonMgr.cpp +++ b/src/server/game/Garrison/GarrisonMgr.cpp @@ -38,8 +38,8 @@ void GarrisonMgr::Initialize() _garrisonPlotInstBySiteLevel[siteLevelPlotInst->GarrSiteLevelID].push_back(siteLevelPlotInst); for (GameObjectsEntry const* gameObject : sGameObjectsStore) - if (gameObject->Type == GAMEOBJECT_TYPE_GARRISON_PLOT) - _garrisonPlots[gameObject->MapID][gameObject->Data[0]] = gameObject; + if (gameObject->TypeID == GAMEOBJECT_TYPE_GARRISON_PLOT) + _garrisonPlots[gameObject->OwnerID][gameObject->PropValue[0]] = gameObject; for (GarrPlotBuildingEntry const* plotBuilding : sGarrPlotBuildingStore) _garrisonBuildingsByPlot[plotBuilding->GarrPlotID].insert(plotBuilding->GarrBuildingID); @@ -48,13 +48,13 @@ void GarrisonMgr::Initialize() _garrisonBuildingPlotInstances[std::make_pair(buildingPlotInst->GarrBuildingID, buildingPlotInst->GarrSiteLevelPlotInstID)] = buildingPlotInst->ID; for (GarrBuildingEntry const* building : sGarrBuildingStore) - _garrisonBuildingsByType[building->Type].push_back(building->ID); + _garrisonBuildingsByType[building->BuildingType].push_back(building->ID); for (GarrFollowerXAbilityEntry const* followerAbility : sGarrFollowerXAbilityStore) { if (GarrAbilityEntry const* ability = sGarrAbilityStore.LookupEntry(followerAbility->GarrAbilityID)) { - if (ability->FollowerTypeID != FOLLOWER_TYPE_GARRISON) + if (ability->GarrFollowerTypeID != FOLLOWER_TYPE_GARRISON) continue; if (!(ability->Flags & GARRISON_ABILITY_CANNOT_ROLL) && ability->Flags & GARRISON_ABILITY_FLAG_TRAIT) @@ -78,7 +78,7 @@ void GarrisonMgr::Initialize() GarrSiteLevelEntry const* GarrisonMgr::GetGarrSiteLevelEntry(uint32 garrSiteId, uint32 level) const { for (GarrSiteLevelEntry const* siteLevel : sGarrSiteLevelStore) - if (siteLevel->SiteID == garrSiteId && siteLevel->Level == level) + if (siteLevel->GarrSiteID == garrSiteId && siteLevel->GarrLevel == level) return siteLevel; return nullptr; @@ -129,7 +129,7 @@ uint32 GarrisonMgr::GetPreviousLevelBuildingId(uint32 buildingType, uint32 curre auto itr = _garrisonBuildingsByType.find(buildingType); if (itr != _garrisonBuildingsByType.end()) for (uint32 buildingId : itr->second) - if (sGarrBuildingStore.AssertEntry(buildingId)->Level == currentLevel - 1) + if (sGarrBuildingStore.AssertEntry(buildingId)->UpgradeLevel == currentLevel - 1) return buildingId; return 0; diff --git a/src/server/game/Globals/ConversationDataStore.cpp b/src/server/game/Globals/ConversationDataStore.cpp index 5e4a5c3ba1e..d072cefeae0 100644 --- a/src/server/game/Globals/ConversationDataStore.cpp +++ b/src/server/game/Globals/ConversationDataStore.cpp @@ -178,10 +178,10 @@ void ConversationDataStore::LoadConversationTemplates() else TC_LOG_ERROR("sql.sql", "Table `conversation_line_template` has missing template for line (ID: %u) in Conversation %u, skipped", currentConversationLine->ID, conversationTemplate.Id); - if (!currentConversationLine->NextLineID) + if (!currentConversationLine->NextConversationLineID) break; - currentConversationLine = sConversationLineStore.AssertEntry(currentConversationLine->NextLineID); + currentConversationLine = sConversationLineStore.AssertEntry(currentConversationLine->NextConversationLineID); } _conversationTemplateStore[conversationTemplate.Id] = conversationTemplate; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index cbafb647347..fb52120263a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1366,7 +1366,7 @@ void ObjectMgr::LoadEquipmentTemplates() "for CreatureID = %u and ID=%u, forced to default.", equipmentInfo.Items[i].ItemId, equipmentInfo.Items[i].AppearanceModId, i + 1, i + 1, entry, id); if (ItemModifiedAppearanceEntry const* defaultAppearance = sDB2Manager.GetDefaultItemModifiedAppearance(equipmentInfo.Items[i].ItemId)) - equipmentInfo.Items[i].AppearanceModId = defaultAppearance->AppearanceModID; + equipmentInfo.Items[i].AppearanceModId = defaultAppearance->ItemAppearanceModifierID; else equipmentInfo.Items[i].AppearanceModId = 0; continue; @@ -2589,10 +2589,10 @@ struct ItemSpecStats { memset(ItemSpecStatTypes, -1, sizeof(ItemSpecStatTypes)); - if (item->Class == ITEM_CLASS_WEAPON) + if (item->ClassID == ITEM_CLASS_WEAPON) { ItemType = 5; - switch (item->SubClass) + switch (item->SubclassID) { case ITEM_SUBCLASS_WEAPON_AXE: AddStat(ITEM_SPEC_STAT_ONE_HANDED_AXE); @@ -2646,9 +2646,9 @@ struct ItemSpecStats break; } } - else if (item->Class == ITEM_CLASS_ARMOR) + else if (item->ClassID == ITEM_CLASS_ARMOR) { - switch (item->SubClass) + switch (item->SubclassID) { case ITEM_SUBCLASS_ARMOR_CLOTH: if (sparse->InventoryType != INVTYPE_CLOAK) @@ -2670,12 +2670,12 @@ struct ItemSpecStats ItemType = 4; break; default: - if (item->SubClass == ITEM_SUBCLASS_ARMOR_SHIELD) + if (item->SubclassID == ITEM_SUBCLASS_ARMOR_SHIELD) { ItemType = 6; AddStat(ITEM_SPEC_STAT_SHIELD); } - else if (item->SubClass > ITEM_SUBCLASS_ARMOR_SHIELD && item->SubClass <= ITEM_SUBCLASS_ARMOR_RELIC) + else if (item->SubclassID > ITEM_SUBCLASS_ARMOR_SHIELD && item->SubclassID <= ITEM_SUBCLASS_ARMOR_RELIC) { ItemType = 6; AddStat(ITEM_SPEC_STAT_RELIC); @@ -2685,7 +2685,7 @@ struct ItemSpecStats break; } } - else if (item->Class == ITEM_CLASS_GEM) + else if (item->ClassID == ITEM_CLASS_GEM) { ItemType = 7; if (GemPropertiesEntry const* gem = sGemPropertiesStore.LookupEntry(sparse->GemProperties)) @@ -2718,8 +2718,8 @@ struct ItemSpecStats ItemType = 0; for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - if (sparse->ItemStatType[i] != -1) - AddModStat(sparse->ItemStatType[i]); + if (sparse->StatModifierBonusStat[i] != -1) + AddModStat(sparse->StatModifierBonusStat[i]); } void AddStat(ItemSpecStat statType) @@ -2805,7 +2805,7 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.BasicData = db2Data; itemTemplate.ExtendedData = sparse; - itemTemplate.MaxDurability = FillMaxDurability(db2Data->Class, db2Data->SubClass, sparse->InventoryType, sparse->Quality, sparse->ItemLevel); + itemTemplate.MaxDurability = FillMaxDurability(db2Data->ClassID, db2Data->SubclassID, sparse->InventoryType, sparse->OverallQualityID, sparse->ItemLevel); itemTemplate.ScriptId = 0; itemTemplate.FoodType = 0; itemTemplate.MinMoneyLoot = 0; @@ -2849,7 +2849,7 @@ void ObjectMgr::LoadItemTemplates() if (!hasPrimary || !hasSecondary) continue; - if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpec->SpecID)) + if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpec->SpecializationID)) { if ((1 << (specialization->ClassID - 1)) & sparse->AllowableClass) { @@ -2876,7 +2876,7 @@ void ObjectMgr::LoadItemTemplates() // Load item effects (spells) for (ItemEffectEntry const* effectEntry : sItemEffectStore) { - auto itemItr = _itemTemplateStore.find(effectEntry->ItemID); + auto itemItr = _itemTemplateStore.find(effectEntry->ParentItemID); if (itemItr == _itemTemplateStore.end()) continue; @@ -3285,8 +3285,8 @@ void ObjectMgr::LoadPlayerInfo() info->positionY = positionY; info->positionZ = positionZ; info->orientation = orientation; - info->displayId_m = rEntry->MaleDisplayID; - info->displayId_f = rEntry->FemaleDisplayID; + info->displayId_m = rEntry->MaleDisplayId; + info->displayId_f = rEntry->FemaleDisplayId; _playerInfo[current_race][current_class] = info; ++count; @@ -6016,7 +6016,7 @@ uint32 ObjectMgr::GetNearestTaxiNode(float x, float y, float z, uint32 mapid, ui uint32 requireFlag = (team == ALLIANCE) ? TAXI_NODE_FLAG_ALLIANCE : TAXI_NODE_FLAG_HORDE; for (TaxiNodesEntry const* node : sTaxiNodesStore) { - if (!node || node->MapID != mapid || !(node->Flags & requireFlag)) + if (!node || node->ContinentID != mapid || !(node->Flags & requireFlag)) continue; uint8 field = (uint8)((node->ID - 1) / 8); @@ -6249,7 +6249,7 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(float x, float y, float if (!mapEntry || mapEntry->CorpseMapID < 0 || uint32(mapEntry->CorpseMapID) != entry->MapID - || (mapEntry->CorpsePos.X == 0 && mapEntry->CorpsePos.Y == 0)) // Check X and Y + || (mapEntry->Corpse.X == 0 && mapEntry->Corpse.Y == 0)) // Check X and Y { // not have any corrdinates for check distance anyway entryFar = entry; @@ -6257,8 +6257,8 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(float x, float y, float } // at entrance map calculate distance (2D); - float dist2 = (entry->Loc.X - mapEntry->CorpsePos.X)*(entry->Loc.X - mapEntry->CorpsePos.X) - +(entry->Loc.Y - mapEntry->CorpsePos.Y)*(entry->Loc.Y - mapEntry->CorpsePos.Y); + float dist2 = (entry->Loc.X - mapEntry->Corpse.X)*(entry->Loc.X - mapEntry->Corpse.X) + +(entry->Loc.Y - mapEntry->Corpse.Y)*(entry->Loc.Y - mapEntry->Corpse.Y); if (foundEntr) { if (dist2 < distEntr) @@ -6597,7 +6597,7 @@ AreaTriggerStruct const* ObjectMgr::GetGoBackTrigger(uint32 Map) const if ((!useParentDbValue && itr->second.target_mapId == entrance_map) || (useParentDbValue && itr->second.target_mapId == parentId)) { AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(itr->first); - if (atEntry && atEntry->MapID == Map) + if (atEntry && atEntry->ContinentID == int32(Map)) return &itr->second; } return nullptr; @@ -6846,12 +6846,12 @@ void ObjectMgr::LoadGameObjectTemplate() { GameObjectTemplate& go = _gameObjectTemplateStore[db2go->ID]; go.entry = db2go->ID; - go.type = db2go->Type; + go.type = db2go->TypeID; go.displayId = db2go->DisplayID; go.name = db2go->Name->Str[sWorld->GetDefaultDbcLocale()]; - go.size = db2go->Size; + go.size = db2go->Scale; memset(go.raw.data, 0, sizeof(go.raw.data)); - memcpy(go.raw.data, db2go->Data, std::min(sizeof(db2go->Data), sizeof(go.raw.data))); + memcpy(go.raw.data, db2go->PropValue, std::min(sizeof(db2go->PropValue), sizeof(go.raw.data))); go.RequiredLevel = 0; go.ScriptId = 0; } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 8a5bc685efe..a3e008e3d93 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -881,7 +881,7 @@ void Group::SendLootStartRollToPlayer(uint32 countDown, uint32 mapId, Player* p, r.FillPacket(startLootRoll.Item); if (ItemDisenchantLootEntry const* disenchant = r.GetItemDisenchantLoot(p)) - if (m_maxEnchantingLevel >= disenchant->RequiredDisenchantSkill) + if (m_maxEnchantingLevel >= disenchant->SkillRequired) startLootRoll.ValidRolls |= ROLL_FLAG_TYPE_DISENCHANT; p->SendDirectMessage(startLootRoll.Write()); @@ -1508,7 +1508,7 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot) lfg::LfgDungeonSet const& selectedDungeons = sLFGMgr->GetSelectedDungeons(player->GetGUID()); if (selectedDungeons.size() == 1) if (LFGDungeonsEntry const* dungeon = sLFGDungeonsStore.LookupEntry(*selectedDungeons.begin())) - if (dungeon->Type == lfg::LFG_TYPE_RANDOM) + if (dungeon->TypeID == lfg::LFG_TYPE_RANDOM) return dungeon->ID; return 0; @@ -1800,7 +1800,7 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* // check for min / max count uint32 memberscount = GetMembersCount(); - if (memberscount > bgEntry->MaxGroupSize) // no MinPlayerCount for battlegrounds + if (int32(memberscount) > bgEntry->MaxGroupSize) // no MinPlayerCount for battlegrounds return ERR_BATTLEGROUND_NONE; // ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY handled on client side // get a player as reference, to compare other players' stats to (arena team id, queue id based on level, etc.) diff --git a/src/server/game/Guilds/GuildFinderMgr.cpp b/src/server/game/Guilds/GuildFinderMgr.cpp index 53fe31dabc1..ff3e314d8e4 100644 --- a/src/server/game/Guilds/GuildFinderMgr.cpp +++ b/src/server/game/Guilds/GuildFinderMgr.cpp @@ -79,7 +79,7 @@ void GuildFinderMgr::LoadGuildSettings() TeamId guildTeam = TEAM_NEUTRAL; if (ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(fields[7].GetUInt8())) - guildTeam = (TeamId)raceEntry->TeamID; + guildTeam = (TeamId)raceEntry->Alliance; LFGuildSettings settings(listed, guildTeam, guildId, classRoles, availability, interests, level, comment); _guildSettings[guildId] = settings; diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp index 34267790fa3..f572cbe6983 100644 --- a/src/server/game/Handlers/ArtifactHandler.cpp +++ b/src/server/game/Handlers/ArtifactHandler.cpp @@ -54,7 +54,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow return; if (artifactAddPower.PowerChoices[0].Rank != artifactPower->PurchasedRank + 1 || - artifactAddPower.PowerChoices[0].Rank > artifactPowerEntry->MaxRank) + artifactAddPower.PowerChoices[0].Rank > artifactPowerEntry->MaxPurchasableRank) return; if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerId)) @@ -70,7 +70,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow if (!artifactPowerLinkLearned) continue; - if (artifactPowerLinkLearned->PurchasedRank >= artifactPowerLink->MaxRank) + if (artifactPowerLinkLearned->PurchasedRank >= artifactPowerLink->MaxPurchasableRank) { hasAnyLink = true; break; @@ -134,17 +134,17 @@ void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactS if (!artifactAppearanceSet || artifactAppearanceSet->ArtifactID != artifact->GetTemplate()->GetArtifactID()) return; - if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactAppearance->PlayerConditionID)) + if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactAppearance->UnlockPlayerConditionID)) if (!sConditionMgr->IsPlayerMeetingCondition(_player, playerCondition)) return; - artifact->SetAppearanceModId(artifactAppearance->AppearanceModID); + artifact->SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); artifact->SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearance->ID); artifact->SetState(ITEM_CHANGED, _player); Item* childItem = _player->GetChildItemByGuid(artifact->GetChildItem()); if (childItem) { - childItem->SetAppearanceModId(artifactAppearance->AppearanceModID); + childItem->SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); childItem->SetState(ITEM_CHANGED, _player); } @@ -156,7 +156,7 @@ void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactS _player->SetVisibleItemSlot(childItem->GetSlot(), childItem); // change druid form appearance - if (artifactAppearance->ShapeshiftDisplayID && artifactAppearance->ModifiesShapeshiftFormDisplay && _player->GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->ModifiesShapeshiftFormDisplay)) + if (artifactAppearance->OverrideShapeshiftDisplayID && artifactAppearance->OverrideShapeshiftFormID && _player->GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID)) _player->RestoreDisplayId(); } } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index f2a93781714..61bf3850972 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1675,7 +1675,7 @@ void WorldSession::HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipm if (!illusion->ItemVisual || !(illusion->Flags & ENCHANTMENT_COLLECTABLE)) return false; - if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(illusion->PlayerConditionID)) + if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(illusion->TransmogPlayerConditionID)) if (!sConditionMgr->IsPlayerMeetingCondition(_player, condition)) return false; @@ -2304,7 +2304,7 @@ void WorldSession::HandleRandomizeCharNameOpcode(WorldPackets::Character::Genera WorldPackets::Character::GenerateRandomCharacterNameResult result; result.Success = true; - result.Name = sDB2Manager.GetNameGenEntry(packet.Race, packet.Sex, GetSessionDbcLocale(), sWorld->GetDefaultDbcLocale()); + result.Name = sDB2Manager.GetNameGenEntry(packet.Race, packet.Sex); SendPacket(result.Write()); } diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp index 452ea33ea70..2beac9abf1a 100644 --- a/src/server/game/Handlers/CombatHandler.cpp +++ b/src/server/game/Handlers/CombatHandler.cpp @@ -51,7 +51,7 @@ void WorldSession::HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& pa { VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(_player); ASSERT(seat); - if (!(seat->Flags[0] & VEHICLE_SEAT_FLAG_CAN_ATTACK)) + if (!(seat->Flags & VEHICLE_SEAT_FLAG_CAN_ATTACK)) { SendAttackStop(enemy); return; diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 81f9d82dee8..1b1910abdc5 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1077,8 +1077,8 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) itemTarget->SetGem(i, &gemData[i], gemScalingLevel); - if (gemProperties[i] && gemProperties[i]->EnchantID) - itemTarget->SetEnchantment(EnchantmentSlot(SOCK_ENCHANTMENT_SLOT + i), gemProperties[i]->EnchantID, 0, 0, _player->GetGUID()); + if (gemProperties[i] && gemProperties[i]->EnchantId) + itemTarget->SetEnchantment(EnchantmentSlot(SOCK_ENCHANTMENT_SLOT + i), gemProperties[i]->EnchantId, 0, 0, _player->GetGUID()); uint32 gemCount = 1; _player->DestroyItemCount(gems[i], gemCount, true); @@ -1189,7 +1189,7 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC if (item->GetTemplate()->Effects.size() < 2) return; - uint32 spellToLearn = item->GetTemplate()->Effects[1]->SpellID; + int32 spellToLearn = item->GetTemplate()->Effects[1]->SpellID; for (BattlePetSpeciesEntry const* entry : sBattlePetSpeciesStore) { if (entry->SummonSpellID == spellToLearn) @@ -1233,16 +1233,16 @@ void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeIte } // Check if player has enough currency - if (!_player->HasCurrency(itemUpgradeEntry->CurrencyID, itemUpgradeEntry->CurrencyCost)) + if (!_player->HasCurrency(itemUpgradeEntry->CurrencyType, itemUpgradeEntry->CurrencyAmount)) { - TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - Player has not enougth currency (ID: %u, Cost: %u) not found.", itemUpgradeEntry->CurrencyID, itemUpgradeEntry->CurrencyCost); + TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - Player has not enougth currency (ID: %u, Cost: %u) not found.", itemUpgradeEntry->CurrencyType, itemUpgradeEntry->CurrencyAmount); itemUpgradeResult.Success = false; SendPacket(itemUpgradeResult.Write()); return; } uint32 currentUpgradeId = item->GetModifier(ITEM_MODIFIER_UPGRADE_ID); - if (currentUpgradeId != itemUpgradeEntry->PrevItemUpgradeID) + if (currentUpgradeId != itemUpgradeEntry->PrerequisiteID) { TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - ItemUpgradeEntry (%u) is not related to this ItemUpgradePath (%u).", itemUpgradeEntry->ID, currentUpgradeId); itemUpgradeResult.Success = false; @@ -1262,7 +1262,7 @@ void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeIte _player->_ApplyItemBonuses(item, item->GetSlot(), true); item->SetState(ITEM_CHANGED, _player); - _player->ModifyCurrency(itemUpgradeEntry->CurrencyID, -int32(itemUpgradeEntry->CurrencyCost)); + _player->ModifyCurrency(itemUpgradeEntry->CurrencyType, -int32(itemUpgradeEntry->CurrencyAmount)); } void WorldSession::HandleSortBags(WorldPackets::Item::SortBags& /*sortBags*/) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 8de949efe27..2df32d947ee 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -393,7 +393,7 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem { if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover)) { - if (seat->Flags[0] & VEHICLE_SEAT_FLAG_ALLOW_TURNING) + if (seat->Flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING) { if (movementInfo.pos.GetOrientation() != mover->GetOrientation()) { @@ -574,7 +574,7 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest); // far teleport case - if (curDestNode && curDestNode->MapID != GetPlayer()->GetMapId()) + if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId()) { if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) { @@ -585,7 +585,7 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()]; flight->SkipCurrentNode(); - GetPlayer()->TeleportTo(curDestNode->MapID, node->Loc.X, node->Loc.Y, node->Loc.Z, GetPlayer()->GetOrientation()); + GetPlayer()->TeleportTo(curDestNode->ContinentID, node->Loc.X, node->Loc.Y, node->Loc.Z, GetPlayer()->GetOrientation()); } } diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 33d18b946f6..7c8048d8a73 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -202,8 +202,8 @@ void WorldSession::HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLoc if (Map const* entranceMap = sMapMgr->CreateBaseMap(corpseMapEntry->CorpseMapID)) { mapID = corpseMapEntry->CorpseMapID; - x = corpseMapEntry->CorpsePos.X; - y = corpseMapEntry->CorpsePos.Y; + x = corpseMapEntry->Corpse.X; + y = corpseMapEntry->Corpse.Y; z = entranceMap->GetHeight(player->GetPhases(), x, y, MAX_HEIGHT); } } diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 44108951a53..4a031305052 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -288,7 +288,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != uint32(packet.ItemChoiceID)) + if (questPackageItem->ItemID != packet.ItemChoiceID) continue; if (_player->CanSelectQuestPackageItem(questPackageItem)) @@ -305,7 +305,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != uint32(packet.ItemChoiceID)) + if (questPackageItem->ItemID != packet.ItemChoiceID) continue; itemValid = true; diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index 35e7652daec..5b08ed6bdb2 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -186,7 +186,7 @@ void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& ac uint32 preferredMountDisplay = 0; if (MountEntry const* mount = sMountStore.LookupEntry(activateTaxi.FlyingMountID)) { - if (GetPlayer()->HasSpell(mount->SpellId)) + if (GetPlayer()->HasSpell(mount->SourceSpellID)) { if (DB2Manager::MountXDisplayContainer const* mountDisplays = sDB2Manager.GetMountDisplays(mount->ID)) { @@ -200,7 +200,7 @@ void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& ac }); if (!usableDisplays.empty()) - preferredMountDisplay = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID; + preferredMountDisplay = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->CreatureDisplayInfoID; } } } diff --git a/src/server/game/Handlers/ToyHandler.cpp b/src/server/game/Handlers/ToyHandler.cpp index 4c63eb4fbd9..aa89b33d3fc 100644 --- a/src/server/game/Handlers/ToyHandler.cpp +++ b/src/server/game/Handlers/ToyHandler.cpp @@ -63,7 +63,7 @@ void WorldSession::HandleUseToy(WorldPackets::Toy::UseToy& packet) auto effect = std::find_if(item->Effects.begin(), item->Effects.end(), [&packet](ItemEffectEntry const* effect) { - return uint32(packet.Cast.SpellID) == effect->SpellID; + return packet.Cast.SpellID == effect->SpellID; }); if (effect == item->Effects.end()) diff --git a/src/server/game/Handlers/TransmogrificationHandler.cpp b/src/server/game/Handlers/TransmogrificationHandler.cpp index e8382ee8fb5..743378d0f7c 100644 --- a/src/server/game/Handlers/TransmogrificationHandler.cpp +++ b/src/server/game/Handlers/TransmogrificationHandler.cpp @@ -120,7 +120,7 @@ void WorldSession::HandleTransmogrifyItems(WorldPackets::Transmogrification::Tra return; } - if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(illusion->PlayerConditionID)) + if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(illusion->TransmogPlayerConditionID)) { if (!sConditionMgr->IsPlayerMeetingCondition(player, condition)) { diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp index a04589056bb..24a3cb4e9a2 100644 --- a/src/server/game/Handlers/VehicleHandler.cpp +++ b/src/server/game/Handlers/VehicleHandler.cpp @@ -45,7 +45,7 @@ void WorldSession::HandleRequestVehiclePrevSeat(WorldPackets::Vehicle::RequestVe if (!seat->CanSwitchFromSeat()) { TC_LOG_ERROR("network", "HandleRequestVehiclePrevSeat: %s tried to switch seats but current seatflags %u don't permit that.", - GetPlayer()->GetGUID().ToString().c_str(), seat->Flags[0]); + GetPlayer()->GetGUID().ToString().c_str(), seat->Flags); return; } @@ -62,7 +62,7 @@ void WorldSession::HandleRequestVehicleNextSeat(WorldPackets::Vehicle::RequestVe if (!seat->CanSwitchFromSeat()) { TC_LOG_ERROR("network", "HandleRequestVehicleNextSeat: %s tried to switch seats but current seatflags %u don't permit that.", - GetPlayer()->GetGUID().ToString().c_str(), seat->Flags[0]); + GetPlayer()->GetGUID().ToString().c_str(), seat->Flags); return; } @@ -79,7 +79,7 @@ void WorldSession::HandleMoveChangeVehicleSeats(WorldPackets::Vehicle::MoveChang if (!seat->CanSwitchFromSeat()) { TC_LOG_ERROR("network", "HandleMoveChangeVehicleSeats: %s tried to switch seats but current seatflags %u don't permit that.", - GetPlayer()->GetGUID().ToString().c_str(), seat->Flags[0]); + GetPlayer()->GetGUID().ToString().c_str(), seat->Flags); return; } @@ -108,7 +108,7 @@ void WorldSession::HandleRequestVehicleSwitchSeat(WorldPackets::Vehicle::Request if (!seat->CanSwitchFromSeat()) { TC_LOG_ERROR("network", "HandleRequestVehicleSwitchSeat: %s tried to switch seats but current seatflags %u don't permit that.", - GetPlayer()->GetGUID().ToString().c_str(), seat->Flags[0]); + GetPlayer()->GetGUID().ToString().c_str(), seat->Flags); return; } @@ -181,7 +181,7 @@ void WorldSession::HandleRequestVehicleExit(WorldPackets::Vehicle::RequestVehicl GetPlayer()->ExitVehicle(); else TC_LOG_ERROR("network", "%s tried to exit vehicle, but seatflags %u (ID: %u) don't permit that.", - GetPlayer()->GetGUID().ToString().c_str(), vehicle->GetVehicleInfo()->SeatID[itr->first], itr->second.SeatInfo->Flags[0]); + GetPlayer()->GetGUID().ToString().c_str(), vehicle->GetVehicleInfo()->SeatID[itr->first], itr->second.SeatInfo->Flags); } } } diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index 54a13058a7d..681f441ea84 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -96,7 +96,7 @@ void LootItem::AddAllowedLooter(const Player* player) // --------- Loot --------- // -Loot::Loot(uint32 _gold /*= 0*/) : gold(_gold), unlootedCount(0), roundRobinPlayer(), loot_type(LOOT_CORPSE), maxDuplicates(1), _difficultyBonusTreeMod(0) +Loot::Loot(uint32 _gold /*= 0*/) : gold(_gold), unlootedCount(0), roundRobinPlayer(), loot_type(LOOT_CORPSE), maxDuplicates(1), _itemContext(0) { } @@ -154,7 +154,7 @@ void Loot::clear() roundRobinPlayer.Clear(); loot_type = LOOT_NONE; i_LootValidatorRefManager.clearReferences(); - _difficultyBonusTreeMod = 0; + _itemContext = 0; } void Loot::NotifyItemRemoved(uint8 lootIndex) @@ -251,7 +251,7 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo return false; } - _difficultyBonusTreeMod = lootOwner->GetMap()->GetDifficultyLootBonusTreeMod(); + _itemContext = lootOwner->GetMap()->GetDifficultyLootItemContext(); items.reserve(MAX_NR_LOOT_ITEMS); quest_items.reserve(MAX_NR_QUEST_ITEMS); @@ -298,11 +298,11 @@ void Loot::AddItem(LootStoreItem const& item) for (uint32 i = 0; i < stacks && lootItems.size() < limit; ++i) { LootItem generatedLoot(item); - generatedLoot.context = _difficultyBonusTreeMod; + generatedLoot.context = _itemContext; generatedLoot.count = std::min(count, proto->GetMaxStackSize()); - if (_difficultyBonusTreeMod) + if (_itemContext) { - std::set<uint32> bonusListIDs = sDB2Manager.GetItemBonusTree(generatedLoot.itemid, _difficultyBonusTreeMod); + std::set<uint32> bonusListIDs = sDB2Manager.GetItemBonusTree(generatedLoot.itemid, _itemContext); generatedLoot.BonusListIDs.insert(generatedLoot.BonusListIDs.end(), bonusListIDs.begin(), bonusListIDs.end()); } diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h index 76df77f7905..a2c30e42a0c 100644 --- a/src/server/game/Loot/Loot.h +++ b/src/server/game/Loot/Loot.h @@ -284,7 +284,7 @@ private: // Loot GUID ObjectGuid _GUID; - uint8 _difficultyBonusTreeMod; + uint8 _itemContext; }; class TC_GAME_API AELootResult diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ef7bb49b6ff..ceb50e2e985 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2411,23 +2411,23 @@ inline ZLiquidStatus GridMap::getLiquidStatus(float x, float y, float z, uint8 R { entry = liquidEntry->ID; type &= MAP_LIQUID_TYPE_DARK_WATER; - uint32 liqTypeIdx = liquidEntry->Type; + uint32 liqTypeIdx = liquidEntry->SoundBank; if (entry < 21) { if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(getArea(x, y))) { - uint32 overrideLiquid = area->LiquidTypeID[liquidEntry->Type]; + uint32 overrideLiquid = area->LiquidTypeID[liquidEntry->SoundBank]; if (!overrideLiquid && area->ParentAreaID) { area = sAreaTableStore.LookupEntry(area->ParentAreaID); if (area) - overrideLiquid = area->LiquidTypeID[liquidEntry->Type]; + overrideLiquid = area->LiquidTypeID[liquidEntry->SoundBank]; } if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid)) { entry = overrideLiquid; - liqTypeIdx = liq->Type; + liqTypeIdx = liq->SoundBank; } } } @@ -2718,7 +2718,7 @@ ZLiquidStatus Map::getLiquidStatus(float x, float y, float z, uint8 ReqLiquidTyp uint32 liquidFlagType = 0; if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(liquid_type)) - liquidFlagType = liq->Type; + liquidFlagType = liq->SoundBank; if (liquid_type && liquid_type < 21) { @@ -2735,7 +2735,7 @@ ZLiquidStatus Map::getLiquidStatus(float x, float y, float z, uint8 ReqLiquidTyp if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid)) { liquid_type = overrideLiquid; - liquidFlagType = liq->Type; + liquidFlagType = liq->SoundBank; } } } @@ -3619,14 +3619,14 @@ MapDifficultyEntry const* Map::GetMapDifficulty() const return sDB2Manager.GetMapDifficultyData(GetId(), GetDifficultyID()); } -uint8 Map::GetDifficultyLootBonusTreeMod() const +uint8 Map::GetDifficultyLootItemContext() const { if (MapDifficultyEntry const* mapDifficulty = GetMapDifficulty()) - if (mapDifficulty->ItemBonusTreeModID) - return mapDifficulty->ItemBonusTreeModID; + if (mapDifficulty->ItemContext) + return mapDifficulty->ItemContext; if (DifficultyEntry const* difficulty = sDifficultyStore.LookupEntry(GetDifficultyID())) - return difficulty->ItemBonusTreeModID; + return difficulty->ItemContext; return 0; } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 6b87895e0de..03f5f1bb6e6 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -388,7 +388,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType> // have meaning only for instanced map (that have set real difficulty) Difficulty GetDifficultyID() const { return Difficulty(GetSpawnMode()); } MapDifficultyEntry const* GetMapDifficulty() const; - uint8 GetDifficultyLootBonusTreeMod() const; + uint8 GetDifficultyLootItemContext() const; uint32 GetId() const; bool Instanceable() const; diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 65da8ef4746..9980a72dfb8 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -100,7 +100,7 @@ void TransportMgr::LoadTransportAnimationAndRotation() AddPathNodeToTransport(anim->TransportID, anim->TimeIndex, anim); for (TransportRotationEntry const* rot : sTransportRotationStore) - AddPathRotationToTransport(rot->TransportID, rot->TimeIndex, rot); + AddPathRotationToTransport(rot->GameObjectsID, rot->TimeIndex, rot); } class SplineRawInitializer @@ -145,7 +145,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl if (!mapChange) { TaxiPathNodeEntry const* node_i = path[i]; - if (i != path.size() - 1 && (node_i->Flags & TAXI_PATH_NODE_FLAG_TELEPORT || node_i->MapID != path[i + 1]->MapID)) + if (i != path.size() - 1 && (node_i->Flags & TAXI_PATH_NODE_FLAG_TELEPORT || node_i->ContinentID != path[i + 1]->ContinentID)) { keyFrames.back().Teleport = true; mapChange = true; @@ -159,7 +159,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl keyFrames.push_back(k); splinePath.push_back(G3D::Vector3(node_i->Loc.X, node_i->Loc.Y, node_i->Loc.Z)); - transport->mapsUsed.insert(k.Node->MapID); + transport->mapsUsed.insert(k.Node->ContinentID); } } else @@ -390,7 +390,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, ObjectGuid::LowType guid // ...at first waypoint TaxiPathNodeEntry const* startNode = tInfo->keyFrames.begin()->Node; - uint32 mapId = startNode->MapID; + uint32 mapId = startNode->ContinentID; float x = startNode->Loc.X; float y = startNode->Loc.Y; float z = startNode->Loc.Z; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 193e47070b6..ddb69bb54cc 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -286,7 +286,7 @@ enum Stats : uint16 #define MAX_STATS 4 -enum Powers : uint8 +enum Powers : int8 { POWER_MANA = 0, POWER_RAGE = 1, @@ -309,7 +309,7 @@ enum Powers : uint8 POWER_PAIN = 18, MAX_POWERS = 19, POWER_ALL = 127, // default for class? - POWER_HEALTH = 0xFE // (-2 as signed value) + POWER_HEALTH = -2 // (-2 as signed value) }; #define MAX_POWERS_PER_CLASS 6 diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index f766909a796..41d505d3b42 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -322,9 +322,9 @@ uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const if (i_currentNode >= i_path.size()) return i_path.size(); - uint32 curMapId = i_path[i_currentNode]->MapID; + uint32 curMapId = i_path[i_currentNode]->ContinentID; for (uint32 i = i_currentNode; i < i_path.size(); ++i) - if (i_path[i]->MapID != curMapId) + if (i_path[i]->ContinentID != curMapId) return i; return i_path.size(); @@ -334,7 +334,7 @@ uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const bool IsNodeIncludedInShortenedPath(TaxiPathNodeEntry const* p1, TaxiPathNodeEntry const* p2) { - return p1->MapID != p2->MapID || std::pow(p1->Loc.X - p2->Loc.X, 2) + std::pow(p1->Loc.Y - p2->Loc.Y, 2) > SKIP_SPLINE_POINT_DISTANCE_SQ; + return p1->ContinentID != p2->ContinentID || std::pow(p1->Loc.X - p2->Loc.X, 2) + std::pow(p1->Loc.Y - p2->Loc.Y, 2) > SKIP_SPLINE_POINT_DISTANCE_SQ; } void FlightPathMovementGenerator::LoadPath(Player* player, uint32 startNode /*= 0*/) @@ -469,10 +469,10 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() if (i_path.empty() || i_currentNode >= i_path.size()) return; - uint32 map0 = i_path[i_currentNode]->MapID; + uint32 map0 = i_path[i_currentNode]->ContinentID; for (size_t i = i_currentNode + 1; i < i_path.size(); ++i) { - if (i_path[i]->MapID != map0) + if (i_path[i]->ContinentID != map0) { i_currentNode = i; return; @@ -503,7 +503,7 @@ void FlightPathMovementGenerator::InitEndGridInfo() /*! Storage to preload flightmaster grid at end of flight. For multi-stop flights, this will be reinitialized for each flightmaster at the end of each spline (or stop) in the flight. */ uint32 nodeCount = i_path.size(); //! Number of nodes in path. - _endMapId = i_path[nodeCount - 1]->MapID; //! MapId of last node + _endMapId = i_path[nodeCount - 1]->ContinentID; //! MapId of last node _preloadTargetNode = nodeCount - 3; _endGridX = i_path[nodeCount - 1]->Loc.X; _endGridY = i_path[nodeCount - 1]->Loc.Y; diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 93c311ebafe..b561d74282c 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -655,7 +655,7 @@ void OutdoorPvP::SetMapFromZone(uint32 zone) { AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(zone); ASSERT(areaTable); - Map* map = sMapMgr->CreateBaseMap(areaTable->MapID); + Map* map = sMapMgr->CreateBaseMap(areaTable->ContinentID); ASSERT(!map->Instanceable()); m_map = map; } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 7e815ce9a42..6a71256a77b 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -274,7 +274,7 @@ uint32 Quest::XPValue(uint32 playerLevel) const else if (diffFactor > 10) diffFactor = 10; - uint32 xp = diffFactor * questXp->Exp[RewardXPDifficulty] * RewardXPMultiplier / 10 * multiplier; + uint32 xp = diffFactor * questXp->Difficulty[RewardXPDifficulty] * RewardXPMultiplier / 10 * multiplier; if (xp <= 100) xp = 5 * ((xp + 2) / 5); else if (xp <= 500) @@ -295,7 +295,7 @@ uint32 Quest::MoneyValue(uint8 playerLevel) const uint8 level = Level == -1 ? playerLevel : Level; if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(level)) - return money->Money[GetRewMoneyDifficulty()] * GetMoneyMultiplier(); + return money->Difficulty[GetRewMoneyDifficulty()] * GetMoneyMultiplier(); else return 0; } diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp index 1f91b0edd9f..7c5e119ac8e 100644 --- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp +++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp @@ -172,7 +172,7 @@ void QuestObjectiveCriteriaMgr::ResetCriteria(CriteriaTypes type, uint64 miscVal CriteriaList const& playerCriteriaList = GetCriteriaByType(type); for (Criteria const* playerCriteria : playerCriteriaList) { - if (playerCriteria->Entry->FailEvent != miscValue1 || (playerCriteria->Entry->FailAsset && playerCriteria->Entry->FailAsset != miscValue2)) + if (playerCriteria->Entry->FailEvent != miscValue1 || (playerCriteria->Entry->FailAsset && playerCriteria->Entry->FailAsset != int64(miscValue2))) continue; std::vector<CriteriaTree const*> const* trees = sCriteriaMgr->GetCriteriaTreesByCriteria(playerCriteria->ID); diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index 99d13d2ed71..6a1d8253a58 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -296,9 +296,9 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi // check for sub-factions that receive spillover std::vector<uint32> const* flist = sDB2Manager.GetFactionTeamList(factionEntry->ID); // if has no sub-factions, check for factions with same parent - if (!flist && factionEntry->ParentFactionID && factionEntry->ParentFactionModOut != 0.0f) + if (!flist && factionEntry->ParentFactionID && factionEntry->ParentFactionMod[1] != 0.0f) { - spillOverRepOut *= factionEntry->ParentFactionModOut; + spillOverRepOut *= factionEntry->ParentFactionMod[1]; if (FactionEntry const* parent = sFactionStore.LookupEntry(factionEntry->ParentFactionID)) { FactionStateList::iterator parentState = _factions.find(parent->ReputationIndex); @@ -320,9 +320,9 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi { if (FactionEntry const* factionEntryCalc = sFactionStore.LookupEntry(*itr)) { - if (factionEntryCalc == factionEntry || GetRank(factionEntryCalc) > ReputationRank(factionEntryCalc->ParentFactionCapIn)) + if (factionEntryCalc == factionEntry || GetRank(factionEntryCalc) > ReputationRank(factionEntryCalc->ParentFactionCap[0])) continue; - int32 spilloverRep = int32(spillOverRepOut * factionEntryCalc->ParentFactionModIn); + int32 spilloverRep = int32(spillOverRepOut * factionEntryCalc->ParentFactionMod[0]); if (spilloverRep != 0 || !incremental) res = SetOneFactionReputation(factionEntryCalc, spilloverRep, incremental); } diff --git a/src/server/game/Scenarios/Scenario.cpp b/src/server/game/Scenarios/Scenario.cpp index df36fec1cff..1e70b40cf54 100644 --- a/src/server/game/Scenarios/Scenario.cpp +++ b/src/server/game/Scenarios/Scenario.cpp @@ -54,7 +54,7 @@ void Scenario::Reset() void Scenario::CompleteStep(ScenarioStepEntry const* step) { - if (Quest const* quest = sObjectMgr->GetQuestTemplate(step->QuestRewardID)) + if (Quest const* quest = sObjectMgr->GetQuestTemplate(step->RewardQuestID)) for (ObjectGuid guid : _players) if (Player* player = ObjectAccessor::FindPlayer(guid)) player->RewardQuest(quest, 0, nullptr, false); @@ -63,7 +63,7 @@ void Scenario::CompleteStep(ScenarioStepEntry const* step) return; ScenarioStepEntry const* newStep = nullptr; - for (auto _step : _data->Steps) + for (auto const& _step : _data->Steps) { if (_step.second->IsBonusObjective()) continue; @@ -71,7 +71,7 @@ void Scenario::CompleteStep(ScenarioStepEntry const* step) if (GetStepState(_step.second) == SCENARIO_STEP_DONE) continue; - if (!newStep || _step.second->Step < newStep->Step) + if (!newStep || _step.second->OrderIndex < newStep->OrderIndex) newStep = _step.second; } @@ -246,7 +246,7 @@ ScenarioStepEntry const* Scenario::GetFirstStep() const if (scenarioStep.second->IsBonusObjective()) continue; - if (!firstStep || scenarioStep.second->Step < firstStep->Step) + if (!firstStep || scenarioStep.second->OrderIndex < firstStep->OrderIndex) firstStep = scenarioStep.second; } @@ -268,7 +268,7 @@ std::vector<WorldPackets::Scenario::BonusObjectiveData> Scenario::GetBonusObject if (!itr->second->IsBonusObjective()) continue; - if (sCriteriaMgr->GetCriteriaTree(itr->second->CriteriaTreeID)) + if (sCriteriaMgr->GetCriteriaTree(itr->second->Criteriatreeid)) { WorldPackets::Scenario::BonusObjectiveData bonusObjectiveData; bonusObjectiveData.BonusObjectiveID = itr->second->ID; diff --git a/src/server/game/Scenarios/ScenarioMgr.cpp b/src/server/game/Scenarios/ScenarioMgr.cpp index b29101fb556..c70e560efd7 100644 --- a/src/server/game/Scenarios/ScenarioMgr.cpp +++ b/src/server/game/Scenarios/ScenarioMgr.cpp @@ -117,8 +117,8 @@ void ScenarioMgr::LoadDB2Data() for (ScenarioStepEntry const* step : sScenarioStepStore) { - scenarioSteps[step->ScenarioID][step->Step] = step; - if (CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(step->CriteriaTreeID)) + scenarioSteps[step->ScenarioID][step->OrderIndex] = step; + if (CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(step->Criteriatreeid)) { uint32 criteriaTreeSize = 0; CriteriaMgr::WalkCriteriaTree(tree, [&criteriaTreeSize](CriteriaTree const* /*tree*/) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index d17e619ed78..8026a411168 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -632,7 +632,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster) { for (int t = 0; t < MAX_ITEM_ENCHANTMENT_EFFECTS; t++) { - if (pEnchant->EffectSpellID[t] == m_spellInfo->Id) + if (pEnchant->EffectArg[t] == m_spellInfo->Id) { amount = uint32((item_rand_suffix->AllocationPct[k] * castItem->GetItemSuffixFactor()) / 10000); break; @@ -673,7 +673,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster) { uint32 mountType = uint32(GetMiscValueB()); if (MountEntry const* mountEntry = sDB2Manager.GetMount(GetId())) - mountType = mountEntry->MountTypeId; + mountType = mountEntry->MountTypeID; if (MountCapabilityEntry const* mountCapability = GetBase()->GetUnitOwner()->GetMountCapability(mountType)) { @@ -2560,7 +2560,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo }); if (!usableDisplays.empty()) - displayId = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID; + displayId = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->CreatureDisplayInfoID; } } // TODO: CREATE TABLE mount_vehicle (mountId, vehicleCreatureId) for future mounts that are vehicles (new mounts no longer have proper data in MiscValue) @@ -2589,7 +2589,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo // cast speed aura if (mode & AURA_EFFECT_HANDLE_REAL) if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(GetAmount())) - target->CastSpell(target, mountCapability->SpeedModSpell, true); + target->CastSpell(target, mountCapability->ModSpellAuraID, true); } else { @@ -2603,7 +2603,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo // remove speed aura if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(GetAmount())) - target->RemoveAurasDueToSpell(mountCapability->SpeedModSpell, target->GetGUID()); + target->RemoveAurasDueToSpell(mountCapability->ModSpellAuraID, target->GetGUID()); } } } @@ -3802,7 +3802,7 @@ void AuraEffect::HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp return; Unit* target = aurApp->GetTarget(); - if (target->GetPowerIndex(Powers(powerDisplay->PowerType)) == MAX_POWERS) + if (target->GetPowerIndex(Powers(powerDisplay->ActualType)) == MAX_POWERS) return; if (apply) @@ -4917,7 +4917,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m target->SetUInt16Value(PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, overrideId); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) - if (uint32 spellId = overrideSpells->SpellID[i]) + if (uint32 spellId = overrideSpells->Spells[i]) target->AddTemporarySpell(spellId); } else @@ -4925,7 +4925,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m target->SetUInt16Value(PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, 0); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) - if (uint32 spellId = overrideSpells->SpellID[i]) + if (uint32 spellId = overrideSpells->Spells[i]) target->RemoveTemporarySpell(spellId); } } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 64643964169..e81659a298a 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -353,7 +353,7 @@ m_lastProcAttemptTime(std::chrono::steady_clock::now() - Seconds(10)), m_lastPro { std::vector<SpellPowerEntry const*> powers = sDB2Manager.GetSpellPowers(GetId(), caster ? caster->GetMap()->GetDifficultyID() : DIFFICULTY_NONE); for (SpellPowerEntry const* power : powers) - if (power->ManaCostPerSecond != 0 || power->ManaCostPercentagePerSecond > 0.0f) + if (power->ManaPerSecond != 0 || power->PowerPctPerSecond > 0.0f) m_periodicCosts.push_back(power); if (!m_periodicCosts.empty()) @@ -728,15 +728,15 @@ void Aura::Update(uint32 diff, Unit* caster) for (SpellPowerEntry const* power : m_periodicCosts) { - if (power->RequiredAura && !caster->HasAura(power->RequiredAura)) + if (power->RequiredAuraSpellID && !caster->HasAura(power->RequiredAuraSpellID)) continue; - int32 manaPerSecond = power->ManaCostPerSecond; + int32 manaPerSecond = power->ManaPerSecond; Powers powertype = Powers(power->PowerType); if (powertype != POWER_HEALTH) - manaPerSecond += int32(CalculatePct(caster->GetMaxPower(powertype), power->ManaCostPercentagePerSecond)); + manaPerSecond += int32(CalculatePct(caster->GetMaxPower(powertype), power->PowerPctPerSecond)); else - manaPerSecond += int32(CalculatePct(caster->GetMaxHealth(), power->ManaCostPercentagePerSecond)); + manaPerSecond += int32(CalculatePct(caster->GetMaxHealth(), power->PowerPctPerSecond)); if (manaPerSecond) { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2e103d58b49..f2c8973ad1c 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4317,9 +4317,9 @@ void Spell::UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& ammo) { if (ItemEntry const* itemEntry = sItemStore.LookupEntry(item_id)) { - if (itemEntry->Class == ITEM_CLASS_WEAPON) + if (itemEntry->ClassID == ITEM_CLASS_WEAPON) { - switch (itemEntry->SubClass) + switch (itemEntry->SubclassID) { case ITEM_SUBCLASS_WEAPON_THROWN: ammoDisplayID = sDB2Manager.GetItemDisplayId(item_id, m_caster->GetVirtualItemAppearanceMod(i)); @@ -5504,7 +5504,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint SummonPropertiesEntry const* SummonProperties = sSummonPropertiesStore.LookupEntry(effect->MiscValueB); if (!SummonProperties) break; - switch (SummonProperties->Category) + switch (SummonProperties->Control) { case SUMMON_CATEGORY_PET: if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET) && !m_caster->GetPetGUID().IsEmpty()) @@ -6467,7 +6467,7 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 / ItemTemplate const* proto = targetItem->GetTemplate(); for (uint8 e = 0; e < proto->Effects.size(); ++e) { - if (proto->Effects[e]->SpellID && proto->Effects[e]->Trigger == ITEM_SPELLTRIGGER_ON_USE) + if (proto->Effects[e]->SpellID && proto->Effects[e]->TriggerType == ITEM_SPELLTRIGGER_ON_USE) { isItemUsable = true; break; @@ -6548,7 +6548,7 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 / ItemDisenchantLootEntry const* itemDisenchantLoot = item->GetDisenchantLoot(m_caster->ToPlayer()); if (!itemDisenchantLoot) return SPELL_FAILED_CANT_BE_DISENCHANTED; - if (itemDisenchantLoot->RequiredDisenchantSkill > player->GetSkillValue(SKILL_ENCHANTING)) + if (itemDisenchantLoot->SkillRequired > player->GetSkillValue(SKILL_ENCHANTING)) return SPELL_FAILED_LOW_CASTLEVEL; break; } @@ -7238,7 +7238,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk { // check key item (many fit cases can be) case LOCK_KEY_ITEM: - if (lockInfo->Index[j] && m_CastItem && m_CastItem->GetEntry() == lockInfo->Index[j]) + if (lockInfo->Index[j] && m_CastItem && int32(m_CastItem->GetEntry()) == lockInfo->Index[j]) return SPELL_CAST_OK; reqKey = true; break; @@ -7248,7 +7248,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk reqKey = true; // wrong locktype, skip - if (uint32(effect->MiscValue) != lockInfo->Index[j]) + if (effect->MiscValue != lockInfo->Index[j]) continue; skillId = SkillByLockType(LockType(lockInfo->Index[j])); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4ba39388043..ceafaaf797f 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2008,7 +2008,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) break; } - switch (properties->Category) + switch (properties->Control) { case SUMMON_CATEGORY_WILD: case SUMMON_CATEGORY_ALLY: @@ -2018,7 +2018,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) SummonGuardian(effIndex, entry, properties, numSummons); break; } - switch (properties->Type) + switch (properties->Title) { case SUMMON_TYPE_PET: case SUMMON_TYPE_GUARDIAN: @@ -2078,7 +2078,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) if (!summon) continue; - if (properties->Category == SUMMON_CATEGORY_ALLY) + if (properties->Control == SUMMON_CATEGORY_ALLY) { summon->SetOwnerGUID(m_originalCaster->GetGUID()); summon->setFaction(m_originalCaster->getFaction()); @@ -5175,7 +5175,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* if (summon->HasUnitTypeMask(UNIT_MASK_GUARDIAN)) ((Guardian*)summon)->InitStatsForLevel(level); - if (properties && properties->Category == SUMMON_CATEGORY_ALLY) + if (properties && properties->Control == SUMMON_CATEGORY_ALLY) summon->setFaction(caster->getFaction()); if (summon->HasUnitTypeMask(UNIT_MASK_MINION) && m_targets.HasDst()) @@ -5681,7 +5681,7 @@ void Spell::EffectUpgradeHeirloom(SpellEffIndex /*effIndex*/) if (Player* player = m_caster->ToPlayer()) if (CollectionMgr* collectionMgr = player->GetSession()->GetCollectionMgr()) - collectionMgr->UpgradeHeirloom(m_misc.Raw.Data[0], m_castItemEntry); + collectionMgr->UpgradeHeirloom(m_misc.Raw.Data[0], int32(m_castItemEntry)); } void Spell::EffectApplyEnchantIllusion(SpellEffIndex /*effIndex*/) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 50b27ec19fa..e055f9c7801 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -884,11 +884,11 @@ void SpellHistory::GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemI { for (ItemEffectEntry const* itemEffect : proto->Effects) { - if (itemEffect->SpellID == spellInfo->Id) + if (uint32(itemEffect->SpellID) == spellInfo->Id) { - tmpCooldown = itemEffect->Cooldown; - tmpCategoryId = itemEffect->Category; - tmpCategoryCooldown = itemEffect->CategoryCooldown; + tmpCooldown = itemEffect->CoolDownMSec; + tmpCategoryId = itemEffect->SpellCategoryID; + tmpCategoryCooldown = itemEffect->CategoryCoolDownMSec; break; } } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 4e6311ec0bf..2592c973e8d 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -383,14 +383,14 @@ SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, uint8 effIndex, Spe Amplitude = _effect ? _effect->EffectAmplitude : 0.0f; ChainAmplitude = _effect ? _effect->EffectChainAmplitude : 0.0f; BonusCoefficient = _effect ? _effect->EffectBonusCoefficient : 0.0f; - MiscValue = _effect ? _effect->EffectMiscValue : 0; - MiscValueB = _effect ? _effect->EffectMiscValueB : 0; + MiscValue = _effect ? _effect->EffectMiscValue[0] : 0; + MiscValueB = _effect ? _effect->EffectMiscValue[1] : 0; Mechanic = Mechanics(_effect ? _effect->EffectMechanic : 0); PositionFacing = _effect ? _effect->EffectPosFacing : 0.0f; TargetA = SpellImplicitTargetInfo(_effect ? _effect->ImplicitTarget[0] : 0); TargetB = SpellImplicitTargetInfo(_effect ? _effect->ImplicitTarget[1] : 0); - RadiusEntry = _effect && _effect->EffectRadiusIndex ? sSpellRadiusStore.LookupEntry(_effect->EffectRadiusIndex) : NULL; - MaxRadiusEntry = _effect && _effect->EffectRadiusMaxIndex ? sSpellRadiusStore.LookupEntry(_effect->EffectRadiusMaxIndex) : NULL; + RadiusEntry = _effect && _effect->EffectRadiusIndex[0] ? sSpellRadiusStore.LookupEntry(_effect->EffectRadiusIndex[0]) : NULL; + MaxRadiusEntry = _effect && _effect->EffectRadiusIndex[1] ? sSpellRadiusStore.LookupEntry(_effect->EffectRadiusIndex[1]) : NULL; ChainTargets = _effect ? _effect->EffectChainTargets : 0; ItemType = _effect ? _effect->EffectItemType : 0; TriggerSpell = _effect ? _effect->EffectTriggerSpell : 0; @@ -1002,20 +1002,20 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& // SpellMiscEntry SpellMiscEntry const* _misc = data.Misc; - Attributes = _misc ? _misc->Attributes : 0; - AttributesEx = _misc ? _misc->AttributesEx : 0; - AttributesEx2 = _misc ? _misc->AttributesExB : 0; - AttributesEx3 = _misc ? _misc->AttributesExC : 0; - AttributesEx4 = _misc ? _misc->AttributesExD : 0; - AttributesEx5 = _misc ? _misc->AttributesExE : 0; - AttributesEx6 = _misc ? _misc->AttributesExF : 0; - AttributesEx7 = _misc ? _misc->AttributesExG : 0; - AttributesEx8 = _misc ? _misc->AttributesExH : 0; - AttributesEx9 = _misc ? _misc->AttributesExI : 0; - AttributesEx10 = _misc ? _misc->AttributesExJ : 0; - AttributesEx11 = _misc ? _misc->AttributesExK : 0; - AttributesEx12 = _misc ? _misc->AttributesExL : 0; - AttributesEx13 = _misc ? _misc->AttributesExM : 0; + Attributes = _misc ? _misc->Attributes[0] : 0; + AttributesEx = _misc ? _misc->Attributes[1] : 0; + AttributesEx2 = _misc ? _misc->Attributes[2] : 0; + AttributesEx3 = _misc ? _misc->Attributes[3] : 0; + AttributesEx4 = _misc ? _misc->Attributes[4] : 0; + AttributesEx5 = _misc ? _misc->Attributes[5] : 0; + AttributesEx6 = _misc ? _misc->Attributes[6] : 0; + AttributesEx7 = _misc ? _misc->Attributes[7] : 0; + AttributesEx8 = _misc ? _misc->Attributes[8] : 0; + AttributesEx9 = _misc ? _misc->Attributes[9] : 0; + AttributesEx10 = _misc ? _misc->Attributes[10] : 0; + AttributesEx11 = _misc ? _misc->Attributes[11] : 0; + AttributesEx12 = _misc ? _misc->Attributes[12] : 0; + AttributesEx13 = _misc ? _misc->Attributes[13] : 0; CastTimeEntry = _misc ? (_misc->CastingTimeIndex ? sSpellCastTimesStore.LookupEntry(_misc->CastingTimeIndex) : NULL) : NULL; DurationEntry = _misc ? (_misc->DurationIndex ? sSpellDurationStore.LookupEntry(_misc->DurationIndex) : NULL) : NULL; RangeIndex = _misc ? _misc->RangeIndex : 0; @@ -1023,17 +1023,17 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& Speed = _misc ? _misc->Speed : 0; SchoolMask = _misc ? _misc->SchoolMask : 0; AttributesCu = 0; - IconFileDataId = _misc ? _misc->IconFileDataID : 0; + IconFileDataId = _misc ? _misc->SpellIconFileDataID : 0; ActiveIconFileDataId = _misc ? _misc->ActiveIconFileDataID : 0; _visuals = std::move(visuals); // sort all visuals so that the ones without a condition requirement are last on the list for (auto& visualPair : _visuals) - std::sort(visualPair.second.begin(), visualPair.second.end(), [](SpellXSpellVisualEntry const* first, SpellXSpellVisualEntry const* second) { return first->PlayerConditionID > second->PlayerConditionID; }); + std::sort(visualPair.second.begin(), visualPair.second.end(), [](SpellXSpellVisualEntry const* first, SpellXSpellVisualEntry const* second) { return first->CasterPlayerConditionID > second->CasterPlayerConditionID; }); // SpellScalingEntry SpellScalingEntry const* _scaling = data.Scaling; - Scaling.Class = _scaling ? _scaling->ScalingClass : 0; + Scaling.Class = _scaling ? _scaling->Class : 0; Scaling.MinScalingLevel = _scaling ? _scaling->MinScalingLevel : 0; Scaling.MaxScalingLevel = _scaling ? _scaling->MaxScalingLevel : 0; Scaling.ScalesFromItemLevel = _scaling ? _scaling->ScalesFromItemLevel : 0; @@ -1091,8 +1091,8 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& // SpellEquippedItemsEntry SpellEquippedItemsEntry const* _equipped = data.EquippedItems; EquippedItemClass = _equipped ? _equipped->EquippedItemClass : -1; - EquippedItemSubClassMask = _equipped ?_equipped->EquippedItemSubClassMask : -1; - EquippedItemInventoryTypeMask = _equipped ? _equipped->EquippedItemInventoryTypeMask : -1; + EquippedItemSubClassMask = _equipped ?_equipped->EquippedItemSubclass : -1; + EquippedItemInventoryTypeMask = _equipped ? _equipped->EquippedItemInvTypes : -1; // SpellInterruptsEntry if (SpellInterruptsEntry const* _interrupt = data.Interrupts) @@ -1131,11 +1131,11 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& // SpellTargetRestrictionsEntry SpellTargetRestrictionsEntry const* _target = data.TargetRestrictions; - ConeAngle = _target ? _target->ConeAngle : 0.f; + ConeAngle = _target ? _target->ConeDegrees : 0.f; Width = _target ? _target->Width : 0.f; Targets = _target ? _target->Targets : 0; TargetCreatureType = _target ? _target->TargetCreatureType : 0; - MaxAffectedTargets = _target ? _target->MaxAffectedTargets : 0; + MaxAffectedTargets = _target ? _target->MaxTargets : 0; MaxTargetLevel = _target ? _target->MaxTargetLevel : 0; // SpellTotemsEntry @@ -1328,7 +1328,7 @@ bool SpellInfo::IsAbilityOfSkillType(uint32 skillType) const SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id); for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) - if (_spell_idx->second->SkillLine == uint32(skillType)) + if (_spell_idx->second->SkillLine == int32(skillType)) return true; return false; @@ -1905,7 +1905,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a { uint32 mountType = effect->MiscValueB; if (MountEntry const* mountEntry = sDB2Manager.GetMount(Id)) - mountType = mountEntry->MountTypeId; + mountType = mountEntry->MountTypeID; if (mountType && !player->GetMountCapability(mountType)) return SPELL_FAILED_NOT_HERE; break; @@ -2139,11 +2139,11 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const VehicleSeatEntry const* vehicleSeat = vehicle->GetSeatForPassenger(caster); if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED) - && (vehicleSeat->Flags[0] & checkMask) != checkMask) + && (vehicleSeat->Flags & checkMask) != checkMask) return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; // Can only summon uncontrolled minions/guardians when on controlled vehicle - if (vehicleSeat->Flags[0] & (VEHICLE_SEAT_FLAG_CAN_CONTROL | VEHICLE_SEAT_FLAG_UNK2)) + if (vehicleSeat->Flags & (VEHICLE_SEAT_FLAG_CAN_CONTROL | VEHICLE_SEAT_FLAG_UNK2)) { for (SpellEffectInfo const* effect : GetEffectsForDifficulty(caster->GetMap()->GetDifficultyID())) { @@ -2151,7 +2151,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const continue; SummonPropertiesEntry const* props = sSummonPropertiesStore.LookupEntry(effect->MiscValueB); - if (props && props->Category != SUMMON_CATEGORY_WILD) + if (props && props->Control != SUMMON_CATEGORY_WILD) return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; } } @@ -3473,20 +3473,14 @@ float SpellInfo::GetMinRange(bool positive) const { if (!RangeEntry) return 0.0f; - if (positive) - return RangeEntry->MinRangeFriend; - return RangeEntry->MinRangeHostile; + return RangeEntry->RangeMin[positive ? 1 : 0]; } float SpellInfo::GetMaxRange(bool positive, Unit* caster, Spell* spell) const { if (!RangeEntry) return 0.0f; - float range; - if (positive) - range = RangeEntry->MaxRangeFriend; - else - range = RangeEntry->MaxRangeHostile; + float range = RangeEntry->RangeMax[positive ? 1 : 0]; if (caster) if (Player* modOwner = caster->GetSpellModOwner()) modOwner->ApplySpellMod(Id, SPELLMOD_RANGE, range, spell); @@ -3539,9 +3533,9 @@ uint32 SpellInfo::CalcCastTime(uint8 level, Spell* spell /*= NULL*/) const if (calcLevel < 0) calcLevel = 0; - castTime = CastTimeEntry->CastTime + CastTimeEntry->CastTimePerLevel * level; - if (castTime < CastTimeEntry->MinCastTime) - castTime = CastTimeEntry->MinCastTime; + castTime = CastTimeEntry->Base + CastTimeEntry->PerLevel * level; + if (castTime < CastTimeEntry->Minimum) + castTime = CastTimeEntry->Minimum; } if (castTime <= 0) @@ -3606,7 +3600,7 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc for (SpellPowerEntry const* power : powers) { - if (power->RequiredAura && !caster->HasAura(power->RequiredAura)) + if (power->RequiredAuraSpellID && !caster->HasAura(power->RequiredAuraSpellID)) continue; // Spell drain all exist power on cast (Only paladin lay of Hands) @@ -3635,21 +3629,21 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc // Base powerCost int32 powerCost = power->ManaCost; // PCT cost from total amount - if (power->ManaCostPercentage) + if (power->PowerCostPct) { switch (power->PowerType) { // health as power used case POWER_HEALTH: - powerCost += int32(CalculatePct(caster->GetMaxHealth(), power->ManaCostPercentage)); + powerCost += int32(CalculatePct(caster->GetMaxHealth(), power->PowerCostPct)); break; case POWER_MANA: - powerCost += int32(CalculatePct(caster->GetCreateMana(), power->ManaCostPercentage)); + powerCost += int32(CalculatePct(caster->GetCreateMana(), power->PowerCostPct)); break; case POWER_RAGE: case POWER_FOCUS: case POWER_ENERGY: - powerCost += int32(CalculatePct(caster->GetMaxPower(Powers(power->PowerType)), power->ManaCostPercentage)); + powerCost += int32(CalculatePct(caster->GetMaxPower(Powers(power->PowerType)), power->PowerCostPct)); break; case POWER_RUNES: case POWER_RUNIC_POWER: @@ -3661,8 +3655,8 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc } } - if (power->HealthCostPercentage) - healthCost += int32(CalculatePct(caster->GetMaxHealth(), power->HealthCostPercentage)); + if (power->PowerCostMaxPct) + healthCost += int32(CalculatePct(caster->GetMaxHealth(), power->PowerCostMaxPct)); if (power->PowerType != POWER_HEALTH) { @@ -3701,13 +3695,13 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc // Apply cost mod by spell if (Player* modOwner = caster->GetSpellModOwner()) { - if (power->PowerIndex == 0) + if (power->OrderIndex == 0) modOwner->ApplySpellMod(Id, SPELLMOD_COST, powerCost); - else if (power->PowerIndex == 1) + else if (power->OrderIndex == 1) modOwner->ApplySpellMod(Id, SPELLMOD_SPELL_COST2, powerCost); } - if (!caster->IsControlledByPlayer() && G3D::fuzzyEq(power->ManaCostPercentage, 0.0f) && SpellLevel) + if (!caster->IsControlledByPlayer() && G3D::fuzzyEq(power->PowerCostPct, 0.0f) && SpellLevel) { if (HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)) { @@ -3827,7 +3821,7 @@ inline float CalcPPMCritMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster inline float CalcPPMItemLevelMod(SpellProcsPerMinuteModEntry const* mod, int32 itemLevel) { - if (uint32(itemLevel) == mod->Param) + if (itemLevel == mod->Param) return 0.0f; float itemLevelPoints = GetRandomPropertyPoints(itemLevel, ITEM_QUALITY_RARE, INVTYPE_CHEST, 0); @@ -3867,7 +3861,7 @@ float SpellInfo::CalcProcPPM(Unit* caster, int32 itemLevel) const case SPELL_PPM_MOD_SPEC: { if (Player* plrCaster = caster->ToPlayer()) - if (plrCaster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == mod->Param) + if (plrCaster->GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == mod->Param) ppm *= 1.0f + mod->Coeff; break; } @@ -4012,7 +4006,7 @@ uint32 SpellInfo::GetSpellXSpellVisualId(Unit const* caster /*= nullptr*/) const { for (SpellXSpellVisualEntry const* visual : itr->second) { - PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(visual->PlayerConditionID); + PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(visual->CasterPlayerConditionID); if (!playerCondition || (caster->GetTypeId() == TYPEID_PLAYER && sConditionMgr->IsPlayerMeetingCondition(caster->ToPlayer(), playerCondition))) return visual->ID; } @@ -4027,7 +4021,7 @@ uint32 SpellInfo::GetSpellXSpellVisualId(Unit const* caster /*= nullptr*/) const { for (SpellXSpellVisualEntry const* visual : itr->second) { - PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(visual->PlayerConditionID); + PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(visual->CasterPlayerConditionID); if (!playerCondition || (caster && caster->GetTypeId() == TYPEID_PLAYER && sConditionMgr->IsPlayerMeetingCondition(caster->ToPlayer(), playerCondition))) return visual->ID; } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index a8649bbca33..3b5089860c5 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -51,7 +51,7 @@ bool IsPartOfSkillLine(uint32 skillId, uint32 spellId) { SkillLineAbilityMapBounds skillBounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId); for (SkillLineAbilityMap::const_iterator itr = skillBounds.first; itr != skillBounds.second; ++itr) - if (itr->second->SkillLine == skillId) + if (itr->second->SkillLine == int32(skillId)) return true; return false; @@ -724,11 +724,11 @@ void SpellMgr::LoadSpellRanks() if (!skillAbility->SupercedesSpell) continue; - if (!GetSpellInfo(skillAbility->SupercedesSpell) || !GetSpellInfo(skillAbility->SpellID)) + if (!GetSpellInfo(skillAbility->SupercedesSpell) || !GetSpellInfo(skillAbility->Spell)) continue; - chains[skillAbility->SupercedesSpell] = skillAbility->SpellID; - hasPrev.insert(skillAbility->SpellID); + chains[skillAbility->SupercedesSpell] = skillAbility->Spell; + hasPrev.insert(skillAbility->Spell); } // each key in chains that isn't present in hasPrev is a first rank @@ -1007,7 +1007,7 @@ void SpellMgr::LoadSpellLearnSpells() bool found = false; for (SpellLearnSpellMap::const_iterator itr = db_node_bounds.first; itr != db_node_bounds.second; ++itr) { - if (itr->second.Spell == spellLearnSpell->SpellID) + if (int32(itr->second.Spell) == spellLearnSpell->SpellID) { TC_LOG_ERROR("sql.sql", "Found redundant record (entry: %u, SpellID: %u) in `spell_learn_spell`, spell added automatically from SpellLearnSpell.db2", spellLearnSpell->LearnSpellID, spellLearnSpell->SpellID); found = true; @@ -1023,7 +1023,7 @@ void SpellMgr::LoadSpellLearnSpells() found = false; for (SpellLearnSpellMap::const_iterator itr = dbc_node_bounds.first; itr != dbc_node_bounds.second; ++itr) { - if (itr->second.Spell == spellLearnSpell->SpellID) + if (int32(itr->second.Spell) == spellLearnSpell->SpellID) { found = true; break; @@ -1642,7 +1642,7 @@ void SpellMgr::LoadSkillLineAbilityMap() if (!SkillInfo) continue; - mSkillLineAbilityMap.insert(SkillLineAbilityMap::value_type(SkillInfo->SpellID, SkillInfo)); + mSkillLineAbilityMap.insert(SkillLineAbilityMap::value_type(SkillInfo->Spell, SkillInfo)); ++count; } @@ -1893,7 +1893,7 @@ void SpellMgr::LoadPetLevelupSpellMap() if (skillLine->AcquireMethod != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; - SpellInfo const* spell = GetSpellInfo(skillLine->SpellID); + SpellInfo const* spell = GetSpellInfo(skillLine->Spell); if (!spell) // not exist or triggered or talent continue; @@ -2212,20 +2212,20 @@ void SpellMgr::LoadSpellInfoStore() mSpellInfoMap.resize(sSpellStore.GetNumRows(), NULL); std::unordered_map<uint32, SpellInfoLoadHelper> loadData; - std::unordered_map<uint32, SpellEffectEntryMap> effectsBySpell; + std::unordered_map<int32, SpellEffectEntryMap> effectsBySpell; std::unordered_map<uint32, SpellVisualMap> visualsBySpell; for (SpellEffectEntry const* effect : sSpellEffectStore) { - ASSERT(effect->EffectIndex < MAX_SPELL_EFFECTS, "MAX_SPELL_EFFECTS must be at least %u", effect->EffectIndex + 1); + ASSERT(effect->EffectIndex < MAX_SPELL_EFFECTS, "MAX_SPELL_EFFECTS must be at least %d", effect->EffectIndex + 1); ASSERT(effect->Effect < TOTAL_SPELL_EFFECTS, "TOTAL_SPELL_EFFECTS must be at least %u", effect->Effect + 1); - ASSERT(effect->EffectAura < TOTAL_AURAS, "TOTAL_AURAS must be at least %u", effect->EffectAura + 1); + ASSERT(effect->EffectAura < int32(TOTAL_AURAS), "TOTAL_AURAS must be at least %d", effect->EffectAura + 1); ASSERT(effect->ImplicitTarget[0] < TOTAL_SPELL_TARGETS, "TOTAL_SPELL_TARGETS must be at least %u", effect->ImplicitTarget[0] + 1); ASSERT(effect->ImplicitTarget[1] < TOTAL_SPELL_TARGETS, "TOTAL_SPELL_TARGETS must be at least %u", effect->ImplicitTarget[1] + 1); SpellEffectEntryVector& effectsForDifficulty = effectsBySpell[effect->SpellID][effect->DifficultyID]; - if (effectsForDifficulty.size() <= effect->EffectIndex) - effectsForDifficulty.resize(effect->EffectIndex + 1); + if (effectsForDifficulty.size() <= std::size_t(effect->EffectIndex)) + effectsForDifficulty.resize(std::size_t(effect->EffectIndex + 1)); effectsForDifficulty[effect->EffectIndex] = effect; } @@ -2437,7 +2437,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes() if (enchant->Effect[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) continue; - SpellInfo* procInfo = _GetSpellInfo(enchant->EffectSpellID[s]); + SpellInfo* procInfo = _GetSpellInfo(enchant->EffectArg[s]); if (!procInfo) continue; @@ -3402,11 +3402,11 @@ void SpellMgr::LoadSpellInfoCorrections() } if (SummonPropertiesEntry* properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(121))) - properties->Type = SUMMON_TYPE_TOTEM; + properties->Title = SUMMON_TYPE_TOTEM; if (SummonPropertiesEntry* properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(647))) // 52893 - properties->Type = SUMMON_TYPE_TOTEM; + properties->Title = SUMMON_TYPE_TOTEM; if (SummonPropertiesEntry* properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(628))) // Hungry Plaguehound - properties->Category = SUMMON_CATEGORY_PET; + properties->Control = SUMMON_CATEGORY_PET; TC_LOG_INFO("server.loading", ">> Loaded SpellInfo corrections in %u ms", GetMSTimeDiffToNow(oldMSTime)); } @@ -3467,11 +3467,11 @@ void SpellMgr::LoadPetFamilySpellsStore() for (SkillLineAbilityEntry const* skillLine : sSkillLineAbilityStore) { - SpellInfo const* spellInfo = GetSpellInfo(skillLine->SpellID); + SpellInfo const* spellInfo = GetSpellInfo(skillLine->Spell); if (!spellInfo) continue; - auto levels = levelsBySpell.find(skillLine->SpellID); + auto levels = levelsBySpell.find(skillLine->Spell); if (levels != levelsBySpell.end() && levels->second->SpellLevel) continue; diff --git a/src/server/game/Texts/ChatTextBuilder.cpp b/src/server/game/Texts/ChatTextBuilder.cpp index cb9d8241c91..761af6a905b 100644 --- a/src/server/game/Texts/ChatTextBuilder.cpp +++ b/src/server/game/Texts/ChatTextBuilder.cpp @@ -25,7 +25,7 @@ WorldPackets::Packet* Trinity::BroadcastTextBuilder::operator()(LocaleConstant l { BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId); WorldPackets::Chat::Chat* chat = new WorldPackets::Chat::Chat(); - chat->Initialize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale); + chat->Initialize(_msgType, bct ? Language(bct->LanguageID) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale); return chat; } diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 5731484abc5..e7f479248c5 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -252,7 +252,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject if (sound) finalSound = sound; else if (BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(iter->BroadcastTextId)) - if (uint32 broadcastTextSoundId = bct->SoundID[source->getGender() == GENDER_FEMALE ? 1 : 0]) + if (uint32 broadcastTextSoundId = bct->SoundEntriesID[source->getGender() == GENDER_FEMALE ? 1 : 0]) finalSound = broadcastTextSoundId; if (range == TEXT_RANGE_NORMAL) diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 3db021e02c9..9107c0c2ebb 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -276,11 +276,11 @@ public: if (titleInfo && target->HasTitle(titleInfo)) { - std::string name = (target->getGender() == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[handler->GetSessionDbcLocale()]; + std::string name = (target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()]; if (name.empty()) continue; - char const* activeStr = target->GetUInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID + char const* activeStr = target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID ? handler->GetTrinityString(LANG_ACTIVE) : ""; diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index 9dc55050c08..255a0854226 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -399,9 +399,9 @@ public: } if ((node->Pos.X == 0.0f && node->Pos.Y == 0.0f && node->Pos.Z == 0.0f) || - !MapManager::IsValidMapCoord(node->MapID, node->Pos.X, node->Pos.Y, node->Pos.Z)) + !MapManager::IsValidMapCoord(node->ContinentID, node->Pos.X, node->Pos.Y, node->Pos.Z)) { - handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, node->Pos.X, node->Pos.Y, node->MapID); + handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, node->Pos.X, node->Pos.Y, uint32(node->ContinentID)); handler->SetSentErrorMessage(true); return false; } @@ -416,7 +416,7 @@ public: else player->SaveRecallPosition(); - player->TeleportTo(node->MapID, node->Pos.X, node->Pos.Y, node->Pos.Z, player->GetOrientation()); + player->TeleportTo(node->ContinentID, node->Pos.X, node->Pos.Y, node->Pos.Z, player->GetOrientation()); return true; } @@ -444,9 +444,9 @@ public: return false; } - if (!MapManager::IsValidMapCoord(at->MapID, at->Pos.X, at->Pos.Y, at->Pos.Z)) + if (!MapManager::IsValidMapCoord(at->ContinentID, at->Pos.X, at->Pos.Y, at->Pos.Z)) { - handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, at->Pos.X, at->Pos.Y, at->MapID); + handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, at->Pos.X, at->Pos.Y, uint32(at->ContinentID)); handler->SetSentErrorMessage(true); return false; } @@ -461,7 +461,7 @@ public: else player->SaveRecallPosition(); - player->TeleportTo(at->MapID, at->Pos.X, at->Pos.Y, at->Pos.Z, player->GetOrientation()); + player->TeleportTo(at->ContinentID, at->Pos.X, at->Pos.Y, at->Pos.Z, player->GetOrientation()); return true; } @@ -504,7 +504,7 @@ public: AreaTableEntry const* zoneEntry = areaEntry->ParentAreaID ? sAreaTableStore.LookupEntry(areaEntry->ParentAreaID) : areaEntry; ASSERT(zoneEntry); - Map const* map = sMapMgr->CreateBaseMap(zoneEntry->MapID); + Map const* map = sMapMgr->CreateBaseMap(zoneEntry->ContinentID); if (map->Instanceable()) { @@ -515,9 +515,9 @@ public: sDB2Manager.Zone2MapCoordinates(areaEntry->ParentAreaID ? uint32(areaEntry->ParentAreaID) : areaId, x, y); - if (!MapManager::IsValidMapCoord(zoneEntry->MapID, x, y)) + if (!MapManager::IsValidMapCoord(zoneEntry->ContinentID, x, y)) { - handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, zoneEntry->MapID); + handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, uint32(zoneEntry->ContinentID)); handler->SetSentErrorMessage(true); return false; } @@ -534,7 +534,7 @@ public: float z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y)); - player->TeleportTo(zoneEntry->MapID, x, y, z, player->GetOrientation()); + player->TeleportTo(zoneEntry->ContinentID, x, y, z, player->GetOrientation()); return true; } diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index f3438e884d1..6e62278b825 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -156,7 +156,7 @@ public: if (!entry) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(entry->SpellID); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(entry->Spell); if (!spellInfo) continue; @@ -424,7 +424,7 @@ public: continue; // wrong skill - if (skillLine->SkillLine != skillId) + if (skillLine->SkillLine != int32(skillId)) continue; // not high rank @@ -439,11 +439,11 @@ public: if (skillLine->ClassMask && (skillLine->ClassMask & classmask) == 0) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(skillLine->SpellID); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(skillLine->Spell); if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, player, false)) continue; - player->LearnSpell(skillLine->SpellID, false); + player->LearnSpell(skillLine->Spell, false); } } diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index fc0f20b4083..1c235bb8483 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -1027,10 +1027,10 @@ public: // send taxinode in "id - [name] (Map:m X:x Y:y Z:z)" format if (handler->GetSession()) handler->PSendSysMessage(LANG_TAXINODE_ENTRY_LIST_CHAT, nodeEntry->ID, nodeEntry->ID, name.c_str(), "", - nodeEntry->MapID, nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z); + uint32(nodeEntry->ContinentID), nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z); else handler->PSendSysMessage(LANG_TAXINODE_ENTRY_LIST_CONSOLE, nodeEntry->ID, name.c_str(), "", - nodeEntry->MapID, nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z); + uint32(nodeEntry->ContinentID), nodeEntry->Pos.X, nodeEntry->Pos.Y, nodeEntry->Pos.Z); if (!found) found = true; @@ -1134,7 +1134,7 @@ public: continue; int32 locale = handler->GetSessionDbcLocale(); - std::string name = (gender == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[locale]; + std::string name = (gender == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[locale]; if (name.empty()) continue; @@ -1147,7 +1147,7 @@ public: if (locale == handler->GetSessionDbcLocale()) continue; - name = (gender == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[locale]; + name = (gender == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[locale]; if (name.empty()) continue; @@ -1166,7 +1166,7 @@ public: char const* knownStr = target && target->HasTitle(titleInfo) ? handler->GetTrinityString(LANG_KNOWN) : ""; - char const* activeStr = target && target->GetUInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID + char const* activeStr = target && target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID ? handler->GetTrinityString(LANG_ACTIVE) : ""; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 287ab41b972..58855334412 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1282,7 +1282,7 @@ public: auto itr = std::find_if(sItemSparseStore.begin(), sItemSparseStore.end(), [&itemName](ItemSparseEntry const* sparse) { for (uint32 i = 0; i < MAX_LOCALES; ++i) - if (itemName == sparse->Name->Str[i]) + if (itemName == sparse->Display->Str[i]) return true; return false; }); diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 09d76fd5e20..d7be9d12c18 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1040,7 +1040,7 @@ public: return false; } - std::string formattedPowerName = powerType->PowerTypeToken; + std::string formattedPowerName = powerType->NameGlobalStringTag; bool upperCase = true; for (char& c : formattedPowerName) { @@ -1060,7 +1060,7 @@ public: } NotifyModification(handler, target, LANG_YOU_CHANGE_POWER, LANG_YOUR_POWER_CHANGED, formattedPowerName.c_str(), powerAmount, powerAmount); - powerAmount *= powerType->UIModifier; + powerAmount *= powerType->DisplayModifier; target->SetMaxPower(Powers(powerType->PowerTypeEnum), powerAmount); target->SetPower(Powers(powerType->PowerTypeEnum), powerAmount); return true; diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index f9346261173..10c924b89ed 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -99,7 +99,7 @@ public: return false; } - uint8 powerType = classEntry->PowerType; + uint8 powerType = classEntry->DisplayPower; // reset m_form if no aura if (!player->HasAuraType(SPELL_AURA_MOD_SHAPESHIFT)) diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index 946137f342f..b493f810e13 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -96,7 +96,7 @@ public: target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->MaskID); handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, - (target->getGender() == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[handler->GetSessionDbcLocale()], + (target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()], tNameLink.c_str()); return true; } @@ -139,7 +139,7 @@ public: std::string tNameLink = handler->GetNameLink(target); std::string titleNameStr = Trinity::StringFormat( - (target->getGender() == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[handler->GetSessionDbcLocale()], + (target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()], target->GetName().c_str() ); @@ -189,7 +189,7 @@ public: std::string tNameLink = handler->GetNameLink(target); std::string titleNameStr = Trinity::StringFormat( - (target->getGender() == GENDER_MALE ? titleInfo->NameMale : titleInfo->NameFemale)->Str[handler->GetSessionDbcLocale()], + (target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()], target->GetName().c_str() ); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 5b59f638915..f9b0d575b3d 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2962,7 +2962,7 @@ class spell_gen_running_wild : public SpellScriptLoader // cast speed aura if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(aurEff->GetAmount())) - target->CastSpell(target, mountCapability->SpeedModSpell, TRIGGERED_FULL_MASK); + target->CastSpell(target, mountCapability->ModSpellAuraID, TRIGGERED_FULL_MASK); } void Register() override diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 90f1eb65f54..92699d24a85 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -3809,7 +3809,7 @@ public: { target->HandleEmoteCommand(EMOTE_ONESHOT_TRAIN); if (EmotesTextSoundEntry const* soundEntry = sDB2Manager.GetTextSoundEmoteFor(TEXT_EMOTE_TRAIN, target->getRace(), target->getGender(), target->getClass())) - target->PlayDistanceSound(soundEntry->SoundId); + target->PlayDistanceSound(soundEntry->SoundID); } } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 965366c5203..57ee42572f9 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -287,10 +287,10 @@ class spell_rog_deadly_poison : public SpellScriptLoader if (enchant->Effect[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->EffectSpellID[s]); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->EffectArg[s]); if (!spellInfo) { - TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, %s) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().ToString().c_str(), enchant->EffectSpellID[s]); + TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, %s) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().ToString().c_str(), enchant->EffectArg[s]); continue; } @@ -303,9 +303,9 @@ class spell_rog_deadly_poison : public SpellScriptLoader continue; if (spellInfo->IsPositive()) - player->CastSpell(player, enchant->EffectSpellID[s], true, item); + player->CastSpell(player, enchant->EffectArg[s], true, item); else - player->CastSpell(target, enchant->EffectSpellID[s], true, item); + player->CastSpell(target, enchant->EffectArg[s], true, item); } } } |