aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-05-14 00:06:23 +0200
committerShauren <shauren.trinity@gmail.com>2016-05-14 00:06:23 +0200
commit698a197cf06ac18a341b1379474935d38d5e0b6a (patch)
tree3002e26a5f059f2e58b34328ba8091a6f0067107 /src
parent00640dee97affdb3dd911235b24b7bd3c397c71f (diff)
Core/Units: Updated rage generation formula
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp51
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
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); }