Mercurial > mm7
diff Player.cpp @ 1559:1f3f01d39300
Player::CanTrainToNextLevel simplified, Player::GetExperienceDisplayColor shortened a bit Player::CalculateIncommingDamage + fixed resistances not working if no resistance bonus (ignored luck bonus)
author | Grumpy7 |
---|---|
date | Sun, 08 Sep 2013 00:35:03 +0200 |
parents | 30db6d265ceb |
children | a0cd6465ae0d |
line wrap: on
line diff
--- a/Player.cpp Sat Sep 07 23:06:13 2013 +0200 +++ b/Player.cpp Sun Sep 08 00:35:03 2013 +0200 @@ -1890,98 +1890,74 @@ //----- (0048D45A) -------------------------------------------------------- bool Player::CanTrainToNextLevel() { - int v1; // edx@1 - int v2; // eax@1 - int i; // esi@1 - - v1 = this->uLevel; - v2 = 0; - for ( i = 0; i < v1; ++i ) - v2 += i + 1; - return (signed __int64)this->uExperience >= 1000 * v2; + int lvl = this->uLevel; + int neededExp = ((lvl * (lvl - 1)) / 2 * 1000); } //----- (0048D498) -------------------------------------------------------- unsigned int Player::GetExperienceDisplayColor() { - unsigned int result; // eax@2 - if ( CanTrainToNextLevel() ) - result = ui_character_bonus_text_color; + return ui_character_bonus_text_color; else - result = ui_character_default_text_color; - return result; + return ui_character_default_text_color; } //----- (0048D4B3) -------------------------------------------------------- -int Player::CalculateIncommingDamage( DAMAGE_TYPE dmg_type, int amount ) +int Player::CalculateIncommingDamage( DAMAGE_TYPE dmg_type, int dmg ) { int resist_value; // edi@8 int player_luck; // eax@21 signed int res_rand_divider; // ebx@2 int armor_skill; // eax@29 - enum CHARACTER_ATTRIBUTE_TYPE player_resist; // [sp-4h] [bp-10h]@9 - signed int result_amount_dmg; // [sp+8h] [bp-4h]@17 - - player_resist=CHARACTER_ATTRIBUTE_STRENGTH; + + resist_value = 0; switch(dmg_type) { - case DMGT_FIRE: player_resist=CHARACTER_ATTRIBUTE_RESIST_FIRE; break; - case DMGT_ELECTR: player_resist=CHARACTER_ATTRIBUTE_RESIST_AIR; break; - case DMGT_COLD: player_resist=CHARACTER_ATTRIBUTE_RESIST_WATER; break; - case DMGT_3: player_resist=CHARACTER_ATTRIBUTE_RESIST_EARTH; break; + case DMGT_FIRE: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_FIRE); break; + case DMGT_ELECTR: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_AIR); break; + case DMGT_COLD: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_WATER); break; + case DMGT_EARTH: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_EARTH); break; - case DMGT_SPIRIT: player_resist=CHARACTER_ATTRIBUTE_RESIST_SPIRIT;break; - case DMGT_MIND: player_resist=CHARACTER_ATTRIBUTE_RESIST_MIND; break; - case DMGT_BODY: player_resist=CHARACTER_ATTRIBUTE_RESIST_BODY; break; + case DMGT_SPIRIT: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_SPIRIT);break; + case DMGT_MIND: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_MIND); break; + case DMGT_BODY: resist_value = GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_BODY); break; } - if (player_resist) - resist_value = GetActualResistance(player_resist); - else - resist_value = 0; - - result_amount_dmg = amount; + if ( classType == PLAYER_CLASS_LICH && resist_value >= 200 ) return 0; player_luck = GetActualLuck(); res_rand_divider = GetParameterBonus(player_luck) + resist_value + 30; - if ( resist_value ) + if ( GetParameterBonus(player_luck) + resist_value > 0 ) { - if ( rand() % res_rand_divider >= 30 ) - { - result_amount_dmg = amount >> 1; + for (int i = 0; i < 4; i++) + { if ( rand() % res_rand_divider >= 30 ) - { - result_amount_dmg = amount >> 2; - if ( rand() % res_rand_divider >= 30 ) - { - result_amount_dmg = amount >> 3; - if ( rand() % res_rand_divider >= 30 ) - result_amount_dmg = amount >> 4; - } - } - } - } - if (( dmg_type == DMGT_PHISYCAL )&&( pEquipment.uArmor )) - { - if (!pOwnItems[pEquipment.uArmor-1].Broken()) + dmg >>= 1; + else + break; + } + } + if (( dmg_type == DMGT_PHISYCAL ) && ( pEquipment.uArmor )) + { + if (!pOwnItems[pEquipment.uArmor - 1].Broken()) { armor_skill = GetEquippedItemSkillType(EQUIP_ARMOUR); if ( armor_skill==PLAYER_SKILL_PLATE ) { if ( SkillToMastery(pActiveSkills[PLAYER_SKILL_PLATE]) >= 3 ) - return (int)(double)result_amount_dmg * 0.5; + return dmg / 2; } if (armor_skill==PLAYER_SKILL_CHAIN ) { if (SkillToMastery(pActiveSkills[PLAYER_SKILL_CHAIN]) == 4) - return (int)(double)result_amount_dmg * 0.66670001; + return dmg * 2 / 3; } } } - return result_amount_dmg; + return dmg; } //----- (0048D62C) --------------------------------------------------------