diff options
-rw-r--r-- | src/game/SpellAuras.cpp | 6 | ||||
-rw-r--r-- | src/game/Unit.cpp | 18 |
2 files changed, 13 insertions, 11 deletions
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 04521881744..aace63d9d72 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5883,6 +5883,8 @@ void AuraEffect::PeriodicTick() sLog.outDetail("PeriodicTick: %u (TypeId: %u) heal of %u (TypeId: %u) for %u health inflicted by %u", GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); + int32 gain = m_target->ModifyHealth(pdamage); + WorldPacket data(SMSG_PERIODICAURALOG, (21+16));// we guess size data.append(m_target->GetPackGUID()); data.appendPackGUID(GetCasterGUID()); @@ -5890,11 +5892,9 @@ void AuraEffect::PeriodicTick() data << uint32(1); data << uint32(m_auraName); data << (uint32)pdamage; - data << uint32(0); // wotlk + data << uint32(pdamage - gain); // wotlk m_target->SendMessageToSet(&data,true); - int32 gain = m_target->ModifyHealth(pdamage); - // add HoTs to amount healed in bgs if( pCaster->GetTypeId() == TYPEID_PLAYER ) if( BattleGround *bg = ((Player*)pCaster)->GetBattleGround() ) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 0820e7a2fcd..efa85d137a4 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4442,7 +4442,7 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log) data.append(log->attacker->GetPackGUID()); data << uint32(log->SpellID); data << uint32(log->damage); //damage amount - data << uint32(0); + data << uint32(int32 (log->target->GetHealth()-log->damage ) >0 ? 0 : log->damage - log->target->GetHealth()); data << uint8 (log->schoolMask); //damage school data << uint32(log->absorb); //AbsorbedDamage data << uint32(log->resist); //resist @@ -4461,8 +4461,9 @@ void Unit::SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, data.append(target->GetPackGUID()); data.append(GetPackGUID()); data << uint32(SpellID); - data << uint32(Damage-AbsorbedDamage-Resist-Blocked); - data << uint32(0); // wotlk + int32 damageDone = Damage-AbsorbedDamage-Resist-Blocked; + data << uint32(damageDone); + data << uint32(int32 (target->GetHealth()-damageDone ) >0 ? 0 : damageDone - target->GetHealth());// wotlk data << uint8(damageSchoolMask); // spell school data << uint32(AbsorbedDamage); // AbsorbedDamage data << uint32(Resist); // resist @@ -4507,7 +4508,7 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo) data.append(GetPackGUID()); data.append(damageInfo->target->GetPackGUID()); data << (uint32)(damageInfo->damage); // Full damage - data << uint32(0); // overkill value + data << uint32(int32 (damageInfo->target->GetHealth()-damageInfo->damage ) >0 ? 0 : damageInfo->damage - damageInfo->target->GetHealth()); // Overkill data << (uint8)count; // Sub damage count @@ -4570,15 +4571,16 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, data << uint32(HitInfo); // flags data.append(GetPackGUID()); data.append(target->GetPackGUID()); - data << uint32(Damage-AbsorbDamage-Resist-BlockedAmount);// damage - data << uint32(0); // overkill value + int32 damageDone = Damage-AbsorbDamage-Resist-BlockedAmount; + data << uint32(damageDone);// damage + data << uint32(int32 (target->GetHealth()-damageDone ) >0 ? 0 : damageDone - target->GetHealth()); // Overkill data << (uint8)SwingType; // count? // for(i = 0; i < SwingType; ++i) data << (uint32)damageSchoolMask; - data << (float)(Damage-AbsorbDamage-Resist-BlockedAmount); - data << (uint32)(Damage-AbsorbDamage-Resist-BlockedAmount); + data << (float)(damageDone); + data << (uint32)(damageDone); // end loop if(HitInfo & (HITINFO_ABSORB | HITINFO_ABSORB2)) |