mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 00:18:43 +01:00
Core/Pets: updated many pet damage formulars and apply spellpower bonus for warlock pets
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user