aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/StatSystem.cpp63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp
index 87bd8a46825..416352bb25b 100644
--- a/src/game/StatSystem.cpp
+++ b/src/game/StatSystem.cpp
@@ -893,7 +893,7 @@ bool Pet::UpdateStats(Stats stat)
float value = GetTotalStatValue(stat);
Unit *owner = GetOwner();
- if ( stat == STAT_STAMINA )
+ if ( stat == STAT_STAMINA && !owner->getClass() == CLASS_WARLOCK)
{
if(owner)
value += float(owner->GetStat(stat)) * 0.3f;
@@ -905,6 +905,15 @@ bool Pet::UpdateStats(Stats stat)
value += float(owner->GetStat(stat)) * 0.3f;
}
+ // warlock pet stat scaling as calculated from nesocip for patch 3.0.9 and 3.1.0
+ if(getPetType() == SUMMON_PET && owner->getClass() == CLASS_WARLOCK)
+ {
+ if(owner && stat == STAT_STAMINA)
+ {
+ value += float(owner->GetStat(STAT_STAMINA)) * 0.75f;
+ }
+ }
+
SetStat(stat, int32(value));
switch(stat)
@@ -976,10 +985,39 @@ void Pet::UpdateMaxHealth()
{
UnitMods unitMod = UNIT_MOD_HEALTH;
float stamina = GetStat(STAT_STAMINA) - GetCreateStat(STAT_STAMINA);
+ float multiplicator = 10.0f;
+
+ // nesocips warlock pet stats calculation
+ switch(GetEntry())
+ {
+ case 416: // imp
+ multiplicator = 8.4f;
+ break;
+
+ case 1860: // voidwalker
+ multiplicator = 11.0f;
+ break;
+
+ case 1863: // succubus
+ multiplicator = 9.1f;
+ break;
+
+ case 417: // felhunter
+ multiplicator = 9.5f;
+ break;
+
+ case 17252: // felguard
+ multiplicator = 11.0f;
+ break;
+
+ default:
+ multiplicator = 10.0f;
+ break;
+ }
float value = GetModifierValue(unitMod, BASE_VALUE) + GetCreateHealth();
value *= GetModifierValue(unitMod, BASE_PCT);
- value += GetModifierValue(unitMod, TOTAL_VALUE) + stamina * 10.0f;
+ value += GetModifierValue(unitMod, TOTAL_VALUE) + stamina * multiplicator;
value *= GetModifierValue(unitMod, TOTAL_PCT);
SetMaxHealth((uint32)value);
@@ -990,10 +1028,29 @@ void Pet::UpdateMaxPower(Powers power)
UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + power);
float addValue = (power == POWER_MANA) ? GetStat(STAT_INTELLECT) - GetCreateStat(STAT_INTELLECT) : 0.0f;
+ float multiplicator = 15.0f;
+
+ switch(GetEntry())
+ {
+ case 416: // imp
+ multiplicator = 4.95f;
+ break;
+
+ case 1860: // voidwalker
+ case 1863: // succubus
+ case 417: // felhunter
+ case 17252: // felguard
+ multiplicator = 11.5f;
+ break;
+
+ default:
+ multiplicator = 15.0f;
+ break;
+ }
float value = GetModifierValue(unitMod, BASE_VALUE) + GetCreatePowers(power);
value *= GetModifierValue(unitMod, BASE_PCT);
- value += GetModifierValue(unitMod, TOTAL_VALUE) + addValue * 15.0f;
+ value += GetModifierValue(unitMod, TOTAL_VALUE) + addValue * multiplicator;
value *= GetModifierValue(unitMod, TOTAL_PCT);
SetMaxPower(power, uint32(value));