mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Creatures: Only use scaling data when it was actually loaded for the creature, not always if it just exists in db
Closes #27954
This commit is contained in:
@@ -1526,20 +1526,7 @@ void Creature::SelectLevel()
|
||||
uint8 level = minlevel == maxlevel ? minlevel : urand(minlevel, maxlevel);
|
||||
SetLevel(level);
|
||||
|
||||
CreatureLevelScaling const* scaling = cInfo->GetLevelScaling(GetMap()->GetDifficultyID());
|
||||
|
||||
if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(scaling->ContentTuningID, 0))
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), levels->MinLevel);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), levels->MaxLevel);
|
||||
}
|
||||
|
||||
int32 mindelta = std::min(scaling->DeltaLevelMax, scaling->DeltaLevelMin);
|
||||
int32 maxdelta = std::max(scaling->DeltaLevelMax, scaling->DeltaLevelMin);
|
||||
int32 delta = mindelta == maxdelta ? mindelta : irand(mindelta, maxdelta);
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelDelta), delta);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ContentTuningID), scaling->ContentTuningID);
|
||||
ApplyLevelScaling();
|
||||
|
||||
UpdateLevelDependantStats();
|
||||
}
|
||||
@@ -2881,10 +2868,25 @@ void Creature::AllLootRemovedFromCorpse()
|
||||
|
||||
bool Creature::HasScalableLevels() const
|
||||
{
|
||||
CreatureTemplate const* cinfo = GetCreatureTemplate();
|
||||
CreatureLevelScaling const* scaling = cinfo->GetLevelScaling(GetMap()->GetDifficultyID());
|
||||
return m_unitData->ContentTuningID != 0;
|
||||
}
|
||||
|
||||
return scaling->ContentTuningID != 0;
|
||||
void Creature::ApplyLevelScaling()
|
||||
{
|
||||
CreatureLevelScaling const* scaling = GetCreatureTemplate()->GetLevelScaling(GetMap()->GetDifficultyID());
|
||||
|
||||
if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(scaling->ContentTuningID, 0))
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), levels->MinLevel);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), levels->MaxLevel);
|
||||
}
|
||||
|
||||
int32 mindelta = std::min(scaling->DeltaLevelMax, scaling->DeltaLevelMin);
|
||||
int32 maxdelta = std::max(scaling->DeltaLevelMax, scaling->DeltaLevelMin);
|
||||
int32 delta = mindelta == maxdelta ? mindelta : irand(mindelta, maxdelta);
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelDelta), delta);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ContentTuningID), scaling->ContentTuningID);
|
||||
}
|
||||
|
||||
uint64 Creature::GetMaxHealthByLevel(uint8 level) const
|
||||
|
||||
@@ -155,6 +155,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
|
||||
bool isWorldBoss() const;
|
||||
|
||||
bool HasScalableLevels() const;
|
||||
void ApplyLevelScaling();
|
||||
uint8 GetLevelForTarget(WorldObject const* target) const override;
|
||||
|
||||
uint64 GetMaxHealthByLevel(uint8 level) const;
|
||||
|
||||
@@ -914,9 +914,9 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
|
||||
{
|
||||
// remove elite bonuses included in DB values
|
||||
CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class);
|
||||
CreatureLevelScaling const* scaling = cinfo->GetLevelScaling(GetMap()->GetDifficultyID());
|
||||
ApplyLevelScaling();
|
||||
|
||||
SetCreateHealth(sDB2Manager.EvaluateExpectedStat(ExpectedStatType::CreatureHealth, petlevel, cinfo->GetHealthScalingExpansion(), scaling->ContentTuningID, Classes(cinfo->unit_class)) * cinfo->ModHealth * cinfo->ModHealthExtra * _GetHealthMod(cinfo->rank));
|
||||
SetCreateHealth(sDB2Manager.EvaluateExpectedStat(ExpectedStatType::CreatureHealth, petlevel, cinfo->GetHealthScalingExpansion(), m_unitData->ContentTuningID, Classes(cinfo->unit_class)) * cinfo->ModHealth * cinfo->ModHealthExtra * _GetHealthMod(cinfo->rank));
|
||||
SetCreateMana(stats->GenerateMana(cinfo));
|
||||
SetCreateStat(STAT_STRENGTH, 22);
|
||||
SetCreateStat(STAT_AGILITY, 22);
|
||||
|
||||
Reference in New Issue
Block a user