Core/Creatures: Only use scaling data when it was actually loaded for the creature, not always if it just exists in db
Port From (https://github.com/TrinityCore/TrinityCore/commit/a4fba9b3c461676622079b166a376e29685d2ca7)
This commit is contained in:
@@ -1386,21 +1386,7 @@ namespace Game.Entities
|
||||
int level = (minlevel == maxlevel ? minlevel : RandomHelper.IRand(minlevel, maxlevel));
|
||||
SetLevel((uint)level);
|
||||
|
||||
CreatureLevelScaling scaling = cInfo.GetLevelScaling(GetMap().GetDifficultyID());
|
||||
|
||||
var levels = Global.DB2Mgr.GetContentTuningData(scaling.ContentTuningID, 0);
|
||||
if (levels != null)
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelMin), levels.Value.MinLevel);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelMax), levels.Value.MaxLevel);
|
||||
}
|
||||
|
||||
int mindelta = Math.Min(scaling.DeltaLevelMax, scaling.DeltaLevelMin);
|
||||
int maxdelta = Math.Max(scaling.DeltaLevelMax, scaling.DeltaLevelMin);
|
||||
int delta = mindelta == maxdelta ? mindelta : RandomHelper.IRand(mindelta, maxdelta);
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelDelta), delta);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ContentTuningID), scaling.ContentTuningID);
|
||||
ApplyLevelScaling();
|
||||
|
||||
UpdateLevelDependantStats();
|
||||
}
|
||||
@@ -2610,10 +2596,25 @@ namespace Game.Entities
|
||||
|
||||
public bool HasScalableLevels()
|
||||
{
|
||||
CreatureTemplate cinfo = GetCreatureTemplate();
|
||||
CreatureLevelScaling scaling = cinfo.GetLevelScaling(GetMap().GetDifficultyID());
|
||||
return m_unitData.ContentTuningID != 0;
|
||||
}
|
||||
|
||||
return scaling.ContentTuningID != 0;
|
||||
public void ApplyLevelScaling()
|
||||
{
|
||||
CreatureLevelScaling scaling = GetCreatureTemplate().GetLevelScaling(GetMap().GetDifficultyID());
|
||||
var levels = Global.DB2Mgr.GetContentTuningData(scaling.ContentTuningID, 0);
|
||||
if (levels.HasValue)
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelMin), levels.Value.MinLevel);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelMax), levels.Value.MaxLevel);
|
||||
}
|
||||
|
||||
int mindelta = Math.Min(scaling.DeltaLevelMax, scaling.DeltaLevelMin);
|
||||
int maxdelta = Math.Max(scaling.DeltaLevelMax, scaling.DeltaLevelMin);
|
||||
int delta = mindelta == maxdelta ? mindelta : RandomHelper.IRand(mindelta, maxdelta);
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ScalingLevelDelta), delta);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ContentTuningID), scaling.ContentTuningID);
|
||||
}
|
||||
|
||||
ulong GetMaxHealthByLevel(uint level)
|
||||
|
||||
@@ -574,9 +574,9 @@ namespace Game.Entities
|
||||
{
|
||||
// remove elite bonuses included in DB values
|
||||
CreatureBaseStats stats = Global.ObjectMgr.GetCreatureBaseStats(petlevel, cinfo.UnitClass);
|
||||
CreatureLevelScaling scaling = cinfo.GetLevelScaling(GetMap().GetDifficultyID());
|
||||
ApplyLevelScaling();
|
||||
|
||||
SetCreateHealth((uint)(Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.CreatureHealth, petlevel, cinfo.GetHealthScalingExpansion(), scaling.ContentTuningID, (Class)cinfo.UnitClass) * cinfo.ModHealth * cinfo.ModHealthExtra * GetHealthMod(cinfo.Rank)));
|
||||
SetCreateHealth((uint)(Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.CreatureHealth, petlevel, cinfo.GetHealthScalingExpansion(), m_unitData.ContentTuningID, (Class)cinfo.UnitClass) * cinfo.ModHealth * cinfo.ModHealthExtra * GetHealthMod(cinfo.Rank)));
|
||||
SetCreateMana(stats.GenerateMana(cinfo));
|
||||
|
||||
SetCreateStat(Stats.Strength, 22);
|
||||
|
||||
Reference in New Issue
Block a user