diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index 440c9f448..465c0851d 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -701,7 +701,7 @@ namespace Framework.Constants // 227 - 0 Criterias ApplyConduit = 228, ConvertItemsToCurrency = 229, - TotalTypes = 230 + TotalTypes = 232 } public enum CriteriaDataType diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index 1c6223ebf..fea650cbd 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -45,7 +45,7 @@ namespace Framework.Constants public const uint infinityCooldownDelayCheck = Time.Month / 2; public const int MaxPlayerSummonDelay = 2 * Time.Minute; - public const int TaxiMaskSize = 337; + public const int TaxiMaskSize = 338; // corpse reclaim times public const int DeathExpireStep = (5 * Time.Minute); diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 9db3e827f..b9ca6ec38 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -49,7 +49,7 @@ namespace Framework.Constants /// /// BattlePets Const /// - public const int MaxBattlePetSpeciesId = 3084; + public const int MaxBattlePetSpeciesId = 3159; public const int MaxPetBattleSlots = 3; public const int MaxBattlePetsPerSpecies = 3; public const int BattlePetCageItemId = 82800; diff --git a/Source/Framework/Constants/Spells/SpellAuraConst.cs b/Source/Framework/Constants/Spells/SpellAuraConst.cs index 6b8afc7f4..78fff0daf 100644 --- a/Source/Framework/Constants/Spells/SpellAuraConst.cs +++ b/Source/Framework/Constants/Spells/SpellAuraConst.cs @@ -525,6 +525,8 @@ namespace Framework.Constants ModCriticalDamageTakenFromCaster = 501, ModVersatilityDamageDoneBenefit = 502, // NYI ModVersatilityHealingDoneBenefit = 503, // NYI + ModHealingTakenFromCaster = 504, + ModPlayerChoiceRerolls = 505, // NYI Total } diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index ece9b9a3b..13537f33a 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -2369,6 +2369,8 @@ namespace Framework.Constants LearnSoulbindConduit = 281, ConvertItemsToCurrency = 282, CompleteCampaign = 283, // Flags all quests as completed that are assigned to campaign (MiscValueA) + SendChatMessage = 284, // MiscValue[0] = BroadcastTextID, MiscValue[1] = ChatType + ModifyKeystone2 = 285, TotalSpellEffects } diff --git a/Source/Framework/Database/Databases/HotfixDatabase.cs b/Source/Framework/Database/Databases/HotfixDatabase.cs index b9cf6258a..f46f5fceb 100644 --- a/Source/Framework/Database/Databases/HotfixDatabase.cs +++ b/Source/Framework/Database/Databases/HotfixDatabase.cs @@ -118,7 +118,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_AZERITE_EMPOWERED_ITEM, "SELECT ID, ItemID, AzeriteTierUnlockSetID, AzeritePowerSetID FROM azerite_empowered_item"); // AzeriteEssence.db2 - PrepareStatement(HotfixStatements.SEL_AZERITE_ESSENCE, "SELECT Name, Description, ID, SpecSetID FROM azerite_essence"); + PrepareStatement(HotfixStatements.SEL_AZERITE_ESSENCE, "SELECT ID, Name, Description, SpecSetID FROM azerite_essence"); PrepareStatement(HotfixStatements.SEL_AZERITE_ESSENCE_LOCALE, "SELECT ID, Name_lang, Description_lang FROM azerite_essence_locale WHERE locale = ?"); // AzeriteEssencePower.db2 @@ -161,7 +161,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_BANNED_ADDONS, "SELECT ID, Name, Version, Flags FROM banned_addons"); // BarberShopStyle.db2 - PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, ID, Type, CostModifier, Race, Sex, Data FROM barber_shop_style"); + PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName, Description, Type, CostModifier, Race, Sex, Data FROM barber_shop_style"); PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale WHERE locale = ?"); // BattlePetBreedQuality.db2 @@ -199,13 +199,13 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_CHAR_TITLES_LOCALE, "SELECT ID, Name_lang, Name1_lang FROM char_titles_locale WHERE locale = ?"); // CharacterLoadout.db2 - PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT RaceMask, ID, ChrClassID, Purpose FROM character_loadout"); + PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT ID, RaceMask, ChrClassID, Purpose FROM character_loadout"); // CharacterLoadoutItem.db2 PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM, "SELECT ID, CharacterLoadoutID, ItemID FROM character_loadout_item"); // ChatChannels.db2 - PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS, "SELECT Name, Shortcut, ID, Flags, FactionGroup, Ruleset FROM chat_channels"); + PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS, "SELECT ID, Name, Shortcut, Flags, FactionGroup, Ruleset FROM chat_channels"); PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS_LOCALE, "SELECT ID, Name_lang, Shortcut_lang FROM chat_channels_locale WHERE locale = ?"); // ChrClassUiDisplay.db2 @@ -226,8 +226,8 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT ID, PowerType, ClassID FROM chr_classes_x_power_types"); // ChrCustomizationChoice.db2 - PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT Name, ID, ChrCustomizationOptionID, ChrCustomizationReqID, SortOrder, SwatchColor1, " + - "SwatchColor2, UiOrderIndex, Flags FROM chr_customization_choice"); + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT Name, ID, ChrCustomizationOptionID, ChrCustomizationReqID, SortOrder, UiOrderIndex, " + + "Flags, SwatchColor1, SwatchColor2 FROM chr_customization_choice"); PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE_LOCALE, "SELECT ID, Name_lang FROM chr_customization_choice_locale WHERE locale = ?"); // ChrCustomizationDisplayInfo.db2 @@ -254,22 +254,23 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_CHR_MODEL, "SELECT FaceCustomizationOffset1, FaceCustomizationOffset2, FaceCustomizationOffset3, CustomizeOffset1, " + "CustomizeOffset2, CustomizeOffset3, ID, Sex, DisplayID, CharComponentTextureLayoutID, Flags, SkeletonFileDataID, ModelFallbackChrModelID, " + "TextureFallbackChrModelID, HelmVisFallbackChrModelID, CustomizeScale, CustomizeFacing, CameraDistanceOffset, BarberShopCameraOffsetScale, " + - "BarberShopCameraRotationOffset FROM chr_model"); + "BarberShopCameraHeightOffsetScale, BarberShopCameraRotationOffset FROM chr_model"); // ChrRaceXChrModel.db2 PrepareStatement(HotfixStatements.SEL_CHR_RACE_X_CHR_MODEL, "SELECT ID, ChrRacesID, ChrModelID FROM chr_race_x_chr_model"); // ChrRaces.db2 - PrepareStatement(HotfixStatements.SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, NameS, " + - "NameFemaleS, NameLowercaseS, NameFemaleLowercaseS, RaceFantasyDescription, NameL, NameFemaleL, NameLowercaseL, NameFemaleLowercaseL, ID, " + - "Flags, BaseLanguage, ResSicknessSpellID, SplashSoundID, CreateScreenFileDataID, SelectScreenFileDataID, LowResScreenFileDataID, " + - "AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, AlteredFormFinishVisualKitID1, " + - "AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, UiDisplayOrder, PlayableRaceBit, " + - "HelmetAnimScalingRaceID, TransmogrifyDisabledSlotMask, AlteredFormCustomizeOffsetFallback1, AlteredFormCustomizeOffsetFallback2, " + - "AlteredFormCustomizeOffsetFallback3, AlteredFormCustomizeRotationFallback, FactionID, CinematicSequenceID, CreatureType, Alliance, " + - "RaceRelated, UnalteredVisualRaceID, DefaultClassID, NeutralRaceID, MaleModelFallbackRaceID, MaleModelFallbackSex, FemaleModelFallbackRaceID, " + - "FemaleModelFallbackSex, MaleTextureFallbackRaceID, MaleTextureFallbackSex, FemaleTextureFallbackRaceID, FemaleTextureFallbackSex, " + - "UnalteredVisualCustomizationRaceID FROM chr_races"); + PrepareStatement(HotfixStatements.SEL_CHR_RACES, "SELECT ID, ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, NameS, " + + "NameFemaleS, NameLowercaseS, NameFemaleLowercaseS, RaceFantasyDescription, NameL, NameFemaleL, NameLowercaseL, NameFemaleLowercaseL, Flags, " + + "FactionID, CinematicSequenceID, ResSicknessSpellID, SplashSoundID, Alliance, RaceRelated, UnalteredVisualRaceID, DefaultClassID, " + + "CreateScreenFileDataID, SelectScreenFileDataID, NeutralRaceID, LowResScreenFileDataID, AlteredFormStartVisualKitID1, " + + "AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, AlteredFormFinishVisualKitID1, AlteredFormFinishVisualKitID2, " + + "AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, UiDisplayOrder, MaleModelFallbackRaceID, " + + "FemaleModelFallbackRaceID, MaleTextureFallbackRaceID, FemaleTextureFallbackRaceID, PlayableRaceBit, HelmetAnimScalingRaceID, " + + "TransmogrifyDisabledSlotMask, UnalteredVisualCustomizationRaceID, AlteredFormCustomizeOffsetFallback1, AlteredFormCustomizeOffsetFallback2, " + + "AlteredFormCustomizeOffsetFallback3, AlteredFormCustomizeRotationFallback, Unknown910_11, Unknown910_12, Unknown910_13, Unknown910_21, " + + "Unknown910_22, Unknown910_23, BaseLanguage, CreatureType, MaleModelFallbackSex, FemaleModelFallbackSex, MaleTextureFallbackSex, " + + "FemaleTextureFallbackSex FROM chr_races"); PrepareStatement(HotfixStatements.SEL_CHR_RACES_LOCALE, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang, NameS_lang, " + "NameFemaleS_lang, NameLowercaseS_lang, NameFemaleLowercaseS_lang, RaceFantasyDescription_lang, NameL_lang, NameFemaleL_lang, " + "NameLowercaseL_lang, NameFemaleLowercaseL_lang FROM chr_races_locale WHERE locale = ?"); @@ -291,8 +292,8 @@ namespace Framework.Database "TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel FROM content_tuning"); // ContentTuningXExpected.db2 - PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MythicPlusSeasonID, ContentTuningID" + - " FROM content_tuning_x_expected"); + PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MinMythicPlusSeasonID, MaxMythicPlusSeasonID, " + + "ContentTuningID FROM content_tuning_x_expected"); // ConversationLine.db2 PrepareStatement(HotfixStatements.SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, " + @@ -394,8 +395,8 @@ namespace Framework.Database "PlayerManaMod, PlayerPrimaryStatMod, PlayerSecondaryStatMod, ArmorConstantMod, CreatureSpellDamageMod FROM expected_stat_mod"); // Faction.db2 - PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " + - "Description, ID, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, ReputationClassMask1, " + + PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ID, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " + + "Description, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, ReputationClassMask1, " + "ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, " + "ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, " + "ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2 FROM faction"); @@ -425,7 +426,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_GAMEOBJECTS_LOCALE, "SELECT ID, Name_lang FROM gameobjects_locale WHERE locale = ?"); // GarrAbility.db2 - PrepareStatement(HotfixStatements.SEL_GARR_ABILITY, "SELECT Name, Description, ID, GarrAbilityCategoryID, GarrFollowerTypeID, IconFileDataID, " + + PrepareStatement(HotfixStatements.SEL_GARR_ABILITY, "SELECT ID, Name, Description, GarrAbilityCategoryID, GarrFollowerTypeID, IconFileDataID, " + "FactionChangeGarrAbilityID, Flags FROM garr_ability"); PrepareStatement(HotfixStatements.SEL_GARR_ABILITY_LOCALE, "SELECT ID, Name_lang, Description_lang FROM garr_ability_locale WHERE locale = ?"); @@ -442,13 +443,13 @@ namespace Framework.Database "UiTextureAtlasMemberID FROM garr_building_plot_inst"); // GarrClassSpec.db2 - PrepareStatement(HotfixStatements.SEL_GARR_CLASS_SPEC, "SELECT ClassSpec, ClassSpecMale, ClassSpecFemale, ID, UiTextureAtlasMemberID, GarrFollItemSetID, " + + PrepareStatement(HotfixStatements.SEL_GARR_CLASS_SPEC, "SELECT ID, ClassSpec, ClassSpecMale, ClassSpecFemale, UiTextureAtlasMemberID, GarrFollItemSetID, " + "FollowerClassLimit, Flags FROM garr_class_spec"); PrepareStatement(HotfixStatements.SEL_GARR_CLASS_SPEC_LOCALE, "SELECT ID, ClassSpec_lang, ClassSpecMale_lang, ClassSpecFemale_lang FROM garr_class_spec_locale" + " WHERE locale = ?"); // GarrFollower.db2 - PrepareStatement(HotfixStatements.SEL_GARR_FOLLOWER, "SELECT HordeSourceText, AllianceSourceText, TitleName, ID, GarrTypeID, GarrFollowerTypeID, " + + PrepareStatement(HotfixStatements.SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText, AllianceSourceText, TitleName, GarrTypeID, GarrFollowerTypeID, " + "HordeCreatureID, AllianceCreatureID, HordeGarrFollRaceID, AllianceGarrFollRaceID, HordeGarrClassSpecID, AllianceGarrClassSpecID, Quality, " + "FollowerLevel, ItemLevelWeapon, ItemLevelArmor, HordeSourceTypeEnum, AllianceSourceTypeEnum, HordeIconFileDataID, AllianceIconFileDataID, " + "HordeGarrFollItemSetID, AllianceGarrFollItemSetID, HordeUITextureKitID, AllianceUITextureKitID, Vitality, HordeFlavorGarrStringID, " + @@ -598,7 +599,7 @@ namespace Framework.Database // ItemEffect.db2 PrepareStatement(HotfixStatements.SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, " + - "SpellID, ChrSpecializationID, ParentItemID FROM item_effect"); + "SpellID, ChrSpecializationID FROM item_effect"); // ItemExtendedCost.db2 PrepareStatement(HotfixStatements.SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, " + @@ -641,7 +642,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base"); // ItemSearchName.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT AllowableRace, Display, ID, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " + + PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT ID, AllowableRace, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " + "AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4" + " FROM item_search_name"); PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE, "SELECT ID, Display_lang FROM item_search_name_locale WHERE locale = ?"); @@ -655,20 +656,19 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_ITEM_SET_SPELL, "SELECT ID, ChrSpecID, SpellID, Threshold, ItemSetID FROM item_set_spell"); // ItemSparse.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, DmgVariance, " + - "DurationInInventory, QualityModifier, BagFamily, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, " + - "StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, " + - "StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, " + - "StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, Stackable, " + - "MaxCount, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, " + - "FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemNameDescriptionID, " + - "RequiredTransmogHoliday, RequiredHoliday, LimitCategory, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, " + - "ZoneBound1, ZoneBound2, ItemSet, LockID, StartQuestID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, " + - "AllowableClass, ExpansionID, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " + - "PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, " + - "StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, " + - "StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, MinReputation, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, " + - "InventoryType, OverallQualityID FROM item_sparse"); + PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, ExpansionID, DmgVariance, " + + "InstanceBound, DurationInInventory, QualityModifier, BagFamily, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, " + + "StatPercentageOfSocket3, StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, " + + "StatPercentageOfSocket8, StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, " + + "StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, " + + "Stackable, MaxCount, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, " + + "Flags4, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemNameDescriptionID, " + + "RequiredTransmogHoliday, RequiredHoliday, LimitCategory, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, ZoneBound1, ZoneBound2, " + + "ItemSet, LockID, StartQuestID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, " + + "SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, LanguageID, Bonding, " + + "DamageDamageType, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, " + + "StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, " + + "MinReputation, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse"); PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE_LOCALE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" + " FROM item_sparse_locale WHERE locale = ?"); @@ -681,6 +681,9 @@ namespace Framework.Database // ItemXBonusTree.db2 PrepareStatement(HotfixStatements.SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree"); + // ItemXItemEffect.db2 + PrepareStatement(HotfixStatements.SEL_ITEM_X_ITEM_EFFECT, "SELECT ID, ItemEffectID, ItemID FROM item_x_item_effect"); + // Keychain.db2 PrepareStatement(HotfixStatements.SEL_KEYCHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " + "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain"); @@ -689,7 +692,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words"); // Languages.db2 - PrepareStatement(HotfixStatements.SEL_LANGUAGES, "SELECT Name, ID FROM languages"); + PrepareStatement(HotfixStatements.SEL_LANGUAGES, "SELECT ID, Name FROM languages"); PrepareStatement(HotfixStatements.SEL_LANGUAGES_LOCALE, "SELECT ID, Name_lang FROM languages_locale WHERE locale = ?"); // LfgDungeons.db2 @@ -721,9 +724,9 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_MAIL_TEMPLATE_LOCALE, "SELECT ID, Body_lang FROM mail_template_locale WHERE locale = ?"); // Map.db2 - PrepareStatement(HotfixStatements.SEL_MAP, "SELECT ID, Directory, MapName, InternalName, MapDescription0, MapDescription1, PvpShortDescription, " + - "PvpLongDescription, CorpseX, CorpseY, MapType, InstanceType, ExpansionID, AreaTableID, LoadingScreenID, TimeOfDayOverride, ParentMapID, " + - "CosmeticParentMapID, TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map"); + PrepareStatement(HotfixStatements.SEL_MAP, "SELECT ID, Directory, MapName, MapDescription0, MapDescription1, PvpShortDescription, PvpLongDescription, " + + "CorpseX, CorpseY, MapType, InstanceType, ExpansionID, AreaTableID, LoadingScreenID, TimeOfDayOverride, ParentMapID, CosmeticParentMapID, " + + "TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map"); PrepareStatement(HotfixStatements.SEL_MAP_LOCALE, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, " + "PvpLongDescription_lang FROM map_locale WHERE locale = ?"); @@ -787,7 +790,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_PHASE_X_PHASE_GROUP, "SELECT ID, PhaseID, PhaseGroupID FROM phase_x_phase_group"); // PlayerCondition.db2 - PrepareStatement(HotfixStatements.SEL_PLAYER_CONDITION, "SELECT RaceMask, FailureDescription, ID, ClassMask, SkillLogic, LanguageID, MinLanguage, " + + PrepareStatement(HotfixStatements.SEL_PLAYER_CONDITION, "SELECT ID, RaceMask, FailureDescription, ClassMask, SkillLogic, LanguageID, MinLanguage, " + "MaxLanguage, MaxFactionID, MaxReputation, ReputationLogic, CurrentPvpFaction, PvpMedal, PrevQuestLogic, CurrQuestLogic, " + "CurrentCompletedQuestLogic, SpellLogic, ItemLogic, ItemFlags, AuraSpellLogic, WorldStateExpressionID, WeatherID, PartyStatus, " + "LifetimeMaxPVPRank, AchievementLogic, Gender, NativeGender, AreaLogic, LfgLogic, CurrencyLogic, QuestKillID, QuestKillLogic, " + @@ -971,8 +974,8 @@ namespace Framework.Database // SpellEffect.db2 PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, " + "EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, " + - "EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, " + - "ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, " + + "EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, " + + "ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, " + "EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, " + "ImplicitTarget2, SpellID FROM spell_effect"); @@ -989,7 +992,7 @@ namespace Framework.Database "ChannelInterruptFlags1, ChannelInterruptFlags2, SpellID FROM spell_interrupts"); // SpellItemEnchantment.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, "SELECT Name, HordeName, ID, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " + + PrepareStatement(HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name, HordeName, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " + "EffectScalingPoints2, EffectScalingPoints3, IconFileDataID, MinItemLevel, MaxItemLevel, TransmogUseConditionID, TransmogCost, " + "EffectPointsMin1, EffectPointsMin2, EffectPointsMin3, ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, " + "Effect2, Effect3, ScalingClass, ScalingClassRestricted, ConditionID, MinLevel, MaxLevel FROM spell_item_enchantment"); @@ -1046,7 +1049,7 @@ namespace Framework.Database "ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8 FROM spell_reagents"); // SpellScaling.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, Class, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling"); + PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling"); // SpellShapeshift.db2 PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, StanceBarOrder, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, " + @@ -1120,7 +1123,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET_LOCALE, "SELECT ID, Name_lang FROM transmog_set_locale WHERE locale = ?"); // TransmogSetGroup.db2 - PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET_GROUP, "SELECT Name, ID FROM transmog_set_group"); + PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET_GROUP, "SELECT ID, Name FROM transmog_set_group"); PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET_GROUP_LOCALE, "SELECT ID, Name_lang FROM transmog_set_group_locale WHERE locale = ?"); // TransmogSetItem.db2 @@ -1548,6 +1551,8 @@ namespace Framework.Database SEL_ITEM_X_BONUS_TREE, + SEL_ITEM_X_ITEM_EFFECT, + SEL_KEYCHAIN, SEL_LANGUAGE_WORDS, diff --git a/Source/Game/DataStorage/CliDB.cs b/Source/Game/DataStorage/CliDB.cs index 1ab306311..86a0d107c 100644 --- a/Source/Game/DataStorage/CliDB.cs +++ b/Source/Game/DataStorage/CliDB.cs @@ -205,6 +205,7 @@ namespace Game.DataStorage ItemSpecStorage = ReadDB2("ItemSpec.db2", HotfixStatements.SEL_ITEM_SPEC); ItemSpecOverrideStorage = ReadDB2("ItemSpecOverride.db2", HotfixStatements.SEL_ITEM_SPEC_OVERRIDE); ItemXBonusTreeStorage = ReadDB2("ItemXBonusTree.db2", HotfixStatements.SEL_ITEM_X_BONUS_TREE); + ItemXItemEffectStorage = ReadDB2("ItemXItemEffect.db2", HotfixStatements.SEL_ITEM_X_ITEM_EFFECT); //KeyChainStorage = ReadDB2("KeyChain.db2", HotfixStatements.SEL_KEYCHAIN); LanguageWordsStorage = ReadDB2("LanguageWords.db2", HotfixStatements.SEL_LANGUAGE_WORDS); LanguagesStorage = ReadDB2("Languages.db2", HotfixStatements.SEL_LANGUAGES, HotfixStatements.SEL_LANGUAGES_LOCALE); @@ -576,6 +577,7 @@ namespace Game.DataStorage public static DB6Storage ItemSpecStorage; public static DB6Storage ItemSpecOverrideStorage; public static DB6Storage ItemXBonusTreeStorage; + public static DB6Storage ItemXItemEffectStorage; //public static DB6Storage KeyChainStorage; public static DB6Storage LanguageWordsStorage; public static DB6Storage LanguagesStorage; diff --git a/Source/Game/DataStorage/DB2Manager.cs b/Source/Game/DataStorage/DB2Manager.cs index 485392fa2..cea86cece 100644 --- a/Source/Game/DataStorage/DB2Manager.cs +++ b/Source/Game/DataStorage/DB2Manager.cs @@ -241,9 +241,8 @@ namespace Game.DataStorage foreach (ContentTuningXExpectedRecord contentTuningXExpectedStat in ContentTuningXExpectedStorage.Values) { - ExpectedStatModRecord expectedStatMod = ExpectedStatModStorage.LookupByKey(contentTuningXExpectedStat.ExpectedStatModID); - if (expectedStatMod != null) - _expectedStatModsByContentTuning.Add(contentTuningXExpectedStat.ContentTuningID, expectedStatMod); + if (ExpectedStatModStorage.ContainsKey(contentTuningXExpectedStat.ExpectedStatModID)) + _expectedStatModsByContentTuning.Add(contentTuningXExpectedStat.ContentTuningID, contentTuningXExpectedStat); } foreach (CurvePointRecord curvePoint in CurvePointStorage.Values) @@ -1214,6 +1213,49 @@ namespace Game.DataStorage return null; } + float ExpectedStatModReducer(float mod, ContentTuningXExpectedRecord contentTuningXExpected, ExpectedStatType stat) + { + if (contentTuningXExpected == null) + return mod; + + //if (contentTuningXExpected->MinMythicPlusSeasonID) + // if (MythicPlusSeasonEntry const* mythicPlusSeason = sMythicPlusSeasonStore.LookupEntry(contentTuningXExpected->MinMythicPlusSeasonID)) + // if (MythicPlusSubSeason < mythicPlusSeason->SubSeason) + // return mod; + + //if (contentTuningXExpected->MaxMythicPlusSeasonID) + // if (MythicPlusSeasonEntry const* mythicPlusSeason = sMythicPlusSeasonStore.LookupEntry(contentTuningXExpected->MaxMythicPlusSeasonID)) + // if (MythicPlusSubSeason >= mythicPlusSeason->SubSeason) + // return mod; + + var expectedStatMod = ExpectedStatModStorage.LookupByKey(contentTuningXExpected.ExpectedStatModID); + switch (stat) + { + case ExpectedStatType.CreatureHealth: + return mod * expectedStatMod.CreatureHealthMod; + case ExpectedStatType.PlayerHealth: + return mod * expectedStatMod.PlayerHealthMod; + case ExpectedStatType.CreatureAutoAttackDps: + return mod * expectedStatMod.CreatureAutoAttackDPSMod; + case ExpectedStatType.CreatureArmor: + return mod * expectedStatMod.CreatureArmorMod; + case ExpectedStatType.PlayerMana: + return mod * expectedStatMod.PlayerManaMod; + case ExpectedStatType.PlayerPrimaryStat: + return mod * expectedStatMod.PlayerPrimaryStatMod; + case ExpectedStatType.PlayerSecondaryStat: + return mod * expectedStatMod.PlayerSecondaryStatMod; + case ExpectedStatType.ArmorConstant: + return mod * expectedStatMod.ArmorConstantMod; + case ExpectedStatType.CreatureSpellDamage: + return mod * expectedStatMod.CreatureSpellDamageMod; + } + + return mod; + + // int32 MythicPlusSubSeason = 0; + } + public float EvaluateExpectedStat(ExpectedStatType stat, uint level, int expansion, uint contentTuningId, Class unitClass) { var expectedStatRecord = _expectedStatsByLevel.LookupByKey(Tuple.Create(level, expansion)); @@ -1241,63 +1283,63 @@ namespace Game.DataStorage break; } - List contentTuningMods = _expectedStatModsByContentTuning.LookupByKey(contentTuningId); + List contentTuningMods = _expectedStatModsByContentTuning.LookupByKey(contentTuningId); float value = 0.0f; switch (stat) { case ExpectedStatType.CreatureHealth: value = expectedStatRecord.CreatureHealth; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.CreatureHealthMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.CreatureHealthMod; break; case ExpectedStatType.PlayerHealth: value = expectedStatRecord.PlayerHealth; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.PlayerHealthMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.PlayerHealthMod; break; case ExpectedStatType.CreatureAutoAttackDps: value = expectedStatRecord.CreatureAutoAttackDps; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.CreatureAutoAttackDPSMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.CreatureAutoAttackDPSMod; break; case ExpectedStatType.CreatureArmor: value = expectedStatRecord.CreatureArmor; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.CreatureArmorMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.CreatureArmorMod; break; case ExpectedStatType.PlayerMana: value = expectedStatRecord.PlayerMana; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.PlayerManaMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.PlayerManaMod; break; case ExpectedStatType.PlayerPrimaryStat: value = expectedStatRecord.PlayerPrimaryStat; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.PlayerPrimaryStatMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.PlayerPrimaryStatMod; break; case ExpectedStatType.PlayerSecondaryStat: value = expectedStatRecord.PlayerSecondaryStat; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.PlayerSecondaryStatMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.PlayerSecondaryStatMod; break; case ExpectedStatType.ArmorConstant: value = expectedStatRecord.ArmorConstant; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.ArmorConstantMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.ArmorConstantMod; break; @@ -1306,7 +1348,7 @@ namespace Game.DataStorage case ExpectedStatType.CreatureSpellDamage: value = expectedStatRecord.CreatureSpellDamage; if (!contentTuningMods.Empty()) - value *= contentTuningMods.Sum(expectedStatMod => expectedStatMod != null ? expectedStatMod.CreatureSpellDamageMod : 1.0f); + value *= contentTuningMods.Sum(expectedStatMod => ExpectedStatModReducer(1.0f, expectedStatMod, stat)); if (classMod != null) value *= classMod.CreatureSpellDamageMod; break; @@ -2275,7 +2317,7 @@ namespace Game.DataStorage MultiMap _curvePoints = new(); Dictionary, EmotesTextSoundRecord> _emoteTextSounds = new(); Dictionary, ExpectedStatRecord> _expectedStatsByLevel = new(); - MultiMap _expectedStatModsByContentTuning = new(); + MultiMap _expectedStatModsByContentTuning = new(); MultiMap _factionTeams = new(); MultiMap _friendshipRepReactions = new(); Dictionary _heirlooms = new(); diff --git a/Source/Game/DataStorage/Structs/A_Records.cs b/Source/Game/DataStorage/Structs/A_Records.cs index cfcc946fb..cfbb70cd1 100644 --- a/Source/Game/DataStorage/Structs/A_Records.cs +++ b/Source/Game/DataStorage/Structs/A_Records.cs @@ -329,9 +329,9 @@ namespace Game.DataStorage public sealed class AzeriteEssenceRecord { + public uint Id; public string Name; public string Description; - public uint Id; public int SpecSetID; } diff --git a/Source/Game/DataStorage/Structs/B_Records.cs b/Source/Game/DataStorage/Structs/B_Records.cs index c9dffff8e..30883d46a 100644 --- a/Source/Game/DataStorage/Structs/B_Records.cs +++ b/Source/Game/DataStorage/Structs/B_Records.cs @@ -34,9 +34,9 @@ namespace Game.DataStorage public sealed class BarberShopStyleRecord { + public uint Id; public string DisplayName; public string Description; - public uint Id; public byte Type; // value 0 . hair, value 2 . facialhair public float CostModifier; public byte Race; @@ -48,7 +48,7 @@ namespace Game.DataStorage { public uint Id; public float StateMultiplier; - public byte QualityEnum; + public sbyte QualityEnum; } public sealed class BattlePetBreedStateRecord @@ -67,7 +67,7 @@ namespace Game.DataStorage public uint CreatureID; public uint SummonSpellID; public int IconFileDataID; - public byte PetTypeEnum; + public sbyte PetTypeEnum; public ushort Flags; public sbyte SourceTypeEnum; public int CardUIModelSceneID; diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index d9cc059a6..cb705b9cb 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -41,10 +41,11 @@ namespace Game.DataStorage public sealed class CharacterLoadoutRecord { - public long RaceMask; public uint Id; + public long RaceMask; public sbyte ChrClassID; public sbyte Purpose; + public sbyte Unused910; public bool IsForNewCharacter() { return Purpose == 9; } } @@ -58,9 +59,9 @@ namespace Game.DataStorage public sealed class ChatChannelsRecord { - public LocalizedString Name; - public string Shortcut; public uint Id; + public LocalizedString Name; + public string Shortcut; public ChannelDBCFlags Flags; public sbyte FactionGroup; public int Ruleset; @@ -131,10 +132,9 @@ namespace Game.DataStorage public uint ChrCustomizationOptionID; public uint ChrCustomizationReqID; public ushort SortOrder; - public int SwatchColor1; - public int SwatchColor2; public ushort UiOrderIndex; public int Flags; + public int[] SwatchColor = new int[2]; } public sealed class ChrCustomizationDisplayInfoRecord @@ -212,6 +212,7 @@ namespace Game.DataStorage public float CustomizeFacing; public float CameraDistanceOffset; public float BarberShopCameraOffsetScale; + public float BarberShopCameraHeightOffsetScale; // applied after BarberShopCameraOffsetScale public float BarberShopCameraRotationOffset; } @@ -221,9 +222,10 @@ namespace Game.DataStorage public int ChrRacesID; public int ChrModelID; } - + public sealed class ChrRacesRecord { + public uint Id; public string ClientPrefix; public string ClientFileString; public LocalizedString Name; @@ -239,44 +241,45 @@ namespace Game.DataStorage public string NameFemaleL; public string NameLowercaseL; public string NameFemaleLowercaseL; - public uint Id; public int Flags; - public int BaseLanguage; + public int FactionID; + public uint CinematicSequenceID; public int ResSicknessSpellID; public int SplashSoundID; + public int Alliance; + public int RaceRelated; + public int UnalteredVisualRaceID; + public int DefaultClassID; public int CreateScreenFileDataID; public int SelectScreenFileDataID; + public int NeutralRaceID; public int LowResScreenFileDataID; - public uint[] AlteredFormStartVisualKitID = new uint[3]; - public uint[] AlteredFormFinishVisualKitID = new uint[3]; + public int[] AlteredFormStartVisualKitID = new int[3]; + public int[] AlteredFormFinishVisualKitID = new int[3]; public int HeritageArmorAchievementID; public int StartingLevel; public int UiDisplayOrder; + public int MaleModelFallbackRaceID; + public int FemaleModelFallbackRaceID; + public int MaleTextureFallbackRaceID; + public int FemaleTextureFallbackRaceID; public int PlayableRaceBit; public int HelmetAnimScalingRaceID; public int TransmogrifyDisabledSlotMask; + public int UnalteredVisualCustomizationRaceID; public float[] AlteredFormCustomizeOffsetFallback = new float[3]; public float AlteredFormCustomizeRotationFallback; - public ushort FactionID; - public ushort CinematicSequenceID; + public float[] Unknown910_1 = new float[3]; + public float[] Unknown910_2 = new float[3]; + public sbyte BaseLanguage; public sbyte CreatureType; - public sbyte Alliance; - public sbyte RaceRelated; - public sbyte UnalteredVisualRaceID; - public sbyte DefaultClassID; - public sbyte NeutralRaceID; - public sbyte MaleModelFallbackRaceID; public sbyte MaleModelFallbackSex; - public sbyte FemaleModelFallbackRaceID; public sbyte FemaleModelFallbackSex; - public sbyte MaleTextureFallbackRaceID; public sbyte MaleTextureFallbackSex; - public sbyte FemaleTextureFallbackRaceID; public sbyte FemaleTextureFallbackSex; - public sbyte UnalteredVisualCustomizationRaceID; public ChrRacesFlag GetFlags() { return (ChrRacesFlag)Flags; } -} + } public sealed class ChrSpecializationRecord { @@ -350,7 +353,8 @@ namespace Game.DataStorage { public uint Id; public int ExpectedStatModID; - public int MythicPlusSeasonID; + public int MinMythicPlusSeasonID; + public int MaxMythicPlusSeasonID; public uint ContentTuningID; } diff --git a/Source/Game/DataStorage/Structs/D_Records.cs b/Source/Game/DataStorage/Structs/D_Records.cs index 8a4b3ec67..22a922d7e 100644 --- a/Source/Game/DataStorage/Structs/D_Records.cs +++ b/Source/Game/DataStorage/Structs/D_Records.cs @@ -74,7 +74,7 @@ namespace Game.DataStorage public int CompleteWorldStateID; public sbyte Bit; public int CreatureDisplayID; - public byte Flags; + public int Flags; public int SpellIconFileID; public int Faction; } diff --git a/Source/Game/DataStorage/Structs/F_Records.cs b/Source/Game/DataStorage/Structs/F_Records.cs index fccb89095..110f41cc5 100644 --- a/Source/Game/DataStorage/Structs/F_Records.cs +++ b/Source/Game/DataStorage/Structs/F_Records.cs @@ -21,10 +21,10 @@ namespace Game.DataStorage { public sealed class FactionRecord { + public uint Id; public long[] ReputationRaceMask = new long[4]; public LocalizedString Name; public string Description; - public uint Id; public short ReputationIndex; public ushort ParentFactionID; public byte Expansion; diff --git a/Source/Game/DataStorage/Structs/G_Records.cs b/Source/Game/DataStorage/Structs/G_Records.cs index 042845aaf..e31f0afb7 100644 --- a/Source/Game/DataStorage/Structs/G_Records.cs +++ b/Source/Game/DataStorage/Structs/G_Records.cs @@ -59,9 +59,9 @@ namespace Game.DataStorage public sealed class GarrAbilityRecord { + public uint Id; public string Name; public string Description; - public uint Id; public byte GarrAbilityCategoryID; public byte GarrFollowerTypeID; public int IconFileDataID; @@ -109,10 +109,10 @@ namespace Game.DataStorage public sealed class GarrClassSpecRecord { + public uint Id; public string ClassSpec; public string ClassSpecMale; public string ClassSpecFemale; - public uint Id; public ushort UiTextureAtlasMemberID; public ushort GarrFollItemSetID; public byte FollowerClassLimit; @@ -121,10 +121,10 @@ namespace Game.DataStorage public sealed class GarrFollowerRecord { + public uint Id; public string HordeSourceText; public string AllianceSourceText; public string TitleName; - public uint Id; public byte GarrTypeID; public byte GarrFollowerTypeID; public int HordeCreatureID; diff --git a/Source/Game/DataStorage/Structs/I_Records.cs b/Source/Game/DataStorage/Structs/I_Records.cs index fc7d1f622..3abf39ef4 100644 --- a/Source/Game/DataStorage/Structs/I_Records.cs +++ b/Source/Game/DataStorage/Structs/I_Records.cs @@ -205,7 +205,6 @@ namespace Game.DataStorage public ushort SpellCategoryID; public int SpellID; public ushort ChrSpecializationID; - public uint ParentItemID; } public sealed class ItemExtendedCostRecord @@ -299,11 +298,11 @@ namespace Game.DataStorage public sealed class ItemSearchNameRecord { + public uint Id; public long AllowableRace; public string Display; - public uint Id; public byte OverallQualityID; - public byte ExpansionID; + public int ExpansionID; public ushort MinFactionID; public byte MinReputation; public int AllowableClass; @@ -343,7 +342,9 @@ namespace Game.DataStorage public string Display2; public string Display1; public LocalizedString Display; + public int ExpansionID; public float DmgVariance; + public uint InstanceBound; public uint DurationInInventory; public float QualityModifier; public uint BagFamily; @@ -370,7 +371,6 @@ namespace Game.DataStorage public ushort GemProperties; public ushort SocketMatchEnchantmentId; public ushort TotemCategoryID; - public ushort InstanceBound; public ushort[] ZoneBound = new ushort[2]; public ushort ItemSet; public ushort LockID; @@ -382,7 +382,6 @@ namespace Game.DataStorage public ushort RequiredSkill; public ushort ItemLevel; public short AllowableClass; - public byte ExpansionID; public byte ArtifactID; public byte SpellWeight; public byte SpellWeightCategory; @@ -427,4 +426,11 @@ namespace Game.DataStorage public ushort ItemBonusTreeID; public uint ItemID; } + + public sealed class ItemXItemEffectRecord + { + public uint Id; + public int ItemEffectID; + public uint ItemID; + } } diff --git a/Source/Game/DataStorage/Structs/L_Records.cs b/Source/Game/DataStorage/Structs/L_Records.cs index 84d3c8510..c2e87c8dd 100644 --- a/Source/Game/DataStorage/Structs/L_Records.cs +++ b/Source/Game/DataStorage/Structs/L_Records.cs @@ -29,8 +29,8 @@ namespace Game.DataStorage public sealed class LanguagesRecord { - public LocalizedString Name; public uint Id; + public LocalizedString Name; } public sealed class LFGDungeonsRecord diff --git a/Source/Game/DataStorage/Structs/M_Records.cs b/Source/Game/DataStorage/Structs/M_Records.cs index 3a9cc12cd..cdbbbf00c 100644 --- a/Source/Game/DataStorage/Structs/M_Records.cs +++ b/Source/Game/DataStorage/Structs/M_Records.cs @@ -30,7 +30,6 @@ namespace Game.DataStorage public uint Id; public string Directory; public LocalizedString MapName; - public string InternalName; public string MapDescription0; // Horde public string MapDescription1; // Alliance public string PvpShortDescription; @@ -134,7 +133,7 @@ namespace Game.DataStorage public uint Type; public uint Asset; public int SecondaryAsset; - public sbyte TertiaryAsset; + public int TertiaryAsset; } public sealed class MountRecord diff --git a/Source/Game/DataStorage/Structs/P_Records.cs b/Source/Game/DataStorage/Structs/P_Records.cs index 18af4cc72..9b85a6ddf 100644 --- a/Source/Game/DataStorage/Structs/P_Records.cs +++ b/Source/Game/DataStorage/Structs/P_Records.cs @@ -42,9 +42,9 @@ namespace Game.DataStorage public sealed class PlayerConditionRecord { + public uint Id; public long RaceMask; public string FailureDescription; - public uint Id; public int ClassMask; public uint SkillLogic; public int LanguageID; diff --git a/Source/Game/DataStorage/Structs/S_Records.cs b/Source/Game/DataStorage/Structs/S_Records.cs index d3be3b79d..d369edd68 100644 --- a/Source/Game/DataStorage/Structs/S_Records.cs +++ b/Source/Game/DataStorage/Structs/S_Records.cs @@ -289,6 +289,7 @@ namespace Game.DataStorage public float ResourceCoefficient; public float GroupSizeBasePointsCoefficient; public float EffectBasePoints; + public int ScalingClass; public int[] EffectMiscValue = new int[2]; public uint[] EffectRadiusIndex = new uint[2]; public FlagArray128 EffectSpellClassMask; @@ -323,9 +324,9 @@ namespace Game.DataStorage public sealed class SpellItemEnchantmentRecord { + public uint Id; public string Name; public string HordeName; - public uint Id; public uint[] EffectArg = new uint[ItemConst.MaxItemEnchantmentEffects]; public float[] EffectScalingPoints = new float[ItemConst.MaxItemEnchantmentEffects]; public uint IconFileDataID; @@ -485,7 +486,6 @@ namespace Game.DataStorage { public uint Id; public uint SpellID; - public int Class; public uint MinScalingLevel; public uint MaxScalingLevel; public ushort ScalesFromItemLevel; @@ -552,7 +552,7 @@ namespace Game.DataStorage public byte DifficultyID; public uint SpellVisualID; public float Probability; - public byte Priority; + public int Priority; public int SpellIconFileID; public int ActiveIconFileID; public ushort ViewerUnitConditionID; diff --git a/Source/Game/DataStorage/Structs/T_Records.cs b/Source/Game/DataStorage/Structs/T_Records.cs index c57e6d19a..6f9e48420 100644 --- a/Source/Game/DataStorage/Structs/T_Records.cs +++ b/Source/Game/DataStorage/Structs/T_Records.cs @@ -131,8 +131,8 @@ namespace Game.DataStorage public sealed class TransmogSetGroupRecord { - public string Name; public uint Id; + public string Name; } public sealed class TransmogSetItemRecord diff --git a/Source/Game/Entities/Item/ItemTemplate.cs b/Source/Game/Entities/Item/ItemTemplate.cs index a77205778..d7d2f519a 100644 --- a/Source/Game/Entities/Item/ItemTemplate.cs +++ b/Source/Game/Entities/Item/ItemTemplate.cs @@ -307,7 +307,7 @@ namespace Game.Entities public HolidayIds GetHolidayID() { return (HolidayIds)ExtendedData.RequiredHoliday; } public float GetDmgVariance() { return ExtendedData.DmgVariance; } public byte GetArtifactID() { return ExtendedData.ArtifactID; } - public byte GetRequiredExpansion() { return ExtendedData.ExpansionID; } + public byte GetRequiredExpansion() { return (byte)ExtendedData.ExpansionID; } public bool IsCurrencyToken() { return (GetBagFamily() & BagFamilyMask.CurrencyTokens) != 0; } diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index e0445166b..1ba657826 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -593,6 +593,11 @@ namespace Game.Entities return true; return false; }); + + TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModHealingTakenFromCaster, aurEff => + { + return aurEff.GetCasterGUID() == caster.GetGUID(); + }); } float heal = healamount * TakenTotalMod; diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 85d2b5b25..4595892ab 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -4549,13 +4549,15 @@ namespace Game } // Load item effects (spells) - foreach (var effectEntry in CliDB.ItemEffectStorage.Values) + foreach (var effectEntry in CliDB.ItemXItemEffectStorage.Values) { - var itemTemplate = ItemTemplateStorage.LookupByKey(effectEntry.ParentItemID); - if (itemTemplate == null) - continue; - - itemTemplate.Effects.Add(effectEntry); + var item = ItemTemplateStorage.LookupByKey(effectEntry.ItemID); + if (item != null) + { + var effect = CliDB.ItemEffectStorage.LookupByKey(effectEntry.ItemEffectID); + if (effect != null) + item.Effects.Add(effect); + } } Log.outInfo(LogFilter.ServerLoading, "Loaded {0} item templates in {1} ms", sparseCount, Time.GetMSTimeDiffToNow(oldMSTime)); diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index c851da968..b9a94711b 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -5689,6 +5689,20 @@ namespace Game.Spells Conversation.CreateConversation((uint)effectInfo.MiscValue, GetCaster(), unitTarget.GetPosition(), new List() { unitTarget.GetGUID() }, GetSpellInfo()); } + + [SpellEffectHandler(SpellEffectName.SendChatMessage)] + void EffectSendChatMessage(uint effIndex) + { + if (effectHandleMode != SpellEffectHandleMode.Hit) + return; + + uint broadcastTextId = (uint)effectInfo.MiscValue; + if (!CliDB.BroadcastTextStorage.ContainsKey(broadcastTextId)) + return; + + ChatMsg chatType = (ChatMsg)effectInfo.MiscValueB; + unitTarget.Talk(broadcastTextId, chatType, Global.CreatureTextMgr.GetRangeForChatType(chatType), unitTarget); + } } public class DispelableAura diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index d15b0cce8..14a48fded 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -83,7 +83,6 @@ namespace Game.Spells SpellScalingRecord _scaling = data.Scaling; if (_scaling != null) { - Scaling._Class = _scaling.Class; Scaling.MinScalingLevel = _scaling.MinScalingLevel; Scaling.MaxScalingLevel = _scaling.MaxScalingLevel; Scaling.ScalesFromItemLevel = _scaling.ScalesFromItemLevel; @@ -3750,7 +3749,6 @@ namespace Game.Spells public struct ScalingInfo { - public int _Class { get; set; } public uint MinScalingLevel; public uint MaxScalingLevel; public uint ScalesFromItemLevel; @@ -3785,6 +3783,7 @@ namespace Game.Spells TriggerSpell = effect.EffectTriggerSpell; SpellClassMask = effect.EffectSpellClassMask; BonusCoefficientFromAP = effect.BonusCoefficientFromAP; + Scaling.Class = effect.ScalingClass; Scaling.Coefficient = effect.Coefficient; Scaling.Variance = effect.Variance; Scaling.ResourceCoefficient = effect.ResourceCoefficient; @@ -3933,7 +3932,7 @@ namespace Game.Spells float tempValue = 0.0f; if (level > 0) { - if (_spellInfo.Scaling._Class == 0) + if (Scaling.Class == 0) return 0; uint effectiveItemLevel = itemLevel != -1 ? (uint)itemLevel : 1u; @@ -3942,21 +3941,21 @@ namespace Game.Spells if (_spellInfo.Scaling.ScalesFromItemLevel != 0) effectiveItemLevel = _spellInfo.Scaling.ScalesFromItemLevel; - if (_spellInfo.Scaling._Class == -8 || _spellInfo.Scaling._Class == -9) + if (Scaling.Class == -8 || Scaling.Class == -9) { RandPropPointsRecord randPropPoints = CliDB.RandPropPointsStorage.LookupByKey(effectiveItemLevel); if (randPropPoints == null) randPropPoints = CliDB.RandPropPointsStorage.LookupByKey(CliDB.RandPropPointsStorage.Count - 1); - tempValue = _spellInfo.Scaling._Class == -8 ? randPropPoints.DamageReplaceStatF : randPropPoints.DamageSecondaryF; + tempValue = Scaling.Class == -8 ? randPropPoints.DamageReplaceStatF : randPropPoints.DamageSecondaryF; } else tempValue = ItemEnchantmentManager.GetRandomPropertyPoints(effectiveItemLevel, ItemQuality.Rare, InventoryType.Chest, 0); } else - tempValue = CliDB.GetSpellScalingColumnForClass(CliDB.SpellScalingGameTable.GetRow(level), _spellInfo.Scaling._Class); + tempValue = CliDB.GetSpellScalingColumnForClass(CliDB.SpellScalingGameTable.GetRow(level), Scaling.Class); - if (_spellInfo.Scaling._Class == -7) + if (Scaling.Class == -7) { GtGenericMultByILvlRecord ratingMult = CliDB.CombatRatingsMultByILvlGameTable.GetRow(effectiveItemLevel); if (ratingMult != null) @@ -4503,6 +4502,8 @@ namespace Game.Spells new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 281 SPELL_EFFECT_LEARN_SOULBIND_CONDUIT new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 282 SPELL_EFFECT_CONVERT_ITEMS_TO_CURRENCY new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 283 SPELL_EFFECT_COMPLETE_CAMPAIGN + new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 284 SPELL_EFFECT_SEND_CHAT_MESSAGE + new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 285 SPELL_EFFECT_MODIFY_KEYSTONE_2 }; #region Fields @@ -4540,6 +4541,7 @@ namespace Game.Spells public struct ScalingInfo { + public int Class; public float Coefficient; public float Variance; public float ResourceCoefficient; diff --git a/Source/Game/Text/CreatureTextManager.cs b/Source/Game/Text/CreatureTextManager.cs index 45fea6ed9..bface75d3 100644 --- a/Source/Game/Text/CreatureTextManager.cs +++ b/Source/Game/Text/CreatureTextManager.cs @@ -237,7 +237,7 @@ namespace Game return textEntry.duration; } - float GetRangeForChatType(ChatMsg msgType) + public float GetRangeForChatType(ChatMsg msgType) { float dist = WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay); switch (msgType) diff --git a/sql/updates/hotfixes/master/2021_08_07_00_hotfixes.sql b/sql/updates/hotfixes/master/2021_08_07_00_hotfixes.sql new file mode 100644 index 000000000..2ed9cf3f3 --- /dev/null +++ b/sql/updates/hotfixes/master/2021_08_07_00_hotfixes.sql @@ -0,0 +1,104 @@ +ALTER TABLE `azerite_essence` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `barber_shop_style` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `battle_pet_breed_quality` MODIFY `QualityEnum` tinyint(11) NOT NULL DEFAULT '0' AFTER `StateMultiplier`; + +ALTER TABLE `battle_pet_species` MODIFY `PetTypeEnum` tinyint(11) NOT NULL DEFAULT '0' AFTER `IconFileDataID`; + +ALTER TABLE `character_loadout` ADD `Unused910` tinyint(11) NOT NULL DEFAULT '0' AFTER `Purpose`; +ALTER TABLE `character_loadout` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `chat_channels` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `chr_customization_choice` MODIFY `SwatchColor1` int(11) NOT NULL DEFAULT '0' AFTER `Flags`; +ALTER TABLE `chr_customization_choice` MODIFY `SwatchColor2` int(11) NOT NULL DEFAULT '0' AFTER `SwatchColor1`; + +ALTER TABLE `chr_model` ADD `BarberShopCameraHeightOffsetScale` float NOT NULL DEFAULT '0' AFTER `BarberShopCameraOffsetScale`; + +ALTER TABLE `chr_races` ADD `Unknown910_11` float NOT NULL DEFAULT '0' AFTER `AlteredFormCustomizeRotationFallback`; +ALTER TABLE `chr_races` ADD `Unknown910_12` float NOT NULL DEFAULT '0' AFTER `Unknown910_11`; +ALTER TABLE `chr_races` ADD `Unknown910_13` float NOT NULL DEFAULT '0' AFTER `Unknown910_12`; +ALTER TABLE `chr_races` ADD `Unknown910_21` float NOT NULL DEFAULT '0' AFTER `Unknown910_13`; +ALTER TABLE `chr_races` ADD `Unknown910_22` float NOT NULL DEFAULT '0' AFTER `Unknown910_21`; +ALTER TABLE `chr_races` ADD `Unknown910_23` float NOT NULL DEFAULT '0' AFTER `Unknown910_22`; +ALTER TABLE `chr_races` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; +ALTER TABLE `chr_races` MODIFY `FactionID` int(11) NOT NULL DEFAULT '0' AFTER `Flags`; +ALTER TABLE `chr_races` MODIFY `CinematicSequenceID` int(11) NOT NULL DEFAULT '0' AFTER `FactionID`; +ALTER TABLE `chr_races` MODIFY `Alliance` int(11) NOT NULL DEFAULT '0' AFTER `SplashSoundID`; +ALTER TABLE `chr_races` MODIFY `RaceRelated` int(11) NOT NULL DEFAULT '0' AFTER `Alliance`; +ALTER TABLE `chr_races` MODIFY `UnalteredVisualRaceID` int(11) NOT NULL DEFAULT '0' AFTER `RaceRelated`; +ALTER TABLE `chr_races` MODIFY `DefaultClassID` int(11) NOT NULL DEFAULT '0' AFTER `UnalteredVisualRaceID`; +ALTER TABLE `chr_races` MODIFY `NeutralRaceID` int(11) NOT NULL DEFAULT '0' AFTER `SelectScreenFileDataID`; +ALTER TABLE `chr_races` MODIFY `AlteredFormStartVisualKitID1` int(11) NOT NULL DEFAULT '0' AFTER `LowResScreenFileDataID`; +ALTER TABLE `chr_races` MODIFY `AlteredFormStartVisualKitID2` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormStartVisualKitID1`; +ALTER TABLE `chr_races` MODIFY `AlteredFormStartVisualKitID3` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormStartVisualKitID2`; +ALTER TABLE `chr_races` MODIFY `AlteredFormFinishVisualKitID1` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormStartVisualKitID3`; +ALTER TABLE `chr_races` MODIFY `AlteredFormFinishVisualKitID2` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormFinishVisualKitID1`; +ALTER TABLE `chr_races` MODIFY `AlteredFormFinishVisualKitID3` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormFinishVisualKitID2`; +ALTER TABLE `chr_races` MODIFY `MaleModelFallbackRaceID` int(11) NOT NULL DEFAULT '0' AFTER `UiDisplayOrder`; +ALTER TABLE `chr_races` MODIFY `FemaleModelFallbackRaceID` int(11) NOT NULL DEFAULT '0' AFTER `MaleModelFallbackRaceID`; +ALTER TABLE `chr_races` MODIFY `MaleTextureFallbackRaceID` int(11) NOT NULL DEFAULT '0' AFTER `FemaleModelFallbackRaceID`; +ALTER TABLE `chr_races` MODIFY `FemaleTextureFallbackRaceID` int(11) NOT NULL DEFAULT '0' AFTER `MaleTextureFallbackRaceID`; +ALTER TABLE `chr_races` MODIFY `PlayableRaceBit` int(11) NOT NULL DEFAULT '0' AFTER `FemaleTextureFallbackRaceID`; +ALTER TABLE `chr_races` MODIFY `UnalteredVisualCustomizationRaceID` int(11) NOT NULL DEFAULT '0' AFTER `TransmogrifyDisabledSlotMask`; +ALTER TABLE `chr_races` MODIFY `BaseLanguage` tinyint(11) NOT NULL DEFAULT '0' AFTER `Unknown910_23`; + +ALTER TABLE `content_tuning_x_expected` ADD `MinMythicPlusSeasonID` int(11) NOT NULL DEFAULT '0' AFTER `ExpectedStatModID`; +ALTER TABLE `content_tuning_x_expected` ADD `MaxMythicPlusSeasonID` int(11) NOT NULL DEFAULT '0' AFTER `MinMythicPlusSeasonID`; +ALTER TABLE `content_tuning_x_expected` DROP `MythicPlusSeasonID`; + +ALTER TABLE `dungeon_encounter` MODIFY `Flags` int(11) NOT NULL DEFAULT '0' AFTER `CreatureDisplayID`; + +ALTER TABLE `faction` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `garr_ability` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `garr_class_spec` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `garr_follower` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `item_effect` DROP `ParentItemID`; + +ALTER TABLE `item_search_name` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; +ALTER TABLE `item_search_name` MODIFY `ExpansionID` int(11) NOT NULL DEFAULT '0' AFTER `OverallQualityID`; + +ALTER TABLE `item_sparse` MODIFY `ExpansionID` int(11) NOT NULL DEFAULT '0' AFTER `Display`; +ALTER TABLE `item_sparse` MODIFY `InstanceBound` int(11) NOT NULL DEFAULT '0' AFTER `DmgVariance`; + +CREATE TABLE `item_x_item_effect` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ItemEffectID` int(11) NOT NULL DEFAULT '0', + `ItemID` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`, `VerifiedBuild`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +ALTER TABLE `languages` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `map` DROP `InternalName`; + +ALTER TABLE `modifier_tree` MODIFY `TertiaryAsset` int(11) NOT NULL DEFAULT '0' AFTER `SecondaryAsset`; + +ALTER TABLE `paragon_reputation` MODIFY `FactionID` int(11) NOT NULL DEFAULT '0' AFTER `ID`; + +ALTER TABLE `player_condition` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; + +ALTER TABLE `rand_prop_points` MODIFY `GoodF4` float NOT NULL DEFAULT '0' AFTER `GoodF3`; +ALTER TABLE `rand_prop_points` MODIFY `GoodF5` float NOT NULL DEFAULT '0' AFTER `GoodF4`; +ALTER TABLE `rand_prop_points` MODIFY `Epic1` int(10) unsigned NOT NULL DEFAULT '0' AFTER `GoodF5`; +ALTER TABLE `rand_prop_points` MODIFY `Epic2` int(10) unsigned NOT NULL DEFAULT '0' AFTER `Epic1`; +ALTER TABLE `rand_prop_points` MODIFY `Epic3` int(10) unsigned NOT NULL DEFAULT '0' AFTER `Epic2`; +ALTER TABLE `rand_prop_points` MODIFY `Epic4` int(10) unsigned NOT NULL DEFAULT '0' AFTER `Epic3`; +ALTER TABLE `rand_prop_points` MODIFY `Epic5` int(10) unsigned NOT NULL DEFAULT '0' AFTER `Epic4`; + +ALTER TABLE `spell_effect` ADD `ScalingClass` int(11) NOT NULL DEFAULT '0' AFTER `EffectBasePoints`; + +ALTER TABLE `spell_item_enchantment` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; +ALTER TABLE `spell_item_enchantment` MODIFY `TransmogCost` int(10) unsigned NOT NULL DEFAULT '0' AFTER `TransmogUseConditionID`; + +ALTER TABLE `spell_scaling` DROP `Class`; + +ALTER TABLE `spell_x_spell_visual` MODIFY `Priority` int(11) NOT NULL DEFAULT '0' AFTER `Probability`; + +ALTER TABLE `transmog_set_group` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' FIRST; diff --git a/sql/updates/world/master/2021_07_27_00_world.sql b/sql/updates/world/master/2021_07_27_00_world.sql new file mode 100644 index 000000000..7f8bd4134 --- /dev/null +++ b/sql/updates/world/master/2021_07_27_00_world.sql @@ -0,0 +1,6 @@ +ALTER TABLE `creature_template` ADD `CreatureDifficultyID` int(11) NOT NULL DEFAULT '0' AFTER `movementId`; +ALTER TABLE `creature_template_scaling` DROP `LevelScalingMin`, DROP `LevelScalingMax`; +ALTER TABLE `points_of_interest` ADD `PositionZ` float NOT NULL DEFAULT '0' AFTER `PositionY`; +ALTER TABLE `quest_template` ADD `PortraitGiverModelSceneID` int(11) NOT NULL DEFAULT '0' AFTER `PortraitGiverMount`; + +DELETE FROM `creature_template_scaling` WHERE `ContentTuningID`=0;