diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 50 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 2 |
3 files changed, 14 insertions, 40 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 618ed545822..267d3dc6f7c 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2563,7 +2563,7 @@ void Player::Regenerate(Powers power) if (!isInCombat() && !HasAuraType(SPELL_AURA_INTERRUPT_REGEN)) { float RageDecreaseRate = sWorld->getRate(RATE_POWER_RAGE_LOSS); - addvalue += -20 * RageDecreaseRate; // 2 rage by tick (= 2 seconds => 1 rage/sec) + addvalue += -25 * RageDecreaseRate; // 2.5 rage by tick (= 2 seconds => 1.25 rage/sec) } } break; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a987b7b072f..46614339775 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -591,34 +591,13 @@ 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) { - uint32 weaponSpeedHitFactor; - uint32 rage_damage = damage + cleanDamage->absorbed_damage; - + uint32 rage = uint32(GetAttackTime(cleanDamage->attackType) / 1000 * 8.125f); switch (cleanDamage->attackType) { - case BASE_ATTACK: - { - weaponSpeedHitFactor = uint32(GetAttackTime(cleanDamage->attackType) / 1000.0f * 3.5f); - if (cleanDamage->hitOutCome == MELEE_HIT_CRIT) - weaponSpeedHitFactor *= 2; - - RewardRage(rage_damage, weaponSpeedHitFactor, true); - - break; - } case OFF_ATTACK: - { - weaponSpeedHitFactor = uint32(GetAttackTime(cleanDamage->attackType) / 1000.0f * 1.75f); - if (cleanDamage->hitOutCome == MELEE_HIT_CRIT) - weaponSpeedHitFactor *= 2; - - RewardRage(rage_damage, weaponSpeedHitFactor, true); - - break; - } - case RANGED_ATTACK: - break; - default: + rage /= 2; + case BASE_ATTACK: + RewardRage(rage, true); break; } } @@ -627,7 +606,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam { // Rage from absorbed damage if (cleanDamage && cleanDamage->absorbed_damage && victim->getPowerType() == POWER_RAGE) - victim->RewardRage(cleanDamage->absorbed_damage, 0, false); + victim->RewardRage(cleanDamage->absorbed_damage, false); return 0; } @@ -730,7 +709,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (this != victim && victim->getPowerType() == POWER_RAGE) { uint32 rage_damage = damage + (cleanDamage ? cleanDamage->absorbed_damage : 0); - victim->RewardRage(rage_damage, 0, false); + victim->RewardRage(rage_damage, false); } if (GetTypeId() == TYPEID_PLAYER) @@ -17904,27 +17883,22 @@ void Unit::SendRemoveFromThreatListOpcode(HostileReference* pHostileReference) SendMessageToSet(&data, false); } -void Unit::RewardRage(uint32 damage, uint32 weaponSpeedHitFactor, bool attacker) +// baseRage means damage taken when attacker = false +void Unit::RewardRage(uint32 baseRage, bool attacker) { float addRage; - float rageconversion = ((0.0091107836f * getLevel() * getLevel()) + 3.225598133f * getLevel()) + 4.2652911f; - - // Unknown if correct, but lineary adjust rage conversion above level 70 - if (getLevel() > 70) - rageconversion += 13.27f * (getLevel() - 70); - if (attacker) { - addRage = (damage / rageconversion * 7.5f + weaponSpeedHitFactor) / 2; - + addRage = baseRage; // talent who gave more rage on attack AddPctN(addRage, GetTotalAuraModifier(SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT)); } else { - addRage = damage / rageconversion * 2.5f; - + // 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; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 00a1017daf6..c5d411190dc 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2178,7 +2178,7 @@ class Unit : public WorldObject bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); } void SetCanFly(bool apply); - void RewardRage(uint32 damage, uint32 weaponSpeedHitFactor, bool attacker); + void RewardRage(uint32 baseRage, bool attacker); virtual float GetFollowAngle() const { return static_cast<float>(M_PI/2); } |