diff options
-rw-r--r-- | conf/battle/monster.conf | 7 | ||||
-rw-r--r-- | src/map/battle.c | 1 | ||||
-rw-r--r-- | src/map/battle.h | 2 | ||||
-rw-r--r-- | src/map/mob.c | 23 | ||||
-rw-r--r-- | src/map/status.c | 2 |
5 files changed, 26 insertions, 9 deletions
diff --git a/conf/battle/monster.conf b/conf/battle/monster.conf index 398b2a0ab..cb53078ec 100644 --- a/conf/battle/monster.conf +++ b/conf/battle/monster.conf @@ -201,3 +201,10 @@ mob_slave_keep_target: yes // Whether or not to spawn the mvp tomb. // See http://irowiki.org/wiki/MVP#Gravestone mvp_tomb_enabled: yes + +// Whether or not mob size influences on experience earned, drop rates, monster status. (Note 1) +// If the monster is big, it will give two times the experience, increase the drop rates by twice +// and double all status (hp, str, agi etc). But if the monster is small everything will be divided +// by two (experience, drop rates and status). +// Default: no +mob_size_influence: no diff --git a/src/map/battle.c b/src/map/battle.c index 18aadf0ac..9c109964c 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5756,6 +5756,7 @@ static const struct _battle_data { { "atcommand_mobinfo_type", &battle_config.atcommand_mobinfo_type, 0, 0, 1 }, { "homunculus_max_level", &battle_config.hom_max_level, 99, 0, MAX_LEVEL, }, { "homunculus_S_max_level", &battle_config.hom_S_max_level, 150, 0, MAX_LEVEL, }, + { "mob_size_influence", &battle_config.mob_size_influence, 0, 0, 1, }, }; #ifndef STATS_OPT_OUT /** diff --git a/src/map/battle.h b/src/map/battle.h index 28e6176ec..b901644de 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -480,6 +480,8 @@ extern struct Battle_Config int atcommand_suggestions_enabled; int min_npc_vending_distance; int atcommand_mobinfo_type; + + int mob_size_influence; // Enable modifications on earned experience, drop rates and monster status depending on monster size. [mkbu95] } battle_config; void do_init_battle(void); diff --git a/src/map/mob.c b/src/map/mob.c index fe174ba22..465f1f74e 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2216,10 +2216,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } // change experience for different sized monsters [Valaris] - if(md->special_state.size==SZ_MEDIUM) - per /=2.; - else if(md->special_state.size==SZ_BIG) - per *=2.; + if (battle_config.mob_size_influence) + { + if (md->special_state.size == SZ_MEDIUM) + per /= 2.; + else if (md->special_state.size == SZ_BIG) + per *= 2.; + } if( md->dmglog[i].flag == MDLF_PET ) per *= battle_config.pet_attack_exp_rate/100.; @@ -2334,10 +2337,14 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } // change drops depending on monsters size [Valaris] - if(md->special_state.size==SZ_MEDIUM && drop_rate >= 2) - drop_rate/=2; - else if(md->special_state.size==SZ_BIG) - drop_rate*=2; + if (battle_config.mob_size_influence) + { + if (md->special_state.size == SZ_MEDIUM && drop_rate >= 2) + drop_rate /= 2; + else if( md->special_state.size == SZ_BIG) + drop_rate *= 2; + } + if (src) { //Drops affected by luk as a fixed increase [Valaris] if (battle_config.drops_by_luk) diff --git a/src/map/status.c b/src/map/status.c index e097dcdb1..3b641cf92 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2061,7 +2061,7 @@ int status_calc_mob_(struct mob_data* md, bool first) } - if (flag&2) + if (flag&2 && battle_config.mob_size_influence) { // change for sized monsters [Valaris] if (md->special_state.size==SZ_MEDIUM) { status->max_hp>>=1; |