Core/Creatures: added sparring system for creatures
This commit is contained in:
1 parent
7f79bd8aec
commit
454c3ce065
8 files changed
+150
No files matched your search
@@ -675,6 +675,17 @@ void Unit::DealDamageMods(Unit const* victim, uint32 &damage, uint32* absorb) co
|
||||
|
||||
uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss)
|
||||
{
|
||||
// Sparring Checks
|
||||
if (Creature* me = ToCreature())
|
||||
if (Creature* target = victim->ToCreature())
|
||||
if (me->CanSparrWith(target))
|
||||
{
|
||||
if (damage >= victim->GetHealth()) // safety check to prevent creatures getting accidentally killed when the percentage is small
|
||||
damage = victim->GetHealth() - 1;
|
||||
else if (target->GetHealthPct() <= me->GetSparringHealthLimitPctFor(target))
|
||||
damage = 0;
|
||||
}
|
||||
|
||||
if (victim->IsAIEnabled)
|
||||
victim->GetAI()->DamageTaken(this, damage);
|
||||
|
||||
@@ -1871,6 +1882,13 @@ void Unit::CalcAbsorbResist(DamageInfo& damageInfo)
|
||||
uint32 split_absorb = 0;
|
||||
DealDamageMods(caster, splitDamage, &split_absorb);
|
||||
|
||||
// Sparring Checks
|
||||
if (Creature* me = caster->ToCreature())
|
||||
if (Creature* target = damageInfo.GetVictim()->ToCreature())
|
||||
if (me->CanSparrWith(target))
|
||||
if (target->GetHealthPct() <= me->GetSparringHealthLimitPctFor(target))
|
||||
damageInfo.ModifyDamage(damageInfo.GetDamage() * -1);
|
||||
|
||||
SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, damageInfo.GetSchoolMask(), split_absorb, 0, false, 0, false);
|
||||
|
||||
CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
|
||||
@@ -1977,6 +1995,14 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr
|
||||
CalculateMeleeDamage(victim, 0, &damageInfo, attType);
|
||||
// Send log damage message to client
|
||||
DealDamageMods(victim, damageInfo.damage, &damageInfo.absorb);
|
||||
|
||||
// Sparring Checks
|
||||
if (Creature* me = ToCreature())
|
||||
if (Creature* target = victim->ToCreature())
|
||||
if (me->CanSparrWith(target))
|
||||
if (target->GetHealthPct() <= me->GetSparringHealthLimitPctFor(target))
|
||||
damageInfo.HitInfo |= HITINFO_FAKE_DAMAGE;
|
||||
|
||||
SendAttackStateUpdate(&damageInfo);
|
||||
|
||||
DealMeleeDamage(&damageInfo, true);
|
||||
|
||||
Reference in new issue
Block a user