Core/Players: Defined all avg item level slots

Port From (https://github.com/TrinityCore/TrinityCore/commit/3f85fa7470789dbaedac5f3d74d00e1095e24ad1)
This commit is contained in:
Hondacrx
2024-08-25 14:05:11 -04:00
parent d1c25fbf05
commit edb6934082
7 changed files with 42 additions and 15 deletions
+10
View File
@@ -793,6 +793,16 @@ namespace Framework.Constants
CorruptedLoot = 19
}
public enum AvgItemLevelCategory
{
Base = 0,
EquippedBase = 1,
EquippedEffective = 2,
Pvp = 3,
PvpWeighted = 4,
EquippedEffectiveWeighted = 5
}
[Flags]
public enum CurrencyDbFlags
{
+5 -5
View File
@@ -2915,11 +2915,11 @@ namespace Game.Entities
int scalingLevelMax = m_unitData.ScalingLevelMax;
int scalingLevelDelta = m_unitData.ScalingLevelDelta;
int scalingFactionGroup = m_unitData.ScalingFactionGroup;
int targetLevel = unitTarget.m_unitData.EffectiveLevel;
uint targetLevel = unitTarget.m_unitData.EffectiveLevel;
if (targetLevel == 0)
targetLevel = (int)unitTarget.GetLevel();
targetLevel = unitTarget.GetLevel();
int targetLevelDelta = 0;
uint targetLevelDelta = 0;
Player playerTarget = target.ToPlayer();
if (playerTarget != null)
@@ -2928,10 +2928,10 @@ namespace Game.Entities
scalingLevelMin = scalingLevelMax;
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;
return (uint)MathFunctions.RoundToInterval(ref level, 1, SharedConst.MaxLevel + 3);
}
+1 -1
View File
@@ -1791,8 +1791,8 @@ namespace Game.Entities
ItemTemplate itemTemplate = GetTemplate();
uint minItemLevel = owner.m_unitData.MinItemLevel;
uint minItemLevelCutoff = owner.m_unitData.MinItemLevelCutoff;
uint maxItemLevel = itemTemplate.HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel;
bool pvpBonus = owner.IsUsingPvpItemLevels();
uint maxItemLevel = pvpBonus && itemTemplate.HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel;
uint azeriteLevel = 0;
AzeriteItem azeriteItem = ToAzeriteItem();
@@ -1165,7 +1165,7 @@ namespace Game.Entities
public UpdateField<ulong> Health = new(0, 31);
public UpdateField<ulong> MaxHealth = new(32, 33);
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<int> ScalingLevelMin = new(32, 37);
public UpdateField<int> ScalingLevelMax = new(32, 38);
@@ -1325,7 +1325,7 @@ namespace Game.Entities
}
data.WriteUInt64(MaxHealth);
data.WriteUInt32(Level);
data.WriteInt32(EffectiveLevel);
data.WriteUInt32(EffectiveLevel);
data.WriteUInt32(ContentTuningID);
data.WriteInt32(ScalingLevelMin);
data.WriteInt32(ScalingLevelMax);
@@ -1691,7 +1691,7 @@ namespace Game.Entities
}
if (changesMask[35])
{
data.WriteInt32(EffectiveLevel);
data.WriteUInt32(EffectiveLevel);
}
if (changesMask[36])
{
+18 -4
View File
@@ -6551,7 +6551,7 @@ namespace Game.Entities
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;
ForEachItem(ItemSearchLocation.Everywhere, item =>
@@ -6602,26 +6602,40 @@ namespace Game.Entities
sum += mainHand.itemLevel;
sum /= 16.0f;
SetAverageItemLevelTotal(sum);
SetAverageItemLevel(sum, AvgItemLevelCategory.Base);
}
public void UpdateAverageItemLevelEquipped()
{
float totalItemLevel = 0;
float totalItemLevelEffective = 0;
for (byte i = EquipmentSlot.Start; i < EquipmentSlot.End; i++)
{
Item item = GetItemByPos(InventorySlots.Bag0, i);
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;
totalItemLevelEffective += itemLevelEffective;
if (!m_canTitanGrip && i == EquipmentSlot.MainHand && item.GetTemplate().GetInventoryType() == InventoryType.Weapon2Hand) // 2h weapon counts twice
{
totalItemLevel += itemLevel;
totalItemLevelEffective += itemLevelEffective;
}
}
}
totalItemLevel /= 16.0f;
SetAverageItemLevelEquipped(totalItemLevel);
totalItemLevelEffective /= 16.0f;
SetAverageItemLevel(totalItemLevel, AvgItemLevelCategory.EquippedBase);
SetAverageItemLevel(totalItemLevelEffective, AvgItemLevelCategory.EquippedEffective);
}
}
}
+1 -2
View File
@@ -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 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 SetAverageItemLevelEquipped(float newItemLevel) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.AvgItemLevel, 1), newItemLevel); }
public void SetAverageItemLevel(float newItemLevel, AvgItemLevelCategory category) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.AvgItemLevel, (int)category), newItemLevel); }
public uint GetCustomizationChoice(uint chrCustomizationOptionId)
{
+4
View File
@@ -1921,7 +1921,11 @@ namespace Game.Entities
Global.CharacterCacheStorage.UpdateCharacterLevel(ToPlayer().GetGUID(), (byte)lvl);
}
}
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 Race GetRace() { return (Race)(byte)m_unitData.Race; }