Core/Players: Defined all avg item level slots
Port From (https://github.com/TrinityCore/TrinityCore/commit/3f85fa7470789dbaedac5f3d74d00e1095e24ad1)
This commit is contained in:
@@ -793,6 +793,16 @@ namespace Framework.Constants
|
|||||||
CorruptedLoot = 19
|
CorruptedLoot = 19
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum AvgItemLevelCategory
|
||||||
|
{
|
||||||
|
Base = 0,
|
||||||
|
EquippedBase = 1,
|
||||||
|
EquippedEffective = 2,
|
||||||
|
Pvp = 3,
|
||||||
|
PvpWeighted = 4,
|
||||||
|
EquippedEffectiveWeighted = 5
|
||||||
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum CurrencyDbFlags
|
public enum CurrencyDbFlags
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2915,11 +2915,11 @@ namespace Game.Entities
|
|||||||
int scalingLevelMax = m_unitData.ScalingLevelMax;
|
int scalingLevelMax = m_unitData.ScalingLevelMax;
|
||||||
int scalingLevelDelta = m_unitData.ScalingLevelDelta;
|
int scalingLevelDelta = m_unitData.ScalingLevelDelta;
|
||||||
int scalingFactionGroup = m_unitData.ScalingFactionGroup;
|
int scalingFactionGroup = m_unitData.ScalingFactionGroup;
|
||||||
int targetLevel = unitTarget.m_unitData.EffectiveLevel;
|
uint targetLevel = unitTarget.m_unitData.EffectiveLevel;
|
||||||
if (targetLevel == 0)
|
if (targetLevel == 0)
|
||||||
targetLevel = (int)unitTarget.GetLevel();
|
targetLevel = unitTarget.GetLevel();
|
||||||
|
|
||||||
int targetLevelDelta = 0;
|
uint targetLevelDelta = 0;
|
||||||
|
|
||||||
Player playerTarget = target.ToPlayer();
|
Player playerTarget = target.ToPlayer();
|
||||||
if (playerTarget != null)
|
if (playerTarget != null)
|
||||||
@@ -2928,10 +2928,10 @@ namespace Game.Entities
|
|||||||
scalingLevelMin = scalingLevelMax;
|
scalingLevelMin = scalingLevelMax;
|
||||||
|
|
||||||
int maxCreatureScalingLevel = playerTarget.m_activePlayerData.MaxCreatureScalingLevel;
|
int maxCreatureScalingLevel = playerTarget.m_activePlayerData.MaxCreatureScalingLevel;
|
||||||
targetLevelDelta = Math.Min(maxCreatureScalingLevel > 0 ? maxCreatureScalingLevel - targetLevel : 0, playerTarget.m_activePlayerData.ScalingPlayerLevelDelta);
|
targetLevelDelta = (uint)Math.Min(maxCreatureScalingLevel > 0 ? maxCreatureScalingLevel - targetLevel : 0, playerTarget.m_activePlayerData.ScalingPlayerLevelDelta);
|
||||||
}
|
}
|
||||||
|
|
||||||
int levelWithDelta = targetLevel + targetLevelDelta;
|
int levelWithDelta = (int)(targetLevel + targetLevelDelta);
|
||||||
int level = MathFunctions.RoundToInterval(ref levelWithDelta, scalingLevelMin, scalingLevelMax) + scalingLevelDelta;
|
int level = MathFunctions.RoundToInterval(ref levelWithDelta, scalingLevelMin, scalingLevelMax) + scalingLevelDelta;
|
||||||
return (uint)MathFunctions.RoundToInterval(ref level, 1, SharedConst.MaxLevel + 3);
|
return (uint)MathFunctions.RoundToInterval(ref level, 1, SharedConst.MaxLevel + 3);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1791,8 +1791,8 @@ namespace Game.Entities
|
|||||||
ItemTemplate itemTemplate = GetTemplate();
|
ItemTemplate itemTemplate = GetTemplate();
|
||||||
uint minItemLevel = owner.m_unitData.MinItemLevel;
|
uint minItemLevel = owner.m_unitData.MinItemLevel;
|
||||||
uint minItemLevelCutoff = owner.m_unitData.MinItemLevelCutoff;
|
uint minItemLevelCutoff = owner.m_unitData.MinItemLevelCutoff;
|
||||||
uint maxItemLevel = itemTemplate.HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel;
|
|
||||||
bool pvpBonus = owner.IsUsingPvpItemLevels();
|
bool pvpBonus = owner.IsUsingPvpItemLevels();
|
||||||
|
uint maxItemLevel = pvpBonus && itemTemplate.HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel;
|
||||||
|
|
||||||
uint azeriteLevel = 0;
|
uint azeriteLevel = 0;
|
||||||
AzeriteItem azeriteItem = ToAzeriteItem();
|
AzeriteItem azeriteItem = ToAzeriteItem();
|
||||||
|
|||||||
@@ -1165,7 +1165,7 @@ namespace Game.Entities
|
|||||||
public UpdateField<ulong> Health = new(0, 31);
|
public UpdateField<ulong> Health = new(0, 31);
|
||||||
public UpdateField<ulong> MaxHealth = new(32, 33);
|
public UpdateField<ulong> MaxHealth = new(32, 33);
|
||||||
public UpdateField<uint> Level = new(32, 34);
|
public UpdateField<uint> Level = new(32, 34);
|
||||||
public UpdateField<int> EffectiveLevel = new(32, 35);
|
public UpdateField<uint> EffectiveLevel = new(32, 35);
|
||||||
public UpdateField<uint> ContentTuningID = new(32, 36);
|
public UpdateField<uint> ContentTuningID = new(32, 36);
|
||||||
public UpdateField<int> ScalingLevelMin = new(32, 37);
|
public UpdateField<int> ScalingLevelMin = new(32, 37);
|
||||||
public UpdateField<int> ScalingLevelMax = new(32, 38);
|
public UpdateField<int> ScalingLevelMax = new(32, 38);
|
||||||
@@ -1325,7 +1325,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
data.WriteUInt64(MaxHealth);
|
data.WriteUInt64(MaxHealth);
|
||||||
data.WriteUInt32(Level);
|
data.WriteUInt32(Level);
|
||||||
data.WriteInt32(EffectiveLevel);
|
data.WriteUInt32(EffectiveLevel);
|
||||||
data.WriteUInt32(ContentTuningID);
|
data.WriteUInt32(ContentTuningID);
|
||||||
data.WriteInt32(ScalingLevelMin);
|
data.WriteInt32(ScalingLevelMin);
|
||||||
data.WriteInt32(ScalingLevelMax);
|
data.WriteInt32(ScalingLevelMax);
|
||||||
@@ -1691,7 +1691,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
if (changesMask[35])
|
if (changesMask[35])
|
||||||
{
|
{
|
||||||
data.WriteInt32(EffectiveLevel);
|
data.WriteUInt32(EffectiveLevel);
|
||||||
}
|
}
|
||||||
if (changesMask[36])
|
if (changesMask[36])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6551,7 +6551,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void UpdateAverageItemLevelTotal()
|
public void UpdateAverageItemLevelTotal()
|
||||||
{
|
{
|
||||||
(InventoryType inventoryType, uint itemLevel, ObjectGuid guid)[] bestItemLevels = new (InventoryType inventoryType, uint itemLevel, ObjectGuid guid)[EquipmentSlot.End];
|
var bestItemLevels = new (InventoryType inventoryType, uint itemLevel, ObjectGuid guid)[EquipmentSlot.End];
|
||||||
float sum = 0;
|
float sum = 0;
|
||||||
|
|
||||||
ForEachItem(ItemSearchLocation.Everywhere, item =>
|
ForEachItem(ItemSearchLocation.Everywhere, item =>
|
||||||
@@ -6602,26 +6602,40 @@ namespace Game.Entities
|
|||||||
sum += mainHand.itemLevel;
|
sum += mainHand.itemLevel;
|
||||||
|
|
||||||
sum /= 16.0f;
|
sum /= 16.0f;
|
||||||
SetAverageItemLevelTotal(sum);
|
SetAverageItemLevel(sum, AvgItemLevelCategory.Base);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAverageItemLevelEquipped()
|
public void UpdateAverageItemLevelEquipped()
|
||||||
{
|
{
|
||||||
float totalItemLevel = 0;
|
float totalItemLevel = 0;
|
||||||
|
float totalItemLevelEffective = 0;
|
||||||
for (byte i = EquipmentSlot.Start; i < EquipmentSlot.End; i++)
|
for (byte i = EquipmentSlot.Start; i < EquipmentSlot.End; i++)
|
||||||
{
|
{
|
||||||
Item item = GetItemByPos(InventorySlots.Bag0, i);
|
Item item = GetItemByPos(InventorySlots.Bag0, i);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
uint itemLevel = item.GetItemLevel(this);
|
uint azeriteLevel = 0;
|
||||||
|
AzeriteItem azeriteItem = item.ToAzeriteItem();
|
||||||
|
if (azeriteItem != null)
|
||||||
|
azeriteLevel = azeriteItem.GetEffectiveLevel();
|
||||||
|
|
||||||
|
uint itemLevel = Item.GetItemLevel(item.GetTemplate(), item.GetBonus(), GetLevel(), item.GetModifier(ItemModifier.TimewalkerLevel), 0, 0, 0, false, azeriteLevel);
|
||||||
|
uint itemLevelEffective = Item.GetItemLevel(item.GetTemplate(), item.GetBonus(), GetEffectiveLevel(), item.GetModifier(ItemModifier.TimewalkerLevel), m_unitData.MinItemLevel,
|
||||||
|
m_unitData.MinItemLevelCutoff, IsUsingPvpItemLevels() && item.GetTemplate().HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0 : m_unitData.MaxItemLevel, IsUsingPvpItemLevels(), azeriteLevel);
|
||||||
totalItemLevel += itemLevel;
|
totalItemLevel += itemLevel;
|
||||||
|
totalItemLevelEffective += itemLevelEffective;
|
||||||
if (!m_canTitanGrip && i == EquipmentSlot.MainHand && item.GetTemplate().GetInventoryType() == InventoryType.Weapon2Hand) // 2h weapon counts twice
|
if (!m_canTitanGrip && i == EquipmentSlot.MainHand && item.GetTemplate().GetInventoryType() == InventoryType.Weapon2Hand) // 2h weapon counts twice
|
||||||
|
{
|
||||||
totalItemLevel += itemLevel;
|
totalItemLevel += itemLevel;
|
||||||
|
totalItemLevelEffective += itemLevelEffective;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
totalItemLevel /= 16.0f;
|
totalItemLevel /= 16.0f;
|
||||||
SetAverageItemLevelEquipped(totalItemLevel);
|
totalItemLevelEffective /= 16.0f;
|
||||||
|
SetAverageItemLevel(totalItemLevel, AvgItemLevelCategory.EquippedBase);
|
||||||
|
SetAverageItemLevel(totalItemLevelEffective, AvgItemLevelCategory.EquippedEffective);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7670,8 +7670,7 @@ namespace Game.Entities
|
|||||||
public void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); }
|
public void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); }
|
||||||
public void ReplaceAllPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); }
|
public void ReplaceAllPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); }
|
||||||
|
|
||||||
public void SetAverageItemLevelTotal(float newItemLevel) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.AvgItemLevel, 0), newItemLevel); }
|
public void SetAverageItemLevel(float newItemLevel, AvgItemLevelCategory category) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.AvgItemLevel, (int)category), newItemLevel); }
|
||||||
public void SetAverageItemLevelEquipped(float newItemLevel) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.AvgItemLevel, 1), newItemLevel); }
|
|
||||||
|
|
||||||
public uint GetCustomizationChoice(uint chrCustomizationOptionId)
|
public uint GetCustomizationChoice(uint chrCustomizationOptionId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1921,7 +1921,11 @@ namespace Game.Entities
|
|||||||
Global.CharacterCacheStorage.UpdateCharacterLevel(ToPlayer().GetGUID(), (byte)lvl);
|
Global.CharacterCacheStorage.UpdateCharacterLevel(ToPlayer().GetGUID(), (byte)lvl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetLevel() { return m_unitData.Level; }
|
public uint GetLevel() { return m_unitData.Level; }
|
||||||
|
|
||||||
|
public byte GetEffectiveLevel() { return (byte)(m_unitData.EffectiveLevel != 0 ? m_unitData.EffectiveLevel : m_unitData.Level); }
|
||||||
|
|
||||||
public override uint GetLevelForTarget(WorldObject target) { return GetLevel(); }
|
public override uint GetLevelForTarget(WorldObject target) { return GetLevel(); }
|
||||||
|
|
||||||
public Race GetRace() { return (Race)(byte)m_unitData.Race; }
|
public Race GetRace() { return (Race)(byte)m_unitData.Race; }
|
||||||
|
|||||||
Reference in New Issue
Block a user