mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Core/Player: updated per kill experience to Cataclysm
This commit is contained in:
@@ -65,20 +65,15 @@ namespace Trinity
|
||||
{
|
||||
inline uint8 GetGrayLevel(uint8 pl_level)
|
||||
{
|
||||
uint8 level;
|
||||
|
||||
if (pl_level < 7)
|
||||
uint8 level = 0;
|
||||
if (pl_level <= 5)
|
||||
level = 0;
|
||||
else if (pl_level < 35)
|
||||
{
|
||||
uint8 count = 0;
|
||||
for (int i = 15; i <= pl_level; ++i)
|
||||
if (i % 5 == 0) ++count;
|
||||
|
||||
level = (pl_level - 7) - (count - 1);
|
||||
}
|
||||
else if (pl_level <= 39)
|
||||
level = pl_level - 5 - pl_level / 10;
|
||||
else if (pl_level <= 59)
|
||||
level = pl_level - 1 - pl_level / 5;
|
||||
else
|
||||
level = pl_level - 10;
|
||||
level = pl_level - 9;
|
||||
|
||||
sScriptMgr->OnGrayLevelCalculation(level, pl_level);
|
||||
return level;
|
||||
@@ -136,15 +131,26 @@ namespace Trinity
|
||||
return diff;
|
||||
}
|
||||
|
||||
inline uint32 BaseGain(uint8 /*pl_level*/, uint8 /*mob_level*/)
|
||||
inline uint32 BaseGain(uint8 pl_level, uint8 mob_level, int32 targetExpansion)
|
||||
{
|
||||
return 0;
|
||||
uint32 baseGain = 0;
|
||||
uint32 baseExperience = 0;
|
||||
|
||||
/*
|
||||
uint32 baseGain;
|
||||
|
||||
GtXpEntry const* xpPlayer = sXpGameTable.GetRow(pl_level);
|
||||
GtXpEntry const* xpMob = sXpGameTable.GetRow(mob_level);
|
||||
switch (targetExpansion)
|
||||
{
|
||||
case EXPANSION_CLASSIC:
|
||||
baseExperience = 45;
|
||||
break;
|
||||
case EXPANSION_THE_BURNING_CRUSADE:
|
||||
baseExperience = 235;
|
||||
break;
|
||||
case EXPANSION_WRATH_OF_THE_LICH_KING:
|
||||
baseExperience = 580;
|
||||
break;
|
||||
default: // -1 = latest expansion and 3 = Cataclysm
|
||||
baseExperience = 1878;
|
||||
break;
|
||||
}
|
||||
|
||||
if (mob_level >= pl_level)
|
||||
{
|
||||
@@ -152,7 +158,7 @@ namespace Trinity
|
||||
if (nLevelDiff > 4)
|
||||
nLevelDiff = 4;
|
||||
|
||||
baseGain = uint32(round(xpPlayer->PerKill * (1 + 0.05f * nLevelDiff)));
|
||||
baseGain = round((mob_level * 5 + baseExperience) * (1 + 0.05f * nLevelDiff));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -160,7 +166,7 @@ namespace Trinity
|
||||
if (mob_level > gray_level)
|
||||
{
|
||||
uint8 ZD = GetZeroDifference(pl_level);
|
||||
baseGain = uint32(round(xpMob->PerKill * ((1 - ((pl_level - mob_level) / float(ZD))) * (xpMob->Divisor / xpPlayer->Divisor))));
|
||||
baseGain = round((mob_level * 5 + baseExperience) * ((1 - ((pl_level - mob_level) / float(ZD)))));
|
||||
}
|
||||
else
|
||||
baseGain = 0;
|
||||
@@ -169,13 +175,12 @@ namespace Trinity
|
||||
if (sWorld->getIntConfig(CONFIG_MIN_CREATURE_SCALED_XP_RATIO) && pl_level != mob_level)
|
||||
{
|
||||
// Use mob level instead of player level to avoid overscaling on gain in a min is enforced
|
||||
uint32 baseGainMin = BaseGain(pl_level, pl_level) * sWorld->getIntConfig(CONFIG_MIN_CREATURE_SCALED_XP_RATIO) / 100;
|
||||
uint32 baseGainMin = BaseGain(pl_level, pl_level, targetExpansion) * sWorld->getIntConfig(CONFIG_MIN_CREATURE_SCALED_XP_RATIO) / 100;
|
||||
baseGain = std::max(baseGainMin, baseGain);
|
||||
}
|
||||
|
||||
sScriptMgr->OnBaseGainCalculation(baseGain, pl_level, mob_level);
|
||||
return baseGain;
|
||||
*/
|
||||
}
|
||||
|
||||
inline uint32 Gain(Player* player, Unit* u, bool isBattleGround = false)
|
||||
@@ -187,14 +192,10 @@ namespace Trinity
|
||||
{
|
||||
float xpMod = 1.0f;
|
||||
|
||||
gain = BaseGain(player->GetLevel(), u->GetLevelForTarget(player));
|
||||
gain = BaseGain(player->GetLevel(), u->GetLevelForTarget(player), creature ? creature->GetCreatureDifficulty()->GetHealthScalingExpansion() : GetExpansionForLevel(u->GetLevelForTarget(player)));
|
||||
|
||||
if (gain && creature)
|
||||
{
|
||||
// Players get only 10% xp for killing creatures of lower expansion levels than himself
|
||||
if ((uint32(creature->GetCreatureDifficulty()->GetHealthScalingExpansion()) < GetExpansionForLevel(player->GetLevel())))
|
||||
gain = uint32(round(gain / 10.0f));
|
||||
|
||||
if (creature->IsElite())
|
||||
{
|
||||
// Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
|
||||
|
||||
@@ -116,21 +116,14 @@ constexpr uint32 GetMaxLevelForExpansion(uint32 expansion)
|
||||
case EXPANSION_WRATH_OF_THE_LICH_KING:
|
||||
return 80;
|
||||
case EXPANSION_CATACLYSM:
|
||||
return 85;
|
||||
case EXPANSION_MISTS_OF_PANDARIA:
|
||||
return 90;
|
||||
case EXPANSION_MISTS_OF_PANDARIA: // unsupported expansions will return the same max level as the support one to correctly function (see Player::InitStatsForLevel)
|
||||
case EXPANSION_WARLORDS_OF_DRAENOR:
|
||||
return 100;
|
||||
case EXPANSION_LEGION:
|
||||
return 110;
|
||||
case EXPANSION_BATTLE_FOR_AZEROTH:
|
||||
return 120;
|
||||
case EXPANSION_SHADOWLANDS:
|
||||
return 60;
|
||||
case EXPANSION_DRAGONFLIGHT:
|
||||
return 70;
|
||||
case EXPANSION_THE_WAR_WITHIN:
|
||||
return 80;
|
||||
return 85;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user