diff options
| author | ModoX <moardox@gmail.com> | 2023-04-06 01:01:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-06 01:01:02 +0200 |
| commit | 0750b7f8455df39a64462636ca296c6f2aa2b048 (patch) | |
| tree | 935678cc42b5829dff44efababb3133c9df4e27a /src/server/game/Entities/Unit | |
| parent | 20a1e21cc5dc890d858a4a8dceba16a4fc3caa72 (diff) | |
Core/Creature: Implemented sparring with max health percent thresholds (#27198)
Co-authored-by: Ovah <dreadkiller@gmx.de>
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e3d661a54d2..dda5fb90848 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -752,6 +752,10 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons { uint32 tmpDamage = damageTaken; + // sparring + if (Creature* victimCreature = victim->ToCreature()) + tmpDamage = victimCreature->CalculateDamageForSparring(attacker, tmpDamage); + if (UnitAI* victimAI = victim->GetAI()) victimAI->DamageTaken(attacker, tmpDamage, damagetype, spellProto); @@ -1969,6 +1973,13 @@ void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinit uint32 split_absorb = 0; Unit::DealDamageMods(damageInfo.GetAttacker(), caster, splitDamage, &split_absorb); + // sparring + if (Creature* victimCreature = damageInfo.GetVictim()->ToCreature()) + { + if (victimCreature->ShouldFakeDamageFrom(damageInfo.GetAttacker())) + damageInfo.ModifyDamage(damageInfo.GetDamage() * -1); + } + SpellNonMeleeDamage log(damageInfo.GetAttacker(), caster, (*itr)->GetSpellInfo(), (*itr)->GetBase()->GetSpellVisual(), damageInfo.GetSchoolMask(), (*itr)->GetBase()->GetCastId()); CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL); Unit::DealDamage(damageInfo.GetAttacker(), caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, damageInfo.GetSchoolMask(), (*itr)->GetSpellInfo(), false); @@ -2133,6 +2144,14 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr CalculateMeleeDamage(victim, &damageInfo, attType); // Send log damage message to client Unit::DealDamageMods(damageInfo.Attacker, victim, damageInfo.Damage, &damageInfo.Absorb); + + // sparring + if (Creature* victimCreature = victim->ToCreature()) + { + if (victimCreature->ShouldFakeDamageFrom(damageInfo.Attacker)) + damageInfo.HitInfo |= HITINFO_FAKE_DAMAGE; + } + SendAttackStateUpdate(&damageInfo); _lastDamagedTargetGuid = victim->GetGUID(); |
