Mercurial > mm7
changeset 1325:d9e4c0bbb2d2
GetActual(stat) common code extracted
author | Grumpy7 |
---|---|
date | Tue, 02 Jul 2013 01:15:03 +0200 |
parents | 78f0f74eab1d |
children | 27a699abee51 |
files | Player.cpp Player.h |
diffstat | 2 files changed, 82 insertions(+), 100 deletions(-) [+] |
line wrap: on
line diff
--- a/Player.cpp Tue Jul 02 00:39:26 2013 +0200 +++ b/Player.cpp Tue Jul 02 01:15:03 2013 +0200 @@ -91,21 +91,23 @@ unsigned char pBaseHealthPerLevelByClass[36] = {5, 7, 9, 9, 4, 6, 8, 8, 5, 6, 8, 8, 4, 5, 6, 6, 3, 4, 6, 6, 4, 5, 6, 6, 2, 3, 4, 4, 2, 3, 4, 4, 2, 3, 3, 3}; unsigned char pBaseManaPerLevelByClass[36] = {0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 2, 3, 3, 1, 2, 3, 3, 0, 2, 3, 3, 3, 4, 5, 5, 3, 4, 5, 5, 3, 4, 6, 6}; -unsigned char pConditionStrengthMultiplier[19] = {100, 100, 100, 120, 50, 200, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 100, 100}; -unsigned char pConditionIntelligenceMultiplier[19] = {100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100, 100, 1, 100}; -unsigned char pConditionWillpowerMultiplier[19] = {100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100, 100, 1, 100}; -unsigned char pConditionEnduranceMultiplier[19] = {100, 100, 100, 100, 50, 150, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 100, 100}; -unsigned char pConditionAccuracyMultiplier[19] = {100, 100, 100, 50, 10, 100, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 50, 100}; -unsigned char pConditionSpeedMultiplier[19] = {100, 100, 100, 120, 20, 120, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 50, 100}; -unsigned char pConditionLuckMultiplier[19] = {100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}; - -unsigned char pAgeingStrengthMultiplier[4] = {100, 75, 40, 10}; -unsigned char pAgeingIntelligenceMultiplier[4] = {100, 150, 100, 10}; -unsigned char pAgeingWillpowerMultiplier[4] = {100, 150, 100, 10}; -unsigned char pAgeingEnduranceMultiplier[4] = {100, 75, 40, 10}; -unsigned char pAgeingAccuracyMultiplier[4] = {100, 100, 40, 10}; -unsigned char pAgeingSpeedMultiplier[4] = {100, 100, 40, 10}; -unsigned char pAgeingLuckMultiplier[4] = {100, 100, 100, 100}; +unsigned char pConditionAttributeModifier[7][19] = +{{100, 100, 100, 120, 50, 200, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 100, 100}, //Might + {100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100, 100, 1, 100}, //Intelligence + {100, 100, 100, 50, 25, 10, 100, 100, 75, 60, 50, 30, 100, 100, 100, 100, 100, 1, 100}, //Willpower + {100, 100, 100, 100, 50, 150, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 100, 100}, //Endurance + {100, 100, 100, 50, 10, 100, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 50, 100}, //Accuracy + {100, 100, 100, 120, 20, 120, 75, 60, 50, 30, 25, 10, 100, 100, 100, 100, 100, 50, 100}, //Speed + {100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}}; //Luck + +unsigned char pAgingAttributeModifier[7][4] = +{{100, 75, 40, 10}, //Might + {100, 150, 100, 10}, //Intelligence + {100, 150, 100, 10}, //Willpower + {100, 75, 40, 10}, //Endurance + {100, 100, 40, 10}, //Accuracy + {100, 100, 40, 10}, //Speed + {100, 100, 100, 100}}; //Luck signed int pAgeingTable[4] = {50, 100, 150, 0xFFFF}; @@ -422,11 +424,11 @@ { return 1; } - else if (GetMajorConditionIdx() == 18) + else if (GetMajorConditionIdx() == Condition_Good) { return 0; } - else if (GetMajorConditionIdx() == 17 && (v2 == 78 || v2 > 80) && v2 <= 82) + else if (GetMajorConditionIdx() == Condition_Zombie && (v2 == 78 || v2 == 81 || v2 == 82)) { return 0; } @@ -2402,104 +2404,37 @@ //----- (0048C93C) -------------------------------------------------------- int Player::GetActualMight() { - uint uActualAge = GetBaseAge() + this->sAgeModifier; - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingStrengthMultiplier[i]; - else break; - - auto uConditionMult = pConditionStrengthMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uMight / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_STRENGTH) - + GetItemsBonus(CHARACTER_ATTRIBUTE_STRENGTH, 0) - + uMightBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_STRENGTH); } //----- (0048C9C2) -------------------------------------------------------- int Player::GetActualIntelligence() { - uint uActualAge = GetBaseAge() + this->sAgeModifier; - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingIntelligenceMultiplier[i]; - else break; - - auto uConditionMult = pConditionIntelligenceMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uIntelligence / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_INTELLIGENCE) - + GetItemsBonus(CHARACTER_ATTRIBUTE_INTELLIGENCE, 0) - + uIntelligenceBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_INTELLIGENCE); } //----- (0048CA3F) -------------------------------------------------------- int Player::GetActualWillpower() { - uint uActualAge = GetBaseAge() + sAgeModifier; - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingWillpowerMultiplier[i]; - else break; - - auto uConditionMult = pConditionWillpowerMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uWillpower / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_WILLPOWER) - + GetItemsBonus(CHARACTER_ATTRIBUTE_WILLPOWER, 0) - + uWillpowerBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_WILLPOWER); } //----- (0048CABC) -------------------------------------------------------- int Player::GetActualEndurance() { - uint uActualAge = GetBaseAge() + sAgeModifier; - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingEnduranceMultiplier[i]; - else break; - - auto uConditionMult = pConditionEnduranceMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uEndurance / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_ENDURANCE) - + GetItemsBonus(CHARACTER_ATTRIBUTE_ENDURANCE, 0) - + uEnduranceBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_ENDURANCE); } //----- (0048CB39) -------------------------------------------------------- int Player::GetActualAccuracy() { - - uint uActualAge = this->sAgeModifier + GetBaseAge(); - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingAccuracyMultiplier[i]; - else break; - - auto uConditionMult = pConditionAccuracyMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uAccuracy / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_ACCURACY) - + GetItemsBonus(CHARACTER_ATTRIBUTE_ACCURACY, 0) - + uAccuracyBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_ACCURACY); } //----- (0048CBB6) -------------------------------------------------------- int Player::GetActualSpeed() { - uint uActualAge = this->sAgeModifier + GetBaseAge(); - uint uAgeingMultiplier = 100; - for (uint i = 0; i < 4; ++i) - if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingSpeedMultiplier[i]; - else break; - - auto uConditionMult = pConditionSpeedMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uSpeed / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_SPEED) - + GetItemsBonus(CHARACTER_ATTRIBUTE_SPEED, 0) - + uSpeedBonus; + return GetActualAttribute(CHARACTER_ATTRIBUTE_SPEED); } //----- (0048CC33) -------------------------------------------------------- @@ -2515,19 +2450,66 @@ if ( CheckHiredNPCSpeciality(Psychic) ) npc_luck_bonus += 10; + return GetActualAttribute(CHARACTER_ATTRIBUTE_LUCK) + + npc_luck_bonus; +} + +//----- (new function) -------------------------------------------------------- +int Player::GetActualAttribute( CHARACTER_ATTRIBUTE_TYPE attrId ) +{ + unsigned __int16 attrValue = 0; + unsigned __int16 attrBonus = 0; + switch (attrId) + { + case CHARACTER_ATTRIBUTE_STRENGTH: + attrValue = uMight; + attrBonus = uMightBonus; + break; + case CHARACTER_ATTRIBUTE_INTELLIGENCE: + attrValue = uIntelligence; + attrBonus = uIntelligenceBonus; + break; + case CHARACTER_ATTRIBUTE_WILLPOWER: + attrValue = uWillpower; + attrBonus = uWillpowerBonus; + break; + case CHARACTER_ATTRIBUTE_ENDURANCE: + attrValue = uEndurance; + attrBonus = uEnduranceBonus; + break; + case CHARACTER_ATTRIBUTE_ACCURACY: + attrValue = uAccuracy; + attrBonus = uAccuracyBonus; + break; + case CHARACTER_ATTRIBUTE_SPEED: + attrValue = uSpeed; + attrBonus = uSpeedBonus; + break; + case CHARACTER_ATTRIBUTE_LUCK: + attrValue = uLuck; + attrBonus = uLuckBonus; + break; + default: + return 0; + } + uint uActualAge = this->sAgeModifier + GetBaseAge(); uint uAgeingMultiplier = 100; for (uint i = 0; i < 4; ++i) + { if (uActualAge >= pAgeingTable[i]) - uAgeingMultiplier = pAgeingLuckMultiplier[i]; - else break; - - auto uConditionMult = pConditionLuckMultiplier[GetMajorConditionIdx()]; - return uConditionMult * uAgeingMultiplier * uLuck / 100 / 100 - + GetMagicalBonus(CHARACTER_ATTRIBUTE_LUCK) - + GetItemsBonus(CHARACTER_ATTRIBUTE_LUCK, 0) - + uLuckBonus - + npc_luck_bonus; + uAgeingMultiplier = pAgingAttributeModifier[attrId][i]; + else + break; + } + + auto uConditionMult = pConditionAttributeModifier[attrId][GetMajorConditionIdx()]; + int magicBonus = GetMagicalBonus(attrId); + int itemBonus = GetItemsBonus(attrId, 0); + return uConditionMult * uAgeingMultiplier * attrValue / 100 / 100 + + magicBonus + + magicBonus + + attrBonus; } //----- (0048CCF5) --------------------------------------------------------
--- a/Player.h Tue Jul 02 00:39:26 2013 +0200 +++ b/Player.h Tue Jul 02 01:15:03 2013 +0200 @@ -477,6 +477,7 @@ bool CompareVariable(enum VariableType VarNum, signed int pValue); void UseItem_DrinkPotion_etc(signed int a2, int a3); bool AddItem(struct ItemGen *pItem); + int GetActualAttribute(CHARACTER_ATTRIBUTE_TYPE attrId); int GetBaseStrength(); int GetBaseIntelligence(); int GetBaseWillpower(); @@ -621,7 +622,6 @@ inline void SetZombie(bool state) {pConditions[Condition_Zombie] = state;} - __int64 pConditions[20]; unsigned __int64 uExperience; char pName[16];