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 Port From (https://github.com/TrinityCore/TrinityCore/commit/0fb8765a6638fd947b59fce44d5c31251d0cdadd)
This commit is contained in:
@@ -337,7 +337,7 @@ namespace Game.Entities
|
||||
public override float GetBlockPercent(uint attackerLevel)
|
||||
{
|
||||
float blockArmor = (float)m_activePlayerData.ShieldBlock;
|
||||
float armorConstant = Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.ArmorConstant, attackerLevel, -2, 0, Class.None);
|
||||
float armorConstant = Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.ArmorConstant, attackerLevel, -2, 0, Class.None, 0);
|
||||
|
||||
if ((blockArmor + armorConstant) == 0)
|
||||
return 0;
|
||||
|
||||
@@ -1209,8 +1209,6 @@ namespace Game.Entities
|
||||
{
|
||||
Log.outDebug(LogFilter.Player, "STORAGE: Creating initial item, itemId = {0}, count = {1}", itemId, amount);
|
||||
|
||||
var bonusListIDs = Global.DB2Mgr.GetDefaultItemBonusTree(itemId, context);
|
||||
|
||||
InventoryResult msg;
|
||||
// attempt equip by one
|
||||
while (amount > 0)
|
||||
@@ -1219,8 +1217,7 @@ namespace Game.Entities
|
||||
if (msg != InventoryResult.Ok)
|
||||
break;
|
||||
|
||||
Item item = EquipNewItem(eDest, itemId, context, true);
|
||||
item.SetBonuses(bonusListIDs);
|
||||
EquipNewItem(eDest, itemId, context, true);
|
||||
AutoUnequipOffhandIfNeed();
|
||||
--amount;
|
||||
}
|
||||
@@ -1234,7 +1231,7 @@ namespace Game.Entities
|
||||
msg = CanStoreNewItem(InventorySlots.Bag0, ItemConst.NullSlot, sDest, itemId, amount);
|
||||
if (msg == InventoryResult.Ok)
|
||||
{
|
||||
StoreNewItem(sDest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId), null, context, bonusListIDs);
|
||||
StoreNewItem(sDest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId), null, context);
|
||||
return true; // stored
|
||||
}
|
||||
|
||||
@@ -1242,18 +1239,20 @@ namespace Game.Entities
|
||||
Log.outError(LogFilter.Player, "STORAGE: Can't equip or store initial item {0} for race {1} class {2}, error msg = {3}", itemId, GetRace(), GetClass(), msg);
|
||||
return false;
|
||||
}
|
||||
|
||||
public Item StoreNewItem(List<ItemPosCount> pos, uint itemId, bool update, uint randomBonusListId = 0, List<ObjectGuid> allowedLooters = null, ItemContext context = 0, List<uint> bonusListIDs = null, bool addToCollection = true)
|
||||
{
|
||||
uint count = 0;
|
||||
foreach (var itemPosCount in pos)
|
||||
count += itemPosCount.count;
|
||||
|
||||
Item item = Item.CreateItem(itemId, count, context, this);
|
||||
Item item = Item.CreateItem(itemId, count, context, this, bonusListIDs == null);
|
||||
if (item != null)
|
||||
{
|
||||
item.SetItemFlag(ItemFieldFlags.NewItem);
|
||||
|
||||
item.SetBonuses(bonusListIDs);
|
||||
if (bonusListIDs != null)
|
||||
item.SetBonuses(bonusListIDs);
|
||||
|
||||
item = StoreItem(pos, item, update);
|
||||
|
||||
@@ -6090,7 +6089,7 @@ namespace Game.Entities
|
||||
InventoryResult msg = CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, item.itemid, item.count);
|
||||
if (msg == InventoryResult.Ok)
|
||||
{
|
||||
Item newitem = StoreNewItem(dest, item.itemid, true, item.randomBonusListId, item.GetAllowedLooters(), item.context, item.BonusListIDs);
|
||||
Item newitem = StoreNewItem(dest, item.itemid, true, item.randomBonusListId, item.GetAllowedLooters(), item.context);
|
||||
if (ffaItem != null)
|
||||
{
|
||||
//freeforall case, notify only one player of the removal
|
||||
|
||||
@@ -922,7 +922,7 @@ namespace Game.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
public void RewardQuestPackage(uint questPackageId, uint onlyItemId = 0)
|
||||
public void RewardQuestPackage(uint questPackageId, ItemContext context, uint onlyItemId = 0)
|
||||
{
|
||||
bool hasFilteredQuestPackageReward = false;
|
||||
var questPackageItems = Global.DB2Mgr.GetQuestPackageItems(questPackageId);
|
||||
@@ -939,7 +939,7 @@ namespace Game.Entities
|
||||
List<ItemPosCount> dest = new();
|
||||
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, questPackageItem.ItemID, questPackageItem.ItemQuantity) == InventoryResult.Ok)
|
||||
{
|
||||
Item item = StoreNewItem(dest, questPackageItem.ItemID, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(questPackageItem.ItemID));
|
||||
Item item = StoreNewItem(dest, questPackageItem.ItemID, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(questPackageItem.ItemID), null, context);
|
||||
SendNewItem(item, questPackageItem.ItemQuantity, true, false);
|
||||
}
|
||||
}
|
||||
@@ -959,7 +959,7 @@ namespace Game.Entities
|
||||
List<ItemPosCount> dest = new();
|
||||
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, questPackageItem.ItemID, questPackageItem.ItemQuantity) == InventoryResult.Ok)
|
||||
{
|
||||
Item item = StoreNewItem(dest, questPackageItem.ItemID, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(questPackageItem.ItemID));
|
||||
Item item = StoreNewItem(dest, questPackageItem.ItemID, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(questPackageItem.ItemID), null, context);
|
||||
SendNewItem(item, questPackageItem.ItemQuantity, true, false);
|
||||
}
|
||||
}
|
||||
@@ -1020,7 +1020,7 @@ namespace Game.Entities
|
||||
List<ItemPosCount> dest = new();
|
||||
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, itemId, quest.RewardItemCount[i]) == InventoryResult.Ok)
|
||||
{
|
||||
Item item = StoreNewItem(dest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId));
|
||||
Item item = StoreNewItem(dest, itemId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(itemId), null, ItemContext.QuestReward);
|
||||
SendNewItem(item, quest.RewardItemCount[i], true, false);
|
||||
}
|
||||
else if (quest.IsDFQuest())
|
||||
@@ -1035,8 +1035,8 @@ namespace Game.Entities
|
||||
{
|
||||
if (quest.IsWorldQuest())
|
||||
currencyGainSource = CurrencyGainSource.WorldQuestRewardIgnoreCaps;
|
||||
|
||||
currencyGainSource = CurrencyGainSource.QuestRewardIgnoreCaps;
|
||||
else
|
||||
currencyGainSource = CurrencyGainSource.QuestRewardIgnoreCaps;
|
||||
}
|
||||
else if (quest.IsDaily())
|
||||
currencyGainSource = CurrencyGainSource.DailyQuestReward;
|
||||
@@ -1058,7 +1058,7 @@ namespace Game.Entities
|
||||
List<ItemPosCount> dest = new();
|
||||
if (CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, rewardId, quest.RewardChoiceItemCount[i]) == InventoryResult.Ok)
|
||||
{
|
||||
Item item = StoreNewItem(dest, rewardId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(rewardId));
|
||||
Item item = StoreNewItem(dest, rewardId, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(rewardId), null, ItemContext.QuestReward);
|
||||
SendNewItem(item, quest.RewardChoiceItemCount[i], true, false);
|
||||
}
|
||||
}
|
||||
@@ -1068,7 +1068,7 @@ namespace Game.Entities
|
||||
|
||||
// QuestPackageItem.db2
|
||||
if (rewardProto != null && quest.PackageID != 0)
|
||||
RewardQuestPackage(quest.PackageID, rewardId);
|
||||
RewardQuestPackage(quest.PackageID, ItemContext.QuestReward, rewardId);
|
||||
break;
|
||||
case LootItemType.Currency:
|
||||
if (CliDB.CurrencyTypesStorage.HasRecord(rewardId) && quest.GetRewChoiceItemsCount() != 0)
|
||||
|
||||
Reference in New Issue
Block a user