[0146] Cleanup deprecated item mods and combat ratings

Signed-off-by: Yaki Khadafi <ElSolDolLo@gmail.com>
This commit is contained in:
Yaki Khadafi 2012-08-21 14:55:58 +03:00 committed by Antz
parent 826c15da12
commit 3153bd2129
9 changed files with 149 additions and 279 deletions

View file

@ -23,36 +23,36 @@
enum ItemModType enum ItemModType
{ {
ITEM_MOD_MANA = 0, ITEM_MOD_NONE = 0,
ITEM_MOD_HEALTH = 1, ITEM_MOD_HEALTH = 1, // deprecated
ITEM_MOD_AGILITY = 3, ITEM_MOD_AGILITY = 3,
ITEM_MOD_STRENGTH = 4, ITEM_MOD_STRENGTH = 4,
ITEM_MOD_INTELLECT = 5, ITEM_MOD_INTELLECT = 5,
ITEM_MOD_SPIRIT = 6, ITEM_MOD_SPIRIT = 6,
ITEM_MOD_STAMINA = 7, ITEM_MOD_STAMINA = 7,
ITEM_MOD_DEFENSE_SKILL_RATING = 12, ITEM_MOD_DEFENSE_SKILL_RATING = 12, // deprecated
ITEM_MOD_DODGE_RATING = 13, ITEM_MOD_DODGE_RATING = 13,
ITEM_MOD_PARRY_RATING = 14, ITEM_MOD_PARRY_RATING = 14,
ITEM_MOD_BLOCK_RATING = 15, ITEM_MOD_BLOCK_RATING = 15, // deprecated
ITEM_MOD_HIT_MELEE_RATING = 16, ITEM_MOD_HIT_MELEE_RATING = 16, // deprecated
ITEM_MOD_HIT_RANGED_RATING = 17, ITEM_MOD_HIT_RANGED_RATING = 17, // deprecated
ITEM_MOD_HIT_SPELL_RATING = 18, ITEM_MOD_HIT_SPELL_RATING = 18, // deprecated
ITEM_MOD_CRIT_MELEE_RATING = 19, ITEM_MOD_CRIT_MELEE_RATING = 19, // deprecated
ITEM_MOD_CRIT_RANGED_RATING = 20, ITEM_MOD_CRIT_RANGED_RATING = 20,
ITEM_MOD_CRIT_SPELL_RATING = 21, ITEM_MOD_CRIT_SPELL_RATING = 21, // deprecated
ITEM_MOD_HIT_TAKEN_MELEE_RATING = 22, ITEM_MOD_HIT_TAKEN_MELEE_RATING = 22, // deprecated
ITEM_MOD_HIT_TAKEN_RANGED_RATING = 23, ITEM_MOD_HIT_TAKEN_RANGED_RATING = 23, // deprecated
ITEM_MOD_HIT_TAKEN_SPELL_RATING = 24, ITEM_MOD_HIT_TAKEN_SPELL_RATING = 24, // deprecated
ITEM_MOD_CRIT_TAKEN_MELEE_RATING = 25, ITEM_MOD_CRIT_TAKEN_MELEE_RATING = 25, // deprecated
ITEM_MOD_CRIT_TAKEN_RANGED_RATING = 26, ITEM_MOD_CRIT_TAKEN_RANGED_RATING = 26, // deprecated
ITEM_MOD_CRIT_TAKEN_SPELL_RATING = 27, ITEM_MOD_CRIT_TAKEN_SPELL_RATING = 27, // deprecated
ITEM_MOD_HASTE_MELEE_RATING = 28, ITEM_MOD_HASTE_MELEE_RATING = 28, // deprecated
ITEM_MOD_HASTE_RANGED_RATING = 29, ITEM_MOD_HASTE_RANGED_RATING = 29, // deprecated
ITEM_MOD_HASTE_SPELL_RATING = 30, ITEM_MOD_HASTE_SPELL_RATING = 30, // deprecated
ITEM_MOD_HIT_RATING = 31, ITEM_MOD_HIT_RATING = 31,
ITEM_MOD_CRIT_RATING = 32, ITEM_MOD_CRIT_RATING = 32,
ITEM_MOD_HIT_TAKEN_RATING = 33, ITEM_MOD_HIT_TAKEN_RATING = 33, // deprecated
ITEM_MOD_CRIT_TAKEN_RATING = 34, ITEM_MOD_CRIT_TAKEN_RATING = 34, // deprecated
ITEM_MOD_RESILIENCE_RATING = 35, ITEM_MOD_RESILIENCE_RATING = 35,
ITEM_MOD_HASTE_RATING = 36, ITEM_MOD_HASTE_RATING = 36,
ITEM_MOD_EXPERTISE_RATING = 37, ITEM_MOD_EXPERTISE_RATING = 37,
@ -61,12 +61,12 @@ enum ItemModType
ITEM_MOD_FERAL_ATTACK_POWER = 40, // deprecated ITEM_MOD_FERAL_ATTACK_POWER = 40, // deprecated
ITEM_MOD_SPELL_HEALING_DONE = 41, // deprecated ITEM_MOD_SPELL_HEALING_DONE = 41, // deprecated
ITEM_MOD_SPELL_DAMAGE_DONE = 42, // deprecated ITEM_MOD_SPELL_DAMAGE_DONE = 42, // deprecated
ITEM_MOD_MANA_REGENERATION = 43, ITEM_MOD_MANA_REGENERATION = 43, // deprecated
ITEM_MOD_ARMOR_PENETRATION_RATING = 44, ITEM_MOD_ARMOR_PENETRATION_RATING = 44, // deprecated
ITEM_MOD_SPELL_POWER = 45, ITEM_MOD_SPELL_POWER = 45,
ITEM_MOD_HEALTH_REGEN = 46, ITEM_MOD_HEALTH_REGEN = 46,
ITEM_MOD_SPELL_PENETRATION = 47, ITEM_MOD_SPELL_PENETRATION = 47,
ITEM_MOD_BLOCK_VALUE = 48, ITEM_MOD_BLOCK_VALUE = 48, // deprecated
ITEM_MOD_MASTERY_RATING = 49, ITEM_MOD_MASTERY_RATING = 49,
ITEM_MOD_EXTRA_ARMOR = 50, ITEM_MOD_EXTRA_ARMOR = 50,
ITEM_MOD_FIRE_RESISTANCE = 51, ITEM_MOD_FIRE_RESISTANCE = 51,

View file

@ -2029,8 +2029,31 @@ void ObjectMgr::LoadItemPrototypes()
switch (proto->ItemStat[j].ItemStatType) switch (proto->ItemStat[j].ItemStatType)
{ {
case ITEM_MOD_HEALTH:
case ITEM_MOD_DEFENSE_SKILL_RATING:
case ITEM_MOD_BLOCK_RATING:
case ITEM_MOD_HIT_MELEE_RATING:
case ITEM_MOD_HIT_RANGED_RATING:
case ITEM_MOD_HIT_SPELL_RATING:
case ITEM_MOD_CRIT_MELEE_RATING:
case ITEM_MOD_CRIT_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
case ITEM_MOD_HASTE_MELEE_RATING:
case ITEM_MOD_HASTE_RANGED_RATING:
case ITEM_MOD_HASTE_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_RATING:
case ITEM_MOD_CRIT_TAKEN_RATING:
case ITEM_MOD_FERAL_ATTACK_POWER:
case ITEM_MOD_SPELL_HEALING_DONE: case ITEM_MOD_SPELL_HEALING_DONE:
case ITEM_MOD_SPELL_DAMAGE_DONE: case ITEM_MOD_SPELL_DAMAGE_DONE:
case ITEM_MOD_MANA_REGENERATION:
case ITEM_MOD_ARMOR_PENETRATION_RATING:
case ITEM_MOD_BLOCK_VALUE:
sLog.outErrorDb("Item (Entry: %u) has deprecated stat_type%d (%u)", i, j + 1, proto->ItemStat[j].ItemStatType); sLog.outErrorDb("Item (Entry: %u) has deprecated stat_type%d (%u)", i, j + 1, proto->ItemStat[j].ItemStatType);
break; break;
default: default:

View file

@ -5368,24 +5368,12 @@ void Player::UpdateRating(CombatRating cr)
if (affectStats) if (affectStats)
UpdateAllSpellCritChances(); UpdateAllSpellCritChances();
break; break;
case CR_HIT_TAKEN_MELEE: // Implemented in Unit::MeleeMissChanceCalc case CR_RESILIENCE_DAMAGE_TAKEN:
case CR_HIT_TAKEN_RANGED:
break;
case CR_HIT_TAKEN_SPELL: // Implemented in Unit::MagicSpellHitResult
break;
case CR_CRIT_TAKEN_MELEE: // Implemented in Unit::RollMeleeOutcomeAgainst (only for chance to crit)
case CR_CRIT_TAKEN_RANGED:
break;
case CR_CRIT_TAKEN_SPELL: // Implemented in Unit::SpellCriticalBonus (only for chance to crit)
break; break;
case CR_HASTE_MELEE: // Implemented in Player::ApplyRatingMod case CR_HASTE_MELEE: // Implemented in Player::ApplyRatingMod
case CR_HASTE_RANGED: case CR_HASTE_RANGED:
case CR_HASTE_SPELL: case CR_HASTE_SPELL:
break; break;
case CR_WEAPON_SKILL_MAINHAND: // Implemented in Unit::RollMeleeOutcomeAgainst
case CR_WEAPON_SKILL_OFFHAND:
case CR_WEAPON_SKILL_RANGED:
break;
case CR_EXPERTISE: case CR_EXPERTISE:
if (affectStats) if (affectStats)
{ {
@ -5397,6 +5385,16 @@ void Player::UpdateRating(CombatRating cr)
if (affectStats) if (affectStats)
UpdateArmorPenetration(); UpdateArmorPenetration();
break; break;
// deprecated
case CR_HIT_TAKEN_MELEE:
case CR_HIT_TAKEN_RANGED:
case CR_HIT_TAKEN_SPELL:
case CR_CRIT_TAKEN_SPELL:
case CR_CRIT_TAKEN_MELEE:
case CR_WEAPON_SKILL_MAINHAND:
case CR_WEAPON_SKILL_OFFHAND:
case CR_WEAPON_SKILL_RANGED:
break;
} }
} }
@ -7171,12 +7169,9 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
switch (statType) switch (statType)
{ {
case ITEM_MOD_MANA: /*case ITEM_MOD_MANA:
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(val), apply); HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(val), apply);
break; break;*/
case ITEM_MOD_HEALTH: // modify HP
HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, float(val), apply);
break;
case ITEM_MOD_AGILITY: // modify agility case ITEM_MOD_AGILITY: // modify agility
HandleStatModifier(UNIT_MOD_STAT_AGILITY, BASE_VALUE, float(val), apply); HandleStatModifier(UNIT_MOD_STAT_AGILITY, BASE_VALUE, float(val), apply);
ApplyStatBuffMod(STAT_AGILITY, float(val), apply); ApplyStatBuffMod(STAT_AGILITY, float(val), apply);
@ -7197,63 +7192,15 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
HandleStatModifier(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(val), apply); HandleStatModifier(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(val), apply);
ApplyStatBuffMod(STAT_STAMINA, float(val), apply); ApplyStatBuffMod(STAT_STAMINA, float(val), apply);
break; break;
case ITEM_MOD_DEFENSE_SKILL_RATING:
ApplyRatingMod(CR_DEFENSE_SKILL, int32(val), apply);
break;
case ITEM_MOD_DODGE_RATING: case ITEM_MOD_DODGE_RATING:
ApplyRatingMod(CR_DODGE, int32(val), apply); ApplyRatingMod(CR_DODGE, int32(val), apply);
break; break;
case ITEM_MOD_PARRY_RATING: case ITEM_MOD_PARRY_RATING:
ApplyRatingMod(CR_PARRY, int32(val), apply); ApplyRatingMod(CR_PARRY, int32(val), apply);
break; break;
case ITEM_MOD_BLOCK_RATING:
ApplyRatingMod(CR_BLOCK, int32(val), apply);
break;
case ITEM_MOD_HIT_MELEE_RATING:
ApplyRatingMod(CR_HIT_MELEE, int32(val), apply);
break;
case ITEM_MOD_HIT_RANGED_RATING:
ApplyRatingMod(CR_HIT_RANGED, int32(val), apply);
break;
case ITEM_MOD_HIT_SPELL_RATING:
ApplyRatingMod(CR_HIT_SPELL, int32(val), apply);
break;
case ITEM_MOD_CRIT_MELEE_RATING:
ApplyRatingMod(CR_CRIT_MELEE, int32(val), apply);
break;
case ITEM_MOD_CRIT_RANGED_RATING: case ITEM_MOD_CRIT_RANGED_RATING:
ApplyRatingMod(CR_CRIT_RANGED, int32(val), apply); ApplyRatingMod(CR_CRIT_RANGED, int32(val), apply);
break; break;
case ITEM_MOD_CRIT_SPELL_RATING:
ApplyRatingMod(CR_CRIT_SPELL, int32(val), apply);
break;
case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
ApplyRatingMod(CR_HIT_TAKEN_MELEE, int32(val), apply);
break;
case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
ApplyRatingMod(CR_HIT_TAKEN_RANGED, int32(val), apply);
break;
case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
ApplyRatingMod(CR_HIT_TAKEN_SPELL, int32(val), apply);
break;
case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, int32(val), apply);
break;
case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, int32(val), apply);
break;
case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, int32(val), apply);
break;
case ITEM_MOD_HASTE_MELEE_RATING:
ApplyRatingMod(CR_HASTE_MELEE, int32(val), apply);
break;
case ITEM_MOD_HASTE_RANGED_RATING:
ApplyRatingMod(CR_HASTE_RANGED, int32(val), apply);
break;
case ITEM_MOD_HASTE_SPELL_RATING:
ApplyRatingMod(CR_HASTE_SPELL, int32(val), apply);
break;
case ITEM_MOD_HIT_RATING: case ITEM_MOD_HIT_RATING:
ApplyRatingMod(CR_HIT_MELEE, int32(val), apply); ApplyRatingMod(CR_HIT_MELEE, int32(val), apply);
ApplyRatingMod(CR_HIT_RANGED, int32(val), apply); ApplyRatingMod(CR_HIT_RANGED, int32(val), apply);
@ -7264,20 +7211,8 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
ApplyRatingMod(CR_CRIT_RANGED, int32(val), apply); ApplyRatingMod(CR_CRIT_RANGED, int32(val), apply);
ApplyRatingMod(CR_CRIT_SPELL, int32(val), apply); ApplyRatingMod(CR_CRIT_SPELL, int32(val), apply);
break; break;
case ITEM_MOD_HIT_TAKEN_RATING:
ApplyRatingMod(CR_HIT_TAKEN_MELEE, int32(val), apply);
ApplyRatingMod(CR_HIT_TAKEN_RANGED, int32(val), apply);
ApplyRatingMod(CR_HIT_TAKEN_SPELL, int32(val), apply);
break;
case ITEM_MOD_CRIT_TAKEN_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, int32(val), apply);
break;
case ITEM_MOD_RESILIENCE_RATING: case ITEM_MOD_RESILIENCE_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, int32(val), apply); ApplyRatingMod(CR_RESILIENCE_DAMAGE_TAKEN, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, int32(val), apply);
break; break;
case ITEM_MOD_HASTE_RATING: case ITEM_MOD_HASTE_RATING:
ApplyRatingMod(CR_HASTE_MELEE, int32(val), apply); ApplyRatingMod(CR_HASTE_MELEE, int32(val), apply);
@ -7294,12 +7229,6 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
case ITEM_MOD_RANGED_ATTACK_POWER: case ITEM_MOD_RANGED_ATTACK_POWER:
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, float(val), apply); HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, float(val), apply);
break; break;
case ITEM_MOD_MANA_REGENERATION:
ApplyManaRegenBonus(int32(val), apply);
break;
case ITEM_MOD_ARMOR_PENETRATION_RATING:
ApplyRatingMod(CR_ARMOR_PENETRATION, int32(val), apply);
break;
case ITEM_MOD_SPELL_POWER: case ITEM_MOD_SPELL_POWER:
ApplySpellPowerBonus(int32(val), apply); ApplySpellPowerBonus(int32(val), apply);
break; break;
@ -7307,13 +7236,35 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -int32(val), apply); ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -int32(val), apply);
m_spellPenetrationItemMod += apply ? val : -val; m_spellPenetrationItemMod += apply ? val : -val;
break; break;
case ITEM_MOD_BLOCK_VALUE: case ITEM_MOD_MASTERY_RATING:
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, float(val), apply); ApplyRatingMod(CR_MASTERY, int32(val), apply);
break; break;
// deprecated item mods // deprecated item mods
case ITEM_MOD_HEALTH:
case ITEM_MOD_DEFENSE_SKILL_RATING:
case ITEM_MOD_BLOCK_RATING:
case ITEM_MOD_HIT_MELEE_RATING:
case ITEM_MOD_HIT_RANGED_RATING:
case ITEM_MOD_HIT_SPELL_RATING:
case ITEM_MOD_CRIT_MELEE_RATING:
case ITEM_MOD_CRIT_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
case ITEM_MOD_HASTE_MELEE_RATING:
case ITEM_MOD_HASTE_RANGED_RATING:
case ITEM_MOD_HASTE_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_RATING:
case ITEM_MOD_CRIT_TAKEN_RATING:
case ITEM_MOD_FERAL_ATTACK_POWER: case ITEM_MOD_FERAL_ATTACK_POWER:
case ITEM_MOD_SPELL_HEALING_DONE: case ITEM_MOD_SPELL_HEALING_DONE:
case ITEM_MOD_SPELL_DAMAGE_DONE: case ITEM_MOD_SPELL_DAMAGE_DONE:
case ITEM_MOD_MANA_REGENERATION:
case ITEM_MOD_ARMOR_PENETRATION_RATING:
case ITEM_MOD_BLOCK_VALUE:
break; break;
} }
} }
@ -12979,10 +12930,10 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
DEBUG_LOG("Adding %u to stat nb %u", enchant_amount, enchant_spell_id); DEBUG_LOG("Adding %u to stat nb %u", enchant_amount, enchant_spell_id);
switch (enchant_spell_id) switch (enchant_spell_id)
{ {
case ITEM_MOD_MANA: /*case ITEM_MOD_MANA:
DEBUG_LOG("+ %u MANA", enchant_amount); DEBUG_LOG("+ %u MANA", enchant_amount);
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(enchant_amount), apply); HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(enchant_amount), apply);
break; break;*/
case ITEM_MOD_HEALTH: case ITEM_MOD_HEALTH:
DEBUG_LOG("+ %u HEALTH", enchant_amount); DEBUG_LOG("+ %u HEALTH", enchant_amount);
HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, float(enchant_amount), apply); HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, float(enchant_amount), apply);
@ -13012,10 +12963,6 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
HandleStatModifier(UNIT_MOD_STAT_STAMINA, TOTAL_VALUE, float(enchant_amount), apply); HandleStatModifier(UNIT_MOD_STAT_STAMINA, TOTAL_VALUE, float(enchant_amount), apply);
ApplyStatBuffMod(STAT_STAMINA, float(enchant_amount), apply); ApplyStatBuffMod(STAT_STAMINA, float(enchant_amount), apply);
break; break;
case ITEM_MOD_DEFENSE_SKILL_RATING:
ApplyRatingMod(CR_DEFENSE_SKILL, enchant_amount, apply);
DEBUG_LOG("+ %u DEFENCE", enchant_amount);
break;
case ITEM_MOD_DODGE_RATING: case ITEM_MOD_DODGE_RATING:
ApplyRatingMod(CR_DODGE, enchant_amount, apply); ApplyRatingMod(CR_DODGE, enchant_amount, apply);
DEBUG_LOG("+ %u DODGE", enchant_amount); DEBUG_LOG("+ %u DODGE", enchant_amount);
@ -13024,63 +12971,10 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
ApplyRatingMod(CR_PARRY, enchant_amount, apply); ApplyRatingMod(CR_PARRY, enchant_amount, apply);
DEBUG_LOG("+ %u PARRY", enchant_amount); DEBUG_LOG("+ %u PARRY", enchant_amount);
break; break;
case ITEM_MOD_BLOCK_RATING:
ApplyRatingMod(CR_BLOCK, enchant_amount, apply);
DEBUG_LOG("+ %u SHIELD_BLOCK", enchant_amount);
break;
case ITEM_MOD_HIT_MELEE_RATING:
ApplyRatingMod(CR_HIT_MELEE, enchant_amount, apply);
DEBUG_LOG("+ %u MELEE_HIT", enchant_amount);
break;
case ITEM_MOD_HIT_RANGED_RATING:
ApplyRatingMod(CR_HIT_RANGED, enchant_amount, apply);
DEBUG_LOG("+ %u RANGED_HIT", enchant_amount);
break;
case ITEM_MOD_HIT_SPELL_RATING:
ApplyRatingMod(CR_HIT_SPELL, enchant_amount, apply);
DEBUG_LOG("+ %u SPELL_HIT", enchant_amount);
break;
case ITEM_MOD_CRIT_MELEE_RATING:
ApplyRatingMod(CR_CRIT_MELEE, enchant_amount, apply);
DEBUG_LOG("+ %u MELEE_CRIT", enchant_amount);
break;
case ITEM_MOD_CRIT_RANGED_RATING: case ITEM_MOD_CRIT_RANGED_RATING:
ApplyRatingMod(CR_CRIT_RANGED, enchant_amount, apply); ApplyRatingMod(CR_CRIT_RANGED, enchant_amount, apply);
DEBUG_LOG("+ %u RANGED_CRIT", enchant_amount); DEBUG_LOG("+ %u RANGED_CRIT", enchant_amount);
break; break;
case ITEM_MOD_CRIT_SPELL_RATING:
ApplyRatingMod(CR_CRIT_SPELL, enchant_amount, apply);
DEBUG_LOG("+ %u SPELL_CRIT", enchant_amount);
break;
// Values from ITEM_STAT_MELEE_HA_RATING to ITEM_MOD_HASTE_RANGED_RATING are never used
// in Enchantments
// case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
// ApplyRatingMod(CR_HIT_TAKEN_MELEE, enchant_amount, apply);
// break;
// case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
// ApplyRatingMod(CR_HIT_TAKEN_RANGED, enchant_amount, apply);
// break;
// case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
// ApplyRatingMod(CR_HIT_TAKEN_SPELL, enchant_amount, apply);
// break;
// case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
// ApplyRatingMod(CR_CRIT_TAKEN_MELEE, enchant_amount, apply);
// break;
// case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
// ApplyRatingMod(CR_CRIT_TAKEN_RANGED, enchant_amount, apply);
// break;
// case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
// ApplyRatingMod(CR_CRIT_TAKEN_SPELL, enchant_amount, apply);
// break;
// case ITEM_MOD_HASTE_MELEE_RATING:
// ApplyRatingMod(CR_HASTE_MELEE, enchant_amount, apply);
// break;
// case ITEM_MOD_HASTE_RANGED_RATING:
// ApplyRatingMod(CR_HASTE_RANGED, enchant_amount, apply);
// break;
case ITEM_MOD_HASTE_SPELL_RATING:
ApplyRatingMod(CR_HASTE_SPELL, enchant_amount, apply);
break;
case ITEM_MOD_HIT_RATING: case ITEM_MOD_HIT_RATING:
ApplyRatingMod(CR_HIT_MELEE, enchant_amount, apply); ApplyRatingMod(CR_HIT_MELEE, enchant_amount, apply);
ApplyRatingMod(CR_HIT_RANGED, enchant_amount, apply); ApplyRatingMod(CR_HIT_RANGED, enchant_amount, apply);
@ -13093,21 +12987,8 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
ApplyRatingMod(CR_CRIT_SPELL, enchant_amount, apply); ApplyRatingMod(CR_CRIT_SPELL, enchant_amount, apply);
DEBUG_LOG("+ %u CRITICAL", enchant_amount); DEBUG_LOG("+ %u CRITICAL", enchant_amount);
break; break;
// Values ITEM_MOD_HIT_TAKEN_RATING and ITEM_MOD_CRIT_TAKEN_RATING are never used in Enchantment
// case ITEM_MOD_HIT_TAKEN_RATING:
// ApplyRatingMod(CR_HIT_TAKEN_MELEE, enchant_amount, apply);
// ApplyRatingMod(CR_HIT_TAKEN_RANGED, enchant_amount, apply);
// ApplyRatingMod(CR_HIT_TAKEN_SPELL, enchant_amount, apply);
// break;
// case ITEM_MOD_CRIT_TAKEN_RATING:
// ApplyRatingMod(CR_CRIT_TAKEN_MELEE, enchant_amount, apply);
// ApplyRatingMod(CR_CRIT_TAKEN_RANGED, enchant_amount, apply);
// ApplyRatingMod(CR_CRIT_TAKEN_SPELL, enchant_amount, apply);
// break;
case ITEM_MOD_RESILIENCE_RATING: case ITEM_MOD_RESILIENCE_RATING:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, enchant_amount, apply); ApplyRatingMod(CR_RESILIENCE_DAMAGE_TAKEN, enchant_amount, apply);
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, enchant_amount, apply);
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, enchant_amount, apply);
DEBUG_LOG("+ %u RESILIENCE", enchant_amount); DEBUG_LOG("+ %u RESILIENCE", enchant_amount);
break; break;
case ITEM_MOD_HASTE_RATING: case ITEM_MOD_HASTE_RATING:
@ -13129,24 +13010,44 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, float(enchant_amount), apply); HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, float(enchant_amount), apply);
DEBUG_LOG("+ %u RANGED_ATTACK_POWER", enchant_amount); DEBUG_LOG("+ %u RANGED_ATTACK_POWER", enchant_amount);
break; break;
case ITEM_MOD_MANA_REGENERATION:
ApplyManaRegenBonus(enchant_amount, apply);
DEBUG_LOG("+ %u MANA_REGENERATION", enchant_amount);
break;
case ITEM_MOD_ARMOR_PENETRATION_RATING:
ApplyRatingMod(CR_ARMOR_PENETRATION, enchant_amount, apply);
DEBUG_LOG("+ %u ARMOR PENETRATION", enchant_amount);
break;
case ITEM_MOD_SPELL_POWER: case ITEM_MOD_SPELL_POWER:
ApplySpellPowerBonus(enchant_amount, apply); ApplySpellPowerBonus(enchant_amount, apply);
DEBUG_LOG("+ %u SPELL_POWER", enchant_amount); DEBUG_LOG("+ %u SPELL_POWER", enchant_amount);
break; break;
case ITEM_MOD_BLOCK_VALUE: case ITEM_MOD_SPELL_PENETRATION:
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, float(enchant_amount), apply); ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -int32(enchant_amount), apply);
m_spellPenetrationItemMod += apply ? enchant_amount : -int32(enchant_amount);
DEBUG_LOG("+ %u SPELL_PENETRATION", -int32(enchant_amount));
break; break;
case ITEM_MOD_MASTERY_RATING:
ApplyRatingMod(CR_MASTERY, enchant_amount, apply);
DEBUG_LOG("+ %u MASTERY_RATING", enchant_amount);
break;
// deprecated
case ITEM_MOD_DEFENSE_SKILL_RATING:
case ITEM_MOD_BLOCK_RATING:
case ITEM_MOD_HIT_MELEE_RATING:
case ITEM_MOD_HIT_RANGED_RATING:
case ITEM_MOD_HIT_SPELL_RATING:
case ITEM_MOD_CRIT_MELEE_RATING:
case ITEM_MOD_CRIT_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
case ITEM_MOD_HASTE_MELEE_RATING:
case ITEM_MOD_HASTE_RANGED_RATING:
case ITEM_MOD_HASTE_SPELL_RATING:
case ITEM_MOD_HIT_TAKEN_RATING:
case ITEM_MOD_CRIT_TAKEN_RATING:
case ITEM_MOD_FERAL_ATTACK_POWER: case ITEM_MOD_FERAL_ATTACK_POWER:
case ITEM_MOD_SPELL_HEALING_DONE: // deprecated case ITEM_MOD_SPELL_HEALING_DONE:
case ITEM_MOD_SPELL_DAMAGE_DONE: // deprecated case ITEM_MOD_SPELL_DAMAGE_DONE:
case ITEM_MOD_MANA_REGENERATION:
case ITEM_MOD_ARMOR_PENETRATION_RATING:
case ITEM_MOD_BLOCK_VALUE:
default: default:
break; break;
} }

View file

@ -1414,7 +1414,7 @@ void Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask)
if (m_applyMultiplierMask & (1 << effectNumber)) if (m_applyMultiplierMask & (1 << effectNumber))
{ {
// Get multiplier // Get multiplier
float multiplier = spellEffect ? spellEffect->DmgMultiplier : 0.0f; float multiplier = spellEffect ? spellEffect->DmgMultiplier : 1.0f;
// Apply multiplier mods // Apply multiplier mods
if (realCaster) if (realCaster)
if (Player* modOwner = realCaster->GetSpellModOwner()) if (Player* modOwner = realCaster->GetSpellModOwner())
@ -1537,7 +1537,7 @@ void Spell::HandleDelayedSpellLaunch(TargetInfo* target)
if (m_applyMultiplierMask & (1 << effectNumber)) if (m_applyMultiplierMask & (1 << effectNumber))
{ {
// Get multiplier // Get multiplier
float multiplier = spellEffect ? spellEffect->DmgMultiplier : 0.0f; float multiplier = spellEffect ? spellEffect->DmgMultiplier : 1.0f;
// Apply multiplier mods // Apply multiplier mods
if (real_caster) if (real_caster)
if (Player* modOwner = real_caster->GetSpellModOwner()) if (Player* modOwner = real_caster->GetSpellModOwner())

View file

@ -7342,13 +7342,13 @@ void Aura::PeriodicTick()
{ {
cleanDamage.hitOutCome = MELEE_HIT_CRIT; cleanDamage.hitOutCome = MELEE_HIT_CRIT;
// Resilience - reduce crit damage // Resilience - reduce crit damage
pdamage -= target->GetSpellCritDamageReduction(pdamage); pdamage -= target->GetCritDamageReduction(pdamage);
} }
// only from players // only from players
// FIXME: need use SpellDamageBonus instead? // FIXME: need use SpellDamageBonus instead?
if (pCaster->GetTypeId() == TYPEID_PLAYER) if (pCaster->GetTypeId() == TYPEID_PLAYER)
pdamage -= target->GetSpellDamageReduction(pdamage); pdamage -= target->GetDamageReduction(pdamage);
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !GetSpellProto()->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED)); target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !GetSpellProto()->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED));
@ -7434,13 +7434,13 @@ void Aura::PeriodicTick()
{ {
cleanDamage.hitOutCome = MELEE_HIT_CRIT; cleanDamage.hitOutCome = MELEE_HIT_CRIT;
// Resilience - reduce crit damage // Resilience - reduce crit damage
pdamage -= target->GetSpellCritDamageReduction(pdamage); pdamage -= target->GetCritDamageReduction(pdamage);
} }
// only from players // only from players
// FIXME: need use SpellDamageBonus instead? // FIXME: need use SpellDamageBonus instead?
if (GetCasterGuid().IsPlayer()) if (GetCasterGuid().IsPlayer())
pdamage -= target->GetSpellDamageReduction(pdamage); pdamage -= target->GetDamageReduction(pdamage);
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !spellProto->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED)); target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !spellProto->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED));
@ -7636,7 +7636,7 @@ void Aura::PeriodicTick()
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4) // resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
if (power == POWER_MANA) if (power == POWER_MANA)
drain_amount -= target->GetSpellCritDamageReduction(drain_amount); drain_amount -= target->GetCritDamageReduction(drain_amount);
target->ModifyPower(power, -drain_amount); target->ModifyPower(power, -drain_amount);
@ -7780,7 +7780,7 @@ void Aura::PeriodicTick()
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4) // resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
if (powerType == POWER_MANA) if (powerType == POWER_MANA)
pdamage -= target->GetSpellCritDamageReduction(pdamage); pdamage -= target->GetCritDamageReduction(pdamage);
uint32 gain = uint32(-target->ModifyPower(powerType, -pdamage)); uint32 gain = uint32(-target->ModifyPower(powerType, -pdamage));

View file

@ -4064,7 +4064,7 @@ void Spell::EffectPowerDrain(SpellEffectEntry const* effect)
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4) // resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
uint32 power = damage; uint32 power = damage;
if (drain_power == POWER_MANA) if (drain_power == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power); power -= unitTarget->GetCritDamageReduction(power);
int32 new_damage; int32 new_damage;
if (curPower < power) if (curPower < power)
@ -4131,7 +4131,7 @@ void Spell::EffectPowerBurn(SpellEffectEntry const* effect)
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4) // resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
int32 power = damage; int32 power = damage;
if (powertype == POWER_MANA) if (powertype == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power); power -= unitTarget->GetCritDamageReduction(power);
int32 new_damage = (curPower < power) ? curPower : power; int32 new_damage = (curPower < power) ? curPower : power;

View file

@ -1605,10 +1605,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage* damageInfo, int32 damage, S
damage = SpellCriticalDamageBonus(spellInfo, damage, pVictim); damage = SpellCriticalDamageBonus(spellInfo, damage, pVictim);
// Resilience - reduce crit damage // Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask); uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
if (attackType != RANGED_ATTACK) damage -= pVictim->GetCritDamageReduction(reduction_affected_damage);
damage -= pVictim->GetMeleeCritDamageReduction(reduction_affected_damage);
else
damage -= pVictim->GetRangedCritDamageReduction(reduction_affected_damage);
} }
} }
break; break;
@ -1627,7 +1624,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage* damageInfo, int32 damage, S
damage = SpellCriticalDamageBonus(spellInfo, damage, pVictim); damage = SpellCriticalDamageBonus(spellInfo, damage, pVictim);
// Resilience - reduce crit damage // Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask); uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
damage -= pVictim->GetSpellCritDamageReduction(reduction_affected_damage); damage -= pVictim->GetCritDamageReduction(reduction_affected_damage);
} }
} }
break; break;
@ -1637,7 +1634,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage* damageInfo, int32 damage, S
if (GetTypeId() == TYPEID_PLAYER) if (GetTypeId() == TYPEID_PLAYER)
{ {
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask); uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
damage -= pVictim->GetSpellDamageReduction(reduction_affected_damage); damage -= pVictim->GetDamageReduction(reduction_affected_damage);
} }
// damage mitigation // damage mitigation
@ -1814,11 +1811,7 @@ void Unit::CalculateMeleeDamage(Unit* pVictim, uint32 damage, CalcDamageInfo* da
// Resilience - reduce crit damage // Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask); uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask);
uint32 resilienceReduction; uint32 resilienceReduction = pVictim->GetCritDamageReduction(reduction_affected_damage);
if (attackType != RANGED_ATTACK)
resilienceReduction = pVictim->GetMeleeCritDamageReduction(reduction_affected_damage);
else
resilienceReduction = pVictim->GetRangedCritDamageReduction(reduction_affected_damage);
damageInfo->damage -= resilienceReduction; damageInfo->damage -= resilienceReduction;
damageInfo->cleanDamage += resilienceReduction; damageInfo->cleanDamage += resilienceReduction;
@ -1933,11 +1926,7 @@ void Unit::CalculateMeleeDamage(Unit* pVictim, uint32 damage, CalcDamageInfo* da
if (GetTypeId() == TYPEID_PLAYER) if (GetTypeId() == TYPEID_PLAYER)
{ {
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask); uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask);
uint32 resilienceReduction; uint32 resilienceReduction = pVictim->GetDamageReduction(reduction_affected_damage);
if (attackType != RANGED_ATTACK)
resilienceReduction = pVictim->GetMeleeDamageReduction(reduction_affected_damage);
else
resilienceReduction = pVictim->GetRangedDamageReduction(reduction_affected_damage);
damageInfo->damage -= resilienceReduction; damageInfo->damage -= resilienceReduction;
damageInfo->cleanDamage += resilienceReduction; damageInfo->cleanDamage += resilienceReduction;
} }
@ -3442,9 +3431,6 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* pVictim, SpellEntry const* spell)
// Increase hit chance from attacker SPELL_AURA_MOD_SPELL_HIT_CHANCE and attacker ratings // Increase hit chance from attacker SPELL_AURA_MOD_SPELL_HIT_CHANCE and attacker ratings
HitChance += int32(m_modSpellHitChance * 100.0f); HitChance += int32(m_modSpellHitChance * 100.0f);
// Decrease hit chance from victim rating bonus
if (pVictim->GetTypeId() == TYPEID_PLAYER)
HitChance -= int32(((Player*)pVictim)->GetRatingBonusValue(CR_HIT_TAKEN_SPELL) * 100.0f);
if (HitChance < 100) HitChance = 100; if (HitChance < 100) HitChance = 100;
if (HitChance > 10000) HitChance = 10000; if (HitChance > 10000) HitChance = 10000;
@ -3572,15 +3558,6 @@ float Unit::MeleeMissChanceCalc(const Unit* pVictim, WeaponAttackType attType) c
else else
missChance -= m_modMeleeHitChance; missChance -= m_modMeleeHitChance;
// Hit chance for victim based on ratings
if (pVictim->GetTypeId() == TYPEID_PLAYER)
{
if (attType == RANGED_ATTACK)
missChance += ((Player*)pVictim)->GetRatingBonusValue(CR_HIT_TAKEN_RANGED);
else
missChance += ((Player*)pVictim)->GetRatingBonusValue(CR_HIT_TAKEN_MELEE);
}
// Modify miss chance by victim auras // Modify miss chance by victim auras
if (attType == RANGED_ATTACK) if (attType == RANGED_ATTACK)
missChance -= pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE); missChance -= pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE);
@ -3729,11 +3706,6 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, const Unit* pVict
crit += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE); crit += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE);
// reduce crit chance from Rating for players
if (attackType != RANGED_ATTACK)
crit -= pVictim->GetMeleeCritChanceReduction();
else
crit -= pVictim->GetRangedCritChanceReduction();
// Apply crit chance from defence skill // Apply crit chance from defence skill
crit += (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f; crit += (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f;
@ -3766,12 +3738,6 @@ uint32 Unit::GetWeaponSkillValue(WeaponAttackType attType, Unit const* target) c
: ((Player*)this)->GetSkillValue(skill); : ((Player*)this)->GetSkillValue(skill);
// Modify value from ratings // Modify value from ratings
value += uint32(((Player*)this)->GetRatingBonusValue(CR_WEAPON_SKILL)); value += uint32(((Player*)this)->GetRatingBonusValue(CR_WEAPON_SKILL));
switch (attType)
{
case BASE_ATTACK: value += uint32(((Player*)this)->GetRatingBonusValue(CR_WEAPON_SKILL_MAINHAND)); break;
case OFF_ATTACK: value += uint32(((Player*)this)->GetRatingBonusValue(CR_WEAPON_SKILL_OFFHAND)); break;
case RANGED_ATTACK: value += uint32(((Player*)this)->GetRatingBonusValue(CR_WEAPON_SKILL_RANGED)); break;
}
} }
else else
value = GetUnitMeleeSkill(target); value = GetUnitMeleeSkill(target);
@ -6953,11 +6919,7 @@ uint32 Unit::SpellDamageBonusTaken(Unit* pCaster, SpellEntry const* spellProto,
if (GetTypeId() != TYPEID_PLAYER) if (GetTypeId() != TYPEID_PLAYER)
continue; continue;
float mod = ((Player*)this)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f); TakenTotalMod *= ((*i)->GetModifier()->m_amount + 100.0f) / 100.0f;
if (mod < float((*i)->GetModifier()->m_amount))
mod = float((*i)->GetModifier()->m_amount);
TakenTotalMod *= (mod + 100.0f) / 100.0f;
} }
break; break;
case 20911: // Blessing of Sanctuary case 20911: // Blessing of Sanctuary
@ -7094,8 +7056,6 @@ bool Unit::IsSpellCrit(Unit* pVictim, SpellEntry const* spellProto, SpellSchoolM
crit_chance += pVictim->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE, schoolMask); crit_chance += pVictim->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE, schoolMask);
// Modify critical chance by victim SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE // Modify critical chance by victim SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE
crit_chance += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE); crit_chance += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE);
// Modify by player victim resilience
crit_chance -= pVictim->GetSpellCritChanceReduction();
} }
// scripted (increase crit chance ... against ... target by x%) // scripted (increase crit chance ... against ... target by x%)
@ -7968,11 +7928,7 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* pCaster, uint32 pdamage, WeaponAttackTy
if (GetTypeId() != TYPEID_PLAYER) if (GetTypeId() != TYPEID_PLAYER)
continue; continue;
float mod = ((Player*)this)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f); TakenPercent *= ((*i)->GetModifier()->m_amount + 100.0f) / 100.0f;
if (mod < float((*i)->GetModifier()->m_amount))
mod = float((*i)->GetModifier()->m_amount);
TakenPercent *= (mod + 100.0f) / 100.0f;
} }
break; break;
case 20911: // Blessing of Sanctuary case 20911: // Blessing of Sanctuary

View file

@ -489,18 +489,18 @@ enum CombatRating
CR_CRIT_MELEE = 8, CR_CRIT_MELEE = 8,
CR_CRIT_RANGED = 9, CR_CRIT_RANGED = 9,
CR_CRIT_SPELL = 10, CR_CRIT_SPELL = 10,
CR_HIT_TAKEN_MELEE = 11, CR_HIT_TAKEN_MELEE = 11, // obsolete
CR_HIT_TAKEN_RANGED = 12, CR_HIT_TAKEN_RANGED = 12, // obsolete
CR_HIT_TAKEN_SPELL = 13, CR_HIT_TAKEN_SPELL = 13, // obsolete
CR_CRIT_TAKEN_MELEE = 14, // COMBAT_RATING_RESILIENCE_CRIT_TAKEN CR_CRIT_TAKEN_MELEE = 14, // COMBAT_RATING_RESILIENCE_CRIT_TAKEN obsolete
CR_CRIT_TAKEN_RANGED = 15, // COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN CR_RESILIENCE_DAMAGE_TAKEN = 15, // old CR_CRIT_TAKEN_RANGED
CR_CRIT_TAKEN_SPELL = 16, CR_CRIT_TAKEN_SPELL = 16, // obsolete
CR_HASTE_MELEE = 17, CR_HASTE_MELEE = 17,
CR_HASTE_RANGED = 18, CR_HASTE_RANGED = 18,
CR_HASTE_SPELL = 19, CR_HASTE_SPELL = 19,
CR_WEAPON_SKILL_MAINHAND = 20, CR_WEAPON_SKILL_MAINHAND = 20, // obsolete
CR_WEAPON_SKILL_OFFHAND = 21, CR_WEAPON_SKILL_OFFHAND = 21, // obsolete
CR_WEAPON_SKILL_RANGED = 22, CR_WEAPON_SKILL_RANGED = 22, // obsolete
CR_EXPERTISE = 23, CR_EXPERTISE = 23,
CR_ARMOR_PENETRATION = 24, CR_ARMOR_PENETRATION = 24,
CR_MASTERY = 25 CR_MASTERY = 25
@ -1342,19 +1342,9 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss); void DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss);
// player or player's pet resilience (-1%) // player or player's pet resilience (-1%)
float GetMeleeCritChanceReduction() const { return GetCombatRatingReduction(CR_CRIT_TAKEN_MELEE); } uint32 GetCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_RESILIENCE_DAMAGE_TAKEN, 2.2f, 33.0f, damage); }
float GetRangedCritChanceReduction() const { return GetCombatRatingReduction(CR_CRIT_TAKEN_RANGED); }
float GetSpellCritChanceReduction() const { return GetCombatRatingReduction(CR_CRIT_TAKEN_SPELL); }
// player or player's pet resilience (-1%)
uint32 GetMeleeCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_MELEE, 2.2f, 33.0f, damage); }
uint32 GetRangedCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_RANGED, 2.2f, 33.0f, damage); }
uint32 GetSpellCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_SPELL, 2.2f, 33.0f, damage); }
// player or player's pet resilience (-1%), cap 100% // player or player's pet resilience (-1%), cap 100%
uint32 GetMeleeDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_MELEE, 2.0f, 100.0f, damage); } uint32 GetDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_RESILIENCE_DAMAGE_TAKEN, 2.0f, 100.0f, damage); }
uint32 GetRangedDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_MELEE, 2.0f, 100.0f, damage); }
uint32 GetSpellDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_MELEE, 2.0f, 100.0f, damage); }
float MeleeSpellMissChance(Unit* pVictim, WeaponAttackType attType, int32 skillDiff, SpellEntry const* spell); float MeleeSpellMissChance(Unit* pVictim, WeaponAttackType attType, int32 skillDiff, SpellEntry const* spell);
SpellMissInfo MeleeSpellHitResult(Unit* pVictim, SpellEntry const* spell); SpellMissInfo MeleeSpellHitResult(Unit* pVictim, SpellEntry const* spell);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "12107" #define REVISION_NR "0146"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__