#include "stdafx.h" #include "./ItemFormula.h" #include "NumericValues.h" #ifdef _NA_008124_20150313_AWAKENING_SYSTEM #include "AwakeningInfoParser.h" #endif // _NA_008124_20150313_AWAKENING_SYSTEM //================================================================================================== namespace ns_formula { ; // internal declarations static int _GetDivValue(LEVELTYPE ItemLV); static WORD _CalcLimitStatIncreaseValue(BYTE Enchant, int DivideValue, eRANK Rank); //-------------------------------------------------------------------------------------------------- DWORD ns_formula::CalcAttackPower(BYTE Enchant, LEVELTYPE ItemLV) { return GetWeaponEnchantWeightForEnchant(Enchant) + Enchant * GetWeaponEnchantWeightForLV(ItemLV); } DWORD ns_formula::CalcPhyDef(DWORD PhyDef, BYTE Enchant, LEVELTYPE ItemLV) { return PhyDef + (GetArmorEnchantWeightForEnchant(Enchant) + Enchant * GetArmorEnchantWeightForLV(ItemLV)); } #ifdef _NA_008124_20150313_AWAKENING_SYSTEM DWORD ns_formula::CalcAwakeningWeapon(const CODETYPE item_code, const BYTE awakening_grade) { return AwakeningInfoParser::Instance()->GetOptionValue(item_code, awakening_grade); } DWORD ns_formula::CalcAwakeningArmor(const CODETYPE item_code, const BYTE awakening_grade) { return AwakeningInfoParser::Instance()->GetOptionValue(item_code, awakening_grade); } #endif // _NA_008124_20150313_AWAKENING_SYSTEM static int ns_formula::_GetDivValue(LEVELTYPE ItemLV) { // °ø½Ä Àû¿ë½Ã Item ·¹º§ÀÌ 18ÀÌ»óÀÌ µÇ¾î¼­´Â ¾ÈµÈ´Ù. // Çö °ø½Ä¿¡¼­´Â 30ÀÌ»ó°ªÀ» ¾µ¼ö ¾ø´Ù. // while(ItemLV >= 18) ItemLV -= 11; LEVELTYPE conv_lv = ItemLV; switch (ItemLV) { case 13: conv_lv = 1; break; case 14: conv_lv = 2; break; case 15: conv_lv = 3; break; case 16: conv_lv = 4; break; case 17: conv_lv = 5; break; case 18: conv_lv = 6; break; case 22: conv_lv = 21; break; case 23: conv_lv = 21; break; case 24: conv_lv = 23; break; case 33: conv_lv = 31; break; case 34: conv_lv = 35; break; } if (conv_lv >= 18) { conv_lv -= 11; } return 2 * (3 - conv_lv / 6); } static WORD ns_formula::_CalcLimitStatIncreaseValue(BYTE Enchant, int DivideValue, eRANK Rank) { return (Enchant * (Enchant + 1) / DivideValue + Enchant) + GetLimitValueForRank(Rank); } // (lst1024)(080904) ±âÁ¸ °è»ê½Ä¿¡ º¯°æ°ªÀ» Àû¿ëÇÏ·Á ÇßÀ¸³ª ±âȹ¿¡¼­ º¯°æ°ª °è»ê¿¡ ¾î·Á¿òÀÌ ÀÖ¾î // ÆÀÀå´Ô°ú ÇùÀÇ ±âȹ ¿øÇϴ´ë·Î Çϱâ·ÎÇÔ // ±âÁ¸ »ó½ÂÆø(_CalcLimitStatIncreaseValue) ÀÚü¸¦ ½ºÅ©¸³Æ®°ª(fLimitRatio) À¸·Î Á¦¾î // 2ÁßÀ¸·Î °è»êÀÌ µÇ´Â ±¸Á¶. WORD ns_formula::CalcLimitStatWeapon(WORD ItemLimitStr, BYTE Enchant, eRANK Rank, LEVELTYPE ItemLV, float fLimitRatio) { #ifdef _NA_006363_20130103_NOT_CALC_ENCHANT_STAT return ItemLimitStr; // 0ÀÎæÀÏ ¶§ÀÇ °ªÀ» À¯Áö #endif //_NA_006363_20130103_NOT_CALC_ENCHANT_STAT // int DivideValue = _GetDivValue(ItemLV); #ifdef _NA_003966_20111227_ADD_ENCHANT if (Enchant > 12) { // ±âȹÆÀ ¿äû¿¡ µû¶ó 12 ÀÎþƮ ÀÌ»óÀº 12 ÀÎþƮ·Î Ãë±Þ. Enchant = 12; } #endif // _NA_003966_20111227_ADD_ENCHANT WORD wCurIncreaseValue = _CalcLimitStatIncreaseValue(Enchant, DivideValue, Rank); // (lst1024)(090223) Enchant°¡ 0À϶§´Â Enchant-1 == 255°ªÀ¸·Î °è»êµÊ. Áß°£ °è»êÀÌ ÇÊ¿ä ¾øÀ½. if (0==Enchant) return ItemLimitStr + wCurIncreaseValue; //.// WORD wBefIncreaseValue = _CalcLimitStatIncreaseValue(Enchant-1, DivideValue, Rank); return ItemLimitStr + wBefIncreaseValue + (WORD)((float)(wCurIncreaseValue - wBefIncreaseValue) * fLimitRatio); } WORD ns_formula::CalcLimitStatArmor(WORD ItemLimitStr, BYTE Enchant, eRANK Rank, LEVELTYPE ItemLV, float fLimitRatio) { return CalcLimitStatWeapon(ItemLimitStr, Enchant, Rank, ItemLV, fLimitRatio); } WORD ns_formula::CalcLimitLVAccessory(WORD ItemLimitEqLevel, eRANK Rank) { return (ItemLimitEqLevel+Rank*3); } // UNUSED: //WORD ns_formula::CalcPhyDefForDivineArmor(WORD wPhyDef, LEVELTYPE ItemLV) //{ // return ((wPhyDef*11/8)+((ItemLV+53)/6)); //} DWORD ns_formula::CalcDecreaseItemDuraValue(DWORD decreaseItemDuraRatio) { DWORD dwDecreaseDuraVal = random(1, 5); if ((DWORD)(random(0, 100)) <= decreaseItemDuraRatio) { dwDecreaseDuraVal /= 2; } return dwDecreaseDuraVal; } }; //end of namespace 'ns_formula' //==================================================================================================