diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/achievement.c | 4 | ||||
-rw-r--r-- | src/map/clif.c | 41 | ||||
-rw-r--r-- | src/map/clif.h | 11 | ||||
-rw-r--r-- | src/map/guild.c | 2 | ||||
-rw-r--r-- | src/map/guild.h | 2 | ||||
-rw-r--r-- | src/map/log.c | 3 | ||||
-rw-r--r-- | src/map/log.h | 4 | ||||
-rw-r--r-- | src/map/map.c | 2 | ||||
-rw-r--r-- | src/map/messages_main.h | 158 | ||||
-rw-r--r-- | src/map/messages_re.h | 158 | ||||
-rw-r--r-- | src/map/messages_zero.h | 158 | ||||
-rw-r--r-- | src/map/mob.c | 21 | ||||
-rw-r--r-- | src/map/mob.h | 1 | ||||
-rw-r--r-- | src/map/packets.h | 16 | ||||
-rw-r--r-- | src/map/packets_keys_main.h | 10 | ||||
-rw-r--r-- | src/map/packets_keys_zero.h | 7 | ||||
-rw-r--r-- | src/map/packets_shuffle_main.h | 10 | ||||
-rw-r--r-- | src/map/packets_shuffle_re.h | 9 | ||||
-rw-r--r-- | src/map/packets_shuffle_zero.h | 7 | ||||
-rw-r--r-- | src/map/packets_struct.h | 15 | ||||
-rw-r--r-- | src/map/pc.c | 6 | ||||
-rw-r--r-- | src/map/script.c | 127 | ||||
-rw-r--r-- | src/map/skill.c | 30 | ||||
-rw-r--r-- | src/map/skill.h | 1 | ||||
-rw-r--r-- | src/map/status.c | 52 | ||||
-rw-r--r-- | src/map/status.h | 3 | ||||
-rw-r--r-- | src/map/unit.c | 4 |
27 files changed, 741 insertions, 121 deletions
diff --git a/src/map/achievement.c b/src/map/achievement.c index c2ebb5fdd..5215526a9 100644 --- a/src/map/achievement.c +++ b/src/map/achievement.c @@ -1051,10 +1051,10 @@ static void achievement_get_rewards_items(struct map_session_data *sd, const str if (!itemdb->isstackable(it.nameid)) { it.amount = 1; for (int j = 0; j < total; ++j) - pc->additem(sd, &it, 1, LOG_TYPE_SCRIPT); + pc->additem(sd, &it, 1, LOG_TYPE_ACHIEVEMENT); } else { it.amount = total; - pc->additem(sd, &it, total, LOG_TYPE_SCRIPT); + pc->additem(sd, &it, total, LOG_TYPE_ACHIEVEMENT); } } } diff --git a/src/map/clif.c b/src/map/clif.c index 0034ae28e..b9ca44dec 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9355,7 +9355,7 @@ static void clif_pcname_ack(int fd, struct block_list *bl) const struct map_session_data *ssd = BL_UCCAST(BL_PC, bl); - if (ssd->fakename[0] != '\0' && ssd->disguise != -1) { + if (ssd->fakename[0] != '\0') { packet.packet_id = reqName; len = sizeof(struct packet_reqname_ack); } else { @@ -9368,7 +9368,7 @@ static void clif_pcname_ack(int fd, struct block_list *bl) packet.gid = -bl->id; } - if (ssd->fakename[0] != '\0' && ssd->disguise != -1) { + if (ssd->fakename[0] != '\0') { memcpy(packet.name, ssd->fakename, NAME_LENGTH); } else { #if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO) @@ -12378,6 +12378,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 @@ -24684,4 +24720,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 4bbf36247..27f1060ff 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 dbfe03d3e..2fcbe02e7 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -278,7 +278,7 @@ static struct guild *guild_search(int guild_id) } /// lookup: guild name -> guild* -static struct guild *guild_searchname(char *str) +static struct guild *guild_searchname(const char *str) { struct guild* g; struct DBIterator *iter = db_iterator(guild->db); diff --git a/src/map/guild.h b/src/map/guild.h index 41f52711d..5a14b8a34 100644 --- a/src/map/guild.h +++ b/src/map/guild.h @@ -91,7 +91,7 @@ struct guild_interface { bool (*isallied) (int guild_id, int guild_id2); //Checks alliance based on guild Ids. [Skotlex] /* */ struct guild *(*search) (int guild_id); - struct guild *(*searchname) (char *str); + struct guild *(*searchname) (const char *str); struct guild_castle *(*castle_search) (int gcid); /* */ struct guild_castle *(*mapname2gc) (const char* mapname); diff --git a/src/map/log.c b/src/map/log.c index aa2f5f8f3..45335b16a 100644 --- a/src/map/log.c +++ b/src/map/log.c @@ -48,7 +48,7 @@ static char log_picktype2char(e_log_pick_type type) switch( type ) { case LOG_TYPE_TRADE: return 'T'; // (T)rade case LOG_TYPE_VENDING: return 'V'; // (V)ending - case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)player + case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)layer case LOG_TYPE_PICKDROP_MONSTER: return 'M'; // (M)onster case LOG_TYPE_NPC: return 'S'; // NPC (S)hop case LOG_TYPE_SCRIPT: return 'N'; // (N)PC Script @@ -75,6 +75,7 @@ static char log_picktype2char(e_log_pick_type type) case LOG_TYPE_SKILL: return '1'; // Skill case LOG_TYPE_REFINE: return '2'; // Refine case LOG_TYPE_OTHER: return 'X'; // Other + case LOG_TYPE_ACHIEVEMENT: return '3'; // Achievement } // should not get here, fallback diff --git a/src/map/log.h b/src/map/log.h index 116d99bfd..5035e9526 100644 --- a/src/map/log.h +++ b/src/map/log.h @@ -87,9 +87,9 @@ typedef enum e_log_pick_type { LOG_TYPE_QUEST = 0x02000000, LOG_TYPE_SKILL = 0x04000000, LOG_TYPE_REFINE = 0x08000000, + LOG_TYPE_LOOT = 0x10000000, + LOG_TYPE_ACHIEVEMENT = 0x20000000, - // combinations - LOG_TYPE_LOOT = LOG_TYPE_PICKDROP_MONSTER|LOG_TYPE_CONSUME, // all LOG_TYPE_ALL = 0xFFFFFFFF, } e_log_pick_type; diff --git a/src/map/map.c b/src/map/map.c index 50ad9a5cd..8d60d1672 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -6701,13 +6701,13 @@ int do_init(int argc, char *argv[]) elemental->init(minimal); quest->init(minimal); achievement->init(minimal); + stylist->init(minimal); npc->init(minimal); unit->init(minimal); bg->init(minimal); duel->init(minimal); vending->init(minimal); rodex->init(minimal); - stylist->init(minimal); if (map->scriptcheck) { bool failed = map->extra_scripts_count > 0 ? false : true; 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 2ea189c23..dce084a23 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1364,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; } @@ -1380,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); @@ -2237,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; } 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 cbb14c778..179a4b78a 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; diff --git a/src/map/script.c b/src/map/script.c index 6139b22d8..16336b46d 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -5400,6 +5400,9 @@ static int script_load_translation_file(const char *file, uint8 lang_id) if (line[i] == '\\' && line[i+1] == '"') { VECTOR_PUSH(*msg_ptr, '"'); i++; + } else if (line[i] == '\\' && line[i+1] == 'r') { + VECTOR_PUSH(*msg_ptr, '\r'); + i++; } else { VECTOR_PUSH(*msg_ptr, line[i]); } @@ -5418,6 +5421,9 @@ static int script_load_translation_file(const char *file, uint8 lang_id) if (line[i] == '\\' && line[i+1] == '"') { msgctxt[cursor] = '"'; i++; + } else if (line[i] == '\\' && line[i+1] == 'r') { + msgctxt[cursor] = '\r'; + i++; } else { msgctxt[cursor] = line[i]; } @@ -5439,6 +5445,9 @@ static int script_load_translation_file(const char *file, uint8 lang_id) if (line[i] == '\\' && line[i+1] == '"') { VECTOR_PUSH(msgid, '"'); i++; + } else if (line[i] == '\\' && line[i+1] == 'r') { + VECTOR_PUSH(msgid, '\r'); + i++; } else { VECTOR_PUSH(msgid, line[i]); } @@ -5458,6 +5467,9 @@ static int script_load_translation_file(const char *file, uint8 lang_id) if (line[i] == '\\' && line[i+1] == '"') { VECTOR_PUSH(msgstr, '"'); i++; + } else if (line[i] == '\\' && line[i+1] == 'r') { + VECTOR_PUSH(msgstr, '\r'); + i++; } else { VECTOR_PUSH(msgstr, line[i]); } @@ -8981,6 +8993,93 @@ static BUILDIN(getpartyleader) return true; } +enum guildinfo_type { + GUILDINFO_NAME, + GUILDINFO_ID, + GUILDINFO_LEVEL, + GUILDINFO_ONLINE, + GUILDINFO_AV_LEVEL, + GUILDINFO_MAX_MEMBERS, + GUILDINFO_EXP, + GUILDINFO_NEXT_EXP, + GUILDINFO_SKILL_POINTS, + GUILDINFO_MASTER_NAME, + GUILDINFO_MASTER_CID, +}; + +static BUILDIN(getguildinfo) +{ + struct guild *g = NULL; + + if (script_hasdata(st, 3)) { + if (script_isstringtype(st, 3)) { + const char *guild_name = script_getstr(st, 3); + g = guild->searchname(guild_name); + } else { + int guild_id = script_getnum(st, 3); + g = guild->search(guild_id); + } + } else { + struct map_session_data *sd = script->rid2sd(st); + g = sd ? sd->guild : NULL; + } + + enum guildinfo_type type = script_getnum(st, 2); + + if (g == NULL) { + // guild does not exist + switch (type) { + case GUILDINFO_NAME: + case GUILDINFO_MASTER_NAME: + script_pushconststr(st, ""); + break; + default: + script_pushint(st, -1); + } + } else { + switch (type) { + case GUILDINFO_NAME: + script_pushstrcopy(st, g->name); + break; + case GUILDINFO_ID: + script_pushint(st, g->guild_id); + break; + case GUILDINFO_LEVEL: + script_pushint(st, g->guild_lv); + break; + case GUILDINFO_ONLINE: + script_pushint(st, g->connect_member); + break; + case GUILDINFO_AV_LEVEL: + script_pushint(st, g->average_lv); + break; + case GUILDINFO_MAX_MEMBERS: + script_pushint(st, g->max_member); + break; + case GUILDINFO_EXP: + script_pushint(st, g->exp); + break; + case GUILDINFO_NEXT_EXP: + script_pushint(st, g->next_exp); + break; + case GUILDINFO_SKILL_POINTS: + script_pushint(st, g->skill_point); + break; + case GUILDINFO_MASTER_NAME: + script_pushstrcopy(st, g->member[0].name); + break; + case GUILDINFO_MASTER_CID: + script_pushint(st, g->member[0].char_id); + break; + default: + ShowError("script:getguildinfo: unknown info type!\n"); + st->state = END; + return false; + } + } + return true; +} + /*========================================== * Return the name of the @guild_id * null if not found @@ -15925,7 +16024,7 @@ static BUILDIN(recovery) return true; } -/* +/* * Get your current pet information */ static BUILDIN(getpetinfo) @@ -15978,7 +16077,7 @@ static BUILDIN(getpetinfo) case PETINFO_ACCESSORYFLAG: script_pushint(st, (pd->pet.equip != 0)? 1:0); break; - case PETINFO_EVO_EGGID: + case PETINFO_EVO_EGGID: if (VECTOR_DATA(pd->petDB->evolve_data) != NULL) script_pushint(st, VECTOR_DATA(pd->petDB->evolve_data)->petEggId); else @@ -24902,7 +25001,7 @@ static BUILDIN(showscript) if (script_hasdata(st, 4)) if (script_getnum(st, 4) == SELF) flag = SELF; - + clif->ShowScript(bl, msg, flag); return true; } @@ -25787,7 +25886,7 @@ static BUILDIN(identifyidx) script_pushint(st, false); return true; } - + if (sd->status.inventory[idx].nameid <= 0 || sd->status.inventory[idx].identify != 0) { script_pushint(st, false); return true; @@ -26089,10 +26188,11 @@ static void script_parse_builtin(void) BUILDIN_DEF(getpartyname,"i"), BUILDIN_DEF(getpartymember,"i?"), BUILDIN_DEF(getpartyleader,"i?"), - BUILDIN_DEF(getguildname,"i"), - BUILDIN_DEF(getguildmaster,"i"), - BUILDIN_DEF(getguildmasterid,"i"), + BUILDIN_DEF_DEPRECATED(getguildname,"i"), + BUILDIN_DEF_DEPRECATED(getguildmaster,"i"), + BUILDIN_DEF_DEPRECATED(getguildmasterid,"i"), BUILDIN_DEF(getguildmember,"i?"), + BUILDIN_DEF(getguildinfo,"i?"), BUILDIN_DEF(getguildonline, "i?"), BUILDIN_DEF(strcharinfo,"i??"), BUILDIN_DEF(strnpcinfo,"i??"), @@ -27208,6 +27308,19 @@ static void script_hardcoded_constants(void) script->set_constant("SIEGE_TYPE_SE", SIEGE_TYPE_SE, false, false); script->set_constant("SIEGE_TYPE_TE", SIEGE_TYPE_TE, false, false); + script->constdb_comment("guildinfo types"); + script->set_constant("GUILDINFO_NAME", GUILDINFO_NAME, false, false); + script->set_constant("GUILDINFO_ID", GUILDINFO_ID, false, false); + script->set_constant("GUILDINFO_LEVEL", GUILDINFO_LEVEL, false, false); + script->set_constant("GUILDINFO_ONLINE", GUILDINFO_ONLINE, false, false); + script->set_constant("GUILDINFO_AV_LEVEL", GUILDINFO_AV_LEVEL, false, false); + script->set_constant("GUILDINFO_MAX_MEMBERS", GUILDINFO_MAX_MEMBERS, false, false); + script->set_constant("GUILDINFO_EXP", GUILDINFO_EXP, false, false); + script->set_constant("GUILDINFO_NEXT_EXP", GUILDINFO_NEXT_EXP, false, false); + script->set_constant("GUILDINFO_SKILL_POINTS", GUILDINFO_SKILL_POINTS, false, false); + script->set_constant("GUILDINFO_MASTER_NAME", GUILDINFO_MASTER_NAME, false, false); + script->set_constant("GUILDINFO_MASTER_CID", GUILDINFO_MASTER_CID, false, false); + script->constdb_comment("Renewal"); #ifdef RENEWAL script->set_constant("RENEWAL", 1, false, false); diff --git a/src/map/skill.c b/src/map/skill.c index 17cc83033..e2d76fb8b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -13962,27 +13962,9 @@ static int skill_isammotype(struct map_session_data *sd, int skill_id) **/ static bool skill_is_combo(int skill_id) { - switch( skill_id ) - { - case MO_CHAINCOMBO: - case MO_COMBOFINISH: - case CH_TIGERFIST: - case CH_CHAINCRUSH: - case MO_EXTREMITYFIST: - case TK_TURNKICK: - case TK_STORMKICK: - case TK_DOWNKICK: - case TK_COUNTER: - case TK_JUMPKICK: - case HT_POWER: - case GC_COUNTERSLASH: - case GC_WEAPONCRUSH: - case SR_FALLENEMPIRE: - case SR_DRAGONCOMBO: - case SR_TIGERCANNON: - case SR_GATEOFHELL: - return true; - } + if (skill->get_inf2(skill_id) & INF2_IS_COMBO_SKILL) + return true; + return false; } @@ -20279,6 +20261,12 @@ static void skill_validate_skillinfo(struct config_setting_t *conf, struct s_ski } else { sk->inf2 &= ~INF2_HIDDEN_TRAP; } + } else if (strcmpi(type, "IsCombo") == 0) { + if (on) { + sk->inf2 |= INF2_IS_COMBO_SKILL; + } else { + sk->inf2 &= ~INF2_IS_COMBO_SKILL; + } } else if (strcmpi(type, "None") != 0) { skilldb_invalid_error(type, config_setting_name(t), sk->nameid); } diff --git a/src/map/skill.h b/src/map/skill.h index 5da37d129..fe5cb6282 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -125,6 +125,7 @@ enum e_skill_inf2 { INF2_SHOW_SKILL_SCALE = 0x20000, INF2_ALLOW_REPRODUCE = 0x40000, INF2_HIDDEN_TRAP = 0x80000, // Traps that are hidden (based on trap_visiblity battle conf) + INF2_IS_COMBO_SKILL = 0x100000, // Sets whether a skill can be used in combos or not }; diff --git a/src/map/status.c b/src/map/status.c index a99e31f56..4821f18d5 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -10374,55 +10374,10 @@ static bool status_is_boss_resist_sc(enum sc_type type) { if (type >= SC_COMMON_MIN && type <= SC_COMMON_MAX) return true; - switch (type) { - case SC_BLESSING: - case SC_DEC_AGI: - case SC_PROVOKE: - case SC_COMA: - case SC_GRAVITATION: - case SC_NJ_SUITON: - case SC_RICHMANKIM: - case SC_ROKISWEIL: - case SC_FOGWALL: - case SC_FROSTMISTY: - case SC_BURNING: - case SC_MARSHOFABYSS: - case SC_ADORAMUS: - case SC_NEEDLE_OF_PARALYZE: - case SC_DEEP_SLEEP: - case SC_COLD: - - // Exploit prevention - kRO Fix - case SC_PYREXIA: - case SC_DEATHHURT: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - - // Ranger Effects - case SC_WUGBITE: - case SC_ELECTRICSHOCKER: - case SC_MAGNETICFIELD: - // Masquerades - case SC__ENERVATION: - case SC__GROOMY: - case SC__LAZINESS: - case SC__UNLUCKY: - case SC__WEAKNESS: - case SC__IGNORANCE: + if (status->get_sc_type(type) & SC_NO_BOSS) + return true; - // Other Effects - case SC_VACUUM_EXTREME: - case SC_NETHERWORLD: - case SC_FRESHSHRIMP: - case SC_SV_ROOTTWIST: - case SC_BITESCAR: - return true; - } return false; } @@ -13300,7 +13255,8 @@ static bool status_read_scdb_libconfig_sub_flag(struct config_setting_t *it, int { "Buff", SC_BUFF }, { "Debuff", SC_DEBUFF }, { "NoMadoReset", SC_MADO_NO_RESET }, - { "NoAllReset", SC_NO_CLEAR } + { "NoAllReset", SC_NO_CLEAR }, + { "NoBoss", SC_NO_BOSS }, }; ARR_FIND(0, ARRAYLENGTH(flags), j, strcmpi(flag, flags[j].name) == 0); diff --git a/src/map/status.h b/src/map/status.h index 6aaaace03..fe99cfba9 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -61,7 +61,8 @@ typedef enum sc_conf_type { SC_DEBUFF = 0x020, SC_MADO_NO_RESET = 0x040, SC_NO_CLEAR = 0x080, - SC_VISIBLE = 0x100 + SC_VISIBLE = 0x100, + SC_NO_BOSS = 0x200 } sc_conf_type; /** diff --git a/src/map/unit.c b/src/map/unit.c index e7ac6d24f..b9176fa69 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -459,10 +459,10 @@ static int unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) } if (tbl->m == bl->m && check_distance_bl(bl, tbl, ud->chaserange)) { //Reached destination. + ud->target_to = 0; if (ud->state.attack_continue) { //Aegis uses one before every attack, we should //only need this one for syncing purposes. [Skotlex] - ud->target_to = 0; clif->fixpos(bl); unit->attack(bl, tbl->id, ud->state.attack_continue); } @@ -544,6 +544,8 @@ static int unit_walktoxy(struct block_list *bl, short x, short y, int flag) ud->to_x = x; ud->to_y = y; unit->stop_attack(bl); //Sets target to 0 + if ((flag & 8) == 0) // Stepaction might be delayed due to occupied cell + unit->stop_stepaction(bl); // unit->walktoxy removes any remembered stepaction and resets ud->target_to sc = status->get_sc(bl); if( sc ) { |