Core/Pet: Fix guardians low damage

Port From (https://github.com/TrinityCore/TrinityCore/commit/6e1ed95a63b12d7eb94bfb06b9e2569c4f15e5d2)
This commit is contained in:
hondacrx
2022-01-04 20:51:40 -05:00
parent cf0ddc132b
commit 1a35b4c6f7
2 changed files with 146 additions and 131 deletions
+1 -1
View File
@@ -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());
+145 -130
View File
@@ -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();