diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 51 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
2 files changed, 10 insertions, 43 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 1d45d2f07ed..4328af96d90 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -676,29 +676,16 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam } // Rage from Damage made (only from direct weapon damage) - if (cleanDamage && damagetype == DIRECT_DAMAGE && this != victim && getPowerType() == POWER_RAGE) + if (cleanDamage && (cleanDamage->attackType == BASE_ATTACK || cleanDamage->attackType == OFF_ATTACK) && damagetype == DIRECT_DAMAGE && this != victim && getPowerType() == POWER_RAGE) { - uint32 rage = uint32(GetAttackTime(cleanDamage->attackType) / 1000.f * 8.125f); - switch (cleanDamage->attackType) - { - case OFF_ATTACK: - rage /= 2; - case BASE_ATTACK: - RewardRage(rage, true); - break; - default: - break; - } + uint32 rage = uint32(GetAttackTime(cleanDamage->attackType) / 1000.f * 1.75f); + if (cleanDamage->attackType == OFF_ATTACK) + rage /= 2; + RewardRage(rage); } if (!damage) - { - // Rage from absorbed damage - if (cleanDamage && cleanDamage->absorbed_damage && victim->getPowerType() == POWER_RAGE) - victim->RewardRage(cleanDamage->absorbed_damage, false); - return 0; - } TC_LOG_DEBUG("entities.unit", "DealDamageStart"); @@ -792,13 +779,6 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam } } - // Rage from damage received - if (this != victim && victim->getPowerType() == POWER_RAGE) - { - uint32 rage_damage = damage + (cleanDamage ? cleanDamage->absorbed_damage : 0); - victim->RewardRage(rage_damage, false); - } - if (GetTypeId() == TYPEID_PLAYER) { // random durability for items (HIT DONE) @@ -15135,25 +15115,12 @@ void Unit::SendRemoveFromThreatListOpcode(HostileReference* pHostileReference) } // baseRage means damage taken when attacker = false -void Unit::RewardRage(uint32 baseRage, bool attacker) +void Unit::RewardRage(uint32 baseRage) { - float addRage; + float addRage = baseRage; - if (attacker) - { - addRage = baseRage; - // talent who gave more rage on attack - AddPct(addRage, GetTotalAuraModifier(SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT)); - } - else - { - // Calculate rage from health and damage taken - //! ToDo: Check formula - addRage = floor(0.5f + (25.7f * baseRage / GetMaxHealth())); - // Berserker Rage effect - if (HasAura(18499)) - addRage *= 2.0f; - } + // talent who gave more rage on attack + AddPct(addRage, GetTotalAuraModifier(SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT)); addRage *= sWorld->getRate(RATE_POWER_RAGE_INCOME); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 7a16eb3feff..415c46afa5d 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2193,7 +2193,7 @@ class TC_GAME_API Unit : public WorldObject bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); } bool IsFalling() const; - void RewardRage(uint32 baseRage, bool attacker); + void RewardRage(uint32 baseRage); virtual float GetFollowAngle() const { return static_cast<float>(M_PI/2); } |