Core/Pet: Fix guardians low damage
Port From (https://github.com/TrinityCore/TrinityCore/commit/6e1ed95a63b12d7eb94bfb06b9e2569c4f15e5d2)
This commit is contained in:
@@ -2567,7 +2567,7 @@ namespace Game.Entities
|
|||||||
return (float)GetMaxHealthByLevel(levelForTarget) / GetCreateHealth();
|
return (float)GetMaxHealthByLevel(levelForTarget) / GetCreateHealth();
|
||||||
}
|
}
|
||||||
|
|
||||||
float GetBaseDamageForLevel(uint level)
|
public float GetBaseDamageForLevel(uint level)
|
||||||
{
|
{
|
||||||
CreatureTemplate cInfo = GetCreatureTemplate();
|
CreatureTemplate cInfo = GetCreatureTemplate();
|
||||||
CreatureLevelScaling scaling = cInfo.GetLevelScaling(GetMap().GetDifficultyID());
|
CreatureLevelScaling scaling = cInfo.GetLevelScaling(GetMap().GetDifficultyID());
|
||||||
|
|||||||
@@ -551,144 +551,159 @@ namespace Game.Entities
|
|||||||
switch (petType)
|
switch (petType)
|
||||||
{
|
{
|
||||||
case PetType.Summon:
|
case PetType.Summon:
|
||||||
{
|
{
|
||||||
// the damage bonus used for pets is either fire or shadow damage, whatever is higher
|
// the damage bonus used for pets is either fire or shadow damage, whatever is higher
|
||||||
int fire = GetOwner().ToPlayer().m_activePlayerData.ModDamageDonePos[(int)SpellSchools.Fire];
|
int fire = GetOwner().ToPlayer().m_activePlayerData.ModDamageDonePos[(int)SpellSchools.Fire];
|
||||||
int shadow = GetOwner().ToPlayer().m_activePlayerData.ModDamageDonePos[(int)SpellSchools.Shadow];
|
int shadow = GetOwner().ToPlayer().m_activePlayerData.ModDamageDonePos[(int)SpellSchools.Shadow];
|
||||||
int val = (fire > shadow) ? fire : shadow;
|
int val = (fire > shadow) ? fire : shadow;
|
||||||
if (val < 0)
|
if (val < 0)
|
||||||
val = 0;
|
val = 0;
|
||||||
|
|
||||||
SetBonusDamage((int)(val * 0.15f));
|
SetBonusDamage((int)(val * 0.15f));
|
||||||
|
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PetType.Hunter:
|
case PetType.Hunter:
|
||||||
{
|
{
|
||||||
ToPet().SetPetNextLevelExperience((uint)(Global.ObjectMgr.GetXPForLevel(petlevel) * 0.05f));
|
ToPet().SetPetNextLevelExperience((uint)(Global.ObjectMgr.GetXPForLevel(petlevel) * 0.05f));
|
||||||
//these formula may not be correct; however, it is designed to be close to what it should be
|
//these formula may not be correct; however, it is designed to be close to what it should be
|
||||||
//this makes dps 0.5 of pets level
|
//this makes dps 0.5 of pets level
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
||||||
//damage range is then petlevel / 2
|
//damage range is then petlevel / 2
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
||||||
//damage is increased afterwards as strength and pet scaling modify attack power
|
//damage is increased afterwards as strength and pet scaling modify attack power
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
|
switch (GetEntry())
|
||||||
{
|
{
|
||||||
switch (GetEntry())
|
case 510: // mage Water Elemental
|
||||||
{
|
{
|
||||||
case 510: // mage Water Elemental
|
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Frost) * 0.33f));
|
||||||
{
|
break;
|
||||||
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Frost) * 0.33f));
|
}
|
||||||
break;
|
case 1964: //force of nature
|
||||||
}
|
{
|
||||||
case 1964: //force of nature
|
if (pInfo == null)
|
||||||
{
|
SetCreateHealth(30 + 30 * petlevel);
|
||||||
if (pInfo == null)
|
float bonusDmg = GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Nature) * 0.15f;
|
||||||
SetCreateHealth(30 + 30 * petlevel);
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel * 2.5f - ((float)petlevel / 2) + bonusDmg);
|
||||||
float bonusDmg = GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Nature) * 0.15f;
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel * 2.5f + ((float)petlevel / 2) + bonusDmg);
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel * 2.5f - ((float)petlevel / 2) + bonusDmg);
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel * 2.5f + ((float)petlevel / 2) + bonusDmg);
|
}
|
||||||
break;
|
case 15352: //earth elemental 36213
|
||||||
}
|
{
|
||||||
case 15352: //earth elemental 36213
|
if (pInfo == null)
|
||||||
{
|
SetCreateHealth(100 + 120 * petlevel);
|
||||||
if (pInfo == null)
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
||||||
SetCreateHealth(100 + 120 * petlevel);
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
}
|
||||||
break;
|
case 15438: //fire elemental
|
||||||
}
|
{
|
||||||
case 15438: //fire elemental
|
if (pInfo == null)
|
||||||
{
|
{
|
||||||
if (pInfo == null)
|
SetCreateHealth(40 * petlevel);
|
||||||
{
|
SetCreateMana(28 + 10 * petlevel);
|
||||||
SetCreateHealth(40 * petlevel);
|
}
|
||||||
SetCreateMana(28 + 10 * petlevel);
|
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Fire) * 0.5f));
|
||||||
}
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel * 4 - petlevel);
|
||||||
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Fire) * 0.5f));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel * 4 + petlevel);
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel * 4 - petlevel);
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel * 4 + petlevel);
|
}
|
||||||
break;
|
case 19668: // Shadowfiend
|
||||||
}
|
{
|
||||||
case 19668: // Shadowfiend
|
if (pInfo == null)
|
||||||
{
|
{
|
||||||
if (pInfo == null)
|
SetCreateMana(28 + 10 * petlevel);
|
||||||
{
|
SetCreateHealth(28 + 30 * petlevel);
|
||||||
SetCreateMana(28 + 10 * petlevel);
|
}
|
||||||
SetCreateHealth(28 + 30 * petlevel);
|
int bonus_dmg = (int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Shadow) * 0.3f);
|
||||||
}
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel * 4 - petlevel) + bonus_dmg);
|
||||||
int bonus_dmg = (int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Shadow) * 0.3f);
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel * 4 + petlevel) + bonus_dmg);
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel * 4 - petlevel) + bonus_dmg);
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel * 4 + petlevel) + bonus_dmg);
|
}
|
||||||
break;
|
case 19833: //Snake Trap - Venomous Snake
|
||||||
}
|
{
|
||||||
case 19833: //Snake Trap - Venomous Snake
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel / 2) - 25);
|
||||||
{
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel / 2) - 18);
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel / 2) - 25);
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel / 2) - 18);
|
}
|
||||||
break;
|
case 19921: //Snake Trap - Viper
|
||||||
}
|
{
|
||||||
case 19921: //Snake Trap - Viper
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel / 2 - 10);
|
||||||
{
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel / 2);
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel / 2 - 10);
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel / 2);
|
}
|
||||||
break;
|
case 29264: // Feral Spirit
|
||||||
}
|
{
|
||||||
case 29264: // Feral Spirit
|
if (pInfo == null)
|
||||||
{
|
SetCreateHealth(30 * petlevel);
|
||||||
if (pInfo == null)
|
|
||||||
SetCreateHealth(30 * petlevel);
|
// wolf attack speed is 1.5s
|
||||||
|
SetBaseAttackTime(WeaponAttackType.BaseAttack, cinfo.BaseAttackTime);
|
||||||
// wolf attack speed is 1.5s
|
|
||||||
SetBaseAttackTime(WeaponAttackType.BaseAttack, cinfo.BaseAttackTime);
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel * 4 - petlevel));
|
||||||
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel * 4 + petlevel));
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, (petlevel * 4 - petlevel));
|
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, (petlevel * 4 + petlevel));
|
SetStatFlatModifier(UnitMods.Armor, UnitModifierFlatType.Base, GetOwner().GetArmor() * 0.35f); // Bonus Armor (35% of player armor)
|
||||||
|
SetStatFlatModifier(UnitMods.StatStamina, UnitModifierFlatType.Base, GetOwner().GetStat(Stats.Stamina) * 0.3f); // Bonus Stamina (30% of player stamina)
|
||||||
SetStatFlatModifier(UnitMods.Armor, UnitModifierFlatType.Base, GetOwner().GetArmor() * 0.35f); // Bonus Armor (35% of player armor)
|
if (!HasAura(58877))//prevent apply twice for the 2 wolves
|
||||||
SetStatFlatModifier(UnitMods.StatStamina, UnitModifierFlatType.Base, GetOwner().GetStat(Stats.Stamina) * 0.3f); // Bonus Stamina (30% of player stamina)
|
AddAura(58877, this);//Spirit Hunt, passive, Spirit Wolves' attacks heal them and their master for 150% of damage done.
|
||||||
if (!HasAura(58877))//prevent apply twice for the 2 wolves
|
break;
|
||||||
AddAura(58877, this);//Spirit Hunt, passive, Spirit Wolves' attacks heal them and their master for 150% of damage done.
|
}
|
||||||
break;
|
case 31216: // Mirror Image
|
||||||
}
|
{
|
||||||
case 31216: // Mirror Image
|
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Frost) * 0.33f));
|
||||||
{
|
SetDisplayId(GetOwner().GetDisplayId());
|
||||||
SetBonusDamage((int)(GetOwner().SpellBaseDamageBonusDone(SpellSchoolMask.Frost) * 0.33f));
|
if (pInfo == null)
|
||||||
SetDisplayId(GetOwner().GetDisplayId());
|
{
|
||||||
if (pInfo == null)
|
SetCreateMana(28 + 30 * petlevel);
|
||||||
{
|
SetCreateHealth(28 + 10 * petlevel);
|
||||||
SetCreateMana(28 + 30 * petlevel);
|
}
|
||||||
SetCreateHealth(28 + 10 * petlevel);
|
break;
|
||||||
}
|
}
|
||||||
break;
|
case 27829: // Ebon Gargoyle
|
||||||
}
|
{
|
||||||
case 27829: // Ebon Gargoyle
|
if (pInfo == null)
|
||||||
{
|
{
|
||||||
if (pInfo == null)
|
SetCreateMana(28 + 10 * petlevel);
|
||||||
{
|
SetCreateHealth(28 + 30 * petlevel);
|
||||||
SetCreateMana(28 + 10 * petlevel);
|
}
|
||||||
SetCreateHealth(28 + 30 * petlevel);
|
SetBonusDamage((int)(GetOwner().GetTotalAttackPowerValue(WeaponAttackType.BaseAttack) * 0.5f));
|
||||||
}
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
||||||
SetBonusDamage((int)(GetOwner().GetTotalAttackPowerValue(WeaponAttackType.BaseAttack) * 0.5f));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - (petlevel / 4));
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel + (petlevel / 4));
|
}
|
||||||
break;
|
case 28017: // Bloodworms
|
||||||
}
|
{
|
||||||
case 28017: // Bloodworms
|
SetCreateHealth(4 * petlevel);
|
||||||
{
|
SetBonusDamage((int)(GetOwner().GetTotalAttackPowerValue(WeaponAttackType.BaseAttack) * 0.006f));
|
||||||
SetCreateHealth(4 * petlevel);
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - 30 - (petlevel / 4));
|
||||||
SetBonusDamage((int)(GetOwner().GetTotalAttackPowerValue(WeaponAttackType.BaseAttack) * 0.006f));
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel - 30 + (petlevel / 4));
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, petlevel - 30 - (petlevel / 4));
|
break;
|
||||||
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, petlevel - 30 + (petlevel / 4));
|
}
|
||||||
}
|
default:
|
||||||
break;
|
{
|
||||||
|
/* ToDo: Check what 5f5d2028 broke/fixed and how much of Creature::UpdateLevelDependantStats()
|
||||||
|
* should be copied here (or moved to another method or if that function should be called here
|
||||||
|
* or not just for this default case)
|
||||||
|
*/
|
||||||
|
float basedamage = GetBaseDamageForLevel(petlevel);
|
||||||
|
|
||||||
|
float weaponBaseMinDamage = basedamage;
|
||||||
|
float weaponBaseMaxDamage = basedamage * 1.5f;
|
||||||
|
|
||||||
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MinDamage, weaponBaseMinDamage);
|
||||||
|
SetBaseWeaponDamage(WeaponAttackType.BaseAttack, WeaponDamageRange.MaxDamage, weaponBaseMaxDamage);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateAllStats();
|
UpdateAllStats();
|
||||||
|
|||||||
Reference in New Issue
Block a user