diff options
-rwxr-xr-x | src/server/game/Entities/Item/ItemPrototype.h | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 19 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/StatSystem.cpp | 86 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 3 |
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 |