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:
hondacrx
2022-06-02 20:26:27 -04:00
parent e190702d41
commit 8d55654b73
2 changed files with 21 additions and 20 deletions
+19 -18
View File
@@ -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)
+2 -2
View File
@@ -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);