Core/Items: Implement new item bonus types

Port From (https://github.com/TrinityCore/TrinityCore/commit/3d9e21193dd9f7d5f38a7a8edb3d6f6f8daa1867)
This commit is contained in:
hondacrx
2019-11-27 11:22:20 -05:00
parent 713f1b1f06
commit 3ce916a82c
4 changed files with 19 additions and 5 deletions
+3 -1
View File
@@ -345,7 +345,9 @@ namespace Framework.Constants
RandomEnchantment = 15, // Responsible for showing "<Random additional stats>" or "+%d Rank Random Minor Trait" in the tooltip before item is obtained
Bounding = 16,
RelicType = 17,
OverrideRequiredLevel = 18
OverrideRequiredLevel = 18,
OverrideCanDisenchant = 21,
OverrideCanScrap = 22
}
public enum ItemContext : byte
+13 -3
View File
@@ -1957,6 +1957,9 @@ namespace Game.Entities
public ItemDisenchantLootRecord GetDisenchantLoot(Player owner)
{
if (!_bonusData.CanDisenchant)
return null;
return GetDisenchantLoot(GetTemplate(), (uint)GetQuality(), GetItemLevel(owner));
}
@@ -2834,9 +2837,10 @@ namespace Game.Entities
RepairCostMultiplier = 1.0f;
ScalingStatDistribution = proto.GetScalingStatDistribution();
RelicType = -1;
HasItemLevelBonus = false;
HasFixedLevel = false;
RequiredLevelOverride = 0;
CanDisenchant = !proto.GetFlags().HasAnyFlag(ItemFlags.NoDisenchant);
CanScrap = proto.GetFlags4().HasAnyFlag(ItemFlags4.Scrapable);
_state.AppearanceModPriority = int.MaxValue;
_state.ScalingStatDistributionPriority = int.MaxValue;
@@ -2865,7 +2869,6 @@ namespace Game.Entities
{
case ItemBonusType.ItemLevel:
ItemLevelBonus += values[0];
HasItemLevelBonus = true;
break;
case ItemBonusType.Stat:
{
@@ -2935,6 +2938,12 @@ namespace Game.Entities
case ItemBonusType.OverrideRequiredLevel:
RequiredLevelOverride = values[0];
break;
case ItemBonusType.OverrideCanDisenchant:
CanDisenchant = values[0] != 0;
break;
case ItemBonusType.OverrideCanScrap:
CanScrap = values[0] != 0;
break;
}
}
@@ -2956,7 +2965,8 @@ namespace Game.Entities
public ushort[] GemRelicRankBonus = new ushort[ItemConst.MaxGemSockets];
public int RelicType;
public int RequiredLevelOverride;
public bool HasItemLevelBonus;
public bool CanDisenchant;
public bool CanScrap;
public bool HasFixedLevel;
State _state;
+1 -1
View File
@@ -254,7 +254,7 @@ namespace Game.Entities
public ItemFlags GetFlags() { return (ItemFlags)ExtendedData.Flags[0]; }
public ItemFlags2 GetFlags2() { return (ItemFlags2)ExtendedData.Flags[1]; }
public ItemFlags3 GetFlags3() { return (ItemFlags3)ExtendedData.Flags[2]; }
public uint GetFlags4() { return ExtendedData.Flags[3]; }
public ItemFlags4 GetFlags4() { return (ItemFlags4)ExtendedData.Flags[3]; }
public float GetPriceRandomValue() { return ExtendedData.PriceRandomValue; }
public float GetPriceVariance() { return ExtendedData.PriceVariance; }
public uint GetBuyCount() { return Math.Max(ExtendedData.VendorStackCount, 1u); }
+2
View File
@@ -2673,6 +2673,8 @@ namespace Game.Groups
{
ItemInstance itemInstance = new ItemInstance(lootItemInSlot);
BonusData bonusData = new BonusData(itemInstance);
if (!bonusData.CanDisenchant)
return null;
ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(itemid);
uint itemLevel = Item.GetItemLevel(itemTemplate, bonusData, player.GetLevel(), 0, 0, 0, 0, false, 0);