aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfunjoker <torti-esser@web.de>2018-04-12 21:57:49 +0200
committerShauren <shauren.trinity@gmail.com>2018-04-12 22:57:49 +0300
commit24f51f65860d6c9dd0ee055dca93ed39dd29c687 (patch)
tree975ad09dc31dd4ce275bbb6efd9044fd0a61f126 /src
parent1aa42e97a81e285fa34316ad9cfe9657865e3c35 (diff)
Core/Creatures: Update Scaling to 7.3.5 (#21521)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp26
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h3
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp7
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp9
4 files changed, 25 insertions, 20 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 9881945a825..105a780beca 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1226,20 +1226,22 @@ void Creature::SelectLevel()
{
CreatureTemplate const* cInfo = GetCreatureTemplate();
- if (!HasScalableLevels())
- {
- // level
- uint8 minlevel = std::min(cInfo->maxlevel, cInfo->minlevel);
- uint8 maxlevel = std::max(cInfo->maxlevel, cInfo->minlevel);
- uint8 level = minlevel == maxlevel ? minlevel : urand(minlevel, maxlevel);
- SetLevel(level);
- }
- else
+ // level
+ uint8 minlevel = std::min(cInfo->maxlevel, cInfo->minlevel);
+ uint8 maxlevel = std::max(cInfo->maxlevel, cInfo->minlevel);
+ uint8 level = minlevel == maxlevel ? minlevel : urand(minlevel, maxlevel);
+ SetLevel(level);
+
+ if (HasScalableLevels())
{
- SetLevel(cInfo->levelScaling->MaxLevel);
SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN, cInfo->levelScaling->MinLevel);
SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX, cInfo->levelScaling->MaxLevel);
- SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA, cInfo->levelScaling->DeltaLevel);
+
+ int8 mindelta = std::min(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin);
+ int8 maxdelta = std::max(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin);
+ int8 delta = mindelta == maxdelta ? mindelta : irand(mindelta, maxdelta);
+
+ SetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA, delta);
}
UpdateLevelDependantStats();
@@ -2566,7 +2568,7 @@ uint8 Creature::GetLevelForTarget(WorldObject const* target) const
// between UNIT_FIELD_SCALING_LEVEL_MIN and UNIT_FIELD_SCALING_LEVEL_MAX
if (HasScalableLevels())
{
- uint8 targetLevelWithDelta = unitTarget->getLevel() + GetCreatureTemplate()->levelScaling->DeltaLevel;
+ uint8 targetLevelWithDelta = unitTarget->getLevel() + GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA);
if (target->IsPlayer())
targetLevelWithDelta += target->GetUInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index fddbc672542..e1d0fea528e 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -296,7 +296,8 @@ struct CreatureLevelScaling
{
uint16 MinLevel;
uint16 MaxLevel;
- int16 DeltaLevel;
+ int16 DeltaLevelMin;
+ int16 DeltaLevelMax;
};
// from `creature_template` table
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 07d13c1d303..713a7a04343 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -634,8 +634,8 @@ void ObjectMgr::LoadCreatureScalingData()
{
uint32 oldMSTime = getMSTime();
- // 0 1
- QueryResult result = WorldDatabase.Query("SELECT Entry, LevelScalingMin, LevelScalingMax, LevelScalingDelta FROM creature_template_scaling");
+ // 0 1 2 3 4
+ QueryResult result = WorldDatabase.Query("SELECT Entry, LevelScalingMin, LevelScalingMax, LevelScalingDeltaMin, LevelScalingDeltaMax FROM creature_template_scaling");
if (!result)
{
@@ -660,7 +660,8 @@ void ObjectMgr::LoadCreatureScalingData()
CreatureLevelScaling creatureLevelScaling;
creatureLevelScaling.MinLevel = fields[1].GetUInt16();
creatureLevelScaling.MaxLevel = fields[2].GetUInt16();
- creatureLevelScaling.DeltaLevel = fields[3].GetInt16();
+ creatureLevelScaling.DeltaLevelMin = fields[3].GetInt16();
+ creatureLevelScaling.DeltaLevelMax = fields[4].GetInt16();
itr->second.levelScaling = creatureLevelScaling;
++count;
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index ff378e680e0..e2f18ace45e 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -71,7 +71,7 @@ namespace WorldPackets
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
+ TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
return true;
}
@@ -88,14 +88,15 @@ namespace WorldPackets
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
+ TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
return true;
}
template<>
bool SandboxScalingData::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target)
{
- CreatureTemplate const* creatureTemplate = target->HasScalableLevels() ? target->GetCreatureTemplate() : attacker->GetCreatureTemplate();
+ Creature* accessor = target->HasScalableLevels() ? target : attacker;
+ CreatureTemplate const* creatureTemplate = accessor->GetCreatureTemplate();
Type = TYPE_CREATURE_TO_CREATURE_DAMAGE;
PlayerLevelDelta = 0;
@@ -105,7 +106,7 @@ namespace WorldPackets
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
- TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
+ TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
return true;
}