Core/Items: Implement azerite empowered items

Port From (https://github.com/TrinityCore/TrinityCore/commit/d934824421c83598853487c5cc9e4cbb3c5d0006)
This commit is contained in:
hondacrx
2019-12-05 22:55:44 -05:00
parent 86e1065da0
commit 5b9ad41953
47 changed files with 1050 additions and 239 deletions
+69 -2
View File
@@ -50,11 +50,11 @@ namespace Game
if (previousMilestone == milestonePower)
break;
if (!azeriteItem.HasUnlockedEssenceMilestone(previousMilestone.ID))
if (!azeriteItem.HasUnlockedEssenceMilestone(previousMilestone.Id))
return;
}
azeriteItem.AddUnlockedEssenceMilestone(milestonePower.ID);
azeriteItem.AddUnlockedEssenceMilestone(milestonePower.Id);
_player.ApplyAzeriteItemMilestonePower(azeriteItem, milestonePower, true);
azeriteItem.SetState(ItemUpdateState.Changed, _player);
}
@@ -176,5 +176,72 @@ namespace Game
azeriteItem.SetState(ItemUpdateState.Changed, _player);
}
[WorldPacketHandler(ClientOpcodes.AzeriteEmpoweredItemViewed)]
void HandleAzeriteEmpoweredItemViewed(AzeriteEmpoweredItemViewed azeriteEmpoweredItemViewed)
{
Item item = _player.GetItemByGuid(azeriteEmpoweredItemViewed.ItemGUID);
if (item == null || !item.IsAzeriteEmpoweredItem())
return;
item.AddItemFlag(ItemFieldFlags.AzeriteEmpoweredItemViewed);
item.SetState(ItemUpdateState.Changed, _player);
}
[WorldPacketHandler(ClientOpcodes.AzeriteEmpoweredItemSelectPower)]
void HandleAzeriteEmpoweredItemSelectPower(AzeriteEmpoweredItemSelectPower azeriteEmpoweredItemSelectPower)
{
Item item = _player.GetItemByPos(azeriteEmpoweredItemSelectPower.ContainerSlot, azeriteEmpoweredItemSelectPower.Slot);
if (item == null)
return;
AzeritePowerRecord azeritePower = CliDB.AzeritePowerStorage.LookupByKey(azeriteEmpoweredItemSelectPower.AzeritePowerID);
if (azeritePower == null)
return;
AzeriteEmpoweredItem azeriteEmpoweredItem = item.ToAzeriteEmpoweredItem();
if (azeriteEmpoweredItem == null)
return;
// Validate tier
int actualTier = azeriteEmpoweredItem.GetTierForAzeritePower(_player.GetClass(), azeriteEmpoweredItemSelectPower.AzeritePowerID);
if (azeriteEmpoweredItemSelectPower.Tier > SharedConst.MaxAzeriteEmpoweredTier || azeriteEmpoweredItemSelectPower.Tier != actualTier)
return;
uint azeriteLevel = 0;
Item heartOfAzeroth = _player.GetItemByEntry(PlayerConst.ItemIdHeartOfAzeroth, ItemSearchLocation.Everywhere);
if (heartOfAzeroth == null)
return;
AzeriteItem azeriteItem = heartOfAzeroth.ToAzeriteItem();
if (azeriteItem != null)
azeriteLevel = azeriteItem.GetEffectiveLevel();
// Check required heart of azeroth level
if (azeriteLevel < azeriteEmpoweredItem.GetRequiredAzeriteLevelForTier((uint)actualTier))
return;
// tiers are ordered backwards, you first select the highest one
for (int i = actualTier + 1; i < azeriteEmpoweredItem.GetMaxAzeritePowerTier(); ++i)
if (azeriteEmpoweredItem.GetSelectedAzeritePower(i) == 0)
return;
bool activateAzeritePower = azeriteEmpoweredItem.IsEquipped() && heartOfAzeroth.IsEquipped();
if (azeritePower.ItemBonusListID != 0 && activateAzeritePower)
_player._ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem.GetSlot(), false);
azeriteEmpoweredItem.SetSelectedAzeritePower(actualTier, azeriteEmpoweredItemSelectPower.AzeritePowerID);
if (activateAzeritePower)
{
// apply all item mods when azerite power grants a bonus, item level changes and that affects stats and auras that scale with item level
if (azeritePower.ItemBonusListID != 0)
_player._ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem.GetSlot(), true);
else
_player.ApplyAzeritePower(azeriteEmpoweredItem, azeritePower, true);
}
azeriteEmpoweredItem.SetState(ItemUpdateState.Changed, _player);
}
}
}
+11 -6
View File
@@ -2461,15 +2461,19 @@ namespace Game
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_INSTANCE_AZERITE);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.LoadAzerite, stmt);
SetQuery(PlayerLoginQueryLoad.Azerite, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.LoadAzeriteMilestonePowers, stmt);
SetQuery(PlayerLoginQueryLoad.AzeriteMilestonePowers, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.LoadAzeriteUnlockedEssences, stmt);
SetQuery(PlayerLoginQueryLoad.AzeriteUnlockedEssences, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_INSTANCE_AZERITE_EMPOWERED);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.AzeriteEmpowered, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHAR_VOID_STORAGE);
stmt.AddValue(0, lowGuid);
@@ -2633,9 +2637,10 @@ namespace Game
Reputation,
Inventory,
Artifacts,
LoadAzerite,
LoadAzeriteMilestonePowers,
LoadAzeriteUnlockedEssences,
Azerite,
AzeriteMilestonePowers,
AzeriteUnlockedEssences,
AzeriteEmpowered,
Actions,
MailCount,
MailDate,
+3 -3
View File
@@ -29,15 +29,15 @@ namespace Game
switch (collectionItemSetFavorite.Type)
{
case CollectionType.Toybox:
GetCollectionMgr().ToySetFavorite(collectionItemSetFavorite.ID, collectionItemSetFavorite.IsFavorite);
GetCollectionMgr().ToySetFavorite(collectionItemSetFavorite.Id, collectionItemSetFavorite.IsFavorite);
break;
case CollectionType.Appearance:
{
var pair = GetCollectionMgr().HasItemAppearance(collectionItemSetFavorite.ID);
var pair = GetCollectionMgr().HasItemAppearance(collectionItemSetFavorite.Id);
if (!pair.Item1 || pair.Item2)
return;
GetCollectionMgr().SetAppearanceIsFavorite(collectionItemSetFavorite.ID, collectionItemSetFavorite.IsFavorite);
GetCollectionMgr().SetAppearanceIsFavorite(collectionItemSetFavorite.Id, collectionItemSetFavorite.IsFavorite);
break;
}
case CollectionType.TransmogSet:
+1 -1
View File
@@ -180,7 +180,7 @@ namespace Game
break;
QueryPageTextResponse.PageTextInfo page;
page.ID = pageID;
page.Id = pageID;
page.NextPageID = pageText.NextPageID;
page.Text = pageText.Text;
page.PlayerConditionID = pageText.PlayerConditionID;