Core/Units: Corrected values of UnitData::Resistances (should be total value)
Port From (https://github.com/TrinityCore/TrinityCore/commit/88f4d30445937b9de42f5cb25acad75fc89bdccb)
This commit is contained in:
@@ -2210,7 +2210,7 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, GetStat((Stats)i));
|
||||
|
||||
for (int i = 0; i < (int)SpellSchools.Max; ++i)
|
||||
stmt.AddValue(index++, GetResistance((SpellSchools)i) + GetBonusResistanceMod((SpellSchools)i));
|
||||
stmt.AddValue(index++, GetResistance((SpellSchools)i)));
|
||||
|
||||
stmt.AddValue(index++, (float)m_activePlayerData.BlockPercentage);
|
||||
stmt.AddValue(index++, (float)m_activePlayerData.DodgePercentage);
|
||||
|
||||
@@ -3828,7 +3828,7 @@ namespace Game.Entities
|
||||
uint armor = proto.GetArmor(itemLevel);
|
||||
if (armor != 0)
|
||||
{
|
||||
HandleStatFlatModifier(UnitMods.Armor, UnitModifierFlatType.Base, (float)armor, apply);
|
||||
HandleStatFlatModifier(UnitMods.Armor, UnitModifierFlatType.Total, (float)armor, apply);
|
||||
if (proto.GetClass() == ItemClass.Armor && (ItemSubClassArmor)proto.GetSubClass() == ItemSubClassArmor.Shield)
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ShieldBlock), apply ? (uint)(armor * 2.5f) : 0);
|
||||
}
|
||||
@@ -6691,7 +6691,7 @@ namespace Game.Entities
|
||||
});
|
||||
|
||||
// If main hand is a 2h weapon, count it twice
|
||||
if (!bestItemLevels.TryGetValue(EquipmentSlot.MainHand, out Tuple<InventoryType, uint> mainHand) && mainHand.Item1 == InventoryType.Weapon2Hand)
|
||||
if (bestItemLevels.TryGetValue(EquipmentSlot.MainHand, out Tuple<InventoryType, uint> mainHand) && mainHand.Item1 == InventoryType.Weapon2Hand)
|
||||
sum += mainHand.Item2;
|
||||
|
||||
sum /= 16.0f;
|
||||
|
||||
@@ -324,8 +324,16 @@ namespace Game.Entities
|
||||
if (school > SpellSchools.Normal)
|
||||
{
|
||||
UnitMods unitMod = UnitMods.ResistanceStart + (int)school;
|
||||
SetResistance(school, (int)GetFlatModifierValue(unitMod, UnitModifierFlatType.Base));
|
||||
SetBonusResistanceMod(school, (int)(GetTotalAuraModValue(unitMod) - GetResistance(school)));
|
||||
float value = MathFunctions.CalculatePct(GetFlatModifierValue(unitMod, UnitModifierFlatType.Base), Math.Max(GetFlatModifierValue(unitMod, UnitModifierFlatType.BasePCTExcludeCreate), -100.0f));
|
||||
value *= GetPctModifierValue(unitMod, UnitModifierPctType.Base);
|
||||
|
||||
float baseValue = value;
|
||||
|
||||
value += GetFlatModifierValue(unitMod, UnitModifierFlatType.Total);
|
||||
value *= GetPctModifierValue(unitMod, UnitModifierPctType.Total);
|
||||
|
||||
SetResistance(school, (int)value);
|
||||
SetBonusResistanceMod(school, (int)(value - baseValue));
|
||||
}
|
||||
else
|
||||
UpdateArmor();
|
||||
@@ -374,7 +382,7 @@ namespace Game.Entities
|
||||
public void SetCreateMana(uint val) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.BaseMana), val); }
|
||||
public uint GetArmor()
|
||||
{
|
||||
return (uint)(GetResistance(SpellSchools.Normal) + GetBonusResistanceMod(SpellSchools.Normal));
|
||||
return (uint)GetResistance(SpellSchools.Normal);
|
||||
}
|
||||
public void SetArmor(int val, int bonusVal)
|
||||
{
|
||||
@@ -404,7 +412,7 @@ namespace Game.Entities
|
||||
int? resist = null;
|
||||
for (int i = (int)SpellSchools.Normal; i < (int)SpellSchools.Max; ++i)
|
||||
{
|
||||
int schoolResistance = GetResistance((SpellSchools)i) + GetBonusResistanceMod((SpellSchools)i);
|
||||
int schoolResistance = GetResistance((SpellSchools)i);
|
||||
if (Convert.ToBoolean((int)mask & (1 << i)) && (!resist.HasValue || resist.Value > schoolResistance))
|
||||
resist = schoolResistance;
|
||||
}
|
||||
@@ -1299,25 +1307,25 @@ namespace Game.Entities
|
||||
{
|
||||
UnitMods unitMod = UnitMods.Armor;
|
||||
|
||||
float value = GetFlatModifierValue(unitMod, UnitModifierFlatType.Base); // base armor (from items)
|
||||
float baseValue = value;
|
||||
float value = GetFlatModifierValue(unitMod, UnitModifierFlatType.Base); // base armor
|
||||
value *= GetPctModifierValue(unitMod, UnitModifierPctType.Base); // armor percent
|
||||
|
||||
// SPELL_AURA_MOD_ARMOR_PCT_FROM_STAT counts as base armor
|
||||
GetTotalAuraModifier(AuraType.ModArmorPctFromStat, aurEff =>
|
||||
{
|
||||
int miscValue = aurEff.GetMiscValue();
|
||||
Stats stat = (miscValue != -2) ? (Stats)miscValue : GetPrimaryStat();
|
||||
|
||||
int armorAmount = (int)MathFunctions.CalculatePct(GetStat(stat), aurEff.GetAmount());
|
||||
baseValue += armorAmount;
|
||||
|
||||
value += MathFunctions.CalculatePct((float)GetStat(stat), aurEff.GetAmount());
|
||||
return true;
|
||||
});
|
||||
|
||||
value *= GetPctModifierValue(unitMod, UnitModifierPctType.Base); // armor percent from items
|
||||
value += GetFlatModifierValue(unitMod, UnitModifierFlatType.Total);
|
||||
float baseValue = value;
|
||||
|
||||
value += GetFlatModifierValue(unitMod, UnitModifierFlatType.Total); // bonus armor from auras and items
|
||||
value *= GetPctModifierValue(unitMod, UnitModifierPctType.Total);
|
||||
|
||||
SetArmor((int)baseValue, (int)(value - baseValue));
|
||||
SetArmor((int)value, (int)(value - baseValue));
|
||||
|
||||
Pet pet = GetPet();
|
||||
if (pet)
|
||||
|
||||
Reference in New Issue
Block a user