aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaymoira <none@none>2009-01-04 17:58:31 +0100
committerBlaymoira <none@none>2009-01-04 17:58:31 +0100
commitaafde5059f15c7f8dbab080d79769e3477e5ee59 (patch)
tree6c7ae5d216a5aeebd02a0f59d8a0cac3c2983184
parentc9f0d4292afa4b468728c456f7ec0f56d8d15c62 (diff)
parenta7cc53d2620512548feb23446f469326110fb859 (diff)
*Merge
--HG-- branch : trunk
-rw-r--r--src/game/Spell.cpp26
-rw-r--r--src/game/SpellAuras.cpp3
-rw-r--r--src/game/Unit.cpp27
-rw-r--r--src/game/Unit.h2
4 files changed, 38 insertions, 20 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 96ce55d5540..49ee1d2849f 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -1012,7 +1012,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask);
// Add bonuses and fill damageInfo struct
- caster->CalculateSpellDamage(&damageInfo, m_damage, m_spellInfo);
+ caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo);
// Send log damage message to client
caster->SendSpellNonMeleeDamageLog(&damageInfo);
@@ -5367,19 +5367,14 @@ void Spell::CalculateDamageDoneForAllTargets()
int32 Spell::CalculateDamageDone(Unit *unit, const uint32 effectMask, float *multiplier)
{
- m_damage = 0;
+ int32 damageDone = 0;
unitTarget = unit;
for(uint32 i = 0; i < 3; ++i)
{
if (effectMask & (1<<i))
{
- if(m_applyMultiplierMask & (1 << i))
- {
- damage = CalculateDamage(i, NULL) * m_damageMultipliers[i];
- m_damageMultipliers[i] *= multiplier[i];
- }
- else
- damage = CalculateDamage(i, NULL);
+ m_damage = 0;
+ damage = CalculateDamage(i, NULL);
switch(m_spellInfo->Effect[i])
{
@@ -5396,7 +5391,18 @@ int32 Spell::CalculateDamageDone(Unit *unit, const uint32 effectMask, float *mul
SpellDamageHeal(i);
break;
}
+
+ if(m_damage > 0 && m_originalCaster)
+ m_originalCaster->SpellDamageBonus(unit, m_spellInfo, m_damage, SPELL_DIRECT_DAMAGE);
+ if(m_applyMultiplierMask & (1 << i))
+ {
+ m_damage *= m_damageMultipliers[i];
+ m_damageMultipliers[i] *= multiplier[i];
+ }
+
+ damageDone += m_damage;
}
}
- return m_damage;
+
+ return damageDone;
} \ No newline at end of file
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 06fff3309c0..3469f65d7ff 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -5875,7 +5875,8 @@ void Aura::PeriodicTick()
SpellEntry const* spellProto = GetSpellProto();
//maybe has to be sent different to client, but not by SMSG_PERIODICAURALOG
SpellNonMeleeDamage damageInfo(pCaster, m_target, spellProto->Id, spellProto->SchoolMask);
- pCaster->CalculateSpellDamage(&damageInfo, gain, spellProto);
+ //no SpellDamageBonus for burn mana
+ pCaster->CalculateSpellDamageTaken(&damageInfo, gain, spellProto);
pCaster->SendSpellNonMeleeDamageLog(&damageInfo);
// Set trigger flag
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 8582d262e3a..210060982a4 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -1478,13 +1478,14 @@ uint32 Unit::SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage
{
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellID);
SpellNonMeleeDamage damageInfo(this, pVictim, spellInfo->Id, spellInfo->SchoolMask);
- CalculateSpellDamage(&damageInfo, damage, spellInfo);
+ damage = SpellDamageBonus(pVictim, spellInfo, damage, SPELL_DIRECT_DAMAGE);
+ CalculateSpellDamageTaken(&damageInfo, damage, spellInfo);
SendSpellNonMeleeDamageLog(&damageInfo);
DealSpellDamage(&damageInfo, true);
return damageInfo.damage;
}
-void Unit::CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, SpellEntry const *spellInfo, WeaponAttackType attackType)
+void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage *damageInfo, int32 damage, SpellEntry const *spellInfo, WeaponAttackType attackType)
{
SpellSchoolMask damageSchoolMask = SpellSchoolMask(damageInfo->schoolMask);
Unit *pVictim = damageInfo->target;
@@ -1512,16 +1513,16 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, S
if ( damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL )
{
//Calculate armor mitigation
- damage = CalcArmorReducedDamage(pVictim, damage);
+ //damage = CalcArmorReducedDamage(pVictim, damage);
// Get blocked status
blocked = isSpellBlocked(pVictim, spellInfo, attackType);
}
// Magical Damage
- else
+ /*else
{
// Calculate damage bonus
damage = SpellDamageBonus(pVictim, spellInfo, damage, SPELL_DIRECT_DAMAGE);
- }
+ }*/
if (crit)
{
damageInfo->HitInfo|= SPELL_HIT_TYPE_CRIT;
@@ -1567,7 +1568,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, S
case SPELL_DAMAGE_CLASS_MAGIC:
{
// Calculate damage bonus
- damage = SpellDamageBonus(pVictim, spellInfo, damage, SPELL_DIRECT_DAMAGE);
+ //damage = SpellDamageBonus(pVictim, spellInfo, damage, SPELL_DIRECT_DAMAGE);
// If crit add critical bonus
if (crit)
{
@@ -1581,6 +1582,9 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, S
break;
}
+ if( damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL )
+ damage = CalcArmorReducedDamage(pVictim, damage);
+
// Calculate absorb resist
if(damage > 0)
{
@@ -8168,7 +8172,6 @@ bool Unit::Attack(Unit *victim, bool meleeAttack)
((WorldObject*)this)->SendMessageToSet(&data, true);
((Creature*)this)->CallAssistance();
- ((Creature*)this)->SetHomePosition(GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
}
// delay offhand weapon attack to next attack time
@@ -8489,6 +8492,10 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
if(!spellProto || !pVictim || damagetype==DIRECT_DAMAGE )
return pdamage;
+ if(spellProto->SchoolMask == SPELL_SCHOOL_MASK_NORMAL)
+ return pdamage;
+ //damage = CalcArmorReducedDamage(pVictim, damage);
+
int32 BonusDamage = 0;
if( GetTypeId()==TYPEID_UNIT )
{
@@ -9757,6 +9764,9 @@ void Unit::SetInCombatState(bool PvP)
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ if(GetTypeId() != TYPEID_PLAYER)
+ ((Creature*)this)->SetHomePosition(GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
+
if(GetTypeId() != TYPEID_PLAYER && ((Creature*)this)->isPet())
{
UpdateSpeed(MOVE_RUN, true);
@@ -11711,7 +11721,8 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag
{
sLog.outDebug("ProcDamageAndSpell: doing %u damage from spell id %u (triggered by %s aura of spell %u)", auraModifier->m_amount, spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
SpellNonMeleeDamage damageInfo(this, pTarget, spellInfo->Id, spellInfo->SchoolMask);
- CalculateSpellDamage(&damageInfo, auraModifier->m_amount, spellInfo);
+ uint32 damage = SpellDamageBonus(pTarget, spellInfo, auraModifier->m_amount, SPELL_DIRECT_DAMAGE);
+ CalculateSpellDamageTaken(&damageInfo, damage, spellInfo);
SendSpellNonMeleeDamageLog(&damageInfo);
DealSpellDamage(&damageInfo, true);
break;
diff --git a/src/game/Unit.h b/src/game/Unit.h
index c3f5be3adb1..3cba888eb01 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -919,7 +919,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
void CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *damageInfo, WeaponAttackType attackType = BASE_ATTACK);
void DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss);
- void CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, SpellEntry const *spellInfo, WeaponAttackType attackType = BASE_ATTACK);
+ void CalculateSpellDamageTaken(SpellNonMeleeDamage *damageInfo, int32 damage, SpellEntry const *spellInfo, WeaponAttackType attackType = BASE_ATTACK);
void DealSpellDamage(SpellNonMeleeDamage *damageInfo, bool durabilityLoss);
float MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const;