From 8d55654b739259209a6c9a84580f5a7430220a94 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 2 Jun 2022 20:26:27 -0400 Subject: [PATCH] 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) --- Source/Game/Entities/Creature/Creature.cs | 37 ++++++++++++----------- Source/Game/Entities/TemporarySummon.cs | 4 +-- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 97c6d1122..86e3471e6 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -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) diff --git a/Source/Game/Entities/TemporarySummon.cs b/Source/Game/Entities/TemporarySummon.cs index 3fc3df9be..b737d33e3 100644 --- a/Source/Game/Entities/TemporarySummon.cs +++ b/Source/Game/Entities/TemporarySummon.cs @@ -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);