Core/Items: Item bonus generation improvements

* Pass ItemContext to item creation wherever possible
* Support scaling item levels with m+ keystone levels (not used currently)
* Fixed item link validation when client sends it as default uninitialized bonus list with context only
* Support scaling items depending on current active season (seasons not implemented)
* Implemented content tuning redirection
This commit is contained in:
Shauren
2023-06-17 16:29:59 +02:00
parent a97cdfc8f5
commit 0fb8765a66
37 changed files with 1168 additions and 380 deletions

View File

@@ -293,6 +293,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CFG_REGIONS, "SELECT MAX(ID) + 1 FROM cfg_regions", CONNECTION_SYNCH);
// ChallengeModeItemBonusOverride.db2
PrepareStatement(HOTFIX_SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE, "SELECT ID, ItemBonusTreeGroupID, DstItemBonusTreeID, Type, Value, "
"MythicPlusSeasonID, PvPSeasonID, SrcItemBonusTreeID FROM challenge_mode_item_bonus_override WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE, "SELECT MAX(ID) + 1 FROM challenge_mode_item_bonus_override", CONNECTION_SYNCH);
// CharTitles.db2
PrepareStatement(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name, Name1, MaskID, Flags FROM char_titles WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAR_TITLES, "SELECT MAX(ID) + 1 FROM char_titles", CONNECTION_SYNCH);
@@ -427,6 +432,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" FROM cinematic_sequences WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CINEMATIC_SEQUENCES, "SELECT MAX(ID) + 1 FROM cinematic_sequences", CONNECTION_SYNCH);
// ConditionalContentTuning.db2
PrepareStatement(HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, ParentContentTuningID"
" FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING, "SELECT MAX(ID) + 1 FROM conditional_content_tuning", CONNECTION_SYNCH);
// ContentTuning.db2
PrepareStatement(HOTFIX_SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, "
"TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
@@ -437,6 +447,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
"ContentTuningID FROM content_tuning_x_expected WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED, "SELECT MAX(ID) + 1 FROM content_tuning_x_expected", CONNECTION_SYNCH);
// ContentTuningXLabel.db2
PrepareStatement(HOTFIX_SEL_CONTENT_TUNING_X_LABEL, "SELECT ID, LabelID, ContentTuningID FROM content_tuning_x_label"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING_X_LABEL, "SELECT MAX(ID) + 1 FROM content_tuning_x_label", CONNECTION_SYNCH);
// ConversationLine.db2
PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, "
"AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
@@ -821,14 +836,23 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS, "SELECT MAX(ID) + 1 FROM item_bonus", CONNECTION_SYNCH);
// ItemBonusListGroupEntry.db2
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_GROUP_ENTRY, "SELECT ID, ItemBonusListGroupID, ItemBonusListID, ItemLevelSelectorID, SequenceValue, "
"ItemExtendedCostID, PlayerConditionID, Flags, ItemLogicalCostGroupID FROM item_bonus_list_group_entry WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_LIST_GROUP_ENTRY, "SELECT MAX(ID) + 1 FROM item_bonus_list_group_entry", CONNECTION_SYNCH);
// ItemBonusListLevelDelta.db2
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT ItemLevelDelta, ID FROM item_bonus_list_level_delta"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT MAX(ID) + 1 FROM item_bonus_list_level_delta", CONNECTION_SYNCH);
// ItemBonusTree.db2
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE, "SELECT ID, Flags, InventoryTypeSlotMask FROM item_bonus_tree WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE, "SELECT MAX(ID) + 1 FROM item_bonus_tree", CONNECTION_SYNCH);
// ItemBonusTreeNode.db2
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ItemContext, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, "
"ChildItemBonusListGroupID, IblGroupPointsModSetID, Unknown1010_1, Unknown1010_2, ParentItemBonusTreeID FROM item_bonus_tree_node"
"ChildItemBonusListGroupID, IblGroupPointsModSetID, MinMythicPlusLevel, MaxMythicPlusLevel, ParentItemBonusTreeID FROM item_bonus_tree_node"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT MAX(ID) + 1 FROM item_bonus_tree_node", CONNECTION_SYNCH);
@@ -842,6 +866,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT MAX(ID) + 1 FROM item_class", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName_lang FROM item_class_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
// ItemContextPickerEntry.db2
PrepareStatement(HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY, "SELECT ID, ItemCreationContext, OrderIndex, PVal, LabelID, Flags, PlayerConditionID, "
"ItemContextPickerID FROM item_context_picker_entry WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY, "SELECT MAX(ID) + 1 FROM item_context_picker_entry", CONNECTION_SYNCH);
// ItemCurrencyCost.db2
PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT MAX(ID) + 1 FROM item_currency_cost", CONNECTION_SYNCH);
@@ -1140,6 +1169,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOVIE, "SELECT MAX(ID) + 1 FROM movie", CONNECTION_SYNCH);
// MythicPlusSeason.db2
PrepareStatement(HOTFIX_SEL_MYTHIC_PLUS_SEASON, "SELECT ID, MilestoneSeason, ExpansionLevel, HeroicLFGDungeonMinGear FROM mythic_plus_season"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_MYTHIC_PLUS_SEASON, "SELECT MAX(ID) + 1 FROM mythic_plus_season", CONNECTION_SYNCH);
// NameGen.db2
PrepareStatement(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name, RaceID, Sex FROM name_gen WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_NAME_GEN, "SELECT MAX(ID) + 1 FROM name_gen", CONNECTION_SYNCH);
@@ -1228,6 +1262,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelDelta FROM pvp_item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_ITEM, "SELECT MAX(ID) + 1 FROM pvp_item", CONNECTION_SYNCH);
// PvpSeason.db2
PrepareStatement(HOTFIX_SEL_PVP_SEASON, "SELECT ID, MilestoneSeason, AllianceAchievementID, HordeAchievementID FROM pvp_season"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_SEASON, "SELECT MAX(ID) + 1 FROM pvp_season", CONNECTION_SYNCH);
// PvpTalent.db2
PrepareStatement(HOTFIX_SEL_PVP_TALENT, "SELECT Description, ID, SpecID, SpellID, OverridesSpellID, Flags, ActionBarSpellID, PvpTalentCategoryID, "
"LevelRequired, PlayerConditionID FROM pvp_talent WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);

View File

@@ -185,6 +185,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_CFG_REGIONS,
HOTFIX_SEL_CFG_REGIONS_MAX_ID,
HOTFIX_SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE,
HOTFIX_SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE_MAX_ID,
HOTFIX_SEL_CHAR_TITLES,
HOTFIX_SEL_CHAR_TITLES_MAX_ID,
HOTFIX_SEL_CHAR_TITLES_LOCALE,
@@ -250,12 +253,18 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_CINEMATIC_SEQUENCES,
HOTFIX_SEL_CINEMATIC_SEQUENCES_MAX_ID,
HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING,
HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING_MAX_ID,
HOTFIX_SEL_CONTENT_TUNING,
HOTFIX_SEL_CONTENT_TUNING_MAX_ID,
HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED,
HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED_MAX_ID,
HOTFIX_SEL_CONTENT_TUNING_X_LABEL,
HOTFIX_SEL_CONTENT_TUNING_X_LABEL_MAX_ID,
HOTFIX_SEL_CONVERSATION_LINE,
HOTFIX_SEL_CONVERSATION_LINE_MAX_ID,
@@ -473,9 +482,15 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_ITEM_BONUS,
HOTFIX_SEL_ITEM_BONUS_MAX_ID,
HOTFIX_SEL_ITEM_BONUS_LIST_GROUP_ENTRY,
HOTFIX_SEL_ITEM_BONUS_LIST_GROUP_ENTRY_MAX_ID,
HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA,
HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA_MAX_ID,
HOTFIX_SEL_ITEM_BONUS_TREE,
HOTFIX_SEL_ITEM_BONUS_TREE_MAX_ID,
HOTFIX_SEL_ITEM_BONUS_TREE_NODE,
HOTFIX_SEL_ITEM_BONUS_TREE_NODE_MAX_ID,
@@ -486,6 +501,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_ITEM_CLASS_MAX_ID,
HOTFIX_SEL_ITEM_CLASS_LOCALE,
HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY,
HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY_MAX_ID,
HOTFIX_SEL_ITEM_CURRENCY_COST,
HOTFIX_SEL_ITEM_CURRENCY_COST_MAX_ID,
@@ -654,6 +672,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_MOVIE,
HOTFIX_SEL_MOVIE_MAX_ID,
HOTFIX_SEL_MYTHIC_PLUS_SEASON,
HOTFIX_SEL_MYTHIC_PLUS_SEASON_MAX_ID,
HOTFIX_SEL_NAME_GEN,
HOTFIX_SEL_NAME_GEN_MAX_ID,
@@ -701,6 +722,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_PVP_ITEM,
HOTFIX_SEL_PVP_ITEM_MAX_ID,
HOTFIX_SEL_PVP_SEASON,
HOTFIX_SEL_PVP_SEASON_MAX_ID,
HOTFIX_SEL_PVP_TALENT,
HOTFIX_SEL_PVP_TALENT_MAX_ID,
HOTFIX_SEL_PVP_TALENT_LOCALE,