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

View file

@ -2029,8 +2029,31 @@ void ObjectMgr::LoadItemPrototypes()
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_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);
break;
default:

View file

@ -5368,24 +5368,12 @@ void Player::UpdateRating(CombatRating cr)
if (affectStats)
UpdateAllSpellCritChances();
break;
case CR_HIT_TAKEN_MELEE: // Implemented in Unit::MeleeMissChanceCalc
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)
case CR_RESILIENCE_DAMAGE_TAKEN:
break;
case CR_HASTE_MELEE: // Implemented in Player::ApplyRatingMod
case CR_HASTE_RANGED:
case CR_HASTE_SPELL:
break;
case CR_WEAPON_SKILL_MAINHAND: // Implemented in Unit::RollMeleeOutcomeAgainst
case CR_WEAPON_SKILL_OFFHAND:
case CR_WEAPON_SKILL_RANGED:
break;
case CR_EXPERTISE:
if (affectStats)
{
@ -5397,6 +5385,16 @@ void Player::UpdateRating(CombatRating cr)
if (affectStats)
UpdateArmorPenetration();
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)
{
case ITEM_MOD_MANA:
/*case ITEM_MOD_MANA:
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(val), apply);
break;
case ITEM_MOD_HEALTH: // modify HP
HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, float(val), apply);
break;
break;*/
case ITEM_MOD_AGILITY: // modify agility
HandleStatModifier(UNIT_MOD_STAT_AGILITY, BASE_VALUE, 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);
ApplyStatBuffMod(STAT_STAMINA, float(val), apply);
break;
case ITEM_MOD_DEFENSE_SKILL_RATING:
ApplyRatingMod(CR_DEFENSE_SKILL, int32(val), apply);
break;
case ITEM_MOD_DODGE_RATING:
ApplyRatingMod(CR_DODGE, int32(val), apply);
break;
case ITEM_MOD_PARRY_RATING:
ApplyRatingMod(CR_PARRY, int32(val), apply);
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:
ApplyRatingMod(CR_CRIT_RANGED, int32(val), apply);
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:
ApplyRatingMod(CR_HIT_MELEE, 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_SPELL, int32(val), apply);
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:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, int32(val), apply);
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, int32(val), apply);
ApplyRatingMod(CR_RESILIENCE_DAMAGE_TAKEN, int32(val), apply);
break;
case ITEM_MOD_HASTE_RATING:
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:
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, float(val), apply);
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:
ApplySpellPowerBonus(int32(val), apply);
break;
@ -7307,13 +7236,35 @@ void Player::_ApplyItemBonuses(ItemPrototype const* proto, uint8 slot, bool appl
ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -int32(val), apply);
m_spellPenetrationItemMod += apply ? val : -val;
break;
case ITEM_MOD_BLOCK_VALUE:
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, float(val), apply);
case ITEM_MOD_MASTERY_RATING:
ApplyRatingMod(CR_MASTERY, int32(val), apply);
break;
// 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_SPELL_HEALING_DONE:
case ITEM_MOD_SPELL_DAMAGE_DONE:
case ITEM_MOD_MANA_REGENERATION:
case ITEM_MOD_ARMOR_PENETRATION_RATING:
case ITEM_MOD_BLOCK_VALUE:
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);
switch (enchant_spell_id)
{
case ITEM_MOD_MANA:
/*case ITEM_MOD_MANA:
DEBUG_LOG("+ %u MANA", enchant_amount);
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, float(enchant_amount), apply);
break;
break;*/
case ITEM_MOD_HEALTH:
DEBUG_LOG("+ %u HEALTH", enchant_amount);
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);
ApplyStatBuffMod(STAT_STAMINA, float(enchant_amount), apply);
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:
ApplyRatingMod(CR_DODGE, enchant_amount, apply);
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);
DEBUG_LOG("+ %u PARRY", enchant_amount);
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:
ApplyRatingMod(CR_CRIT_RANGED, enchant_amount, apply);
DEBUG_LOG("+ %u RANGED_CRIT", enchant_amount);
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:
ApplyRatingMod(CR_HIT_MELEE, 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);
DEBUG_LOG("+ %u CRITICAL", enchant_amount);
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:
ApplyRatingMod(CR_CRIT_TAKEN_MELEE, enchant_amount, apply);
ApplyRatingMod(CR_CRIT_TAKEN_RANGED, enchant_amount, apply);
ApplyRatingMod(CR_CRIT_TAKEN_SPELL, enchant_amount, apply);
ApplyRatingMod(CR_RESILIENCE_DAMAGE_TAKEN, enchant_amount, apply);
DEBUG_LOG("+ %u RESILIENCE", enchant_amount);
break;
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);
DEBUG_LOG("+ %u RANGED_ATTACK_POWER", enchant_amount);
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:
ApplySpellPowerBonus(enchant_amount, apply);
DEBUG_LOG("+ %u SPELL_POWER", enchant_amount);
break;
case ITEM_MOD_BLOCK_VALUE:
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, float(enchant_amount), apply);
case ITEM_MOD_SPELL_PENETRATION:
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;
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_SPELL_HEALING_DONE: // deprecated
case ITEM_MOD_SPELL_DAMAGE_DONE: // deprecated
case ITEM_MOD_SPELL_HEALING_DONE:
case ITEM_MOD_SPELL_DAMAGE_DONE:
case ITEM_MOD_MANA_REGENERATION:
case ITEM_MOD_ARMOR_PENETRATION_RATING:
case ITEM_MOD_BLOCK_VALUE:
default:
break;
}

View file

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

View file

@ -7342,13 +7342,13 @@ void Aura::PeriodicTick()
{
cleanDamage.hitOutCome = MELEE_HIT_CRIT;
// Resilience - reduce crit damage
pdamage -= target->GetSpellCritDamageReduction(pdamage);
pdamage -= target->GetCritDamageReduction(pdamage);
}
// only from players
// FIXME: need use SpellDamageBonus instead?
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));
@ -7434,13 +7434,13 @@ void Aura::PeriodicTick()
{
cleanDamage.hitOutCome = MELEE_HIT_CRIT;
// Resilience - reduce crit damage
pdamage -= target->GetSpellCritDamageReduction(pdamage);
pdamage -= target->GetCritDamageReduction(pdamage);
}
// only from players
// FIXME: need use SpellDamageBonus instead?
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));
@ -7636,7 +7636,7 @@ void Aura::PeriodicTick()
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
if (power == POWER_MANA)
drain_amount -= target->GetSpellCritDamageReduction(drain_amount);
drain_amount -= target->GetCritDamageReduction(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)
if (powerType == POWER_MANA)
pdamage -= target->GetSpellCritDamageReduction(pdamage);
pdamage -= target->GetCritDamageReduction(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)
uint32 power = damage;
if (drain_power == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power);
power -= unitTarget->GetCritDamageReduction(power);
int32 new_damage;
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)
int32 power = damage;
if (powertype == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power);
power -= unitTarget->GetCritDamageReduction(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);
// Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
if (attackType != RANGED_ATTACK)
damage -= pVictim->GetMeleeCritDamageReduction(reduction_affected_damage);
else
damage -= pVictim->GetRangedCritDamageReduction(reduction_affected_damage);
damage -= pVictim->GetCritDamageReduction(reduction_affected_damage);
}
}
break;
@ -1627,7 +1624,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage* damageInfo, int32 damage, S
damage = SpellCriticalDamageBonus(spellInfo, damage, pVictim);
// Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
damage -= pVictim->GetSpellCritDamageReduction(reduction_affected_damage);
damage -= pVictim->GetCritDamageReduction(reduction_affected_damage);
}
}
break;
@ -1637,7 +1634,7 @@ void Unit::CalculateSpellDamage(SpellNonMeleeDamage* damageInfo, int32 damage, S
if (GetTypeId() == TYPEID_PLAYER)
{
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damage, damageSchoolMask);
damage -= pVictim->GetSpellDamageReduction(reduction_affected_damage);
damage -= pVictim->GetDamageReduction(reduction_affected_damage);
}
// damage mitigation
@ -1814,11 +1811,7 @@ void Unit::CalculateMeleeDamage(Unit* pVictim, uint32 damage, CalcDamageInfo* da
// Resilience - reduce crit damage
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask);
uint32 resilienceReduction;
if (attackType != RANGED_ATTACK)
resilienceReduction = pVictim->GetMeleeCritDamageReduction(reduction_affected_damage);
else
resilienceReduction = pVictim->GetRangedCritDamageReduction(reduction_affected_damage);
uint32 resilienceReduction = pVictim->GetCritDamageReduction(reduction_affected_damage);
damageInfo->damage -= resilienceReduction;
damageInfo->cleanDamage += resilienceReduction;
@ -1933,11 +1926,7 @@ void Unit::CalculateMeleeDamage(Unit* pVictim, uint32 damage, CalcDamageInfo* da
if (GetTypeId() == TYPEID_PLAYER)
{
uint32 reduction_affected_damage = CalcNotIgnoreDamageReduction(damageInfo->damage, damageInfo->damageSchoolMask);
uint32 resilienceReduction;
if (attackType != RANGED_ATTACK)
resilienceReduction = pVictim->GetMeleeDamageReduction(reduction_affected_damage);
else
resilienceReduction = pVictim->GetRangedDamageReduction(reduction_affected_damage);
uint32 resilienceReduction = pVictim->GetDamageReduction(reduction_affected_damage);
damageInfo->damage -= 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
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 > 10000) HitChance = 10000;
@ -3572,15 +3558,6 @@ float Unit::MeleeMissChanceCalc(const Unit* pVictim, WeaponAttackType attType) c
else
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
if (attType == RANGED_ATTACK)
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);
// reduce crit chance from Rating for players
if (attackType != RANGED_ATTACK)
crit -= pVictim->GetMeleeCritChanceReduction();
else
crit -= pVictim->GetRangedCritChanceReduction();
// Apply crit chance from defence skill
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);
// Modify value from ratings
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
value = GetUnitMeleeSkill(target);
@ -6953,11 +6919,7 @@ uint32 Unit::SpellDamageBonusTaken(Unit* pCaster, SpellEntry const* spellProto,
if (GetTypeId() != TYPEID_PLAYER)
continue;
float mod = ((Player*)this)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f);
if (mod < float((*i)->GetModifier()->m_amount))
mod = float((*i)->GetModifier()->m_amount);
TakenTotalMod *= (mod + 100.0f) / 100.0f;
TakenTotalMod *= ((*i)->GetModifier()->m_amount + 100.0f) / 100.0f;
}
break;
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);
// 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);
// Modify by player victim resilience
crit_chance -= pVictim->GetSpellCritChanceReduction();
}
// scripted (increase crit chance ... against ... target by x%)
@ -7968,11 +7928,7 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* pCaster, uint32 pdamage, WeaponAttackTy
if (GetTypeId() != TYPEID_PLAYER)
continue;
float mod = ((Player*)this)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f);
if (mod < float((*i)->GetModifier()->m_amount))
mod = float((*i)->GetModifier()->m_amount);
TakenPercent *= (mod + 100.0f) / 100.0f;
TakenPercent *= ((*i)->GetModifier()->m_amount + 100.0f) / 100.0f;
}
break;
case 20911: // Blessing of Sanctuary

View file

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

View file

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