Index: Unit.cpp =================================================================== --- Unit.cpp (revision 5434) +++ Unit.cpp (working copy) @@ -2675,16 +2675,6 @@ return MELEE_HIT_DODGE; } - int32 modCrit = 0; - // reduce crit chance from Rating for players - if (pVictim->GetTypeId()==TYPEID_PLAYER) - { - if (attType==RANGED_ATTACK) - modCrit -= int32(((Player*)pVictim)->GetRatingBonusValue(PLAYER_FIELD_CRIT_TAKEN_RANGED_RATING)*100); - else - modCrit -= int32(((Player*)pVictim)->GetRatingBonusValue(PLAYER_FIELD_CRIT_TAKEN_MELEE_RATING)*100); - } - // check if attack comes from behind if (!pVictim->HasInArc(M_PI,this)) { @@ -2710,7 +2700,7 @@ && (roll < (sum += tmp))) { // Critical chance - tmp = crit_chance + skillBonus + modCrit; + tmp = crit_chance + skillBonus; if ( GetTypeId() == TYPEID_PLAYER && SpellCasted && tmp > 0 ) { if ( roll_chance_f(tmp/100)) @@ -2725,7 +2715,7 @@ } // Critical chance - tmp = crit_chance + skillBonus + modCrit; + tmp = crit_chance + skillBonus; if (tmp > 0 && roll < (sum += tmp)) { @@ -2856,7 +2846,7 @@ else misschance += (leveldif - 2) * chance; - misschance -= pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE);; + misschance -= pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE); // Add victim rating bonus if (pVictim->GetTypeId()==TYPEID_PLAYER) @@ -3101,6 +3091,15 @@ // flat crit += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE); + // reduce crit chance from Rating for players + if (pVictim->GetTypeId()==TYPEID_PLAYER) + { + if (attackType==RANGED_ATTACK) + crit -= ((Player*)pVictim)->GetRatingBonusValue(PLAYER_FIELD_CRIT_TAKEN_RANGED_RATING); + else + crit -= ((Player*)pVictim)->GetRatingBonusValue(PLAYER_FIELD_CRIT_TAKEN_MELEE_RATING); + } + if (crit < 0.0f) crit = 0.0f; return crit;