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));
|
int level = (minlevel == maxlevel ? minlevel : RandomHelper.IRand(minlevel, maxlevel));
|
||||||
SetLevel((uint)level);
|
SetLevel((uint)level);
|
||||||
|
|
||||||
CreatureLevelScaling scaling = cInfo.GetLevelScaling(GetMap().GetDifficultyID());
|
ApplyLevelScaling();
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
UpdateLevelDependantStats();
|
UpdateLevelDependantStats();
|
||||||
}
|
}
|
||||||
@@ -2610,10 +2596,25 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public bool HasScalableLevels()
|
public bool HasScalableLevels()
|
||||||
{
|
{
|
||||||
CreatureTemplate cinfo = GetCreatureTemplate();
|
return m_unitData.ContentTuningID != 0;
|
||||||
CreatureLevelScaling scaling = cinfo.GetLevelScaling(GetMap().GetDifficultyID());
|
}
|
||||||
|
|
||||||
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)
|
ulong GetMaxHealthByLevel(uint level)
|
||||||
|
|||||||
@@ -574,9 +574,9 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
// remove elite bonuses included in DB values
|
// remove elite bonuses included in DB values
|
||||||
CreatureBaseStats stats = Global.ObjectMgr.GetCreatureBaseStats(petlevel, cinfo.UnitClass);
|
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));
|
SetCreateMana(stats.GenerateMana(cinfo));
|
||||||
|
|
||||||
SetCreateStat(Stats.Strength, 22);
|
SetCreateStat(Stats.Strength, 22);
|
||||||
|
|||||||
Reference in New Issue
Block a user