From e06b782338e1356b42c80c80d6d59a36d833fcd8 Mon Sep 17 00:00:00 2001
From: Emistry Haoyan <equinox1991@gmail.com>
Date: Sun, 14 Jul 2019 04:21:37 +0800
Subject: Added battle config autoloot_adjust

Added battle config autoloot_adjust that allows autoloot to take player drop penalties and bonuses into account.
---
 conf/map/battle/drops.conf | 4 ++++
 src/map/battle.c           | 1 +
 src/map/battle.h           | 2 ++
 src/map/mob.c              | 2 +-
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/conf/map/battle/drops.conf b/conf/map/battle/drops.conf
index cf09d14d9..d37aba455 100644
--- a/conf/map/battle/drops.conf
+++ b/conf/map/battle/drops.conf
@@ -151,3 +151,7 @@ alchemist_summon_reward: 1
 // When picking random options for a dropped item, it does lots of iterations to choose the option to be set,
 // this value limits the number of iterations to avoid making the server hang in a long loop.
 option_drop_max_loop: 10
+
+// Does autoloot take into account player bonuses and penalties? (Note 1)
+// If RENEWAL_DROP, Bubble Gum, or any other modifiers are active autoloot will take them into account.
+autoloot_adjust: false
diff --git a/src/map/battle.c b/src/map/battle.c
index c40c3afac..7fa1567e7 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -7436,6 +7436,7 @@ static const struct battle_data {
 	{ "critical_max_limit",                 &battle_config.critical_max,                    SHRT_MAX, 1,    INT_MAX,        },
 	{ "hit_min_limit",                      &battle_config.hit_min,                         1,      1,      INT_MAX,        },
 	{ "hit_max_limit",                      &battle_config.hit_max,                         SHRT_MAX, 1,    INT_MAX,        },
+	{ "autoloot_adjust",                    &battle_config.autoloot_adjust,                 0,      0,      1,              },
 };
 
 static bool battle_set_value_sub(int index, int value)
diff --git a/src/map/battle.h b/src/map/battle.h
index 0ff5135d8..4f70c697b 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -605,6 +605,8 @@ struct Battle_Config {
 	int critical_max;
 	int hit_min;
 	int hit_max;
+
+	int autoloot_adjust;
 };
 
 /* criteria for battle_config.idletime_critera */
diff --git a/src/map/mob.c b/src/map/mob.c
index 8511f8523..c0c292a30 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2570,7 +2570,7 @@ static int mob_dead(struct mob_data *md, struct block_list *src, int type)
 
 			// Announce first, or else ditem will be freed. [Lance]
 			// By popular demand, use base drop rate for autoloot code. [Skotlex]
-			mob->item_drop(md, dlist, ditem, 0, md->db->dropitem[i].p, homkillonly);
+			mob->item_drop(md, dlist, ditem, 0, battle_config.autoloot_adjust ? drop_rate : md->db->dropitem[i].p, homkillonly);
 		}
 
 		// Ore Discovery [Celest]
-- 
cgit v1.2.3-70-g09d2