aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-09-09 16:08:49 +0200
committerShauren <shauren.trinity@gmail.com>2018-09-09 16:08:49 +0200
commit93e87010ed77138ccea44c16e48ddac7da5acbaa (patch)
treeb8f3f0f4b7b925ffa638a9cfaf0df57ab21c04bb /src/server/game/Entities/Unit
parent9f1755dbf13d475a26741690ec5d6a340a7f4230 (diff)
Core/PacketIO: Fixed SMSG_SPELLNONMELEEDAMAGELOG structure
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp49
-rw-r--r--src/server/game/Entities/Unit/Unit.h6
2 files changed, 38 insertions, 17 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index e4fa2f4728c..c8e00647418 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1867,7 +1867,7 @@ void Unit::HandleEmoteCommand(uint32 anim_id)
Unit::DealDamageMods(caster, splitted, &splitted_absorb);
if (Unit* attacker = damageInfo.GetAttacker())
- attacker->SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitted, damageInfo.GetSchoolMask(), splitted_absorb, 0, false, 0, false);
+ attacker->SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitted, damageInfo.GetSchoolMask(), splitted_absorb, 0, damageInfo.GetDamageType() == DOT, 0, false, true);
CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
Unit::DealDamage(damageInfo.GetAttacker(), caster, splitted, &cleanDamage, DIRECT_DAMAGE, damageInfo.GetSchoolMask(), (*itr)->GetSpellInfo(), false);
@@ -1912,7 +1912,7 @@ void Unit::HandleEmoteCommand(uint32 anim_id)
Unit::DealDamageMods(caster, splitDamage, &split_absorb);
if (Unit* attacker = damageInfo.GetAttacker())
- attacker->SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, damageInfo.GetSchoolMask(), split_absorb, 0, false, 0, false);
+ attacker->SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, damageInfo.GetSchoolMask(), split_absorb, 0, damageInfo.GetDamageType() == DOT, 0, false, true);
CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
Unit::DealDamage(damageInfo.GetAttacker(), caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, damageInfo.GetSchoolMask(), (*itr)->GetSpellInfo(), false);
@@ -5124,25 +5124,46 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage* log)
data << uint8 (log->schoolMask); // damage school
data << uint32(log->absorb); // AbsorbedDamage
data << uint32(log->resist); // resist
- data << uint8 (log->physicalLog); // if 1, then client show spell name (example: %s's ranged shot hit %s for %u school or %s suffers %u school damage from %s's spell_name
+ data << uint8 (log->periodicLog); // if 1, then client show spell name (example: %s's ranged shot hit %s for %u school or %s suffers %u school damage from %s's spell_name
data << uint8 (log->unused); // unused
data << uint32(log->blocked); // blocked
data << uint32(log->HitInfo);
- data << uint8 (0); // flag to use extend data
+ data << uint8 (log->HitInfo & (SPELL_HIT_TYPE_CRIT_DEBUG | SPELL_HIT_TYPE_HIT_DEBUG | SPELL_HIT_TYPE_ATTACK_TABLE_DEBUG));
+ //if (log->HitInfo & SPELL_HIT_TYPE_CRIT_DEBUG)
+ //{
+ // data << float(log->CritRoll);
+ // data << float(log->CritNeeded);
+ //}
+ //if (log->HitInfo & SPELL_HIT_TYPE_HIT_DEBUG)
+ //{
+ // data << float(log->HitRoll);
+ // data << float(log->HitNeeded);
+ //}
+ //if (log->HitInfo & SPELL_HIT_TYPE_ATTACK_TABLE_DEBUG)
+ //{
+ // data << float(log->MissChance);
+ // data << float(log->DodgeChance);
+ // data << float(log->ParryChance);
+ // data << float(log->BlockChance);
+ // data << float(log->GlanceChance);
+ // data << float(log->CrushChance);
+ //}
SendMessageToSet(&data, true);
}
-void Unit::SendSpellNonMeleeDamageLog(Unit* target, uint32 SpellID, uint32 Damage, SpellSchoolMask damageSchoolMask, uint32 AbsorbedDamage, uint32 Resist, bool PhysicalDamage, uint32 Blocked, bool CriticalHit)
+void Unit::SendSpellNonMeleeDamageLog(Unit* target, uint32 spellID, uint32 damage, SpellSchoolMask damageSchoolMask, uint32 absorbedDamage, uint32 resist, bool isPeriodic, uint32 blocked, bool criticalHit, bool split)
{
- SpellNonMeleeDamage log(this, target, SpellID, damageSchoolMask);
- log.damage = Damage - AbsorbedDamage - Resist - Blocked;
- log.absorb = AbsorbedDamage;
- log.resist = Resist;
- log.physicalLog = PhysicalDamage;
- log.blocked = Blocked;
- log.HitInfo = SPELL_HIT_TYPE_UNK1 | SPELL_HIT_TYPE_UNK3 | SPELL_HIT_TYPE_UNK6;
- if (CriticalHit)
+ SpellNonMeleeDamage log(this, target, spellID, damageSchoolMask);
+ log.damage = damage - absorbedDamage - resist - blocked;
+ log.absorb = absorbedDamage;
+ log.resist = resist;
+ log.periodicLog = isPeriodic;
+ log.blocked = blocked;
+ log.HitInfo = 0;
+ if (criticalHit)
log.HitInfo |= SPELL_HIT_TYPE_CRIT;
+ if (split)
+ log.HitInfo |= SPELL_HIT_TYPE_SPLIT;
SendSpellNonMeleeDamageLog(&log);
}
@@ -9450,7 +9471,7 @@ void Unit::RemoveFromWorld()
if (IsCharmed())
RemoveCharmedBy(nullptr);
-
+
ASSERT(!GetCharmedGUID(), "Unit %u has charmed guid when removed from world", GetEntry());
ASSERT(!GetCharmerGUID(), "Unit %u has charmer guid when removed from world", GetEntry());
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 869b76c3660..7d3288e092e 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -531,7 +531,7 @@ struct TC_GAME_API SpellNonMeleeDamage
{
SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _schoolMask)
: target(_target), attacker(_attacker), SpellID(_SpellID), damage(0), overkill(0), schoolMask(_schoolMask),
- absorb(0), resist(0), physicalLog(false), unused(false), blocked(0), HitInfo(0), cleanDamage(0), fullBlock(false)
+ absorb(0), resist(0), periodicLog(false), unused(false), blocked(0), HitInfo(0), cleanDamage(0), fullBlock(false)
{ }
Unit *target;
@@ -542,7 +542,7 @@ struct TC_GAME_API SpellNonMeleeDamage
uint32 schoolMask;
uint32 absorb;
uint32 resist;
- bool physicalLog;
+ bool periodicLog;
bool unused;
uint32 blocked;
uint32 HitInfo;
@@ -1089,7 +1089,7 @@ class TC_GAME_API Unit : public WorldObject
void SendAttackStateUpdate(CalcDamageInfo* damageInfo);
void SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount);
void SendSpellNonMeleeDamageLog(SpellNonMeleeDamage* log);
- void SendSpellNonMeleeDamageLog(Unit* target, uint32 SpellID, uint32 Damage, SpellSchoolMask damageSchoolMask, uint32 AbsorbedDamage, uint32 Resist, bool PhysicalDamage, uint32 Blocked, bool CriticalHit = false);
+ void SendSpellNonMeleeDamageLog(Unit* target, uint32 spellID, uint32 damage, SpellSchoolMask damageSchoolMask, uint32 absorbedDamage, uint32 resist, bool isPeriodic, uint32 blocked, bool criticalHit = false, bool split = false);
void SendPeriodicAuraLog(SpellPeriodicAuraLogInfo* pInfo);
void SendSpellDamageResist(Unit* target, uint32 spellId);
void SendSpellDamageImmune(Unit* target, uint32 spellId);