#include "stdafx.h" #include "./NumericValues.h" //================================================================================================== // @history // - ~10.12.20 // - 10.12.20, waverix, moved macro logic in header to code file to support multi-version // fixed invalid output string meta formats // - 11.02.07, waverix, added logging facility // //================================================================================================== // DONE: do add logger for quantitative analysis #ifdef _SERVER namespace ns_formula { ; static void FormulaLogger(const ulong error_index, const char* method, const int line_no, const char* meta_format, int param); enum { eCounter_Begin = __COUNTER__, }; #define COUNTER_INCREMENT_INDEX() (__COUNTER__ - eCounter_Begin) #define FORMULA_ERROR_LOG(meta_format, arg) \ FormulaLogger(COUNTER_INCREMENT_INDEX(), __FUNCTION__, __LINE__, meta_format, arg) }; //end of namespace //================================================================================================== #else //================================================================================================== #define FORMULA_ERROR_LOG(meta_format, arg) #endif //================================================================================================== namespace ns_formula { ; // ¾ÆÀÌÅÛ °¡°Ý °ü·Ã float ns_formula::GetPriceWeightForEnchant(const uint8_t enchant) { switch (enchant) { case 0: return 1.0f; case 1: return 1.5f; case 2: return 2.25f; case 3: return 3.38f; case 4: return 5.06f; case 5: return 7.59f; case 6: return 11.39f; case 7: return 17.09f; case 8: return 25.63f; case 9: return 38.44f; case 10: return 57.67f; case 11: return 86.50f; case 12: return 129.75f; case 13: return 194.63f; case 14: return 251.45f; case 15: return 337.18f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", enchant); return 0.3f; } float ns_formula::GetPriceWeightForRank(eRANK param) { switch (param) { case RANK_E: return 1.0f; case RANK_D: return 1.7f; case RANK_C: return 2.89f; case RANK_B: return 4.91f; case RANK_MA: return 8.35f; case RANK_A: return 14.20f; case RANK_PA: return 24.14f; case RANK_MS: return 41.03f; case RANK_S: return 69.76f; case RANK_PS: return 118.59f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; } // ÀÎæƮ½Ã ¼Ò¸ðºñ¿ë Ã¥Á¤¿ë float ns_formula::GetPriceWeightForEnchantFare(const uint8_t enchant) { switch (enchant) { case 0: return 1.0f; case 1: return 1.4f; case 2: return 1.96f; case 3: return 2.74f; case 4: return 3.84f; case 5: return 5.38f; case 6: return 7.53f; case 7: return 10.54f; case 8: return 14.76f; case 9: return 20.66f; case 10: return 28.93f; case 11: return 40.50f; case 12: return 56.69f; case 13: return 56.69f; case 14: return 56.69f; case 15: return 56.69f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", enchant); return 0.3f; } float ns_formula::GetPriceWeightForRankFare(eRANK param) { switch (param) { case RANK_E: return 1.0f; case RANK_D: return 1.5f; case RANK_C: return 2.0f; case RANK_B: return 2.5f; case RANK_MA: return 3.0f; case RANK_A: return 3.5f; case RANK_PA: return 4.0f; case RANK_MS: return 4.5f; case RANK_S: return 5.0f; case RANK_PS: return 6.0f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; } // 2006.4.22 : ÅÂÇöº¯°æ¿äû int ns_formula::GetLimitValueForRank(BYTE param) { switch (param) { case RANK_E: return 0; case RANK_D: return 0; case RANK_C: return 0; case RANK_B: return 0; case RANK_MA: return 0; case RANK_A: return 0; case RANK_PA: return 0; case RANK_MS: return 0; case RANK_S: return 0; case RANK_PS: return 0; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 0; } //--------------------------------------------------------------------------------------------------------- // ÀÎþƮ °ü·Ã int ns_formula::GetWeaponEnchantWeightForEnchant(const uint8_t enchant) { switch (enchant) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 1; case 4: return 2; case 5: return 3; case 6: return 5; case 7: return 7; case 8: return 10; case 9: return 13; case 10: return 18; case 11: return 24; case 12: return 31; case 13: return 43; case 14: return 60; case 15: return 82; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", enchant); return 0; } int ns_formula::GetWeaponEnchantWeightForLV(LEVELTYPE param) { // changed rules by _NA_002128_20110228_MODIFY_ITEM_LEVEL if (param < ItemCustomLevel::kMinLV || param > ItemCustomLevel::kMaxLV) { FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); enum { kDefaultWeight = 2 }; return kDefaultWeight; } static const int weight_map[ItemCustomLevel::kMaxLV] = /*1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39*/ { 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; return weight_map[param-1]; } int ns_formula::GetArmorEnchantWeightForEnchant(const uint8_t enchant) { switch (enchant) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 1; case 4: return 2; case 5: return 3; case 6: return 5; case 7: return 7; case 8: return 10; case 9: return 13; case 10: return 18; case 11: return 24; case 12: return 31; case 13: return 43; case 14: return 60; case 15: return 82; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", enchant); return 0; } int ns_formula::GetArmorEnchantWeightForLV(LEVELTYPE param) { // changed rules by _NA_002128_20110228_MODIFY_ITEM_LEVEL if (param < ItemCustomLevel::kMinLV || param > ItemCustomLevel::kMaxLV) { FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); enum { kDefaultWeight = 1 }; return kDefaultWeight; } static const int weight_map[ItemCustomLevel::kMaxLV] = /*1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39*/ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; return weight_map[param-1]; } //--------------------------------------------------------------------------------------------------------- // ³»±¸µµ °ü·Ã : ÀÎþƮ ´©Àû ³»±¸µµ uint8_t ns_formula::GetDuraEnchantWeightForEnchant(const uint8_t enchant) { switch (enchant) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 1; case 4: return 2; case 5: return 3; case 6: return 5; case 7: return 7; case 8: return 9; case 9: return 12; case 10: return 15; case 11: return 18; case 12: return 22; case 13: return 22; case 14: return 22; case 15: return 22; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", enchant); return 0; } //--------------------------------------------------------------------------------------------------------- // ÀÎþƮ, ·©Å© Á¦ÇѼöÄ¡ °ü·Ã ////////////////////////////////////////////////////////////////////////// // ¹«±â ¾ÆÀÌÅÛÀÇ Á¦ÇѼöÄ¡ ////////////////////////////////////////////////////////////////////////// //int GetLimitStrForWeapon(eCHAR_TYPE param, eITEMTYPE type) //int GetLimitDexForWeapon(eCHAR_TYPE param, eITEMTYPE type) //int GetLimitIntForWeapon(eCHAR_TYPE param, eITEMTYPE type) ////////////////////////////////////////////////////////////////////////// // ¹æ¾î±¸ ¾ÆÀÌÅÛÀÇ Á¦ÇѼöÄ¡ ////////////////////////////////////////////////////////////////////////// //_NA_0_20081015_EXP_LEVEL_RATIO float ns_formula::GetExpLevelRatioKorea(int param) { switch (param) { case 30: return 0.01f; case 29: return 0.01f; case 28: return 0.01f; case 27: return 0.12f; case 26: return 0.12f; case 25: return 0.12f; case 24: return 0.23f; case 23: return 0.23f; case 22: return 0.23f; case 21: return 0.34f; case 20: return 0.34f; case 19: return 0.34f; case 18: return 0.45f; case 17: return 0.45f; case 16: return 0.45f; case 15: return 0.56f; case 14: return 0.56f; case 13: return 0.56f; case 12: return 0.67f; case 11: return 0.67f; case 10: return 0.67f; case 9: return 0.78f; case 8: return 0.78f; case 7: return 0.78f; case 6: return 0.89f; case 5: return 0.89f; case 4: return 0.89f; case 3: return 1.00f; case 2: return 1.00f; case 1: return 1.00f; case 0: return 1.00f; case -1: return 1.00f; case -2: return 1.00f; case -3: return 1.00f; case -4: return 0.89f; case -5: return 0.89f; case -6: return 0.89f; case -7: return 0.79f; case -8: return 0.79f; case -9: return 0.79f; case -10: return 0.68f; case -11: return 0.68f; case -12: return 0.68f; case -13: return 0.57f; case -14: return 0.57f; case -15: return 0.57f; case -16: return 0.47f; case -17: return 0.47f; case -18: return 0.47f; case -19: return 0.36f; case -20: return 0.36f; case -21: return 0.36f; case -22: return 0.25f; case -23: return 0.25f; case -24: return 0.25f; case -25: return 0.14f; case -26: return 0.14f; case -27: return 0.14f; case -28: return 0.04f; case -29: return 0.04f; case -30: return 0.04f; }; return 0.00f; } //_NA_0_20081015_EXP_LEVEL_RATIO float ns_formula::GetExpLevelRatioChina(int param) { if (param >= 20 || param <= -20) return 0.01f; switch (param) { case 30: return 0.01f; case 29: return 0.01f; case 28: return 0.01f; case 27: return 0.12f; case 26: return 0.12f; case 25: return 0.12f; case 24: return 0.23f; case 23: return 0.23f; case 22: return 0.23f; case 21: return 0.34f; case 20: return 0.34f; case 19: return 0.34f; case 18: return 0.45f; case 17: return 0.45f; case 16: return 0.45f; case 15: return 0.56f; case 14: return 0.56f; case 13: return 0.56f; case 12: return 0.67f; case 11: return 0.67f; case 10: return 0.67f; case 9: return 0.78f; case 8: return 0.78f; case 7: return 0.78f; case 6: return 0.89f; case 5: return 0.89f; case 4: return 0.89f; case 3: return 1.00f; case 2: return 1.00f; case 1: return 1.00f; case 0: return 1.00f; case -1: return 1.00f; case -2: return 1.00f; case -3: return 1.00f; case -4: return 0.89f; case -5: return 0.89f; case -6: return 0.89f; case -7: return 0.79f; case -8: return 0.79f; case -9: return 0.79f; case -10: return 0.68f; case -11: return 0.68f; case -12: return 0.68f; case -13: return 0.57f; case -14: return 0.57f; case -15: return 0.57f; case -16: return 0.47f; case -17: return 0.47f; case -18: return 0.47f; case -19: return 0.36f; case -20: return 0.36f; case -21: return 0.36f; case -22: return 0.25f; case -23: return 0.25f; case -24: return 0.25f; case -25: return 0.14f; case -26: return 0.14f; case -27: return 0.14f; case -28: return 0.04f; case -29: return 0.04f; case -30: return 0.04f; }; return 0.00f; } // Exp Á¶Á¤%°ª float ns_formula::GetExpLevelRatio(int param) { switch (param) { case 1: return 1.0f; case 2: return 1.0f; case 3: return 0.95f; case 4: return 0.95f; case 5: return 0.9f; case 6: return 0.9f; case 7: return 0.85f; case 8: return 0.85f; case 9: return 0.8f; case 10: return 0.8f; case 11: return 0.75f; case 12: return 0.75f; case 13: return 0.7f; case 14: return 0.7f; case 15: return 0.6f; case 16: return 0.5f; case 17: return 0.4f; case 18: return 0.3f; case 19: return 0.2f; }; if (param <= 0) return 1.0f; else return 0.1f; } // ÆÄƼ¿ø Æò±Õ·¹º§¿¡ ´ëÇÑ ³»·¹º§ ºñÁß float ns_formula::GetPartyLevelExpRatio(int param) { switch (param) { case 30: return 1.5f; case 29: return 1.5f; case 28: return 1.5f; case 27: return 1.45f; case 26: return 1.45f; case 25: return 1.45f; case 24: return 1.4f; case 23: return 1.4f; case 22: return 1.4f; case 21: return 1.35f; case 20: return 1.35f; case 19: return 1.35f; case 18: return 1.3f; case 17: return 1.3f; case 16: return 1.3f; case 15: return 1.25f; case 14: return 1.25f; case 13: return 1.25f; case 12: return 1.2f; case 11: return 1.2f; case 10: return 1.2f; case 9: return 1.15f; case 8: return 1.15f; case 7: return 1.15f; case 6: return 1.1f; case 5: return 1.1f; case 4: return 1.1f; case 3: return 1.05f; case 2: return 1.05f; case 1: return 1.05f; case 0: return 1.0f; case -1: return 0.95f; case -2: return 0.95f; case -3: return 0.95f; case -4: return 0.9f; case -5: return 0.9f; case -6: return 0.9f; case -7: return 0.85f; case -8: return 0.85f; case -9: return 0.85f; case -10: return 0.8f; case -11: return 0.8f; case -12: return 0.8f; case -13: return 0.75f; case -14: return 0.75f; case -15: return 0.75f; case -16: return 0.7f; case -17: return 0.7f; case -18: return 0.7f; case -19: return 0.65f; case -20: return 0.65f; case -21: return 0.65f; case -22: return 0.6f; case -23: return 0.6f; case -24: return 0.6f; case -25: return 0.55f; case -26: return 0.55f; case -27: return 0.55f; case -28: return 0.5f; case -29: return 0.5f; case -30: return 0.5f; }; if (param >= 30) return 1.5f; else return 0.5f; } // Exp Ãß°¡%°ª(Çʵå) float ns_formula::GetFieldExpPartyBonusFactor(DWORD num_party_members) { #ifdef _NA_003481_20111026_EXP_PARTYBONUS_CHANGE // ÆÄƼ Àοø¼ö¿¡ µû¸¥ °æÇèÄ¡ Áõ°¡À² º¯°æ - arycoat 2011.10.26 switch (num_party_members) { case 1: return 1.00f; case 2: return 1.15f; case 3: return 1.31f; case 4: return 1.48f; case 5: return 1.66f; case 6: return 1.85f; case 7: return 2.05f; case 8: return 2.26f; case 9: return 2.48f; case 10: return 2.71f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 1.00f; #else #if defined(_CHINA) switch (num_party_members) { case 1: return 1.8f; case 2: return 3.024f; case 3: return 4.236f; case 4: return 5.928f; case 5: return 8.304f; }; return 8.304f; #elif defined(_JAPAN) switch (num_party_members) { case 1: return 1.00f; case 2: return 1.15f; case 3: return 1.30f; case 4: return 1.45f; case 5: return 1.60f; case 6: return 1.75f; case 7: return 1.90f; case 8: return 2.05f; case 9: return 2.20f; case 10: return 2.35f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 1.00f; #else switch (num_party_members) { case 1: return 1.00f; case 2: return 1.18f; case 3: return 1.36f; case 4: return 1.54f; case 5: return 1.72f; case 6: return 1.90f; case 7: return 2.08f; case 8: return 2.26f; case 9: return 2.44f; case 10: return 2.62f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 1.00f; #endif #endif //_NA_003481_20111026_EXP_PARTYBONUS_CHANGE } // Exp Ãß°¡%°ª(¹æ) float ns_formula::GetRoomExpPartyBonusFactor(DWORD num_party_members) { #ifdef _NA_003481_20111026_EXP_PARTYBONUS_CHANGE // ÆÄƼ Àοø¼ö¿¡ µû¸¥ °æÇèÄ¡ Áõ°¡À² º¯°æ - arycoat 2011.10.26 switch (num_party_members) { case 1: return 2.05f; case 2: return 2.15f; case 3: return 2.26f; case 4: return 2.38f; case 5: return 2.60f; case 6: return 2.83f; case 7: return 3.07f; case 8: return 3.32f; case 9: return 3.67f; case 10: return 4.03f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 2.05f; #else #if defined(_CHINA) switch (num_party_members) { case 1: return 1.0f; case 2: return 1.35f; case 3: return 1.6f; case 4: return 1.75f; case 5: return 1.85f; case 6: return 1.85f; case 7: return 1.85f; case 8: return 1.85f; case 9: return 1.85f; case 10: return 1.85f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 1.00f; #else // changed rules by _NA_0_20110103_EP2_BATTLEZONE_EXP_PARTY_BONUS_ADJUSTED switch (num_party_members) { case 1: return 2.05f; case 2: return 2.12f; case 3: return 2.20f; case 4: return 2.29f; case 5: return 2.39f; case 6: return 2.50f; case 7: return 2.62f; case 8: return 2.75f; case 9: return 2.89f; case 10: return 3.05f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", num_party_members); return 2.05f; #endif #endif //_NA_003481_20111026_EXP_PARTYBONUS_CHANGE } // CHANGES: f110414.4L, apply HEIM weight value about heim based on number of party members. // input: number of party members float ns_formula::GetRoomHeimPartyBonusFactor(int param) { BOOST_STATIC_ASSERT(MAX_PARTYMEMBER_NUM == 10); #ifdef _NA_0_20120102_CHANGE_PARTY_HEIM_WEIGHT float weight = 0.3f; if ((param >= 1) && (param <= MAX_PARTYMEMBER_NUM)) weight *= param; else FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return weight; #else switch (param) { case 1: return 1.0f; case 2: return 1.1f; case 3: return 1.2f; case 4: return 1.3f; case 5: return 1.5f; case 6: return 1.7f; case 7: return 1.9f; case 8: return 2.2f; case 9: return 2.5f; case 10: return 3.0f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; #endif } float ns_formula::GetRoomHeimPartyBonusFactorType2(int param) { switch (param) { case 1: return 1.0f; case 2: return 1.1f; case 3: return 1.2f; case 4: return 1.3f; case 5: return 1.5f; case 6: return 1.7f; case 7: return 1.9f; case 8: return 2.2f; case 9: return 2.5f; case 10: return 3.0f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; } // ÇåÆÃ ¿É¼Ç%°ª float ns_formula::GetRoomBonusTypeRatio(BYTE param) { switch (param) { case 0: return 1.0f; // ¾ÆÀÌÅÛ ¿ì¼± case 1: return 1.1f; // °æÇèÄ¡ ¿ì¼± }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; } // ÆÄƼ¿ø ¼ö¿¡ µû¸¥ Ãß°¡ °ø°Ý·Â float ns_formula::GetBonusAttackPower(int param) { switch (param) { case 1: return 0; case 2: return 1.6f; // 2.0f -> 1.6f case 3: return 1.6f; // 2.0f -> 1.6f case 4: return 1.6f; // 2.0f -> 1.6f case 5: return 1.6f; // 2.0f -> 1.6f case 6: return 1.6f; // 2.0f -> 1.6f case 7: return 1.6f; // 2.0f -> 1.6f case 8: return 1.6f; // 2.0f -> 1.6f case 9: return 1.6f; // 2.0f -> 1.6f case 10: return 1.6f; // 2.0f -> 1.6f }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 0.0f; } // ÆÄƼ¿ø ¼ö¿¡ µû¸¥ Ãß°¡ °ø°Ý·Â ºñÀ²°ª float ns_formula::GetBonusAttPowerRatio(int param) { switch (param) { case 1: return 0.044f; // 0.055f -> 0.044f case 2: return 0.048f; // 0.06f -> 0.048f case 3: return 0.052f; // 0.065f -> 0.052f case 4: return 0.056f; // 0.07f -> 0.056f case 5: return 0.06f; // 0.075f -> 0.06f case 6: return 0.064f; // 0.08f -> 0.064f case 7: return 0.068f; // 0.085f -> 0.068f case 8: return 0.072f; // 0.09f -> 0.072f case 9: return 0.076f; // 0.095f -> 0.076f case 10: return 0.08f; // 0.01f -> 0.08f }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 0.044f; // 0.055f -> 0.044f } // »óÅÂÀû¿ë È®·ü°è»ê ½Ã ¸ó½ºÅ͵î±Þ¿¡ µû¸¥ »ó¼ö float ns_formula::GetStatusRatioAsNPCGrade(int param) { switch (param) { case eNPC_GENERAL: return 1.0f; case eNPC_ELITE: return 0.8f; case eNPC_LEADER: return 1.0f; case eNPC_MIDDLEBOSS: return 0.6f; case eNPC_BOSS: return 0.4f; case eNPC_MERCHANT_NPC: return 0.1f; case eNPC_SUMMON_NPC: return 0.1f; case eNPC_MAPOBJECT_NPC: return 0.1f; case eNPC_CRYSTAL_WARP: return 0.1f; case eNPC_DOMINATION_MAPOBJECT_NPC: return 0.1f; case eNPC_LUCKY_MONSTER: return 0; // NOTE: f110719.4L, added an unmanaged default value; case eNPC_TOTEM: return 1.0f; case eNPC_SSQ_MONSTER: return 1.0f; case eNPC_FRIEND_MAPOBJECT_NPC: return 1.0f; case eNPC_FRIEND_MONSTER: return 1.0f; case eNPC_MOVE_SYNC_MERCHANT: return 1.0f; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 1.0f; } // »óÅ¿¡ µû¸¥ ij¸¯ÅÍ ±âº»À̵¿¼Óµµ float ns_formula::GetBaseMoveSpeedAsState(int param) { switch (param) { case CMS_WALK: return 1.2f * SPEED_MULTIPLIER; case CMS_RUN: return 5.0f * SPEED_MULTIPLIER; case CMS_SWIPE: return 10.0f * SPEED_MULTIPLIER; case CMS_KNOCKBACK: return 6.0f * SPEED_MULTIPLIER; case CMS_KNOCKBACK2: return 15.0f * SPEED_MULTIPLIER; //__NA001048_080514_APPEND_ABILITY_KNOCKBACK2__ case CMS_KNOCKBACK_DOWN: return 12.0f * SPEED_MULTIPLIER; case CMS_SIDESTEP: return 4.0f * SPEED_MULTIPLIER; case CMS_BACKSTEP: return 3.0f * SPEED_MULTIPLIER; case CMS_MONSTER_ATTACKJUMP:return 9.0f * SPEED_MULTIPLIER; case CMS_LUCKY_MONSTER_RUNAWAY: return 15.0f * SPEED_MULTIPLIER; case CMS_TUMBLING_FRONT: return 10.0f * SPEED_MULTIPLIER; case CMS_TUMBLING_LEFT: return 10.0f * SPEED_MULTIPLIER; case CMS_TUMBLING_RIGHT: return 10.0f * SPEED_MULTIPLIER; case CMS_TUMBLING_BACK: return 10.0f * SPEED_MULTIPLIER; case CMS_SHOULDER_CHARGE: return 10.0f * SPEED_MULTIPLIER; case CMS_SLIDING: return 10.0f * SPEED_MULTIPLIER; case CMS_TELEPORT: return 10.0f * SPEED_MULTIPLIER; case CMS_STOP: return 0; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 5.0f * SPEED_MULTIPLIER; } // »óÅ¿¡ µû¸¥ ij¸¯ÅÍ À̵¿½Ã°£(Ư¼öÀ̵¿ : ij¸¯ÅÍ ¾Ö´Ï¿¡µû¶ó ½Ã°£ÀÌ ´Ù¸§) WORD ns_formula::GetMoveTimeAsState(int param) { switch (param) { case CMS_TUMBLING_FRONT: return 300; case CMS_TUMBLING_LEFT: return 300; case CMS_TUMBLING_RIGHT: return 300; case CMS_SHOULDER_CHARGE: return 300; case CMS_SLIDING: return 300; case CMS_TELEPORT: return 300; case CMS_TUMBLING_BACK: return 300; }; FORMULA_ERROR_LOG("|["__FUNCTION__"]|[%u]", param); return 433; } //================================================================================================== //================================================================================================== // WARNING: the below code block must be located last position #ifdef _SERVER enum { eCounter_Counts = COUNTER_INCREMENT_INDEX() + 1, }; struct LocalModuleCounterField { ulong milestone; ulong counter; }; static LocalModuleCounterField logging_counters[eCounter_Counts] = { 0, }; static void FormulaLogger(const ulong error_index, const char* method, const int line_no, const char* meta_format, int param) { if (_countof(logging_counters) <= error_index) { ASSERT(!"Index out of ranges"); return; } LocalModuleCounterField* const counter_record = &logging_counters[error_index]; if (counter_record->milestone == 0) { counter_record->milestone = (1 << 0); }; ++counter_record->counter; if (counter_record->milestone > counter_record->counter) { return; } counter_record->milestone <<= 1; // char buffer[512]; _snprintf(buffer, _countof(buffer), meta_format, param); buffer[_countof(buffer) - 1] = '\0'; // SUNLOG(eCRITICAL_LOG, "|MilestoneError(%8u) '%s' --- [%u] in '%s'|", counter_record->counter, buffer, line_no, method); } #endif // }; //end of namespace 'ns_formula' //==================================================================================================