From 19e1bc1fb31265afeea95fe3ceb06e99a5853ad2 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 24 Sep 2018 01:17:06 +0300 Subject: Show any unhandled CZ packets in map server console. --- src/map/clif.c | 22 +++++++++++++++++++--- src/map/clif.h | 1 + 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index 76625f0ba..ea137e67f 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -18837,8 +18837,20 @@ static void clif_monster_hp_bar(struct mob_data *md, struct map_session_data *sd } /* [Ind/Hercules] placeholder for unsupported incoming packets (avoids server disconnecting client) */ -static void __attribute__ ((unused)) clif_parse_dull(int fd, struct map_session_data *sd) +static void clif_parse_dull(int fd, struct map_session_data *sd) { + const int cmd = clif->cmd; + Assert_retv(cmd <= MAX_PACKET_DB && cmd >= MIN_PACKET_DB); + + int packet_len = packet_db[cmd].len; + if (packet_len == -1) { // variable-length packet + packet_len = RFIFOW(fd, 2); + } + if (sd) { + ShowWarning("Unhandled packet 0x%04d (length %d), %s session #%d, %d/%d (AID/CID)\n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id); + } else { + ShowWarning("Unhandled packet 0x%04d (length %d), session #%d\n", cmd, packet_len, fd); + } return; } @@ -21919,6 +21931,7 @@ static int clif_parse(int fd) parse_cmd_func = clif->parse_cmd; cmd = parse_cmd_func(fd,sd); + clif->cmd = cmd; if (VECTOR_LENGTH(HPM->packets[hpClif_Parse]) > 0) { int result = HPM->parse_packets(fd,cmd,hpClif_Parse); @@ -21982,8 +21995,8 @@ static int clif_parse(int fd) else packet_db[cmd].func(fd, sd); } -#ifdef DUMP_UNKNOWN_PACKET else { +#ifdef DUMP_UNKNOWN_PACKET const char* packet_txt = "save/packet.txt"; FILE* fp; @@ -22009,8 +22022,10 @@ static int clif_parse(int fd) ShowDump(RFIFOP(fd,0), packet_len); } - } +#else + clif->pDull(fd, sd); #endif + } RFIFOSKIP(fd, packet_len); @@ -22182,6 +22197,7 @@ void clif_defaults(void) clif->map_port = 5121; clif->ally_only = false; clif->delayed_damage_ers = NULL; + clif->cmd = -1; /* core */ clif->init = do_init_clif; clif->final = do_final_clif; diff --git a/src/map/clif.h b/src/map/clif.h index 86e53e1e9..66d7b1c6c 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -684,6 +684,7 @@ struct clif_interface { uint16 map_port; char map_ip_str[128]; int map_fd; + int cmd; /* for clif_clearunit_delayed */ struct eri *delay_clearunit_ers; /* Cash Shop [Ind/Hercules] */ -- cgit v1.2.3-60-g2f50 From 31cc126d6970a97abf1365be6639123e27126f37 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 24 Sep 2018 20:11:09 +0300 Subject: Add comment to packet 0x2cc. --- src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index ea137e67f..73c13ca8f 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -17556,6 +17556,7 @@ static int clif_instance(int instance_id, int type, int flag) case 2: // S 0x2cc .W // To announce Instancing queue creation if no maps available + // flag is priority, negative value mean cancel reservation WBUFW(buf,0) = 0x02CC; WBUFW(buf,2) = flag; clif->send(buf,packet_len(0x02CC),&sd->bl,target); -- cgit v1.2.3-60-g2f50 From d9cb0f1937c7678cddf161af11ace0933bd88623 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 01:11:05 +0300 Subject: Add comment for another field value in packet ZC_ACK_REQ_JOIN_GUILD. --- src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index 73c13ca8f..1bf77399c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8207,6 +8207,7 @@ static void clif_guild_invite(struct map_session_data *sd, struct guild *g) /// 1 = Offer rejected. /// 2 = Offer accepted. /// 3 = Guild full. +/// 4 = Offline or not exists static void clif_guild_inviteack(struct map_session_data *sd, int flag) { int fd; -- cgit v1.2.3-60-g2f50 From 29a6901e5b1b0e18c9d094d10b156a84150a1c8f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 19:31:42 +0300 Subject: Update keys to 2018-10-02 --- src/map/packets_keys_main.h | 5 +++-- src/map/packets_keys_zero.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h index a9d9a7020..03ece5d27 100644 --- a/src/map/packets_keys_main.h +++ b/src/map/packets_keys_main.h @@ -874,7 +874,7 @@ packetKeys(0x6A596301,0x76866D0E,0x32294A45); #endif -// 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 +// 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 #if PACKETVER == 20131223 || \ PACKETVER == 20140508 || \ PACKETVER == 20140611 || \ @@ -903,7 +903,8 @@ PACKETVER == 20180829 || \ PACKETVER == 20180831 || \ PACKETVER == 20180912 || \ - PACKETVER >= 20180919 + PACKETVER == 20180919 || \ + PACKETVER >= 20181002 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h index bbc1f7332..1b6cd537c 100644 --- a/src/map/packets_keys_zero.h +++ b/src/map/packets_keys_zero.h @@ -29,7 +29,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 +// 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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -58,7 +58,8 @@ PACKETVER == 20180829 || \ PACKETVER == 20180905 || \ PACKETVER == 20180912 || \ - PACKETVER >= 20180919 + PACKETVER == 20180919 || \ + PACKETVER >= 20180928 packetKeys(0x00000000,0x00000000,0x00000000); #endif -- cgit v1.2.3-60-g2f50 From 4752716873b2fd25613d11be3ec0994f515165bd Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 19:32:00 +0300 Subject: Update shuffle packets to 2018-10-02 --- src/map/packets_shuffle_main.h | 5 +++-- src/map/packets_shuffle_re.h | 5 +++-- src/map/packets_shuffle_zero.h | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h index 8bc395da1..53bdfa59d 100644 --- a/src/map/packets_shuffle_main.h +++ b/src/map/packets_shuffle_main.h @@ -3344,7 +3344,7 @@ packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE #endif -// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe, 2018-08-01cRagexe, 2018-08-08bRagexe, 2018-08-22cRagexe, 2018-08-29aRagexe, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-19aRagexe +// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe, 2018-08-01cRagexe, 2018-08-08bRagexe, 2018-08-22cRagexe, 2018-08-29aRagexe, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-19aRagexe, 2018-10-02aRagexe, 2018-10-02bRagexe #if PACKETVER == 20140611 || \ PACKETVER == 20150225 || \ PACKETVER == 20180315 || \ @@ -3369,7 +3369,8 @@ PACKETVER == 20180829 || \ PACKETVER == 20180831 || \ PACKETVER == 20180912 || \ - PACKETVER >= 20180919 + PACKETVER == 20180919 || \ + PACKETVER >= 20181002 packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h index 157a8a431..e77b97cac 100644 --- a/src/map/packets_shuffle_re.h +++ b/src/map/packets_shuffle_re.h @@ -9662,7 +9662,7 @@ packet(0x083c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK #endif -// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE +// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE #if PACKETVER == 20180704 || \ PACKETVER == 20180711 || \ PACKETVER == 20180718 || \ @@ -9671,7 +9671,8 @@ PACKETVER == 20180822 || \ PACKETVER == 20180829 || \ PACKETVER == 20180912 || \ - PACKETVER >= 20180919 + PACKETVER == 20180919 || \ + PACKETVER >= 20181002 packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h index b7253fdda..fedefbe3d 100644 --- a/src/map/packets_shuffle_zero.h +++ b/src/map/packets_shuffle_zero.h @@ -36,7 +36,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 +// 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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -65,7 +65,8 @@ PACKETVER == 20180829 || \ PACKETVER == 20180905 || \ PACKETVER == 20180912 || \ - PACKETVER >= 20180919 + PACKETVER == 20180919 || \ + PACKETVER >= 20180928 packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD -- cgit v1.2.3-60-g2f50 From 16b4e9a8a2ee0eae30d18bdf30ed0a24d85200bb Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 22:13:45 +0300 Subject: Fix achievement reward packet. --- src/map/achievement.c | 5 +++-- src/map/clif.c | 2 +- src/map/packets_struct.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/map/achievement.c b/src/map/achievement.c index 1fb513ea0..2450cfb49 100644 --- a/src/map/achievement.c +++ b/src/map/achievement.c @@ -1021,7 +1021,8 @@ static bool achievement_check_title(struct map_session_data *sd, int title_id) { * @param sd session data * @param ad achievement data */ -static void achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) { +static void achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) +{ int i = 0; struct achievement *ach = NULL; @@ -1062,8 +1063,8 @@ static void achievement_get_rewards(struct map_session_data *sd, const struct ac VECTOR_PUSH(sd->title_ids, ad->rewards.title_id); clif->achievement_send_list(sd->fd, sd); } else { - clif->achievement_reward_ack(sd->fd, sd, ad); clif->achievement_send_update(sd->fd, sd, ad); // send update. + clif->achievement_reward_ack(sd->fd, sd, ad); } } diff --git a/src/map/clif.c b/src/map/clif.c index 1bf77399c..cf9487fe0 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -20638,7 +20638,7 @@ static void clif_achievement_reward_ack(int fd, struct map_session_data *sd, con nullpo_retv(ad); p.packet_id = achievementRewardAckType; - p.received = 1; + p.failed = 0; p.ach_id = ad->id; clif->send(&p, packet_len(achievementRewardAckType), &sd->bl, SELF); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index af76a66d7..e23822e31 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2722,7 +2722,7 @@ struct packet_achievement_update { struct packet_achievement_reward_ack { uint16 packet_id; - uint8 received; + uint8 failed; uint32 ach_id; } __attribute__((packed)); -- cgit v1.2.3-60-g2f50 From 0528b1a5f0b3012c2ff91d364c73e9cb4513fd38 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 22:36:21 +0300 Subject: Fix getting achievement reward packets order. Also split achievement reward function to parts. --- src/map/achievement.c | 66 ++++++++++++++++++++++++++++++++------------------- src/map/achievement.h | 4 +++- src/map/pc.c | 2 +- src/map/pc.h | 2 +- 4 files changed, 47 insertions(+), 27 deletions(-) diff --git a/src/map/achievement.c b/src/map/achievement.c index 2450cfb49..68fc8a983 100644 --- a/src/map/achievement.c +++ b/src/map/achievement.c @@ -1016,45 +1016,56 @@ static bool achievement_check_title(struct map_session_data *sd, int title_id) { return false; } -/** - * Achievement rewards are given to player - * @param sd session data - * @param ad achievement data - */ -static void achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) +static void achievement_get_rewards_buffs(struct map_session_data *sd, const struct achievement_data *ad) { - int i = 0; - struct achievement *ach = NULL; - nullpo_retv(sd); nullpo_retv(ad); - if ((ach = achievement->ensure(sd, ad)) == NULL) - return; - - /* Buff */ if (ad->rewards.bonus != NULL) script->run(ad->rewards.bonus, 0, sd->bl.id, 0); +} - /* Give Items */ - for (i = 0; i < VECTOR_LENGTH(ad->rewards.item); i++) { - struct item it = { 0 }; - int total = 0; +// TODO: kro send items by rodex +static void achievement_get_rewards_items(struct map_session_data *sd, const struct achievement_data *ad) +{ + nullpo_retv(sd); + nullpo_retv(ad); - it.nameid = VECTOR_INDEX(ad->rewards.item, i).id; - total = VECTOR_INDEX(ad->rewards.item, i).amount; + struct item it = { 0 }; + it.identify = 1; - it.identify = 1; + for (int i = 0; i < VECTOR_LENGTH(ad->rewards.item); i++) { + it.nameid = VECTOR_INDEX(ad->rewards.item, i).id; + int total = VECTOR_INDEX(ad->rewards.item, i).amount; //Check if it's stackable. if (!itemdb->isstackable(it.nameid)) { - int j = 0; - for (j = 0; j < total; ++j) - pc->additem(sd, &it, (it.amount = 1), LOG_TYPE_SCRIPT); + it.amount = 1; + for (int j = 0; j < total; ++j) + pc->additem(sd, &it, 1, LOG_TYPE_SCRIPT); } else { - pc->additem(sd, &it, (it.amount = total), LOG_TYPE_SCRIPT); + it.amount = total; + pc->additem(sd, &it, total, LOG_TYPE_SCRIPT); } } +} + +/** + * Achievement rewards are given to player + * @param sd session data + * @param ad achievement data + */ +static bool achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) +{ + nullpo_retr(false, sd); + nullpo_retr(false, ad); + + struct achievement *ach = achievement->ensure(sd, ad); + if (ach == NULL) + return false; + + /* Buff */ + achievement->get_rewards_buffs(sd, ad); ach->rewarded_at = time(NULL); @@ -1066,6 +1077,11 @@ static void achievement_get_rewards(struct map_session_data *sd, const struct ac clif->achievement_send_update(sd->fd, sd, ad); // send update. clif->achievement_reward_ack(sd->fd, sd, ad); } + + /* Give Items */ + achievement->get_rewards_items(sd, ad); + + return true; } /** @@ -1978,4 +1994,6 @@ void achievement_defaults(void) achievement->init_titles = achievement_init_titles; achievement->check_title = achievement_check_title; achievement->get_rewards = achievement_get_rewards; + achievement->get_rewards_buffs = achievement_get_rewards_buffs; + achievement->get_rewards_items = achievement_get_rewards_items; } diff --git a/src/map/achievement.h b/src/map/achievement.h index beba120a2..de5eaa060 100644 --- a/src/map/achievement.h +++ b/src/map/achievement.h @@ -277,7 +277,9 @@ struct achievement_interface { /* */ void (*init_titles) (struct map_session_data *sd); bool (*check_title) (struct map_session_data *sd, int title_id); - void (*get_rewards) (struct map_session_data *sd, const struct achievement_data *ad); + bool (*get_rewards) (struct map_session_data *sd, const struct achievement_data *ad); + void (*get_rewards_buffs) (struct map_session_data *sd, const struct achievement_data *ad); + void (*get_rewards_items) (struct map_session_data *sd, const struct achievement_data *ad); }; #ifdef HERCULES_CORE diff --git a/src/map/pc.c b/src/map/pc.c index 961dda9f5..c64c79db2 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4689,7 +4689,7 @@ static int pc_search_inventory(struct map_session_data *sd, int item_id) * 6 = ? * 7 = stack limitation *------------------------------------------*/ -static int pc_additem(struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type) +static int pc_additem(struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type) { struct item_data *data; int i; diff --git a/src/map/pc.h b/src/map/pc.h index 17a9b8200..4ee5f560b 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -937,7 +937,7 @@ END_ZEROED_BLOCK; /* End */ int (*inventoryblank) (struct map_session_data *sd); int (*search_inventory) (struct map_session_data *sd,int item_id); int (*payzeny) (struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd); - int (*additem) (struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type); + int (*additem) (struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type); int (*getzeny) (struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd); int (*delitem) (struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type); -- cgit v1.2.3-60-g2f50 From 87d487d88a2a0f2473d3e404fed15d94db1b62c0 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Sep 2018 22:42:14 +0300 Subject: Update HPM. --- src/plugins/HPMHooking/HPMHooking.Defs.inc | 12 ++-- .../HPMHooking/HPMHooking_map.HPMHooksCore.inc | 8 +++ .../HPMHooking/HPMHooking_map.HookingPoints.inc | 2 + src/plugins/HPMHooking/HPMHooking_map.Hooks.inc | 71 +++++++++++++++++++--- 4 files changed, 80 insertions(+), 13 deletions(-) diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index f80dc9003..33fcdab4d 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -176,8 +176,12 @@ typedef void (*HPMHOOK_pre_achievement_init_titles) (struct map_session_data **s typedef void (*HPMHOOK_post_achievement_init_titles) (struct map_session_data *sd); typedef bool (*HPMHOOK_pre_achievement_check_title) (struct map_session_data **sd, int *title_id); typedef bool (*HPMHOOK_post_achievement_check_title) (bool retVal___, struct map_session_data *sd, int title_id); -typedef void (*HPMHOOK_pre_achievement_get_rewards) (struct map_session_data **sd, const struct achievement_data **ad); -typedef void (*HPMHOOK_post_achievement_get_rewards) (struct map_session_data *sd, const struct achievement_data *ad); +typedef bool (*HPMHOOK_pre_achievement_get_rewards) (struct map_session_data **sd, const struct achievement_data **ad); +typedef bool (*HPMHOOK_post_achievement_get_rewards) (bool retVal___, struct map_session_data *sd, const struct achievement_data *ad); +typedef void (*HPMHOOK_pre_achievement_get_rewards_buffs) (struct map_session_data **sd, const struct achievement_data **ad); +typedef void (*HPMHOOK_post_achievement_get_rewards_buffs) (struct map_session_data *sd, const struct achievement_data *ad); +typedef void (*HPMHOOK_pre_achievement_get_rewards_items) (struct map_session_data **sd, const struct achievement_data **ad); +typedef void (*HPMHOOK_post_achievement_get_rewards_items) (struct map_session_data *sd, const struct achievement_data *ad); #endif // MAP_ACHIEVEMENT_H #ifdef MAP_ATCOMMAND_H /* atcommand */ typedef void (*HPMHOOK_pre_atcommand_init) (bool *minimal); @@ -5872,8 +5876,8 @@ typedef int (*HPMHOOK_pre_pc_search_inventory) (struct map_session_data **sd, in typedef int (*HPMHOOK_post_pc_search_inventory) (int retVal___, struct map_session_data *sd, int item_id); typedef int (*HPMHOOK_pre_pc_payzeny) (struct map_session_data **sd, int *zeny, enum e_log_pick_type *type, struct map_session_data **tsd); typedef int (*HPMHOOK_post_pc_payzeny) (int retVal___, struct map_session_data *sd, int zeny, enum e_log_pick_type type, struct map_session_data *tsd); -typedef int (*HPMHOOK_pre_pc_additem) (struct map_session_data **sd, struct item **item_data, int *amount, e_log_pick_type *log_type); -typedef int (*HPMHOOK_post_pc_additem) (int retVal___, struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type); +typedef int (*HPMHOOK_pre_pc_additem) (struct map_session_data **sd, const struct item **item_data, int *amount, e_log_pick_type *log_type); +typedef int (*HPMHOOK_post_pc_additem) (int retVal___, struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type); typedef int (*HPMHOOK_pre_pc_getzeny) (struct map_session_data **sd, int *zeny, enum e_log_pick_type *type, struct map_session_data **tsd); typedef int (*HPMHOOK_post_pc_getzeny) (int retVal___, struct map_session_data *sd, int zeny, enum e_log_pick_type type, struct map_session_data *tsd); typedef int (*HPMHOOK_pre_pc_delitem) (struct map_session_data **sd, int *n, int *amount, int *type, short *reason, e_log_pick_type *log_type); diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index 8762975e1..663dcac11 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -136,6 +136,10 @@ struct { struct HPMHookPoint *HP_achievement_check_title_post; struct HPMHookPoint *HP_achievement_get_rewards_pre; struct HPMHookPoint *HP_achievement_get_rewards_post; + struct HPMHookPoint *HP_achievement_get_rewards_buffs_pre; + struct HPMHookPoint *HP_achievement_get_rewards_buffs_post; + struct HPMHookPoint *HP_achievement_get_rewards_items_pre; + struct HPMHookPoint *HP_achievement_get_rewards_items_post; struct HPMHookPoint *HP_atcommand_init_pre; struct HPMHookPoint *HP_atcommand_init_post; struct HPMHookPoint *HP_atcommand_final_pre; @@ -6719,6 +6723,10 @@ struct { int HP_achievement_check_title_post; int HP_achievement_get_rewards_pre; int HP_achievement_get_rewards_post; + int HP_achievement_get_rewards_buffs_pre; + int HP_achievement_get_rewards_buffs_post; + int HP_achievement_get_rewards_items_pre; + int HP_achievement_get_rewards_items_post; int HP_atcommand_init_pre; int HP_atcommand_init_post; int HP_atcommand_final_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 2f3f1840f..da318d52c 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -83,6 +83,8 @@ struct HookingPointData HookingPoints[] = { { HP_POP(achievement->init_titles, HP_achievement_init_titles) }, { HP_POP(achievement->check_title, HP_achievement_check_title) }, { HP_POP(achievement->get_rewards, HP_achievement_get_rewards) }, + { HP_POP(achievement->get_rewards_buffs, HP_achievement_get_rewards_buffs) }, + { HP_POP(achievement->get_rewards_items, HP_achievement_get_rewards_items) }, /* atcommand_interface */ { HP_POP(atcommand->init, HP_atcommand_init) }, { HP_POP(atcommand->final, HP_atcommand_final) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index 860e47f1b..aeb494d59 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -1459,27 +1459,80 @@ bool HP_achievement_check_title(struct map_session_data *sd, int title_id) { } return retVal___; } -void HP_achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) { +bool HP_achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) { int hIndex = 0; + bool retVal___ = false; if (HPMHooks.count.HP_achievement_get_rewards_pre > 0) { - void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad); + bool (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_achievement_get_rewards_pre[hIndex].func; - preHookFunc(&sd, &ad); + retVal___ = preHookFunc(&sd, &ad); } if (*HPMforce_return) { *HPMforce_return = false; - return; + return retVal___; } } { - HPMHooks.source.achievement.get_rewards(sd, ad); + retVal___ = HPMHooks.source.achievement.get_rewards(sd, ad); } if (HPMHooks.count.HP_achievement_get_rewards_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad); + bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct achievement_data *ad); for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_post; hIndex++) { postHookFunc = HPMHooks.list.HP_achievement_get_rewards_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sd, ad); + } + } + return retVal___; +} +void HP_achievement_get_rewards_buffs(struct map_session_data *sd, const struct achievement_data *ad) { + int hIndex = 0; + if (HPMHooks.count.HP_achievement_get_rewards_buffs_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_buffs_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_achievement_get_rewards_buffs_pre[hIndex].func; + preHookFunc(&sd, &ad); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.achievement.get_rewards_buffs(sd, ad); + } + if (HPMHooks.count.HP_achievement_get_rewards_buffs_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad); + for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_buffs_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_achievement_get_rewards_buffs_post[hIndex].func; + postHookFunc(sd, ad); + } + } + return; +} +void HP_achievement_get_rewards_items(struct map_session_data *sd, const struct achievement_data *ad) { + int hIndex = 0; + if (HPMHooks.count.HP_achievement_get_rewards_items_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_items_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_achievement_get_rewards_items_pre[hIndex].func; + preHookFunc(&sd, &ad); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.achievement.get_rewards_items(sd, ad); + } + if (HPMHooks.count.HP_achievement_get_rewards_items_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad); + for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_items_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_achievement_get_rewards_items_post[hIndex].func; postHookFunc(sd, ad); } } @@ -59054,11 +59107,11 @@ int HP_pc_payzeny(struct map_session_data *sd, int zeny, enum e_log_pick_type ty } return retVal___; } -int HP_pc_additem(struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type) { +int HP_pc_additem(struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type) { int hIndex = 0; int retVal___ = 0; if (HPMHooks.count.HP_pc_additem_pre > 0) { - int (*preHookFunc) (struct map_session_data **sd, struct item **item_data, int *amount, e_log_pick_type *log_type); + int (*preHookFunc) (struct map_session_data **sd, const struct item **item_data, int *amount, e_log_pick_type *log_type); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_additem_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_pc_additem_pre[hIndex].func; @@ -59073,7 +59126,7 @@ int HP_pc_additem(struct map_session_data *sd, struct item *item_data, int amoun retVal___ = HPMHooks.source.pc.additem(sd, item_data, amount, log_type); } if (HPMHooks.count.HP_pc_additem_post > 0) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type); for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_additem_post; hIndex++) { postHookFunc = HPMHooks.list.HP_pc_additem_post[hIndex].func; retVal___ = postHookFunc(retVal___, sd, item_data, amount, log_type); -- cgit v1.2.3-60-g2f50 From 2beda93940a7b1d094c2430b19e6c21d8240efa3 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 2 Oct 2018 21:39:10 +0300 Subject: Add comment about missing option in packet ZC_RESULT_MAKE_GUILD. --- src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index cf9487fe0..a3650821c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7721,6 +7721,7 @@ static void clif_mvp_noitem(struct map_session_data *sd) /// 1 = "You are already in a Guild." /// 2 = "That Guild Name already exists." /// 3 = "You need the necessary item to create a Guild." +/// 4 = "Can't create a Guild in this area." static void clif_guild_created(struct map_session_data *sd, int flag) { int fd; -- cgit v1.2.3-60-g2f50 From 60cda69d655c9c96e5db616742bc4c6a5004ab6c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 2 Oct 2018 21:44:05 +0300 Subject: Update messages up to 2018-10-02. --- src/map/messages_main.h | 44 ++++++++++++++++++++++++++++++++++++++++++-- src/map/messages_re.h | 6 ++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/map/messages_main.h b/src/map/messages_main.h index f26fdb50b..e56eb42a1 100644 --- a/src/map/messages_main.h +++ b/src/map/messages_main.h @@ -23,7 +23,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20180829 +Latest version: 20181002 */ enum clif_messages { @@ -17569,9 +17569,11 @@ DEATH: %.1f%% (Basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%) MSG_ID_AFB = 0xafb, #endif #if PACKETVER >= 20150826 -/*20150826 to latest +/*20150826 to 20180919 해당 태그는 이름으로 사용하실 수 없습니다. Name with this tag cannot be used. +20181002 to latest + 해당 내용은 이름으로 사용하실 수 없습니다. */ MSG_ID_AFC = 0xafc, #endif @@ -21285,6 +21287,44 @@ NOW LOADING.. */ MSG_ID_DD5 = 0xdd5, #endif +#if PACKETVER >= 20181002 +/*20181002 to latest +삭제 +*/ + MSG_ID_DD6 = 0xdd6, +/*20181002 to latest +답장 +*/ + MSG_ID_DD7 = 0xdd7, +/*20181002 to latest +전송 +*/ + MSG_ID_DD8 = 0xdd8, +/*20181002 to latest +이름확인 +*/ + MSG_ID_DD9 = 0xdd9, +/*20181002 to latest +공지 +Notice +*/ + MSG_ID_DDA = 0xdda, +/*20181002 to latest +일반 +General +*/ + MSG_ID_DDB = 0xddb, +/*20181002 to latest +반송 +Clear +*/ + MSG_ID_DDC = 0xddc, +/*20181002 to latest +검색 +Search +*/ + MSG_ID_DDD = 0xddd, +#endif }; #endif /* MAP_MESSAGES_MAIN_H */ diff --git a/src/map/messages_re.h b/src/map/messages_re.h index c263150e3..474030df1 100644 --- a/src/map/messages_re.h +++ b/src/map/messages_re.h @@ -23,7 +23,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20180919 +Latest version: 20181002 */ enum clif_messages { @@ -17045,9 +17045,11 @@ DEATH: %.1f%% (Basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%) MSG_ID_AFB = 0xafb, #endif #if PACKETVER >= 20150826 -/*20150826 to latest +/*20150826 to 20180919 해당 태그는 이름으로 사용하실 수 없습니다. Name with this tag cannot be used. +20181002 to latest + 해당 내용은 이름으로 사용하실 수 없습니다. */ MSG_ID_AFC = 0xafc, #endif -- cgit v1.2.3-60-g2f50 From 658a0b6854d819d9609b39f49cf135c0493fde11 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 2 Oct 2018 21:47:56 +0300 Subject: Update non shuffle packets list up to 2018-10-02 --- src/map/packets.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/map/packets.h b/src/map/packets.h index a897601b3..dc610ce2a 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -4337,4 +4337,22 @@ packet(0x96e,-1,clif->ackmergeitems); packet(0x0b0d,10,clif->pDull/*,XXX*/); #endif + +// 2018-10-02aRagexe +#if PACKETVER_MAIN_NUM >= 20181002 +// new packets + packet(0x0b10,10,clif->pDull/*,XXX*/); + packet(0x0b11,4,clif->pDull/*,XXX*/); +// changed packet sizes + packet(0x0b08,-1); // ZC_INVENTORY_START +#endif + +// 2018-10-02aRagexeRE +#if PACKETVER_RE_NUM >= 20181002 +// new packets + packet(0x0b10,10,clif->pDull/*,XXX*/); + packet(0x0b11,4,clif->pDull/*,XXX*/); +// changed packet sizes +#endif + #endif /* MAP_PACKETS_H */ -- cgit v1.2.3-60-g2f50 From 9d231a25d73d7a9cc692128cca808e8b66a98bcd Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 2 Oct 2018 21:54:24 +0300 Subject: Update inventory packets for 2018-10-02 main clients. --- src/map/clif.c | 38 +++++++++++++++++++------------------- src/map/packets_struct.h | 32 ++++++++++++++++---------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index a3650821c..23519fc0c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2789,11 +2789,11 @@ static void clif_item_normal(short idx, struct NORMALITEM_INFO *p, struct item * static void clif_inventoryList(struct map_session_data *sd) { -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 clif->inventoryStart(sd, INVTYPE_INVENTORY, ""); #endif clif->inventoryItems(sd, INVTYPE_INVENTORY); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 clif->inventoryEnd(sd, INVTYPE_INVENTORY); #endif } @@ -2816,7 +2816,7 @@ static void clif_inventoryItems(struct map_session_data *sd, enum inventory_type if (normal) { itemlist_normal.PacketType = inventorylistnormalType; itemlist_normal.PacketLength = (sizeof(itemlist_normal) - sizeof(itemlist_normal.list)) + (sizeof(struct NORMALITEM_INFO) * normal); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 itemlist_normal.invType = type; #endif @@ -2829,7 +2829,7 @@ static void clif_inventoryItems(struct map_session_data *sd, enum inventory_type if( equip ) { itemlist_equip.PacketType = inventorylistequipType; itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 itemlist_equip.invType = type; #endif @@ -2849,7 +2849,7 @@ static void clif_inventoryItems(struct map_session_data *sd, enum inventory_type static void clif_equipList(struct map_session_data *sd) { -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 clif->inventoryStart(sd, INVTYPE_INVENTORY, ""); clif->inventoryItems(sd, INVTYPE_INVENTORY); clif->inventoryEnd(sd, INVTYPE_INVENTORY); @@ -2876,7 +2876,7 @@ static void clif_equipItems(struct map_session_data *sd, enum inventory_type typ if (equip) { itemlist_equip.PacketType = inventorylistequipType; itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 itemlist_equip.invType = type; #endif @@ -2914,7 +2914,7 @@ static void clif_guildStorageList(struct map_session_data *sd, struct item *item static void clif_inventoryStart(struct map_session_data *sd, enum inventory_type type, const char *name) { -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 nullpo_retv(sd); nullpo_retv(name); @@ -2922,10 +2922,10 @@ static void clif_inventoryStart(struct map_session_data *sd, enum inventory_type memset(buf, 0, sizeof(buf)); struct ZC_INVENTORY_START *p = (struct ZC_INVENTORY_START *)buf; p->packetType = 0xb08; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 p->invType = type; #endif -#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 int strLen = (int)safestrnlen(name, 24); if (strLen > 24) strLen = 24; @@ -2942,12 +2942,12 @@ static void clif_inventoryStart(struct map_session_data *sd, enum inventory_type static void clif_inventoryEnd(struct map_session_data *sd, enum inventory_type type) { -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 nullpo_retv(sd); struct ZC_INVENTORY_END p; p.packetType = 0xb0b; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 p.invType = type; #endif p.flag = 0; @@ -2983,10 +2983,10 @@ static void clif_storageItems(struct map_session_data *sd, enum inventory_type t storelist_normal.PacketType = storageListNormalType; storelist_normal.PacketLength = ( sizeof( storelist_normal ) - sizeof( storelist_normal.list ) ) + (sizeof(struct NORMALITEM_INFO) * normal); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 storelist_normal.invType = type; #endif -#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 +#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002 safestrncpy(storelist_normal.name, "Storage", NAME_LENGTH); #endif @@ -2997,10 +2997,10 @@ static void clif_storageItems(struct map_session_data *sd, enum inventory_type t storelist_equip.PacketType = storageListEquipType; storelist_equip.PacketLength = ( sizeof( storelist_equip ) - sizeof( storelist_equip.list ) ) + (sizeof(struct EQUIPITEM_INFO) * equip); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 storelist_equip.invType = type; #endif -#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 +#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002 safestrncpy(storelist_equip.name, "Storage", NAME_LENGTH); #endif @@ -3013,11 +3013,11 @@ static void clif_storageItems(struct map_session_data *sd, enum inventory_type t static void clif_cartList(struct map_session_data *sd) { -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 clif->inventoryStart(sd, INVTYPE_CART, ""); #endif clif->cartItems(sd, INVTYPE_CART); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 clif->inventoryEnd(sd, INVTYPE_CART); #endif } @@ -3043,7 +3043,7 @@ static void clif_cartItems(struct map_session_data *sd, enum inventory_type type if (normal) { itemlist_normal.PacketType = cartlistnormalType; itemlist_normal.PacketLength = (sizeof(itemlist_normal) - sizeof(itemlist_normal.list)) + (sizeof(struct NORMALITEM_INFO) * normal); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 itemlist_normal.invType = type; #endif @@ -3053,7 +3053,7 @@ static void clif_cartItems(struct map_session_data *sd, enum inventory_type type if (equip) { itemlist_equip.PacketType = cartlistequipType; itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip); -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 itemlist_equip.invType = type; #endif diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index e23822e31..83f0a11e5 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -198,7 +198,7 @@ enum packet_headers { #else dropflooritemType = 0x9e, #endif -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 inventorylistnormalType = 0xb09, #elif PACKETVER >= 20120925 inventorylistnormalType = 0x991, @@ -209,7 +209,7 @@ enum packet_headers { #else inventorylistnormalType = 0xa3, #endif -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 inventorylistequipType = 0xb0a, #elif PACKETVER >= 20150226 inventorylistequipType = 0xa0d, @@ -222,7 +222,7 @@ enum packet_headers { #else inventorylistequipType = 0xa4, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 storageListNormalType = 0xb09, #elif PACKETVER >= 20120925 storageListNormalType = 0x995, @@ -233,7 +233,7 @@ enum packet_headers { #else storageListNormalType = 0xa5, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 storageListEquipType = 0xb0a, #elif PACKETVER >= 20150226 storageListEquipType = 0xa10, @@ -246,7 +246,7 @@ enum packet_headers { #else storageListEquipType = 0xa6, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 cartlistnormalType = 0xb09, #elif PACKETVER >= 20120925 cartlistnormalType = 0x993, @@ -257,7 +257,7 @@ enum packet_headers { #else cartlistnormalType = 0x123, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 cartlistequipType = 0xb0a, #elif PACKETVER >= 20150226 cartlistequipType = 0xa0f, @@ -1174,7 +1174,7 @@ struct packet_roulette_itemrecv_ack { struct packet_itemlist_normal { int16 PacketType; int16 PacketLength; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif struct NORMALITEM_INFO list[MAX_ITEMLIST]; @@ -1183,7 +1183,7 @@ struct packet_itemlist_normal { struct packet_itemlist_equip { int16 PacketType; int16 PacketLength; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif struct EQUIPITEM_INFO list[MAX_ITEMLIST]; @@ -1192,10 +1192,10 @@ struct packet_itemlist_equip { struct ZC_STORE_ITEMLIST_NORMAL { int16 PacketType; int16 PacketLength; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif -#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 +#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002 char name[NAME_LENGTH]; #endif struct NORMALITEM_INFO list[MAX_ITEMLIST]; @@ -1203,13 +1203,13 @@ struct ZC_STORE_ITEMLIST_NORMAL { struct ZC_INVENTORY_START { int16 packetType; -#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 int16 packetLength; #endif -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif -#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 char name[]; #else char name[NAME_LENGTH]; @@ -1218,7 +1218,7 @@ struct ZC_INVENTORY_START { struct ZC_INVENTORY_END { int16 packetType; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif char flag; @@ -1227,10 +1227,10 @@ struct ZC_INVENTORY_END { struct ZC_STORE_ITEMLIST_EQUIP { int16 PacketType; int16 PacketLength; -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 +#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 uint8 invType; #endif -#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 +#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002 char name[NAME_LENGTH]; #endif struct EQUIPITEM_INFO list[MAX_ITEMLIST]; -- cgit v1.2.3-60-g2f50 From e9bba136ecc2a15fa8a434833cdc0404abbc68be Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 3 Oct 2018 00:15:30 +0300 Subject: Add packet ZC_REMOVE_EFFECT. --- src/map/clif.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/map/clif.h | 2 ++ src/map/packets_struct.h | 6 ++++++ 3 files changed, 49 insertions(+) diff --git a/src/map/clif.c b/src/map/clif.c index 23519fc0c..c8914d964 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8865,6 +8865,45 @@ static void clif_specialeffect_value(struct block_list *bl, int effect_id, int n clif->send(buf, packet_len(0x284), bl, SELF); } } + +/// Remove special effects (ZC_REMOVE_EFFECT). +/// 0b0d .L .L +/// effect id: +/// @see doc/effect_list.txt +static void clif_removeSpecialEffect(struct block_list *bl, int effectId, enum send_target target) +{ +#if PACKETVER_MAIN_NUM >= 20181002 || PACKETVER_RE_NUM >= 20181002 + nullpo_retv(bl); + + struct PACKET_ZC_REMOVE_EFFECT p; + p.packetType = 0xb0d; + p.aid = bl->id; + p.effectId = effectId; + + clif->send(&p, sizeof(p), bl, target); + + if (clif->isdisguised(bl)) { + p.aid = -bl->id; + clif->send(&p, sizeof(p), bl, SELF); + } +#endif +} + +static void clif_removeSpecialEffect_single(struct block_list *bl, int effectId, struct block_list *targetBl) +{ +#if PACKETVER_MAIN_NUM >= 20181002 || PACKETVER_RE_NUM >= 20181002 + nullpo_retv(bl); + nullpo_retv(targetBl); + + struct PACKET_ZC_REMOVE_EFFECT p; + p.packetType = 0xb0d; + p.aid = bl->id; + p.effectId = effectId; + + clif->send(&p, sizeof(p), targetBl, SELF); +#endif +} + /** * Modification of clif_messagecolor to send colored messages to players to chat log only (doesn't display overhead). * @@ -22435,6 +22474,8 @@ void clif_defaults(void) clif->specialeffect = clif_specialeffect; clif->specialeffect_single = clif_specialeffect_single; clif->specialeffect_value = clif_specialeffect_value; + clif->removeSpecialEffect = clif_removeSpecialEffect; + clif->removeSpecialEffect_single = clif_removeSpecialEffect_single; clif->millenniumshield = clif_millenniumshield; clif->spiritcharm = clif_charm; clif->charm_single = clif_charm_single; diff --git a/src/map/clif.h b/src/map/clif.h index 66d7b1c6c..e91f19f20 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -940,6 +940,8 @@ struct clif_interface { void (*specialeffect) (struct block_list* bl, int type, enum send_target target); void (*specialeffect_single) (struct block_list* bl, int type, int fd); void (*specialeffect_value) (struct block_list* bl, int effect_id, int num, send_target target); + void (*removeSpecialEffect) (struct block_list *bl, int effectId, enum send_target target); + void (*removeSpecialEffect_single) (struct block_list *bl, int effectId, struct block_list *targetBl); void (*millenniumshield) (struct block_list *bl, short shields ); void (*spiritcharm) (struct map_session_data *sd); void (*charm_single) (int fd, struct map_session_data *sd); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 83f0a11e5..c3886730b 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2836,6 +2836,12 @@ struct PACKET_CZ_MEMORIALDUNGEON_COMMAND { int32 command; } __attribute__((packed)); +struct PACKET_ZC_REMOVE_EFFECT { + int16 packetType; + uint32 aid; + uint32 effectId; +} __attribute__((packed)); + #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 -- cgit v1.2.3-60-g2f50 From 79a55bfd5c029ae833bed01a5a9b497b4dcf1ed7 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 3 Oct 2018 00:25:11 +0300 Subject: Add script command for remove special effect. New script command: removespecialeffect *removespecialeffect({, {, {, }}}) *removespecialeffect({, {, ""{, }}}) --- doc/script_commands.txt | 11 +++++++++++ src/map/script.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 343eb02cb..d316a47ce 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -5992,6 +5992,17 @@ Example usage: --------------------------------------- +*removespecialeffect({, {, {, }}}) +*removespecialeffect({, {, ""{, }}}) + +Works for: + main client from version 2018-10-02 + re client from version 2018-10-02 +This command will remove special effect. All parameters same with specialeffect. +Examples and detailed explanation about parameters see in specialeffect. + +--------------------------------------- + *specialeffect2({, {, ""}}) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ diff --git a/src/map/script.c b/src/map/script.c index b787d0138..1973c5629 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -15428,6 +15428,50 @@ static BUILDIN(specialeffect2) return true; } +static BUILDIN(removespecialeffect) +{ + struct block_list *bl = NULL; + int type = script_getnum(st, 2); + enum send_target target = AREA; + + if (script_hasdata(st, 3)) { + target = script_getnum(st, 3); + } + + if (script_hasdata(st, 4)) { + if (script_isstringtype(st, 4)) { + struct npc_data *nd = npc->name2id(script_getstr(st, 4)); + if (nd != NULL) { + bl = &nd->bl; + } + } else { + bl = map->id2bl(script_getnum(st, 4)); + } + } else { + bl = map->id2bl(st->oid); + } + + if (bl == NULL) { + return true; + } + + if (target == SELF) { + struct map_session_data *sd; + if (script_hasdata(st, 5)) { + sd = map->id2sd(script_getnum(st, 5)); + } else { + sd = script->rid2sd(st); + } + if (sd != NULL) { + clif->removeSpecialEffect_single(bl, type, &sd->bl); + } + } else { + clif->removeSpecialEffect(bl, type, target); + } + + return true; +} + /*========================================== * Nude [Valaris] *------------------------------------------*/ @@ -25199,6 +25243,7 @@ static void script_parse_builtin(void) BUILDIN_DEF(skilleffect,"vi"), // skill effect [Celest] BUILDIN_DEF(npcskilleffect,"viii"), // npc skill effect [Valaris] BUILDIN_DEF(specialeffect,"i???"), // npc skill effect [Valaris] + BUILDIN_DEF(removespecialeffect,"i???"), BUILDIN_DEF_DEPRECATED(specialeffect2,"i??"), // skill effect on players[Valaris] BUILDIN_DEF(nude,""), // nude command [Valaris] BUILDIN_DEF(mapwarp,"ssii??"), // Added by RoVeRT -- cgit v1.2.3-60-g2f50 From 1e32aa5e41593bf05645e4412c86d8f4a00dac75 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 4 Oct 2018 18:50:37 +0300 Subject: Add packet ZC_CAMERA_INFO. This packet allow show camera info, or change camera parameters. --- src/map/clif.c | 29 +++++++++++++++++++++++++++++ src/map/clif.h | 2 ++ src/map/packets_struct.h | 9 +++++++++ 3 files changed, 40 insertions(+) diff --git a/src/map/clif.c b/src/map/clif.c index c8914d964..152a72cee 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -21922,6 +21922,32 @@ static void clif_parse_memorial_dungeon_command(int fd, struct map_session_data } } +static void clif_camera_showWindow(struct map_session_data *sd) +{ +#if PACKETVER >= 20160525 + struct PACKET_ZC_CAMERA_INFO p; + p.packetType = 0xa78; + p.action = 1; + p.range = 0; + p.rotation = 0; + p.latitude = 0; + clif->send(&p, sizeof(p), &sd->bl, SELF); +#endif +} + +static void clif_camera_change(struct map_session_data *sd, float range, float rotation, float latitude) +{ +#if PACKETVER >= 20160525 + struct PACKET_ZC_CAMERA_INFO p; + p.packetType = 0xa78; + p.action = 0; + p.range = range; + p.rotation = rotation; + p.latitude = latitude; + clif->send(&p, sizeof(p), &sd->bl, SELF); +#endif +} + /*========================================== * Main client packet processing function *------------------------------------------*/ @@ -23086,6 +23112,9 @@ void clif_defaults(void) clif->cz_req_style_change_sub = clif_cz_req_style_change_sub; clif->style_change_response = clif_style_change_response; + clif->camera_showWindow = clif_camera_showWindow; + clif->camera_change = clif_camera_change; + // -- Pet Evolution clif->pPetEvolution = clif_parse_pet_evolution; clif->petEvolutionResult = clif_pet_evolution_result; diff --git a/src/map/clif.h b/src/map/clif.h index e91f19f20..c77dbcb94 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -1552,6 +1552,8 @@ struct clif_interface { void (*petEvolutionResult) (int fd, enum pet_evolution_result result); void (*party_dead_notification) (struct map_session_data *sd); void (*pMemorialDungeonCommand) (int fd, struct map_session_data *sd); + void (*camera_showWindow) (struct map_session_data *sd); + void (*camera_change) (struct map_session_data *sd, float range, float rotation, float latitude); }; #ifdef HERCULES_CORE diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index c3886730b..29a3355f7 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2842,6 +2842,15 @@ struct PACKET_ZC_REMOVE_EFFECT { uint32 effectId; } __attribute__((packed)); +struct PACKET_ZC_CAMERA_INFO { + int16 packetType; + int8 action; + float range; + float rotation; + float latitude; +} __attribute__((packed)); + + #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 -- cgit v1.2.3-60-g2f50 From e47b40be9b351ed05b69ba23e065cc26625f7c67 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 4 Oct 2018 19:12:37 +0300 Subject: Add script commands for show camera info window and change camera parameters. New script commands: camerainfo, changecamera --- doc/script_commands.txt | 16 ++++++++++++++++ src/map/clif.c | 4 ++-- src/map/clif.h | 2 +- src/map/script.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index d316a47ce..6cb7eb135 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -10183,3 +10183,19 @@ Show in client message by from msg string table. Optional can be used for set color for whole message. --------------------------------------- + +*camerainfo() + +Show or hide camera info window. +Works for 20160525 clients or newer. + +--------------------------------------- + +*changecamera(, , {, }) + +Change camera range, rotation, latitude. +The optional target parameter specifies who will get changed +camera. +Works for 20160525 clients or newer. + +--------------------------------------- diff --git a/src/map/clif.c b/src/map/clif.c index 152a72cee..1e9844f14 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -21935,7 +21935,7 @@ static void clif_camera_showWindow(struct map_session_data *sd) #endif } -static void clif_camera_change(struct map_session_data *sd, float range, float rotation, float latitude) +static void clif_camera_change(struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target) { #if PACKETVER >= 20160525 struct PACKET_ZC_CAMERA_INFO p; @@ -21944,7 +21944,7 @@ static void clif_camera_change(struct map_session_data *sd, float range, float r p.range = range; p.rotation = rotation; p.latitude = latitude; - clif->send(&p, sizeof(p), &sd->bl, SELF); + clif->send(&p, sizeof(p), &sd->bl, target); #endif } diff --git a/src/map/clif.h b/src/map/clif.h index c77dbcb94..13c34c77d 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -1553,7 +1553,7 @@ struct clif_interface { void (*party_dead_notification) (struct map_session_data *sd); void (*pMemorialDungeonCommand) (int fd, struct map_session_data *sd); void (*camera_showWindow) (struct map_session_data *sd); - void (*camera_change) (struct map_session_data *sd, float range, float rotation, float latitude); + void (*camera_change) (struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target); }; #ifdef HERCULES_CORE diff --git a/src/map/script.c b/src/map/script.c index 1973c5629..7eb713211 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -24847,6 +24847,32 @@ static BUILDIN(msgtable2) return true; } +// show/hide camera info +static BUILDIN(camerainfo) +{ + struct map_session_data *sd = script_rid2sd(st); + if (sd == NULL) + return false; + + clif->camera_showWindow(sd); + return true; +} + +// allow change some camera parameters +static BUILDIN(changecamera) +{ + struct map_session_data *sd = script_rid2sd(st); + if (sd == NULL) + return false; + + enum send_target target = SELF; + if (script_hasdata(st, 5)) { + target = script_getnum(st, 5); + } + clif->camera_change(sd, (float)script_getnum(st, 2), (float)script_getnum(st, 3), (float)script_getnum(st, 4), target); + return true; +} + /** * Adds a built-in script function. * @@ -25577,6 +25603,10 @@ static void script_parse_builtin(void) // -- HatEffect BUILDIN_DEF(hateffect, "ii"), + + // camera + BUILDIN_DEF(camerainfo, ""), + BUILDIN_DEF(changecamera, "iii?"), }; int i, len = ARRAYLENGTH(BUILDIN); RECREATE(script->buildin, char *, script->buildin_count + len); // Pre-alloc to speed up -- cgit v1.2.3-60-g2f50 From b0cb2898bfe7f8888a786612444cabc83e8ff0cb Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 5 Oct 2018 17:40:01 +0300 Subject: Add at command @camerainfo. --- conf/groups.conf | 1 + conf/messages.conf | 3 ++- doc/atcommands.txt | 6 ++++++ src/map/atcommand.c | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/conf/groups.conf b/conf/groups.conf index 3f0c34ffb..16eca6e96 100644 --- a/conf/groups.conf +++ b/conf/groups.conf @@ -126,6 +126,7 @@ groups: ( go: true breakguild: true channel: true + camerainfo: true } permissions: { } diff --git a/conf/messages.conf b/conf/messages.conf index f986e4649..9fc85cb55 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -448,7 +448,8 @@ // Return pet to egg message 451: You can't return your pet because your inventory is full. -//452-497 FREE +452: usage @camerainfo range rotation latitude +//453-497 FREE // Messages of others (not for GM commands) // ---------------------------------------- diff --git a/doc/atcommands.txt b/doc/atcommands.txt index fb3628e00..b455d9151 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -1498,3 +1498,9 @@ Reloads the 'conf/clans.conf' file. Obs: it will reload 'db/clans.conf' too since it's included inside 'conf/clans.conf' --------------------------------------- + +@camerainfo {, , } + +Allow show/hide or change client camera parameters + +--------------------------------------- diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 2538f797c..a7dc5dd95 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -9810,6 +9810,24 @@ ACMD(reloadclans) return true; } +// show camera window or change camera parameters +ACMD(camerainfo) +{ + if (*message == '\0') { + clif->camera_showWindow(sd); + return true; + } + float range = 0; + float rotation = 0; + float latitude = 0; + if (sscanf(message, "%15f %15f %15f", &range, &rotation, &latitude) < 3) { + clif->message(fd, msg_fd(fd, 452)); // usage @camerainfo range rotation latitude + return false; + } + clif->camera_change(sd, range, rotation, latitude, SELF); + return true; +} + /** * Fills the reference of available commands in atcommand DBMap **/ @@ -10092,6 +10110,7 @@ static void atcommand_basecommands(void) ACMD_DEF(leaveclan), ACMD_DEF(reloadclans), ACMD_DEF(setzone), + ACMD_DEF(camerainfo), }; int i; -- cgit v1.2.3-60-g2f50