Core/Pets: updated many pet damage formulars and apply spellpower bonus for warlock pets

This commit is contained in:
Ovalord
2018-03-16 12:28:34 +01:00
parent 0e998a6161
commit 80f65d665b
3 changed files with 62 additions and 25 deletions

View File

@@ -1056,6 +1056,21 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - 30 - (petlevel / 4)));
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel - 30 + (petlevel / 4)));
}
case 50675: // Ebon Imp
case 89: // Summon Infernal
case 11859: // Summon Doomguard
{
if (!pInfo)
{
SetCreateMana(28 + 10 * petlevel);
SetCreateHealth(28 + 30 * petlevel);
}
int32 bonus_dmg = (int32(m_owner->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_MAGIC)* 0.071429f));
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + bonus_dmg));
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + bonus_dmg));
break;
}
}
break;
}

View File

@@ -1094,6 +1094,9 @@ void Guardian::UpdateMaxHealth()
case ENTRY_BLOODWORM:
multiplicator = 1.0f;
break;
case ENTRY_WATER_ELEMENTAL:
multiplicator = 7.5;
break;
default:
multiplicator = 14.0f;
break;
@@ -1135,6 +1138,10 @@ void Guardian::UpdateMaxHealth()
}
}
// Glyph of Voidwalker
if (GetEntry() == ENTRY_VOIDWALKER && GetOwner() && GetOwner()->HasAura(56247))
value += value * 0.20f;
SetMaxHealth((uint32)value);
}
@@ -1145,21 +1152,27 @@ void Guardian::UpdateMaxPower(Powers power)
float addValue = (power == POWER_MANA) ? GetStat(STAT_INTELLECT) - GetCreateStat(STAT_INTELLECT) : 0.0f;
float multiplicator = 15.0f;
switch (GetEntry())
{
case ENTRY_IMP: multiplicator = 4.95f; break;
case ENTRY_VOIDWALKER:
case ENTRY_SUCCUBUS:
case ENTRY_FELHUNTER:
case ENTRY_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 * multiplicator;
value *= GetModifierValue(unitMod, TOTAL_PCT);
if (Unit* owner = GetOwner())
{
switch (GetEntry())
{
case ENTRY_IMP:
case ENTRY_FELHUNTER:
case ENTRY_FELGUARD:
case ENTRY_SUCCUBUS:
case ENTRY_VOIDWALKER:
value = (7.5 * getLevel() / 80) * GetOwner()->GetStat(STAT_INTELLECT) + GetModifierValue(unitMod, BASE_VALUE) + GetCreatePowers(power);
break;
default:
break;
}
}
SetMaxPower(power, uint32(value));
}
@@ -1182,26 +1195,21 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
{
if (IsHunterPet()) //hunter pets benefit from owner's attack power
{
float mod = 1.0f; //Hunter contribution modifier
bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.22f * mod;
if (AuraEffect* aurEff = owner->GetAuraEffectOfRankedSpell(34453, EFFECT_1, owner->GetGUID())) // Animal Handler
{
AddPct(bonusAP, aurEff->GetAmount());
AddPct(val, aurEff->GetAmount());
}
SetBonusDamage(int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.1287f * mod));
float mod = 0.425f; //Hunter contribution modifier
bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * mod;
SetBonusDamage(int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.0687f));
}
else if (IsPetGhoul()) //ghouls benefit from deathknight's attack power (may be summon pet or not)
{
bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.22f;
SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.1287f));
bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.12f;
SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.06287f));
}
else if (IsSpiritWolf()) //wolf benefit from shaman's attack power
{
float dmg_multiplier = 0.31f;
float dmg_multiplier = 0.50f;
if (m_owner->GetAuraEffect(63271, 0)) // Glyph of Feral Spirit
dmg_multiplier = 0.61f;
bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier;
dmg_multiplier = 0.80f;
bonusAP += owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier;
SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier));
}
//demons benefit from warlocks shadow or fire damage
@@ -1212,8 +1220,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
int32 maximum = (fire > shadow) ? fire : shadow;
if (maximum < 0)
maximum = 0;
SetBonusDamage(int32(maximum * 0.15f));
bonusAP = maximum * 0.57f;
SetBonusDamage(int32(maximum * 0.07f));
bonusAP += maximum * 0.25f;
}
//water elementals benefit from mage's frost damage
else if (GetEntry() == ENTRY_WATER_ELEMENTAL)
@@ -1223,6 +1231,10 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
frost = 0;
SetBonusDamage(int32(frost * 0.4f));
}
else if (GetEntry() == ENTRY_RUNIC_WEAPON)
{
bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK);
}
}
SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, val + bonusAP);

View File

@@ -420,6 +420,16 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
damage += damage / 6;
}
}
// Warlock Pets deal 50% of the coefficient's spell power bonus as bonus damage
if (m_caster->IsPet())
{
if (Unit* owner = m_caster->GetCharmerOrOwner())
{
damage = CalculatePct(owner->SpellDamageBonusDone(unitTarget, m_spellInfo, (uint32)damage, SPELL_DIRECT_DAMAGE, effIndex), 50);
damage = unitTarget->SpellDamageBonusTaken(owner, m_spellInfo, (uint32)damage, SPELL_DIRECT_DAMAGE);
}
}
break;
}
case SPELLFAMILY_PRIEST: