aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/Item/ItemPrototype.h13
-rw-r--r--src/server/game/Entities/Player/Player.cpp19
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h2
-rwxr-xr-xsrc/server/game/Entities/Unit/StatSystem.cpp86
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp3
5 files changed, 34 insertions, 89 deletions
diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h
index 87647a36f70..793b8ecc354 100755
--- a/src/server/game/Entities/Item/ItemPrototype.h
+++ b/src/server/game/Entities/Item/ItemPrototype.h
@@ -717,19 +717,6 @@ struct ItemTemplate
return (Stackable == 2147483647 || Stackable <= 0) ? uint32(0x7FFFFFFF-1) : uint32(Stackable);
}
- int32 getFeralBonus(int32 extraDPS = 0) const
- {
- // 0x02A5F3 - is mask for Melee weapon from ItemSubClassMask.dbc
- if (Class == ITEM_CLASS_WEAPON && (1 << SubClass) & 0x02A5F3)
- {
- int32 bonus = int32((extraDPS + DPS) * 14.0f) - 767;
- if (bonus < 0)
- return 0;
- return bonus;
- }
- return 0;
- }
-
float GetItemLevelIncludingQuality() const
{
float itemLevel = (float)ItemLevel;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6f948c774fb..880d75494b5 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -792,7 +792,6 @@ Player::Player(WorldSession* session): Unit(true), m_achievementMgr(this), m_rep
m_baseRatingValue[i] = 0;
m_baseSpellPower = 0;
- m_baseFeralAP = 0;
m_baseManaRegen = 0;
m_baseHealthRegen = 0;
m_spellPenetrationItemMod = 0;
@@ -5729,17 +5728,17 @@ void Player::GetDodgeFromAgility(float &diminishing, float &nondiminishing)
// Table for base dodge values
const float dodge_base[MAX_CLASSES] =
{
- 0.036640f, // Warrior
- 0.034943f, // Paladi
- -0.040873f, // Hunter
- 0.020957f, // Rogue
- 0.034178f, // Priest
+ 0.037580f, // Warrior
+ 0.036520f, // Paladin
+ -0.054500f, // Hunter
+ -0.005900f, // Rogue
+ 0.031830f, // Priest
0.036640f, // DK
- 0.021080f, // Shaman
- 0.036587f, // Mage
- 0.024211f, // Warlock
+ 0.016750f, // Shaman
+ 0.034575f, // Mage
+ 0.020350f, // Warlock
0.0f, // ??
- 0.056097f // Druid
+ 0.049510f // Druid
};
// Crit/agility to dodge/agility coefficient multipliers; 3.2.0 increased required agility by 15%
const float crit_to_dodge[MAX_CLASSES] =
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 933c702a5aa..98f107fa541 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1954,7 +1954,6 @@ class Player : public Unit, public GridObject<Player>
inline void RecalculateRating(CombatRating cr) { ApplyRatingMod(cr, 0, true);}
float GetMeleeCritFromAgility();
void GetDodgeFromAgility(float &diminishing, float &nondiminishing);
- float GetMissPercentageFromDefence() const;
float GetSpellCritFromIntellect();
float OCTRegenHPPerSpirit();
float OCTRegenMPPerSpirit();
@@ -2769,7 +2768,6 @@ class Player : public Unit, public GridObject<Player>
float m_auraBaseMod[BASEMOD_END][MOD_END];
int16 m_baseRatingValue[MAX_COMBAT_RATING];
uint32 m_baseSpellPower;
- uint32 m_baseFeralAP;
uint32 m_baseManaRegen;
uint32 m_baseHealthRegen;
int32 m_spellPenetrationItemMod;
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 18fa16488ea..33e78851c71 100755
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -285,7 +285,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
switch (getClass())
{
case CLASS_HUNTER:
- val2 = level * 2.0f + GetStat(STAT_AGILITY) - 10.0f;
+ val2 = level * 2.0f + GetStat(STAT_AGILITY) * 2.0f - 20.0f;
break;
case CLASS_ROGUE:
val2 = level + GetStat(STAT_AGILITY) - 10.0f;
@@ -293,18 +293,6 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
case CLASS_WARRIOR:
val2 = level + GetStat(STAT_AGILITY) - 10.0f;
break;
- case CLASS_DRUID:
- switch (GetShapeshiftForm())
- {
- case FORM_CAT:
- case FORM_BEAR:
- case FORM_DIREBEAR:
- val2 = 0.0f; break;
- default:
- val2 = GetStat(STAT_AGILITY) - 10.0f; break;
- }
- break;
- default: val2 = GetStat(STAT_AGILITY) - 10.0f; break;
}
}
else
@@ -321,40 +309,39 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
break;
case CLASS_ROGUE:
- val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;
+ val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) * 2.0f - 30.0f;
break;
case CLASS_HUNTER:
val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;
break;
case CLASS_SHAMAN:
- val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;
+ val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) * 2.0f - 30.0f;
break;
case CLASS_DRUID:
{
switch (GetShapeshiftForm())
{
case FORM_CAT:
- val2 = GetStat(STAT_STRENGTH) * 2.0f + GetStat(STAT_AGILITY) - 20.0f + m_baseFeralAP;
+ val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f + GetStat(STAT_AGILITY) * 2.0f - 40.0f;
break;
case FORM_BEAR:
case FORM_DIREBEAR:
- case FORM_MOONKIN:
- val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f + m_baseFeralAP;
+ val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f + GetStat(STAT_AGILITY) * 2.0f - 40.0f;
break;
default:
- val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
+ val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
break;
}
break;
}
case CLASS_MAGE:
- val2 = GetStat(STAT_STRENGTH) - 10.0f;
+ val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
break;
case CLASS_PRIEST:
- val2 = GetStat(STAT_STRENGTH) - 10.0f;
+ val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
break;
case CLASS_WARLOCK:
- val2 = GetStat(STAT_STRENGTH) - 10.0f;
+ val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f;
break;
}
}
@@ -439,12 +426,16 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
if (IsInFeralForm()) //check if player is druid and in cat or bear forms
{
- uint8 lvl = getLevel();
- if (lvl > 60)
- lvl = 60;
-
- weapon_mindamage = lvl*0.85f*att_speed;
- weapon_maxdamage = lvl*1.25f*att_speed;
+ if (GetShapeshiftForm() == FORM_CAT)
+ {
+ weapon_mindamage = weapon_mindamage / att_speed;
+ weapon_maxdamage = weapon_maxdamage / att_speed;
+ }
+ else if (GetShapeshiftForm() == FORM_BEAR)
+ {
+ weapon_mindamage = weapon_mindamage / att_speed * 2.5f;
+ weapon_maxdamage = weapon_maxdamage / att_speed * 2.5f;
+ }
}
else if (!CanUseAttackType(attType)) //check if player not in form but still can't use (disarm case)
{
@@ -580,43 +571,16 @@ const float m_diminishing_k[MAX_CLASSES] =
0.9720f // Druid
};
-float Player::GetMissPercentageFromDefence() const
-{
- float const miss_cap[MAX_CLASSES] =
- {
- 16.00f, // Warrior //correct
- 16.00f, // Paladin //correct
- 16.00f, // Hunter //?
- 16.00f, // Rogue //?
- 16.00f, // Priest //?
- 16.00f, // DK //correct
- 16.00f, // Shaman //?
- 16.00f, // Mage //?
- 16.00f, // Warlock //?
- 0.0f, // ??
- 16.00f // Druid //?
- };
-
- float diminishing = 0.0f, nondiminishing = 0.0f;
- // Modify value from defense skill (only bonus from defense rating diminishes)
- nondiminishing += (GetSkillValue(SKILL_DEFENSE) - GetMaxSkillValueForLevel()) * 0.04f;
- diminishing += (int32(GetRatingBonusValue(CR_DEFENSE_SKILL))) * 0.04f;
-
- // apply diminishing formula to diminishing miss chance
- uint32 pclass = getClass()-1;
- return nondiminishing + (diminishing * miss_cap[pclass] / (diminishing + miss_cap[pclass] * m_diminishing_k[pclass]));
-}
-
void Player::UpdateParryPercentage()
{
const float parry_cap[MAX_CLASSES] =
{
- 47.003525f, // Warrior
- 47.003525f, // Paladin
+ 65.631440f, // Warrior
+ 65.631440f, // Paladin
145.560408f, // Hunter
145.560408f, // Rogue
0.0f, // Priest
- 47.003525f, // DK
+ 65.631440f, // DK
145.560408f, // Shaman
0.0f, // Mage
0.0f, // Warlock
@@ -648,12 +612,12 @@ void Player::UpdateDodgePercentage()
{
const float dodge_cap[MAX_CLASSES] =
{
- 88.129021f, // Warrior
- 88.129021f, // Paladin
+ 65.631440f, // Warrior
+ 65.631440f, // Paladin
145.560408f, // Hunter
145.560408f, // Rogue
150.375940f, // Priest
- 88.129021f, // DK
+ 65.631440f, // DK
145.560408f, // Shaman
150.375940f, // Mage
150.375940f, // Warlock
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index eda39dcefd1..7b2f3a49e18 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2585,9 +2585,6 @@ float Unit::GetUnitMissChance(WeaponAttackType attType) const
{
float miss_chance = 5.00f;
- if (Player const* player = ToPlayer())
- miss_chance += player->GetMissPercentageFromDefence();
-
if (attType == RANGED_ATTACK)
miss_chance -= GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE);
else