diff --git a/conf/battle/player.conf b/conf/battle/player.conf index 65b9452648..017d5870fa 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -75,8 +75,13 @@ max_extended_aspd: 193 // Maximum walk speed rate (200 would be capped to twice the normal speed) max_walk_speed: 300 -// Maximum HP. (Default is 1000000) -max_hp: 1000000 +// Maximum HPs depending on base level. Default values are: +// Lv 99: 330000 +// Lv150: 660000 +// Lv175: 1100000 +max_hp_lv99: 330000 +max_hp_lv150: 660000 +max_hp: 1100000 // Maximum SP. (Default is 1000000) max_sp: 1000000 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 2b4f0dbc9a..e845c5e9bb 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -8133,7 +8133,9 @@ static const struct _battle_data { { "max_walk_speed", &battle_config.max_walk_speed, 300, 100, 100*DEFAULT_WALK_SPEED, }, { "max_lv", &battle_config.max_lv, 99, 0, MAX_LEVEL, }, { "aura_lv", &battle_config.aura_lv, 99, 0, INT_MAX, }, - { "max_hp", &battle_config.max_hp, 32500, 100, 1000000000, }, + { "max_hp_lv99", &battle_config.max_hp_lv99, 330000, 100, 1000000000, }, + { "max_hp_lv150", &battle_config.max_hp_lv150, 660000, 100, 1000000000, }, + { "max_hp", &battle_config.max_hp, 1100000, 100, 1000000000, }, { "max_sp", &battle_config.max_sp, 32500, 100, 1000000000, }, { "max_cart_weight", &battle_config.max_cart_weight, 8000, 100, 1000000, }, { "max_parameter", &battle_config.max_parameter, 99, 10, SHRT_MAX, }, diff --git a/src/map/battle.hpp b/src/map/battle.hpp index 61399d5186..b5fe7d41c8 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -265,6 +265,8 @@ struct Battle_Config int arrow_decrement; int max_aspd; int max_walk_speed; //Maximum walking speed after buffs [Skotlex] + int max_hp_lv99; + int max_hp_lv150; int max_hp; int max_sp; int max_lv, aura_lv; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 8868e0ce51..23dbff4b45 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -8249,7 +8249,12 @@ bool pc_setparam(struct map_session_data *sd,int type,int val) sd->battle_status.hp = cap_value(val, 1, (int)sd->battle_status.max_hp); break; case SP_MAXHP: - sd->battle_status.max_hp = cap_value(val, 1, battle_config.max_hp); + if (sd->status.base_level < 100) + sd->battle_status.max_hp = cap_value(val, 1, battle_config.max_hp_lv99); + else if (sd->status.base_level < 151) + sd->battle_status.max_hp = cap_value(val, 1, battle_config.max_hp_lv150); + else + sd->battle_status.max_hp = cap_value(val, 1, battle_config.max_hp); if( sd->battle_status.max_hp < sd->battle_status.hp ) { diff --git a/src/map/status.cpp b/src/map/status.cpp index 62043cf3bb..0a51178bcf 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -3835,7 +3835,12 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) if(battle_config.hp_rate != 100) base_status->max_hp = (unsigned int)(battle_config.hp_rate * (base_status->max_hp/100.)); - base_status->max_hp = cap_value(base_status->max_hp,1,(unsigned int)battle_config.max_hp); + if (sd->status.base_level < 100) + base_status->max_hp = cap_value(base_status->max_hp,1,(unsigned int)battle_config.max_hp_lv99); + else if (sd->status.base_level < 151) + base_status->max_hp = cap_value(base_status->max_hp,1,(unsigned int)battle_config.max_hp_lv150); + else + base_status->max_hp = cap_value(base_status->max_hp,1,(unsigned int)battle_config.max_hp); // ----- SP MAX CALCULATION ----- base_status->max_sp = sd->status.max_sp = status_calc_maxhpsp_pc(sd,base_status->int_,false); @@ -4993,7 +4998,12 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) if(battle_config.hp_rate != 100) status->max_hp = (unsigned int)(battle_config.hp_rate * (status->max_hp/100.)); - status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp); + if (sd->status.base_level < 100) + status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp_lv99); + else if (sd->status.base_level < 151) + status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp_lv150); + else + status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp); } else status->max_hp = status_calc_maxhp(bl, b_status->max_hp);