summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/achievement.c6
-rw-r--r--src/map/clif.c46
-rw-r--r--src/map/clif.h11
-rw-r--r--src/map/guild.c3
-rw-r--r--src/map/itemdb.c24
-rw-r--r--src/map/map.c10
-rw-r--r--src/map/messages_main.h158
-rw-r--r--src/map/messages_re.h158
-rw-r--r--src/map/messages_zero.h158
-rw-r--r--src/map/mob.c41
-rw-r--r--src/map/mob.h1
-rw-r--r--src/map/packets.h16
-rw-r--r--src/map/packets_keys_main.h10
-rw-r--r--src/map/packets_keys_zero.h7
-rw-r--r--src/map/packets_shuffle_main.h10
-rw-r--r--src/map/packets_shuffle_re.h9
-rw-r--r--src/map/packets_shuffle_zero.h7
-rw-r--r--src/map/packets_struct.h15
-rw-r--r--src/map/pc.c15
-rw-r--r--src/map/script.c3
-rw-r--r--src/map/skill.c2
-rw-r--r--src/map/status.c6
-rw-r--r--src/map/stylist.c3
23 files changed, 637 insertions, 82 deletions
diff --git a/src/map/achievement.c b/src/map/achievement.c
index 7ab80e183..c2ebb5fdd 100644
--- a/src/map/achievement.c
+++ b/src/map/achievement.c
@@ -1099,7 +1099,8 @@ static bool achievement_get_rewards(struct map_session_data *sd, const struct ac
*/
static void achievement_readdb_ranks(void)
{
- const char *filename = "db/achievement_rank_db.conf";
+ char filename[256];
+ libconfig->format_db_path("achievement_rank_db.conf", filename, sizeof(filename));
struct config_t ar_conf = { 0 };
struct config_setting_t *ardb = NULL, *conf = NULL;
int entry = 0;
@@ -1777,7 +1778,8 @@ static void achievement_readdb_additional_fields(const struct config_setting_t *
*/
static void achievement_readb(void)
{
- const char *filename = "db/"DBPATH"achievement_db.conf";
+ char filename[256];
+ libconfig->format_db_path(DBPATH"achievement_db.conf", filename, sizeof(filename));
struct config_t ach_conf = { 0 };
struct config_setting_t *achdb = NULL, *conf = NULL;
int entry = 0, count = 0;
diff --git a/src/map/clif.c b/src/map/clif.c
index 3abbc2c36..5c86edcaa 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -12377,6 +12377,42 @@ static void clif_parse_RemoveOption(int fd, struct map_session_data *sd)
}
}
+static void clif_parse_reqGearOff(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+static void clif_parse_reqGearOff(int fd, struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20190703 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190709
+ const struct PACKET_CZ_REQ_MOUNTOFF *p = RFIFOP(fd, 0);
+ switch (p->action) {
+ case REMOVE_MOUNT_DRAGON:
+ if (pc_isridingdragon(sd))
+ pc->setoption(sd, sd->sc.option &~ OPTION_DRAGON);
+ break;
+ case REMOVE_MOUNT_MADO:
+ if (pc_ismadogear(sd))
+ pc->setoption(sd, sd->sc.option &~ OPTION_MADOGEAR);
+ break;
+ case REMOVE_MOUNT_PECO:
+ if (pc_isridingpeco(sd))
+ pc->setoption(sd, sd->sc.option &~ OPTION_RIDING);
+ break;
+ case REMOVE_MOUNT_FALCON:
+ if (pc_isfalcon(sd))
+ pc->setoption(sd, sd->sc.option &~ OPTION_FALCON);
+ break;
+ case REMOVE_MOUNT_CART:
+ // this packet exists in clients with only new carts [4144]
+ if (sd->sc.data[SC_PUSH_CART])
+ pc->setcart(sd, 0);
+ break;
+ case REMOVE_MOUNT_0:
+ case REMOVE_MOUNT_2:
+ default:
+ ShowError("Unknown action in remove mount packet: %d\n", p->action);
+ break;
+ }
+#endif
+}
+
static void clif_parse_ChangeCart(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
/// Request to change cart's visual look (CZ_REQ_CHANGECART).
/// 01af <num>.W
@@ -19794,7 +19830,8 @@ static void clif_cashshop_db(void)
{
struct config_t cashshop_conf;
struct config_setting_t *cashshop = NULL, *cats = NULL;
- const char *config_filename = "db/cashshop_db.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("cashshop_db.conf", config_filename, sizeof(config_filename));
int i, item_count_t = 0;
for( i = 0; i < CASHSHOP_TAB_MAX; i++ ) {
CREATE(clif->cs.data[i], struct hCSData *, 1);
@@ -21065,7 +21102,8 @@ static bool clif_parse_roulette_db(void)
{
struct config_t roulette_conf;
struct config_setting_t *roulette = NULL, *levels = NULL;
- const char *config_filename = "db/roulette_db.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("roulette_db.conf", config_filename, sizeof(config_filename));
int i, j, item_count_t = 0;
for( i = 0; i < MAX_ROULETTE_LEVEL; i++ ) {
@@ -22549,7 +22587,8 @@ static bool clif_parse_attendance_db(void)
{
struct config_t attendance_conf;
struct config_setting_t *attendance = NULL, *it = NULL;
- const char *config_filename = "db/attendance_db.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("attendance_db.conf", config_filename, sizeof(config_filename));
int i = 0;
if (!libconfig->load_file(&attendance_conf, config_filename))
@@ -24680,4 +24719,5 @@ void clif_defaults(void)
clif->lapineDdukDdak_result = clif_lapineDdukDdak_result;
clif->plapineDdukDdak_ack = clif_parse_lapineDdukDdak_ack;
clif->plapineDdukDdak_close = clif_parse_lapineDdukDdak_close;
+ clif->pReqGearOff = clif_parse_reqGearOff;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 0dfc00c01..eb5cb36bd 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -733,6 +733,16 @@ enum lapineddukddak_result {
LAPINEDDKUKDDAK_INVALID_ITEM = 7,
};
+enum removeGear_flag {
+ REMOVE_MOUNT_0 = 0, // unused
+ REMOVE_MOUNT_DRAGON = 1,
+ REMOVE_MOUNT_2 = 2, // unused
+ REMOVE_MOUNT_MADO = 3,
+ REMOVE_MOUNT_PECO = 4,
+ REMOVE_MOUNT_FALCON = 5,
+ REMOVE_MOUNT_CART = 6,
+};
+
/**
* Clif.c Interface
**/
@@ -1670,6 +1680,7 @@ struct clif_interface {
bool (*lapineDdukDdak_result) (struct map_session_data *sd, enum lapineddukddak_result result);
void (*plapineDdukDdak_ack) (int fd, struct map_session_data *sd);
void (*plapineDdukDdak_close) (int fd, struct map_session_data *sd);
+ void (*pReqGearOff) (int fd, struct map_session_data *sd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/guild.c b/src/map/guild.c
index e270bf01e..2fcbe02e7 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -152,7 +152,8 @@ static bool guild_read_castledb_libconfig(void)
{
struct config_t castle_conf;
struct config_setting_t *castle_db = NULL, *it = NULL;
- const char *config_filename = "db/castle_db.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("castle_db.conf", config_filename, sizeof(config_filename));
int i = 0;
if (libconfig->load_file(&castle_conf, config_filename) == 0)
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index a97325e57..5dc3d9317 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -846,11 +846,8 @@ static void itemdb_read_groups(void)
{
struct config_t item_group_conf;
struct config_setting_t *itg = NULL, *it = NULL;
-#ifdef RENEWAL
- const char *config_filename = "db/re/item_group.conf"; // FIXME hardcoded name
-#else
- const char *config_filename = "db/pre-re/item_group.conf"; // FIXME hardcoded name
-#endif
+ char config_filename[256];
+ libconfig->format_db_path(DBPATH"item_group.conf", config_filename, sizeof(config_filename));
const char *itname;
int i = 0, count = 0, c;
unsigned int *gsize = NULL;
@@ -1144,11 +1141,8 @@ static void itemdb_read_packages(void)
{
struct config_t item_packages_conf;
struct config_setting_t *itg = NULL, *it = NULL, *t = NULL;
-#ifdef RENEWAL
- const char *config_filename = "db/re/item_packages.conf"; // FIXME hardcoded name
-#else
- const char *config_filename = "db/pre-re/item_packages.conf"; // FIXME hardcoded name
-#endif
+ char config_filename[256];
+ libconfig->format_db_path(DBPATH"item_packages.conf", config_filename, sizeof(config_filename));
const char *itname;
int i = 0, count = 0, c = 0, highest_gcount = 0;
unsigned int *must = NULL, *random = NULL, *rgroup = NULL, **rgroups = NULL;
@@ -1393,7 +1387,8 @@ static void itemdb_read_options(void)
struct config_t item_options_db;
struct config_setting_t *ito = NULL, *conf = NULL;
int index = 0, count = 0;
- const char *filepath = "db/item_options.conf";
+ char filepath[256];
+ libconfig->format_db_path("item_options.conf", filepath, sizeof(filepath));
VECTOR_DECL(int) duplicate_id;
if (!libconfig->load_file(&item_options_db, filepath))
@@ -1494,11 +1489,8 @@ static void itemdb_read_chains(void)
{
struct config_t item_chain_conf;
struct config_setting_t *itc = NULL;
-#ifdef RENEWAL
- const char *config_filename = "db/re/item_chain.conf"; // FIXME hardcoded name
-#else
- const char *config_filename = "db/pre-re/item_chain.conf"; // FIXME hardcoded name
-#endif
+ char config_filename[256];
+ libconfig->format_db_path(DBPATH"item_chain.conf", config_filename, sizeof(config_filename));
int i = 0, count = 0;
if (!libconfig->load_file(&item_chain_conf, config_filename))
diff --git a/src/map/map.c b/src/map/map.c
index 957098dd4..50ad9a5cd 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -4054,6 +4054,7 @@ static bool map_config_read_database(const char *filename, struct config_t *conf
return false;
}
libconfig->setting_lookup_mutable_string(setting, "db_path", map->db_path, sizeof(map->db_path));
+ libconfig->set_db_path(map->db_path);
libconfig->setting_lookup_int(setting, "save_settings", &map->save_settings);
if (libconfig->setting_lookup_int(setting, "autosave_time", &map->autosave_interval) == CONFIG_TRUE) {
@@ -5573,12 +5574,8 @@ static void read_map_zone_db(void)
{
struct config_t map_zone_db;
struct config_setting_t *zones = NULL;
- /* TODO: #ifndef required for re/pre-re */
-#ifdef RENEWAL
- const char *config_filename = "db/re/map_zone_db.conf"; // FIXME hardcoded name
-#else
- const char *config_filename = "db/pre-re/map_zone_db.conf"; // FIXME hardcoded name
-#endif
+ char config_filename[256];
+ libconfig->format_db_path(DBPATH"map_zone_db.conf", config_filename, sizeof(config_filename));
if (!libconfig->load_file(&map_zone_db, config_filename))
return;
@@ -6776,6 +6773,7 @@ void map_defaults(void)
map->extra_scripts_count = 0;
sprintf(map->db_path ,"db");
+ libconfig->set_db_path(map->db_path);
sprintf(map->help_txt ,"conf/help.txt");
sprintf(map->charhelp_txt ,"conf/charhelp.txt");
diff --git a/src/map/messages_main.h b/src/map/messages_main.h
index 69fc34ee9..eb33b41ad 100644
--- a/src/map/messages_main.h
+++ b/src/map/messages_main.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20191016
+Latest version: 20191113
*/
enum clif_messages {
@@ -632,9 +632,11 @@ Fire
Wind
*/
MSG_WIND = 0x76,
-/*20031028 to latest
+/*20031028 to 20191023
같은종류의 장비아이템은 한번에 한개만 살 수 있습니다.
Please avoid buying 2 of the same items at one time.
+20191030 to latest
+같은 종류의 장비 아이템은 한 번에 한 개만 살 수 있습니다.
*/
MSG_EQUIPITEM_OLNY_ONE = 0x77,
/*20031028 to latest
@@ -21793,8 +21795,10 @@ AP가 부족합니다.
제련도가 조합에 필요한 요구치보다 높습니다.
*/
MSG_ID_E3D = 0xe3d,
-/*20190731 to latest
+/*20190731 to 20191107
'카드가 끼워져있거나 인챈트 되어 있습니다.
+20191113 to latest
+카드가 끼워져있거나 인챈트 되어 있습니다.
*/
MSG_ID_E3E = 0xe3e,
/*20190731 to latest
@@ -22010,6 +22014,154 @@ VTC 인증에 실패하였습니다.
*/
MSG_ID_E6A = 0xe6a,
#endif
+#if PACKETVER >= 20191030
+/*20191030 to latest
+같은 아이템은 %d개까지 소유할 수 있습니다.
+*/
+ MSG_ID_E6B = 0xe6b,
+/*20191030 to latest
+같은 아이템은 한 번에 %d개까지 교환할 수 있습니다.
+*/
+ MSG_ID_E6C = 0xe6c,
+/*20191030 to latest
+해당 로덱스는 "%s"서버에서 열 수 있습니다.
+*/
+ MSG_ID_E6D = 0xe6d,
+/*20191030 to latest
+[공지]편지함의 모든 메일을 삭제하시겠습니까 ?
+(해당 "%s"서버의 메일만 삭제됩니다.)
+*/
+ MSG_ID_E6E = 0xe6e,
+/*20191030 to latest
+[공지]편지함의 모든 첨부 물품을 받으시겠습니까?
+(해당 "%s"서버의 메일의 물품만 받으실 수 있습니다.)
+*/
+ MSG_ID_E6F = 0xe6f,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 삭제 가능합니다.
+*/
+ MSG_ID_E70 = 0xe70,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 물품 받기가 가능합니다.
+*/
+ MSG_ID_E71 = 0xe71,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 내용읽기가 가능합니다.
+*/
+ MSG_ID_E72 = 0xe72,
+/*20191030 to latest
+합계 : %d z
+*/
+ MSG_ID_E73 = 0xe73,
+/*20191030 to latest
+메세지
+*/
+ MSG_ID_E74 = 0xe74,
+#endif
+#if PACKETVER >= 20191106
+/*20191106 to latest
+구매상점 개설 중에는 개인상점의 물건을 구입할 수 없습니다.
+*/
+ MSG_ID_E75 = 0xe75,
+#endif
+#if PACKETVER >= 20191113
+/*20191113 to latest
+등급강화가 성공적으로 되었습니다.
+*/
+ MSG_ID_E76 = 0xe76,
+/*20191113 to latest
+등급강화가 실패하였습니다.
+*/
+ MSG_ID_E77 = 0xe77,
+/*20191113 to latest
+등급 수치가 하향 조정 되었습니다.
+*/
+ MSG_ID_E78 = 0xe78,
+/*20191113 to latest
+장비가 파괴되었습니다.
+*/
+ MSG_ID_E79 = 0xe79,
+/*20191113 to latest
+장비가 보호되었습니다.
+*/
+ MSG_ID_E7A = 0xe7a,
+/*20191113 to latest
+재료가 선택되지 않았습니다.
+*/
+ MSG_ID_E7B = 0xe7b,
+/*20191113 to latest
+재료가 부족합니다.
+*/
+ MSG_ID_E7C = 0xe7c,
+/*20191113 to latest
+소지 금액이 부족합니다.
+*/
+ MSG_ID_E7D = 0xe7d,
+/*20191113 to latest
+아이템 공간이 부족합니다.
+*/
+ MSG_ID_E7E = 0xe7e,
+/*20191113 to latest
+장비가 보호되고 있습니다.
+*/
+ MSG_ID_E7F = 0xe7f,
+/*20191113 to latest
+장비가 파괴될 수 있습니다.
+*/
+ MSG_ID_E80 = 0xe80,
+/*20191113 to latest
+등급강화 실패 시 등급이 내려갑니다.
+*/
+ MSG_ID_E81 = 0xe81,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다. 로덱스를 강제 종료하였습니다.
+*/
+ MSG_ID_E82 = 0xe82,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다.
+*/
+ MSG_ID_E83 = 0xe83,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다. 은행을 강제 종료하였습니다.
+*/
+ MSG_ID_E84 = 0xe84,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다.
+*/
+ MSG_ID_E85 = 0xe85,
+/*20191113 to latest
+[%s] 님이 등급강화를 성공하여, [%s등급 %s] 아이템을 획득하였습니다.
+*/
+ MSG_ID_E86 = 0xe86,
+/*20191113 to latest
+[%s] 님이 [%s등급 %s] 아이템의 등급강화에 실패하였습니다.
+*/
+ MSG_ID_E87 = 0xe87,
+/*20191113 to latest
+등급 강화가 불가능한 장비입니다.
+*/
+ MSG_ID_E88 = 0xe88,
+/*20191113 to latest
+체인지 메테리얼
+*/
+ MSG_ID_E89 = 0xe89,
+/*20191113 to latest
+가나다 정렬
+*/
+ MSG_ID_E8A = 0xe8a,
+/*20191113 to latest
+기본 결과물은 %s %d개 이나, 낮은 확률로 최대 %d개까지 생성될 수 있습니다.
+*/
+ MSG_ID_E8B = 0xe8b,
+/*20191113 to latest
+성공 %d%%
+*/
+ MSG_ID_E8C = 0xe8c,
+/*20191113 to latest
+아이템 태그는 소지한 아이템만 태그할 수 있습니다.
+*/
+ MSG_ID_E8D = 0xe8d,
+#endif
};
#endif /* MAP_MESSAGES_MAIN_H */
diff --git a/src/map/messages_re.h b/src/map/messages_re.h
index 84ccecc5e..dd01e1576 100644
--- a/src/map/messages_re.h
+++ b/src/map/messages_re.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20191016
+Latest version: 20191113
*/
enum clif_messages {
@@ -625,9 +625,11 @@ Fire
Wind
*/
MSG_WIND = 0x76,
-/*20080827 to latest
+/*20080827 to 20191023
같은종류의 장비아이템은 한번에 한개만 살 수 있습니다.
Please avoid buying 2 of the same items at one time.
+20191030 to latest
+같은 종류의 장비 아이템은 한 번에 한 개만 살 수 있습니다.
*/
MSG_EQUIPITEM_OLNY_ONE = 0x77,
/*20080827 to latest
@@ -21272,8 +21274,10 @@ AP가 부족합니다.
제련도가 조합에 필요한 요구치보다 높습니다.
*/
MSG_ID_E3D = 0xe3d,
-/*20190731 to latest
+/*20190731 to 20191107
'카드가 끼워져있거나 인챈트 되어 있습니다.
+20191113 to latest
+카드가 끼워져있거나 인챈트 되어 있습니다.
*/
MSG_ID_E3E = 0xe3e,
/*20190731 to latest
@@ -21487,6 +21491,154 @@ VTC 인증에 실패하였습니다.
*/
MSG_ID_E6A = 0xe6a,
#endif
+#if PACKETVER >= 20191030
+/*20191030 to latest
+같은 아이템은 %d개까지 소유할 수 있습니다.
+*/
+ MSG_ID_E6B = 0xe6b,
+/*20191030 to latest
+같은 아이템은 한 번에 %d개까지 교환할 수 있습니다.
+*/
+ MSG_ID_E6C = 0xe6c,
+/*20191030 to latest
+해당 로덱스는 "%s"서버에서 열 수 있습니다.
+*/
+ MSG_ID_E6D = 0xe6d,
+/*20191030 to latest
+[공지]편지함의 모든 메일을 삭제하시겠습니까 ?
+(해당 "%s"서버의 메일만 삭제됩니다.)
+*/
+ MSG_ID_E6E = 0xe6e,
+/*20191030 to latest
+[공지]편지함의 모든 첨부 물품을 받으시겠습니까?
+(해당 "%s"서버의 메일의 물품만 받으실 수 있습니다.)
+*/
+ MSG_ID_E6F = 0xe6f,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 삭제 가능합니다.
+*/
+ MSG_ID_E70 = 0xe70,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 물품 받기가 가능합니다.
+*/
+ MSG_ID_E71 = 0xe71,
+/*20191030 to latest
+해당 메일은 "%s"서버에서만 내용읽기가 가능합니다.
+*/
+ MSG_ID_E72 = 0xe72,
+/*20191030 to latest
+합계 : %d z
+*/
+ MSG_ID_E73 = 0xe73,
+/*20191030 to latest
+메세지
+*/
+ MSG_ID_E74 = 0xe74,
+#endif
+#if PACKETVER >= 20191106
+/*20191106 to latest
+구매상점 개설 중에는 개인상점의 물건을 구입할 수 없습니다.
+*/
+ MSG_ID_E75 = 0xe75,
+#endif
+#if PACKETVER >= 20191113
+/*20191113 to latest
+등급강화가 성공적으로 되었습니다.
+*/
+ MSG_ID_E76 = 0xe76,
+/*20191113 to latest
+등급강화가 실패하였습니다.
+*/
+ MSG_ID_E77 = 0xe77,
+/*20191113 to latest
+등급 수치가 하향 조정 되었습니다.
+*/
+ MSG_ID_E78 = 0xe78,
+/*20191113 to latest
+장비가 파괴되었습니다.
+*/
+ MSG_ID_E79 = 0xe79,
+/*20191113 to latest
+장비가 보호되었습니다.
+*/
+ MSG_ID_E7A = 0xe7a,
+/*20191113 to latest
+재료가 선택되지 않았습니다.
+*/
+ MSG_ID_E7B = 0xe7b,
+/*20191113 to latest
+재료가 부족합니다.
+*/
+ MSG_ID_E7C = 0xe7c,
+/*20191113 to latest
+소지 금액이 부족합니다.
+*/
+ MSG_ID_E7D = 0xe7d,
+/*20191113 to latest
+아이템 공간이 부족합니다.
+*/
+ MSG_ID_E7E = 0xe7e,
+/*20191113 to latest
+장비가 보호되고 있습니다.
+*/
+ MSG_ID_E7F = 0xe7f,
+/*20191113 to latest
+장비가 파괴될 수 있습니다.
+*/
+ MSG_ID_E80 = 0xe80,
+/*20191113 to latest
+등급강화 실패 시 등급이 내려갑니다.
+*/
+ MSG_ID_E81 = 0xe81,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다. 로덱스를 강제 종료하였습니다.
+*/
+ MSG_ID_E82 = 0xe82,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다.
+*/
+ MSG_ID_E83 = 0xe83,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다. 은행을 강제 종료하였습니다.
+*/
+ MSG_ID_E84 = 0xe84,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다.
+*/
+ MSG_ID_E85 = 0xe85,
+/*20191113 to latest
+[%s] 님이 등급강화를 성공하여, [%s등급 %s] 아이템을 획득하였습니다.
+*/
+ MSG_ID_E86 = 0xe86,
+/*20191113 to latest
+[%s] 님이 [%s등급 %s] 아이템의 등급강화에 실패하였습니다.
+*/
+ MSG_ID_E87 = 0xe87,
+/*20191113 to latest
+등급 강화가 불가능한 장비입니다.
+*/
+ MSG_ID_E88 = 0xe88,
+/*20191113 to latest
+체인지 메테리얼
+*/
+ MSG_ID_E89 = 0xe89,
+/*20191113 to latest
+가나다 정렬
+*/
+ MSG_ID_E8A = 0xe8a,
+/*20191113 to latest
+기본 결과물은 %s %d개 이나, 낮은 확률로 최대 %d개까지 생성될 수 있습니다.
+*/
+ MSG_ID_E8B = 0xe8b,
+/*20191113 to latest
+성공 %d%%
+*/
+ MSG_ID_E8C = 0xe8c,
+/*20191113 to latest
+아이템 태그는 소지한 아이템만 태그할 수 있습니다.
+*/
+ MSG_ID_E8D = 0xe8d,
+#endif
};
#endif /* MAP_MESSAGES_RE_H */
diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h
index 80e4c0de0..0f0511c60 100644
--- a/src/map/messages_zero.h
+++ b/src/map/messages_zero.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20191008
+Latest version: 20191113
*/
enum clif_messages {
@@ -625,9 +625,11 @@ Fire
Wind
*/
MSG_WIND = 0x76,
-/*20171018 to latest
+/*20171018 to 20191008
같은종류의 장비아이템은 한번에 한개만 살 수 있습니다.
Please avoid buying 2 of the same items at one time.
+20191023 to latest
+같은 종류의 장비 아이템은 한 번에 한 개만 살 수 있습니다.
*/
MSG_EQUIPITEM_OLNY_ONE = 0x77,
/*20171018 to latest
@@ -17882,8 +17884,10 @@ AP가 부족합니다.
제련도가 조합에 필요한 요구치보다 높습니다.
*/
MSG_ID_E3D = 0xe3d,
-/*20190724 to latest
+/*20190724 to 20191106
'카드가 끼워져있거나 인챈트 되어 있습니다.
+20191113 to latest
+카드가 끼워져있거나 인챈트 되어 있습니다.
*/
MSG_ID_E3E = 0xe3e,
#endif
@@ -18101,6 +18105,154 @@ VTC 인증에 실패하였습니다.
*/
MSG_ID_E6A = 0xe6a,
#endif
+#if PACKETVER >= 20191023
+/*20191023 to latest
+같은 아이템은 %d개까지 소유할 수 있습니다.
+*/
+ MSG_ID_E6B = 0xe6b,
+/*20191023 to latest
+같은 아이템은 한 번에 %d개까지 교환할 수 있습니다.
+*/
+ MSG_ID_E6C = 0xe6c,
+/*20191023 to latest
+해당 로덱스는 "%s"서버에서 열 수 있습니다.
+*/
+ MSG_ID_E6D = 0xe6d,
+/*20191023 to latest
+[공지]편지함의 모든 메일을 삭제하시겠습니까 ?
+(해당 "%s"서버의 메일만 삭제됩니다.)
+*/
+ MSG_ID_E6E = 0xe6e,
+/*20191023 to latest
+[공지]편지함의 모든 첨부 물품을 받으시겠습니까?
+(해당 "%s"서버의 메일의 물품만 받으실 수 있습니다.)
+*/
+ MSG_ID_E6F = 0xe6f,
+/*20191023 to latest
+해당 메일은 "%s"서버에서만 삭제 가능합니다.
+*/
+ MSG_ID_E70 = 0xe70,
+/*20191023 to latest
+해당 메일은 "%s"서버에서만 물품 받기가 가능합니다.
+*/
+ MSG_ID_E71 = 0xe71,
+/*20191023 to latest
+해당 메일은 "%s"서버에서만 내용읽기가 가능합니다.
+*/
+ MSG_ID_E72 = 0xe72,
+#endif
+#if PACKETVER >= 20191106
+/*20191106 to latest
+합계 : %d z
+*/
+ MSG_ID_E73 = 0xe73,
+/*20191106 to latest
+메세지
+*/
+ MSG_ID_E74 = 0xe74,
+/*20191106 to latest
+구매상점 개설 중에는 개인상점의 물건을 구입할 수 없습니다.
+*/
+ MSG_ID_E75 = 0xe75,
+#endif
+#if PACKETVER >= 20191113
+/*20191113 to latest
+등급강화가 성공적으로 되었습니다.
+*/
+ MSG_ID_E76 = 0xe76,
+/*20191113 to latest
+등급강화가 실패하였습니다.
+*/
+ MSG_ID_E77 = 0xe77,
+/*20191113 to latest
+등급 수치가 하향 조정 되었습니다.
+*/
+ MSG_ID_E78 = 0xe78,
+/*20191113 to latest
+장비가 파괴되었습니다.
+*/
+ MSG_ID_E79 = 0xe79,
+/*20191113 to latest
+장비가 보호되었습니다.
+*/
+ MSG_ID_E7A = 0xe7a,
+/*20191113 to latest
+재료가 선택되지 않았습니다.
+*/
+ MSG_ID_E7B = 0xe7b,
+/*20191113 to latest
+재료가 부족합니다.
+*/
+ MSG_ID_E7C = 0xe7c,
+/*20191113 to latest
+소지 금액이 부족합니다.
+*/
+ MSG_ID_E7D = 0xe7d,
+/*20191113 to latest
+아이템 공간이 부족합니다.
+*/
+ MSG_ID_E7E = 0xe7e,
+/*20191113 to latest
+장비가 보호되고 있습니다.
+*/
+ MSG_ID_E7F = 0xe7f,
+/*20191113 to latest
+장비가 파괴될 수 있습니다.
+*/
+ MSG_ID_E80 = 0xe80,
+/*20191113 to latest
+등급강화 실패 시 등급이 내려갑니다.
+*/
+ MSG_ID_E81 = 0xe81,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다. 로덱스를 강제 종료하였습니다.
+*/
+ MSG_ID_E82 = 0xe82,
+/*20191113 to latest
+등급강화 중에는 로덱스를 사용할 수 없습니다.
+*/
+ MSG_ID_E83 = 0xe83,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다. 은행을 강제 종료하였습니다.
+*/
+ MSG_ID_E84 = 0xe84,
+/*20191113 to latest
+등급강화 중에는 은행을 사용할 수 없습니다.
+*/
+ MSG_ID_E85 = 0xe85,
+/*20191113 to latest
+[%s] 님이 등급강화를 성공하여, [%s등급 %s] 아이템을 획득하였습니다.
+*/
+ MSG_ID_E86 = 0xe86,
+/*20191113 to latest
+[%s] 님이 [%s등급 %s] 아이템의 등급강화에 실패하였습니다.
+*/
+ MSG_ID_E87 = 0xe87,
+/*20191113 to latest
+등급 강화가 불가능한 장비입니다.
+*/
+ MSG_ID_E88 = 0xe88,
+/*20191113 to latest
+체인지 메테리얼
+*/
+ MSG_ID_E89 = 0xe89,
+/*20191113 to latest
+가나다 정렬
+*/
+ MSG_ID_E8A = 0xe8a,
+/*20191113 to latest
+기본 결과물은 %s %d개 이나, 낮은 확률로 최대 %d개까지 생성될 수 있습니다.
+*/
+ MSG_ID_E8B = 0xe8b,
+/*20191113 to latest
+성공 %d%%
+*/
+ MSG_ID_E8C = 0xe8c,
+/*20191113 to latest
+아이템 태그는 소지한 아이템만 태그할 수 있습니다.
+*/
+ MSG_ID_E8D = 0xe8d,
+#endif
};
#endif /* MAP_MESSAGES_ZERO_H */
diff --git a/src/map/mob.c b/src/map/mob.c
index d2d8727e3..dce084a23 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1173,13 +1173,15 @@ static int mob_ai_sub_hard_activesearch(struct block_list *bl, va_list ap)
battle->check_range(&md->bl,bl,md->db->range2)
) { //Pick closest target?
#ifdef ACTIVEPATHSEARCH
- struct walkpath_data wpd;
- if (!path->search(&wpd, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, 0, CELL_CHKNOPASS)) // Count walk path cells
- return 0;
- //Standing monsters use range2, walking monsters use range3
- if ((md->ud.walktimer == INVALID_TIMER && wpd.path_len > md->db->range2)
- || (md->ud.walktimer != INVALID_TIMER && wpd.path_len > md->db->range3))
- return 0;
+ struct walkpath_data wpd;
+ bool is_standing = (md->ud.walktimer == INVALID_TIMER);
+ if (!path->search(&wpd, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, 0, CELL_CHKNOPASS) // Count walk path cells
+ || (is_standing && wpd.path_len > md->db->range2) //Standing monsters use range2, walking monsters use range3
+ || (!is_standing && wpd.path_len > md->db->range3)) {
+ if (!check_distance_bl(&md->bl, bl, md->status.rhw.range)
+ || !path->search_long(NULL, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, CELL_CHKWALL))
+ return 0;
+ }
#endif
(*target) = bl;
md->target_id=bl->id;
@@ -1362,10 +1364,10 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md, int64 tick)
) {
short x = bl->x, y = bl->y;
mob_stop_attack(md);
- const struct mob_data *m_md = BL_CCAST(BL_MOB, bl);
- nullpo_retr(0, m_md);
- if (map->search_freecell(&md->bl, bl->m, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 1)
- && (battle_config.slave_chase_masters_chasetarget == 0 || !mob->is_in_battle_state(m_md))
+ const struct mob_data *m_md = BL_CCAST(BL_MOB, bl); // Can be NULL due to master being BL_PC
+ // If master is BL_MOB and in battle, lock & chase to master's target instead, unless configured not to.
+ if ((battle_config.slave_chase_masters_chasetarget == 0 || (m_md != NULL && !mob->is_in_battle_state(m_md)))
+ && map->search_freecell(&md->bl, bl->m, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 1)
&& unit->walktoxy(&md->bl, x, y, 0))
return 1;
}
@@ -1378,13 +1380,12 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md, int64 tick)
//Avoid attempting to lock the master's target too often to avoid unnecessary overload. [Skotlex]
if (DIFF_TICK(md->last_linktime, tick) < MIN_MOBLINKTIME && !md->target_id) {
struct unit_data *ud = unit->bl2ud(bl);
- struct mob_data *m_md = BL_CAST(BL_MOB, bl);
+ struct mob_data *m_md = BL_CAST(BL_MOB, bl); // Can be NULL due to master being BL_PC
nullpo_retr(0, ud);
- nullpo_retr(0, m_md);
md->last_linktime = tick;
struct block_list *tbl = NULL;
- if (battle_config.slave_chase_masters_chasetarget == 1 && m_md->target_id != 0) { // possibly chasing something
+ if (battle_config.slave_chase_masters_chasetarget == 1 && m_md != NULL && m_md->target_id != 0) { // possibly chasing something
tbl = map->id2bl(m_md->target_id);
} else if (ud->target != 0 && ud->state.attack_continue != 0) {
tbl = map->id2bl(ud->target);
@@ -2235,6 +2236,14 @@ static void mob_log_damage(struct mob_data *md, struct block_list *src, int dama
md->dmglog[minpos].flag= flag;
md->dmglog[minpos].dmg = damage;
}
+#if (PACKETVER >= 20120404 && PACKETVER < 20131223)
+ // Show HP bar to all chars who hit the mob (fixes TF_STEAL not showing HP bar right away but only when target leaves/re-enters sight range)
+ if (battle_config.show_monster_hp_bar != 0 && (md->status.mode & MD_BOSS) == 0) {
+ struct map_session_data *sd = map->charid2sd(char_id);
+ if (sd != NULL && check_distance_bl(&md->bl, &sd->bl, AREA_SIZE)) // check if in range
+ clif->monster_hp_bar(md, sd);
+ }
+#endif
}
return;
}
@@ -4105,10 +4114,8 @@ static bool mob_read_optdrops_group(struct config_setting_t *group, int n)
*/
static bool mob_read_optdrops_db(void)
{
- const char *filename = "option_drop_groups.conf"; // FIXME hardcoded name
-
char filepath[256];
- safesnprintf(filepath, sizeof(filepath), "%s/%s", map->db_path, filename);
+ libconfig->format_db_path("option_drop_groups.conf", filepath, sizeof(filepath));
struct config_t option_groups;
if (libconfig->load_file(&option_groups, filepath) == CONFIG_FALSE) {
diff --git a/src/map/mob.h b/src/map/mob.h
index 9b0f6ffe0..6c3aa938b 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -40,7 +40,6 @@ struct hplugin_data_store;
//The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
#define MAX_MOB_DROP 10
#define MAX_MVP_DROP 3
-#define MAX_STEAL_DROP 7
//Min time between AI executions
#define MIN_MOBTHINKTIME 100
diff --git a/src/map/packets.h b/src/map/packets.h
index 8fb47eb7a..326f41791 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -1796,6 +1796,14 @@ packet(0x96e,clif->ackmergeitems);
// changed packet sizes
#endif
+#if PACKETVER >= 20160302
+ packet(0x0a4f,clif->plapineDdukDdak_ack);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20160504 || PACKETVER_RE_NUM >= 20160504 || defined(PACKETVER_ZERO)
+ packet(0x0a70,clif->plapineDdukDdak_close);
+#endif
+
// all 2016-05-25
#if PACKETVER >= 20160525
packet(0x0a77,clif->pCameraInfo); // CZ_CAMERA_INFO
@@ -1959,12 +1967,12 @@ packet(0x96e,clif->ackmergeitems);
packet(0x0b2c,clif->pGuildCastleInfoRequest);
#endif
-#if PACKETVER >= 20160302
- packet(0x0a4f,clif->plapineDdukDdak_ack);
+#if PACKETVER_MAIN_NUM >= 20190703 || PACKETVER_RE_NUM >= 20190703
+ packet(0x0b35,clif->pReqGearOff);
#endif
-#if PACKETVER >= 20160504
- packet(0x0a70,clif->plapineDdukDdak_close);
+#if PACKETVER_ZERO_NUM >= 20190709
+ packet(0x0b35,clif->pReqGearOff);
#endif
#endif /* MAP_PACKETS_H */
diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h
index d02e7f20d..34f4255fc 100644
--- a/src/map/packets_keys_main.h
+++ b/src/map/packets_keys_main.h
@@ -37,7 +37,7 @@
packetKeys(0x49357d72,0x22c370a1,0x5f836591);
#endif
-// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 2019-06-05JRagexeRE, 2019-06-05KRagexe, 2019-06-05LRagexeRE, 2019-06-05fRagexe, 2019-06-05hRagexeRE, 2019-06-19bRagexe, 2019-06-19cRagexeRE, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-06-26bRagexeRE, 2019-07-03aRagexe, 2019-07-03bRagexeRE, 2019-07-17aRagexe, 2019-07-17cRagexeRE, 2019-07-17dRagexe, 2019-07-17dRagexeRE, 2019-07-24aRagexe, 2019-07-24bRagexeRE, 2019-07-31bRagexe, 2019-07-31bRagexeRE, 2019-08-02aRagexe, 2019-08-02aRagexeRE, 2019-08-07aRagexe, 2019-08-07dRagexeRE, 2019-08-21aRagexe, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexe, 2019-08-28aRagexeRE, 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-04bRagexeRE, 2019-09-18bRagexe, 2019-09-18cRagexeRE, 2019-09-25aRagexe, 2019-09-25aRagexeRE, 2019-09-25bRagexe, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexe, 2019-10-16fRagexeRE, 2019-10-16gRagexe, 2019-10-16gRagexeRE
+// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 2019-06-05JRagexeRE, 2019-06-05KRagexe, 2019-06-05LRagexeRE, 2019-06-05fRagexe, 2019-06-05hRagexeRE, 2019-06-19bRagexe, 2019-06-19cRagexeRE, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-06-26bRagexeRE, 2019-07-03aRagexe, 2019-07-03bRagexeRE, 2019-07-17aRagexe, 2019-07-17cRagexeRE, 2019-07-17dRagexe, 2019-07-17dRagexeRE, 2019-07-24aRagexe, 2019-07-24bRagexeRE, 2019-07-31bRagexe, 2019-07-31bRagexeRE, 2019-08-02aRagexe, 2019-08-02aRagexeRE, 2019-08-07aRagexe, 2019-08-07dRagexeRE, 2019-08-21aRagexe, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexe, 2019-08-28aRagexeRE, 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-04bRagexeRE, 2019-09-18bRagexe, 2019-09-18cRagexeRE, 2019-09-25aRagexe, 2019-09-25aRagexeRE, 2019-09-25bRagexe, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexe, 2019-10-16fRagexeRE, 2019-10-16gRagexe, 2019-10-16gRagexeRE, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-06bRagexeRE, 2019-11-07aRagexe, 2019-11-07aRagexeRE, 2019-11-13cRagexe, 2019-11-13eRagexe, 2019-11-13eRagexeRE
#if PACKETVER == 20101123 || \
PACKETVER == 20101124 || \
PACKETVER == 20101125 || \
@@ -168,7 +168,13 @@
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
PACKETVER == 20191002 || \
- PACKETVER >= 20191016
+ PACKETVER == 20191016 || \
+ PACKETVER == 20191018 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191030 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191107 || \
+ PACKETVER >= 20191113
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
index e4319817b..b398f1894 100644
--- a/src/map/packets_keys_zero.h
+++ b/src/map/packets_keys_zero.h
@@ -30,7 +30,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero, 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero
+// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero, 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -96,7 +96,10 @@
PACKETVER == 20190911 || \
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
- PACKETVER >= 20191008
+ PACKETVER == 20191008 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191106 || \
+ PACKETVER >= 20191113
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h
index ede178384..9b82f25d8 100644
--- a/src/map/packets_shuffle_main.h
+++ b/src/map/packets_shuffle_main.h
@@ -9794,12 +9794,18 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
-// 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe, 2019-09-25aRagexe, 2019-09-25bRagexe, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-16fRagexe, 2019-10-16gRagexe
+// 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe, 2019-09-25aRagexe, 2019-09-25bRagexe, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-16fRagexe, 2019-10-16gRagexe, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-07aRagexe, 2019-11-13cRagexe, 2019-11-13eRagexe
#if PACKETVER == 20190904 || \
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
PACKETVER == 20191002 || \
- PACKETVER == 20191016
+ PACKETVER == 20191016 || \
+ PACKETVER == 20191018 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191030 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191107 || \
+ PACKETVER == 20191113
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h
index 049d4808a..e002a5b84 100644
--- a/src/map/packets_shuffle_re.h
+++ b/src/map/packets_shuffle_re.h
@@ -9744,12 +9744,17 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
-// 2019-09-04bRagexeRE, 2019-09-18cRagexeRE, 2019-09-25aRagexeRE, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexeRE, 2019-10-16gRagexeRE
+// 2019-09-04bRagexeRE, 2019-09-18cRagexeRE, 2019-09-25aRagexeRE, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexeRE, 2019-10-16gRagexeRE, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-11-06bRagexeRE, 2019-11-07aRagexeRE, 2019-11-13eRagexeRE
#if PACKETVER == 20190904 || \
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
PACKETVER == 20191002 || \
- PACKETVER == 20191016
+ PACKETVER == 20191016 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191030 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191107 || \
+ PACKETVER == 20191113
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
index 0259a9555..bb5300024 100644
--- a/src/map/packets_shuffle_zero.h
+++ b/src/map/packets_shuffle_zero.h
@@ -803,12 +803,15 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
-// 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero
+// 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero
#if PACKETVER == 20190828 || \
PACKETVER == 20190911 || \
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
- PACKETVER == 20191008
+ PACKETVER == 20191008 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191113
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index c0d1054d7..a7a9e2e63 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -3687,6 +3687,13 @@ struct PACKET_ZC_LAPINEDDUKDDAK_OPEN {
DEFINE_PACKET_HEADER(ZC_LAPINEDDUKDDAK_OPEN, 0x0a4e);
#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+#if PACKETVER_MAIN_NUM >= 20160504 || PACKETVER_RE_NUM >= 20160504 || defined(PACKETVER_ZERO)
+struct PACKET_CZ_LAPINEDDUKDDAK_CLOSE {
+ int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_LAPINEDDUKDDAK_CLOSE, 0x0a70);
+#endif // PACKETVER_MAIN_NUM >= 20160504 || PACKETVER_RE_NUM >= 20160504 || defined(PACKETVER_ZERO)
+
#if PACKETVER >= 20160302
struct PACKET_CZ_LAPINEDDUKDDAK_ACK_sub {
int16 index;
@@ -3714,6 +3721,14 @@ struct PACKET_ZC_LAPINEDDUKDDAK_RESULT {
DEFINE_PACKET_HEADER(ZC_LAPINEDDUKDDAK_RESULT, 0x0a50);
#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+#if PACKETVER_MAIN_NUM >= 20190703 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190709
+struct PACKET_CZ_REQ_MOUNTOFF {
+ int16 packetType;
+ uint8 action;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_REQ_MOUNTOFF, 0x0b35);
+#endif
+
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)
#endif // not NetBSD < 6 / Solaris
diff --git a/src/map/pc.c b/src/map/pc.c
index 5eccfbaf6..56a00b5ce 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -5583,15 +5583,17 @@ static int pc_steal_item(struct map_session_data *sd, struct block_list *bl, uin
// Try dropping one item, in the order from first to last possible slot.
// Droprate is affected by the skill success rate.
- for (i = 0; i < MAX_STEAL_DROP; i++) {
+ for (i = 0; i < MAX_MOB_DROP; i++) {
if (md->db->dropitem[i].nameid == 0)
continue;
if ((data = itemdb->exists(md->db->dropitem[i].nameid)) == NULL)
continue;
+ if (data->type == IT_CARD)
+ continue;
if (rnd() % 10000 < apply_percentrate(md->db->dropitem[i].p, rate, 100))
break;
}
- if (i == MAX_STEAL_DROP)
+ if (i == MAX_MOB_DROP)
return 0;
itemid = md->db->dropitem[i].nameid;
@@ -11533,12 +11535,9 @@ static bool pc_read_exp_db(void)
struct config_t exp_db_conf;
struct config_setting_t *edb = NULL;
int entry_count = 0;
-
-#ifdef RENEWAL
- const char *config_filename = "db/re/exp_group_db.conf";
-#else
- const char *config_filename = "db/pre-re/exp_group_db.conf";
-#endif
+ char config_filename[256];
+
+ libconfig->format_db_path(DBPATH"exp_group_db.conf", config_filename, sizeof(config_filename));
if (!libconfig->load_file(&exp_db_conf, config_filename))
return false;
diff --git a/src/map/script.c b/src/map/script.c
index 9d99b99f9..4c2761812 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -5150,7 +5150,8 @@ static uint8 script_add_language(const char *name)
static void script_load_translations(void)
{
struct config_t translations_conf;
- const char *config_filename = "db/translations.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("translations.conf", config_filename, sizeof(config_filename));
struct config_setting_t *translations = NULL;
int i, size;
int total = 0;
diff --git a/src/map/skill.c b/src/map/skill.c
index e44389d3c..7451fbf41 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -21109,7 +21109,7 @@ static bool skill_read_skilldb(const char *filename)
nullpo_retr(false, filename);
- sprintf(filepath,"db/%s",filename);
+ libconfig->format_db_path(filename, filepath, sizeof(filepath));
if (!libconfig->load_file(&skilldb, filepath)) {
return false; // Libconfig error report.
diff --git a/src/map/status.c b/src/map/status.c
index 96a02c023..d2c67b84e 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -13367,10 +13367,12 @@ static void status_read_job_db(void)
int i = 0;
struct config_t job_db_conf;
struct config_setting_t *jdb = NULL;
+ char config_filename[256];
+
#ifdef RENEWAL_ASPD
- const char *config_filename = "db/re/job_db.conf";
+ libconfig->format_db_path(DBPATH_RE"job_db.conf", config_filename, sizeof(config_filename));
#else
- const char *config_filename = "db/pre-re/job_db.conf";
+ libconfig->format_db_path(DBPATH_PRE"job_db.conf", config_filename, sizeof(config_filename));
#endif
if (!libconfig->load_file(&job_db_conf, config_filename))
diff --git a/src/map/stylist.c b/src/map/stylist.c
index 7e7c13bf7..438302214 100644
--- a/src/map/stylist.c
+++ b/src/map/stylist.c
@@ -40,7 +40,8 @@ static bool stylist_read_db_libconfig(void)
{
struct config_t stylist_conf;
struct config_setting_t *stylist_db = NULL, *it = NULL;
- const char *config_filename = "db/stylist_db.conf"; // FIXME hardcoded name
+ char config_filename[256];
+ libconfig->format_db_path("stylist_db.conf", config_filename, sizeof(config_filename));
int i = 0;
if (!libconfig->load_file(&stylist_conf, config_filename))