aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp2
-rw-r--r--src/game/SharedDefines.h7
-rw-r--r--src/game/Unit.cpp44
-rw-r--r--src/game/Unit.h37
4 files changed, 43 insertions, 47 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index a1ec4606d2a..9e27d2d3bec 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -17163,7 +17163,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
// cast case or scripted call case
else
{
- RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);
+ RemoveAurasByType(SPELL_AURA_MOUNTED);
if( m_ShapeShiftFormSpellId && m_form != FORM_BATTLESTANCE && m_form != FORM_BERSERKERSTANCE && m_form != FORM_DEFENSIVESTANCE && m_form != FORM_SHADOW )
RemoveAurasDueToSpell(m_ShapeShiftFormSpellId);
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index cc8db7c30f8..5a32744da7c 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -1109,9 +1109,10 @@ enum SpellHitType
{
SPELL_HIT_TYPE_UNK1 = 0x00001,
SPELL_HIT_TYPE_CRIT = 0x00002,
- SPELL_HIT_TYPE_UNK2 = 0x00004,
- SPELL_HIT_TYPE_UNK3 = 0x00008,
- SPELL_HIT_TYPE_UNK4 = 0x00020
+ SPELL_HIT_TYPE_UNK3 = 0x00004,
+ SPELL_HIT_TYPE_UNK4 = 0x00008,
+ SPELL_HIT_TYPE_UNK5 = 0x00010, // replace caster?
+ SPELL_HIT_TYPE_UNK6 = 0x00020
};
enum SpellDmgClass
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 5782ec9d5a4..c9461d4b218 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -4483,38 +4483,32 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log)
data.append(log->target->GetPackGUID());
data.append(log->attacker->GetPackGUID());
data << uint32(log->SpellID);
- data << uint32(log->damage); //damage amount
+ data << uint32(log->damage); // damage amount
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
- data << uint8 (log->phusicalLog); // damsge type? flag
- data << uint8 (log->unused); //unused
- data << uint32(log->blocked); //blocked
+ //data << uint32(log->overkill); // overkill
+ 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->unused); // unused
+ data << uint32(log->blocked); // blocked
data << uint32(log->HitInfo);
- data << uint8 (0); // flag to use extend data
+ data << uint8 (0); // flag to use extend data
SendMessageToSet( &data, true );
}
void Unit::SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, SpellSchoolMask damageSchoolMask,uint32 AbsorbedDamage, uint32 Resist,bool PhysicalDamage, uint32 Blocked, bool CriticalHit)
{
- sLog.outDebug("Sending: SMSG_SPELLNONMELEEDAMAGELOG");
- WorldPacket data(SMSG_SPELLNONMELEEDAMAGELOG, (16+4+4+1+4+4+1+1+4+4+1)); // we guess size
- data.append(target->GetPackGUID());
- data.append(GetPackGUID());
- data << uint32(SpellID);
- 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
- data << uint8(PhysicalDamage); // 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(0); // unk isFromAura
- data << uint32(Blocked); // blocked
- data << uint32(CriticalHit ? 0x27 : 0x25); // hitType, flags: 0x2 - SPELL_HIT_TYPE_CRIT, 0x10 - replace caster?
- data << uint8(0); // isDebug?
- SendMessageToSet( &data, true );
+ 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)
+ log.HitInfo |= SPELL_HIT_TYPE_CRIT;
+ SendSpellNonMeleeDamageLog(&log);
}
void Unit::ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procExtra, uint32 amount, WeaponAttackType attType, SpellEntry const *procSpell)
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 54384854089..d0173315c7b 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -745,24 +745,25 @@ struct CalcDamageInfo
// Spell damage info structure based on structure sending in SMSG_SPELLNONMELEEDAMAGELOG opcode
struct SpellNonMeleeDamage{
- SpellNonMeleeDamage(Unit *_attacker, Unit *_target, uint32 _SpellID, uint32 _schoolMask)
- : target(_target), attacker(_attacker), SpellID(_SpellID), damage(0), schoolMask(_schoolMask),
- absorb(0), resist(0), phusicalLog(false), unused(false), blocked(0), HitInfo(0), cleanDamage(0)
- {}
-
- Unit *target;
- Unit *attacker;
- uint32 SpellID;
- uint32 damage;
- uint32 schoolMask;
- uint32 absorb;
- uint32 resist;
- bool phusicalLog;
- bool unused;
- uint32 blocked;
- uint32 HitInfo;
- // Used for help
- uint32 cleanDamage;
+ 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)
+ {}
+
+ Unit *target;
+ Unit *attacker;
+ uint32 SpellID;
+ uint32 damage;
+ uint32 overkill;
+ uint32 schoolMask;
+ uint32 absorb;
+ uint32 resist;
+ bool physicalLog;
+ bool unused;
+ uint32 blocked;
+ uint32 HitInfo;
+ // Used for help
+ uint32 cleanDamage;
};
uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missCondition);