From e73bc865155c275994d24a87e54b7e5ae327493d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 4 Aug 2018 21:02:36 +0300 Subject: Split packet CZ_REQ_STYLE_CHANGE to CZ_REQ_STYLE_CHANGE and CZ_REQ_STYLE_CHANGE2. --- src/map/packets_struct.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index e6d207fad..d0815317f 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1883,9 +1883,17 @@ struct PACKET_CZ_REQ_STYLE_CHANGE { int16 TopAccessory; int16 MidAccessory; int16 BottomAccessory; -#if PACKETVER_RE_NUM >= 20180718 +} __attribute__((packed)); + +struct PACKET_CZ_REQ_STYLE_CHANGE2 { + int16 PacketType; + int16 HeadPalette; + int16 HeadStyle; + int16 BodyPalette; + int16 TopAccessory; + int16 MidAccessory; + int16 BottomAccessory; int16 BodyStyle; -#endif } __attribute__((packed)); struct PACKET_ZC_STYLE_CHANGE_RES { -- cgit v1.2.3-70-g09d2 From 327f8c62cf1515901fe0c64b5d0d772ac2d0ecb9 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 11 Aug 2018 03:17:02 +0300 Subject: Add packet ZC_EQUIPWIN_MICROSCOPE_V7. --- src/map/clif.c | 3 +++ src/map/packets_struct.h | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index dfb6aae06..4e55f7d0c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9327,6 +9327,9 @@ static void clif_viewequip_ack(struct map_session_data *sd, struct map_session_d #endif viewequip_list.headpalette = tsd->vd.hair_color; viewequip_list.bodypalette = tsd->vd.cloth_color; +#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808 + viewequip_list.body2 = tsd->vd.body_style; +#endif viewequip_list.sex = tsd->vd.sex; clif->send(&viewequip_list, viewequip_list.PacketLength, &sd->bl, SELF); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index d0815317f..e3aea5ed1 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -279,10 +279,15 @@ enum packet_headers { #else unequipitemackType = 0xac, #endif -#if PACKETVER >= 20150226 +#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808 + viewequipackType = 0xb03, +#elif PACKETVER >= 20150226 viewequipackType = 0xa2d, #elif PACKETVER >= 20120925 viewequipackType = 0x997, +// [4144] not supported due other packets/structs not updated +//#elif (PACKETVER_MAIN_NUM >= 20111207) || (PACKETVER_RE_NUM >= 20111122) +// viewequipackType = 0x906, #elif PACKETVER >= 20101124 viewequipackType = 0x859, #else @@ -1221,6 +1226,9 @@ struct packet_viewequip_ack { #endif int16 headpalette; int16 bodypalette; +#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808 + int16 body2; +#endif uint8 sex; struct EQUIPITEM_INFO list[MAX_INVENTORY]; } __attribute__((packed)); -- cgit v1.2.3-70-g09d2 From 759065f794b8ef7ee3e9276da1b47c1f86478cdc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 19 Aug 2018 00:42:12 +0300 Subject: Add packet ZC_GUILD_POSITION. --- src/map/clif.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/map/clif.h | 3 +++ src/map/guild.c | 4 ++-- src/map/packets_struct.h | 7 +++++++ 4 files changed, 57 insertions(+), 2 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index 4e55f7d0c..e04132386 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8310,6 +8310,49 @@ static void clif_guild_broken(struct map_session_data *sd, int flag) WFIFOSET(fd,packet_len(0x15e)); } +static void clif_guild_position_selected(struct map_session_data *sd) +{ +#if PACKETVER >= 20180801 + clif->guild_set_position(sd); +#else + clif->charnameupdate(sd); +#endif +} + +static void clif_guild_set_position(struct map_session_data *sd) +{ + nullpo_retv(sd); + + int len = sizeof(struct PACKET_ZC_GUILD_POSITION); + const char *name = NULL; + if (sd->status.guild_id > 0) { + struct guild *g = sd->guild; + + nullpo_retv(g); + + int i = 0; + int ps = -1; + ARR_FIND(0, g->max_member, i, g->member[i].account_id == sd->status.account_id && g->member[i].char_id == sd->status.char_id); + if (i < g->max_member) + ps = g->member[i].position; + + if (ps >= 0 && ps < MAX_GUILDPOSITION) { + len += 24; + name = g->position[ps].name; + } + } + + unsigned char buf[sizeof(struct PACKET_ZC_GUILD_POSITION) + NAME_LENGTH]; + struct PACKET_ZC_GUILD_POSITION *p = WBUFP(buf, 0); + p->packetType = 0xafd; + p->packetLength = len; + p->AID = sd->bl.id; + if (name != NULL) + memcpy(&p->position, name, 24); + + clif->send(buf, len, &sd->bl, AREA); +} + /// Displays emotion on an object (ZC_EMOTION). /// 00c0 .L .B /// type: @@ -22319,6 +22362,8 @@ void clif_defaults(void) clif->guild_positionnamelist = clif_guild_positionnamelist; clif->guild_positioninfolist = clif_guild_positioninfolist; clif->guild_expulsionlist = clif_guild_expulsionlist; + clif->guild_set_position = clif_guild_set_position; + clif->guild_position_selected = clif_guild_position_selected; clif->validate_emblem = clif_validate_emblem; /* battleground-specific */ clif->bg_hp = clif_bg_hp; diff --git a/src/map/clif.h b/src/map/clif.h index 406c6ca6a..b74eb8625 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -1041,6 +1041,9 @@ struct clif_interface { void (*guild_positionnamelist) (struct map_session_data *sd); void (*guild_positioninfolist) (struct map_session_data *sd); void (*guild_expulsionlist) (struct map_session_data* sd); + void (*guild_set_position) (struct map_session_data *sd); + void (*guild_position_selected) (struct map_session_data *sd); + bool (*validate_emblem) (const uint8* emblem, unsigned long emblem_len); /* battleground-specific */ void (*bg_hp) (struct map_session_data *sd); diff --git a/src/map/guild.c b/src/map/guild.c index 28954edf1..f82928c4d 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -1129,7 +1129,7 @@ static int guild_memberposition_changed(struct guild *g, int idx, int pos) // Update char position in client [LuzZza] if(g->member[idx].sd != NULL) - clif->charnameupdate(g->member[idx].sd); + clif->guild_position_selected(g->member[idx].sd); return 0; } @@ -1165,7 +1165,7 @@ static int guild_position_changed(int guild_id, int idx, const struct guild_posi // Update char name in client [LuzZza] for(i=0;imax_member;i++) if(g->member[i].position == idx && g->member[i].sd != NULL) - clif->charnameupdate(g->member[i].sd); + clif->guild_position_selected(g->member[i].sd); return 0; } diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index e3aea5ed1..d6885a696 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2706,6 +2706,13 @@ struct PACKET_ZC_GROUP_ISALIVE { uint8 isDead; } __attribute__((packed)); +struct PACKET_ZC_GUILD_POSITION { + int16 packetType; + int16 packetLength; + uint32 AID; + char position[]; +} __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-70-g09d2 From 39e50b6a4d8820635035ba691abbc9b59a420d91 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 20 Aug 2018 20:43:18 +0300 Subject: Add missing field into ZC_ACK_WHISPER02. --- src/map/clif.c | 3 ++- src/map/packets_struct.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index e04132386..1c8f51856 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -6180,6 +6180,7 @@ static void clif_wis_message(int fd, const char *nick, const char *mes, int mes_ /// 1 = target character is not logged in /// 2 = ignored by target /// 3 = everyone ignored by target +/// other = target character is not logged in static void clif_wis_end(int fd, int flag) { struct map_session_data *sd = sockt->session_is_valid(fd) ? sockt->session[fd]->session_data : NULL; @@ -6191,7 +6192,7 @@ static void clif_wis_end(int fd, int flag) p.PacketType = wisendType; p.result = (char)flag; #if PACKETVER >= 20131223 - p.unknown = 0; + p.AID = sd->bl.id; #endif clif->send(&p, sizeof(p), &sd->bl, SELF); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index d6885a696..a92bc52ab 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1358,7 +1358,7 @@ struct packet_wis_end { int16 PacketType; int8 result; #if PACKETVER >= 20131223 - uint32 unknown;/* maybe AID, not sure what for (works sending as 0) */ + uint32 AID; #endif } __attribute__((packed)); -- cgit v1.2.3-70-g09d2 From dfd6225e667744753c7bfab94d87fcdbcf3fc93b Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 23 Aug 2018 04:45:56 +0300 Subject: Add packet ZC_FORMATSTRING_MSG_COLOR. --- src/map/clif.c | 31 +++++++++++++++++++++++++++++++ src/map/clif.h | 1 + src/map/packets_struct.h | 8 ++++++++ 3 files changed, 40 insertions(+) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index beb9cdf47..a57f43613 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9479,6 +9479,36 @@ static void clif_msgtable_str(struct map_session_data *sd, enum clif_messages ms aFree(p); } +/** + * Displays a format string from msgstringtable.txt with a %s value and color (ZC_FORMATSTRING_MSG). + * + * @param sd The target character. + * @param msg_id msgstringtable message index, 0-based (@see enum clif_messages) + * @param value The value to fill %s. + * @param color The color to use + */ +static void clif_msgtable_str_color(struct map_session_data *sd, enum clif_messages msg_id, const char *value, uint32 color) +{ +#if PACKETVER >= 20160330 + nullpo_retv(sd); + nullpo_retv(value); + + int message_len = (int)strlen(value) + 1; + const int len = sizeof(struct PACKET_ZC_FORMATSTRING_MSG_COLOR) + message_len + 1; + struct PACKET_ZC_FORMATSTRING_MSG_COLOR *p = (struct PACKET_ZC_FORMATSTRING_MSG_COLOR *)aMalloc(len); + + p->PacketType = 0xa6f; + p->PacketLength = len; + p->messageId = msg_id; + p->color = color; + safestrncpy(p->messageString, value, message_len); + p->messageString[message_len] = 0; + + clif->send(p, p->PacketLength, &sd->bl, SELF); + aFree(p); +#endif +} + /** * Displays a format string from msgstringtable.txt with a color (ZC_MSG_COLOR). * @@ -22273,6 +22303,7 @@ void clif_defaults(void) clif->msgtable = clif_msgtable; clif->msgtable_num = clif_msgtable_num; clif->msgtable_str = clif_msgtable_str; + clif->msgtable_str_color = clif_msgtable_str_color; clif->msgtable_color = clif_msgtable_color; clif->message = clif_displaymessage; clif->messageln = clif_displaymessage2; diff --git a/src/map/clif.h b/src/map/clif.h index b74eb8625..9e71386b7 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -952,6 +952,7 @@ struct clif_interface { void (*msgtable_num) (struct map_session_data *sd, enum clif_messages msg_id, int value); void (*msgtable_skill) (struct map_session_data *sd, uint16 skill_id, enum clif_messages msg_id); void (*msgtable_str) (struct map_session_data *sd, enum clif_messages, const char *value); + void (*msgtable_str_color) (struct map_session_data *sd, enum clif_messages, const char *value, uint32 color); void (*msgtable_color) (struct map_session_data *sd, enum clif_messages, uint32 color); void (*message) (const int fd, const char* mes); void (*messageln) (const int fd, const char* mes); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index a92bc52ab..346c11692 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1843,6 +1843,14 @@ struct PACKET_ZC_FORMATSTRING_MSG { char MessageString[]; } __attribute__((packed)); +struct PACKET_ZC_FORMATSTRING_MSG_COLOR { + uint16 PacketType; + uint16 PacketLength; + uint16 messageId; + uint32 color; + char messageString[]; +} __attribute__((packed)); + struct PACKET_ZC_MSG_COLOR { uint16 PacketType; uint16 MessageId; -- cgit v1.2.3-70-g09d2 From 538c34ac4534390112837f631b1f9898f79c0796 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 23 Aug 2018 23:03:57 +0300 Subject: Add packet PACKET_ZC_INVENTORY_MOVE_FAILED. --- src/map/clif.c | 21 +++++++++++++++++++-- src/map/clif.h | 1 + src/map/packets_struct.h | 6 ++++++ src/map/storage.c | 6 ++++-- 4 files changed, 30 insertions(+), 4 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index a57f43613..1797a8fae 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2633,6 +2633,22 @@ static void clif_dropitem(struct map_session_data *sd, int n, int amount) WFIFOSET(fd,packet_len(0xaf)); } +static void clif_item_movefailed(struct map_session_data *sd, int n) +{ +#if PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO) + int fd = sd->fd; + const int len = sizeof(struct PACKET_ZC_INVENTORY_MOVE_FAILED); + WFIFOHEAD(fd, len); + struct PACKET_ZC_INVENTORY_MOVE_FAILED *p = WFIFOP(fd, 0); + p->packetType = 0xaa7; + p->index = n; + p->unknown = 1; + WFIFOSET(fd, len); +#else + clif->dropitem(sd, n, 0); +#endif +} + /// Notifies the client, that an inventory item was deleted (ZC_DELETE_ITEM_FROM_BODY). /// 07fa .W .W .W /// delete type: @see enum delitem_reason @@ -11067,7 +11083,7 @@ static void clif_parse_DropItem(int fd, struct map_session_data *sd) } //Because the client does not like being ignored. - clif->dropitem(sd, item_index, 0); + clif->item_movefailed(sd, item_index); } static void clif_parse_UseItem(int fd, struct map_session_data *sd) __attribute__((nonnull (2))); @@ -11562,7 +11578,7 @@ static void clif_parse_PutItemToCart(int fd, struct map_session_data *sd) if (!pc_iscarton(sd)) return; if ( (flag = pc->putitemtocart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4))) ) { - clif->dropitem(sd, RFIFOW(fd,2)-2,0); + clif->item_movefailed(sd, RFIFOW(fd,2)-2); clif->cart_additem_ack(sd,flag == 1?0x0:0x1); } } @@ -22067,6 +22083,7 @@ void clif_defaults(void) clif->dropitem = clif_dropitem; clif->delitem = clif_delitem; clif->takeitem = clif_takeitem; + clif->item_movefailed = clif_item_movefailed; clif->item_equip = clif_item_equip; clif->item_normal = clif_item_normal; clif->arrowequip = clif_arrowequip; diff --git a/src/map/clif.h b/src/map/clif.h index 9e71386b7..a94a08080 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -716,6 +716,7 @@ struct clif_interface { void (*dropitem) (struct map_session_data *sd,int n,int amount); void (*delitem) (struct map_session_data *sd,int n,int amount, short reason); void (*takeitem) (struct block_list* src, struct block_list* dst); + void (*item_movefailed) (struct map_session_data *sd, int n); void (*item_equip) (short idx, struct EQUIPITEM_INFO *p, struct item *i, struct item_data *id, int eqp_pos); void (*item_normal) (short idx, struct NORMALITEM_INFO *p, struct item *i, struct item_data *id); void (*arrowequip) (struct map_session_data *sd,int val); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 346c11692..1f22d5081 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2721,6 +2721,12 @@ struct PACKET_ZC_GUILD_POSITION { char position[]; } __attribute__((packed)); +struct PACKET_ZC_INVENTORY_MOVE_FAILED { + int16 packetType; + int16 index; + int16 unknown; +} __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 diff --git a/src/map/storage.c b/src/map/storage.c index 4123ddc7c..ba8dcee3a 100644 --- a/src/map/storage.c +++ b/src/map/storage.c @@ -297,7 +297,7 @@ static int storage_add_from_inventory(struct map_session_data *sd, int index, in if (storage->additem(sd, &sd->status.inventory[index], amount) == 0) pc->delitem(sd, index, amount, 0, DELITEM_TOSTORAGE, LOG_TYPE_STORAGE); else - clif->dropitem(sd, index, 0); + clif->item_movefailed(sd, index); return 1; } @@ -398,7 +398,9 @@ static int storage_storagegettocart(struct map_session_data *sd, int index, int if ((flag = pc->cart_additem(sd, it, amount, LOG_TYPE_STORAGE)) == 0) storage->delitem(sd, index, amount); else { + // probably this line is useless? it remove inventory lock but not storage [4144] clif->dropitem(sd, index,0); + clif->cart_additem_ack(sd, flag == 1?0x0:0x1); } @@ -638,7 +640,7 @@ static int storage_guild_storageadd(struct map_session_data *sd, int index, int if( gstorage->additem(sd,stor,&sd->status.inventory[index],amount) == 0 ) pc->delitem(sd, index, amount, 0, DELITEM_TOSTORAGE, LOG_TYPE_GSTORAGE); else - clif->dropitem(sd, index, 0); + clif->item_movefailed(sd, index); return 1; } -- cgit v1.2.3-70-g09d2 From 69165395c7c6d4d23cd8b3044a4a5bf82a4216d1 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 24 Aug 2018 02:02:05 +0300 Subject: Update packet ZC_ACK_BAN_GUILD. --- src/map/clif.c | 25 ++++++++++++------------- src/map/clif.h | 2 +- src/map/guild.c | 2 +- src/map/packets_struct.h | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 15 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index 1797a8fae..41076b160 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8126,26 +8126,25 @@ static void clif_guild_leave(struct map_session_data *sd, const char *name, cons /// Notifies clients of a guild of an expelled member. /// 015c .24B .40B .24B (ZC_ACK_BAN_GUILD) /// 0839 .24B .40B (ZC_ACK_BAN_GUILD_SSO) -static void clif_guild_expulsion(struct map_session_data *sd, const char *name, const char *mes, int account_id) +static void clif_guild_expulsion(struct map_session_data *sd, const char *name, int char_id, const char *mes, int account_id) { - unsigned char buf[128]; -#if PACKETVER < 20100803 - const unsigned short cmd = 0x15c; -#else - const unsigned short cmd = 0x839; -#endif - nullpo_retv(sd); nullpo_retv(name); nullpo_retv(mes); - WBUFW(buf,0) = cmd; - safestrncpy(WBUFP(buf,2), name, NAME_LENGTH); - safestrncpy(WBUFP(buf,26), mes, 40); + struct PACKET_ZC_ACK_BAN_GUILD p; + p.packetType = guildExpulsion; +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) + p.GID = char_id; +#else + safestrncpy(&p.name[0], name, NAME_LENGTH); +#endif + safestrncpy(&p.reason[0], mes, 40); + #if PACKETVER < 20100803 - memset(WBUFP(buf,66), 0, NAME_LENGTH); // account name (not used for security reasons) + memset(&p.account_name, 0, NAME_LENGTH); // account name (not used for security reasons) #endif - clif->send(buf, packet_len(cmd), &sd->bl, GUILD_NOBG); + clif->send(&p, sizeof(p), &sd->bl, GUILD_NOBG); } /// Guild expulsion list (ZC_BAN_LIST). diff --git a/src/map/clif.h b/src/map/clif.h index a94a08080..7307e7461 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -1025,7 +1025,7 @@ struct clif_interface { void (*guild_invite) (struct map_session_data *sd,struct guild *g); void (*guild_inviteack) (struct map_session_data *sd,int flag); void (*guild_leave) (struct map_session_data *sd,const char *name,const char *mes); - void (*guild_expulsion) (struct map_session_data* sd, const char* name, const char* mes, int account_id); + void (*guild_expulsion) (struct map_session_data* sd, const char* name, int char_id, const char* mes, int account_id); void (*guild_positionchanged) (struct guild *g,int idx); void (*guild_memberpositionchanged) (struct guild *g,int idx); void (*guild_emblem) (struct map_session_data *sd,struct guild *g); diff --git a/src/map/guild.c b/src/map/guild.c index f82928c4d..01372921b 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -927,7 +927,7 @@ static int guild_member_withdraw(int guild_id, int account_id, int char_id, int if(!flag) clif->guild_leave(online_member_sd, name, mes); else - clif->guild_expulsion(online_member_sd, name, mes, account_id); + clif->guild_expulsion(online_member_sd, name, char_id, mes, account_id); // remove member from guild memset(&g->member[i],0,sizeof(struct guild_member)); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 1f22d5081..5aeb40be5 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -421,6 +421,13 @@ enum packet_headers { #else skilWarpPointType = 0x11c, #endif +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) + guildExpulsion = 0xa82, +#elif PACKETVER >= 20100803 + guildExpulsion = 0x839, +#else + guildExpulsion = 0x15c, +#endif }; #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute @@ -2727,6 +2734,33 @@ struct PACKET_ZC_INVENTORY_MOVE_FAILED { int16 unknown; } __attribute__((packed)); +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) +#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD3 +#elif PACKETVER >= 20100803 +#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD2 +#else +#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD1 +#endif + +struct PACKET_ZC_ACK_BAN_GUILD1 { + int16 packetType; + char name[NAME_LENGTH]; + char reason[40]; + char account_name[NAME_LENGTH]; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_BAN_GUILD2 { + int16 packetType; + char name[NAME_LENGTH]; + char reason[40]; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_BAN_GUILD3 { + int16 packetType; + char reason[40]; + uint32 GID; +} __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-70-g09d2 From 8829a0c4cfeebed780b4ec31bde3bf84b1658e37 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 24 Aug 2018 02:19:04 +0300 Subject: Update packet ZC_ACK_LEAVE_GUILD. --- src/map/clif.c | 19 ++++++++++++------- src/map/clif.h | 2 +- src/map/guild.c | 2 +- src/map/packets_struct.h | 23 +++++++++++++++++++++++ 4 files changed, 37 insertions(+), 9 deletions(-) (limited to 'src/map/packets_struct.h') diff --git a/src/map/clif.c b/src/map/clif.c index 41076b160..71ae22ec3 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8111,16 +8111,21 @@ static void clif_guild_inviteack(struct map_session_data *sd, int flag) /// Notifies clients of a guild of a leaving member (ZC_ACK_LEAVE_GUILD). /// 015a .24B .40B -static void clif_guild_leave(struct map_session_data *sd, const char *name, const char *mes) +static void clif_guild_leave(struct map_session_data *sd, const char *name, int char_id, const char *mes) { - unsigned char buf[128]; - nullpo_retv(sd); + nullpo_retv(name); + nullpo_retv(mes); - WBUFW(buf, 0)=0x15a; - memcpy(WBUFP(buf, 2),name,NAME_LENGTH); - memcpy(WBUFP(buf,26),mes,40); - clif->send(buf,packet_len(0x15a),&sd->bl,GUILD_NOBG); + struct PACKET_ZC_ACK_LEAVE_GUILD p; + p.packetType = guildLeave; +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) + p.GID = char_id; +#else + safestrncpy(&p.name[0], name, NAME_LENGTH); +#endif + safestrncpy(&p.reason[0], mes, 40); + clif->send(&p, sizeof(p), &sd->bl, GUILD_NOBG); } /// Notifies clients of a guild of an expelled member. diff --git a/src/map/clif.h b/src/map/clif.h index 7307e7461..d20c30a24 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -1024,7 +1024,7 @@ struct clif_interface { void (*guild_memberlogin_notice) (struct guild *g,int idx,int flag); void (*guild_invite) (struct map_session_data *sd,struct guild *g); void (*guild_inviteack) (struct map_session_data *sd,int flag); - void (*guild_leave) (struct map_session_data *sd,const char *name,const char *mes); + void (*guild_leave) (struct map_session_data *sd, const char *name, int char_id, const char *mes); void (*guild_expulsion) (struct map_session_data* sd, const char* name, int char_id, const char* mes, int account_id); void (*guild_positionchanged) (struct guild *g,int idx); void (*guild_memberpositionchanged) (struct guild *g,int idx); diff --git a/src/map/guild.c b/src/map/guild.c index 01372921b..780d21326 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -925,7 +925,7 @@ static int guild_member_withdraw(int guild_id, int account_id, int char_id, int #endif if(!flag) - clif->guild_leave(online_member_sd, name, mes); + clif->guild_leave(online_member_sd, name, char_id, mes); else clif->guild_expulsion(online_member_sd, name, char_id, mes, account_id); diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 5aeb40be5..852a44cb8 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -428,6 +428,11 @@ enum packet_headers { #else guildExpulsion = 0x15c, #endif +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) + guildLeave = 0xa83, +#else + guildLeave = 0x15a, +#endif }; #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute @@ -2761,6 +2766,24 @@ struct PACKET_ZC_ACK_BAN_GUILD3 { uint32 GID; } __attribute__((packed)); +#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) +#define PACKET_ZC_ACK_LEAVE_GUILD PACKET_ZC_ACK_LEAVE_GUILD2 +#else +#define PACKET_ZC_ACK_LEAVE_GUILD PACKET_ZC_ACK_LEAVE_GUILD1 +#endif + +struct PACKET_ZC_ACK_LEAVE_GUILD1 { + int16 packetType; + char name[NAME_LENGTH]; + char reason[40]; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_LEAVE_GUILD2 { + int16 packetType; + uint32 GID; + char reason[40]; +} __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-70-g09d2