# HG changeset patch # User Grumpy7 # Date 1371255784 -7200 # Node ID 5a3f48b370d5e0a59c33ab4159738cf4d1f59c9a # Parent 2e4a07ad5243016b7799f49d346d6337abed68f1 Player::GetSkillIdxByOrder cleanup - extracting common branch bodies diff -r 2e4a07ad5243 -r 5a3f48b370d5 Player.cpp --- a/Player.cpp Sat Jun 15 02:15:03 2013 +0200 +++ b/Player.cpp Sat Jun 15 02:23:04 2013 +0200 @@ -6367,69 +6367,43 @@ //----- (004903C9) -------------------------------------------------------- PLAYER_SKILL_TYPE Player::GetSkillIdxByOrder(signed int order) { - PLAYER_SKILL_TYPE result; // eax@5 - int v3; // edx@5 - char *v4; // ecx@5 - int v5; // esi@11 - unsigned __int16 *v6; // edx@11 - int v7; // esi@18 - unsigned __int16 *pActiveSkill; // edx@18 - - - if ( order >= 0 ) - { - - if ( order <= 1 ) - { - result = (PLAYER_SKILL_TYPE)0; - v7 = 0; - pActiveSkill = this->pActiveSkills; - for (int i = 0; i < 37; i++) - { - if ( this->pActiveSkills[i] && pSkillAvailabilityPerClass[classType / 4][i] == 2 ) // 2 - primary skill - { - if ( v7 == order ) - return (PLAYER_SKILL_TYPE)i; - ++v7; - } - } - } - else - { - if ( order <= 3 ) - { - result = (PLAYER_SKILL_TYPE)0; - v5 = 0; - pActiveSkill = this->pActiveSkills; - for (int i = 0; i < 37; i++) - { - if ( this->pActiveSkills[i] && pSkillAvailabilityPerClass[classType / 4][i] == 1 ) // 2 - primary skill - { - if ( v5 == order - 2 ) - return (PLAYER_SKILL_TYPE)i; - ++v5; - } - } - } - else - { - if ( order <= 12 ) - { - v3 = 0; - for (int i = 0; i < 37; i++) - { - if ( pSkillAvailabilityPerClass[classType / 4][i] == 1 ) - { - if ( v3 == order - 4 ) - return (PLAYER_SKILL_TYPE)i; - ++v3; - } - } - } - } - } - } - return (PLAYER_SKILL_TYPE)37; + int counter; // edx@5 + bool canBeInactive; + unsigned char requiredValue; + signed int offset; + + if ( order <= 1 ) + { + canBeInactive = false; + requiredValue = 2; // 2 - primary skill + offset = 0; + } + else if ( order <= 3 ) + { + canBeInactive = false; + requiredValue = 1; // 1 - available + offset = 2; + } + else if ( order <= 12 ) + { + canBeInactive = true; + requiredValue = 1; // 1 - available + offset = 4; + } + else + { + return (PLAYER_SKILL_TYPE)37; + } + counter = 0; + for (int i = 0; i < 37; i++) + { + if ( (this->pActiveSkills[i] || canBeInactive) && pSkillAvailabilityPerClass[classType / 4][i] == requiredValue ) + { + if ( counter == order - offset ) + return (PLAYER_SKILL_TYPE)i; + ++counter; + } + } }