From 9ecc1bde4ea83f14be6b72f68a134dca4cb34478 Mon Sep 17 00:00:00 2001 From: Asheraf Date: Wed, 4 Apr 2018 17:05:44 +0100 Subject: Add support for packet ZC_FORMATSTRING_MSG --- src/map/clif.c | 31 +++++++++++++++++++++++++++++++ src/map/clif.h | 1 + src/map/packets_struct.h | 7 +++++++ 3 files changed, 39 insertions(+) diff --git a/src/map/clif.c b/src/map/clif.c index afe8aac40..dcb1919fb 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9231,6 +9231,36 @@ void clif_msgtable_skill(struct map_session_data* sd, uint16 skill_id, int msg_i WFIFOSET(fd, packet_len(0x7e6)); } +/** +* Displays a format string from msgstringtable.txt with a %s value (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. +*/ +void clif_msgtable_str(struct map_session_data *sd, uint16 msg_id, const char *value) +{ + int message_len; + int len; + struct PACKET_ZC_FORMATSTRING_MSG *p; + + nullpo_retv(sd); + nullpo_retv(value); + + message_len = (int)strlen(value) + 1; + len = sizeof(*p) + message_len + 1; + + p = (struct PACKET_ZC_FORMATSTRING_MSG *)aMalloc(len); + p->PacketType = 0x2c2; + p->PacketLength = len; + p->MessageId = msg_id; + safestrncpy(p->MessageString, value, message_len); + p->MessageString[message_len] = 0; + + clif->send(p, p->PacketLength, &sd->bl, SELF); + aFree(p); +} + /** * Validates and processes a global/guild/party message packet. * @@ -20923,6 +20953,7 @@ void clif_defaults(void) { clif->msgtable_skill = clif_msgtable_skill; clif->msgtable = clif_msgtable; clif->msgtable_num = clif_msgtable_num; + clif->msgtable_str = clif_msgtable_str; clif->message = clif_displaymessage; clif->messageln = clif_displaymessage2; clif->messages = clif_displaymessage_sprintf; diff --git a/src/map/clif.h b/src/map/clif.h index 873188f84..00881db3b 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -886,6 +886,7 @@ struct clif_interface { void (*msgtable) (struct map_session_data* sd, unsigned short msg_id); void (*msgtable_num) (struct map_session_data *sd, unsigned short msg_id, int value); void (*msgtable_skill) (struct map_session_data *sd, uint16 skill_id, int msg_id); + void (*msgtable_str) (struct map_session_data *sd, uint16 msg_id, const char *value); void (*message) (const int fd, const char* mes); void (*messageln) (const int fd, const char* mes); /* message+s(printf) */ diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index d8a2c6b31..606057f52 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1699,6 +1699,13 @@ struct packet_quest_hunt_info { struct packet_quest_hunt_info_sub info[]; } __attribute__((packed)); +struct PACKET_ZC_FORMATSTRING_MSG { + uint16 PacketType; + uint16 PacketLength; + uint16 MessageId; + char MessageString[]; +} __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 4faf1f94fc7d38d0004b9694341c1c63c5785894 Mon Sep 17 00:00:00 2001 From: Asheraf Date: Wed, 4 Apr 2018 21:02:47 +0100 Subject: Add support for packet ZC_MSG_COLOR --- src/map/clif.c | 21 +++++++++++++++++++++ src/map/clif.h | 1 + src/map/packets_struct.h | 6 ++++++ 3 files changed, 28 insertions(+) diff --git a/src/map/clif.c b/src/map/clif.c index dcb1919fb..942600a26 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9261,6 +9261,26 @@ void clif_msgtable_str(struct map_session_data *sd, uint16 msg_id, const char *v aFree(p); } +/** +* Displays a format string from msgstringtable.txt with a color (ZC_MSG_COLOR). +* +* @param sd The target character. +* @param msg_id msgstringtable message index, 0-based (@see enum clif_messages) +* @param color The color to use +*/ +void clif_msgtable_color(struct map_session_data *sd, uint16 msg_id, uint32 color) +{ + struct PACKET_ZC_MSG_COLOR p; + + nullpo_retv(sd); + + p.PacketType = 0x9cd; + p.MessageId = msg_id; + p.MessageColor = RGB2BGR(color); + + clif->send(&p, sizeof(p), &sd->bl, SELF); +} + /** * Validates and processes a global/guild/party message packet. * @@ -20954,6 +20974,7 @@ void clif_defaults(void) { clif->msgtable = clif_msgtable; clif->msgtable_num = clif_msgtable_num; clif->msgtable_str = clif_msgtable_str; + clif->msgtable_color = clif_msgtable_color; clif->message = clif_displaymessage; clif->messageln = clif_displaymessage2; clif->messages = clif_displaymessage_sprintf; diff --git a/src/map/clif.h b/src/map/clif.h index 00881db3b..eee978aac 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -887,6 +887,7 @@ struct clif_interface { void (*msgtable_num) (struct map_session_data *sd, unsigned short msg_id, int value); void (*msgtable_skill) (struct map_session_data *sd, uint16 skill_id, int msg_id); void (*msgtable_str) (struct map_session_data *sd, uint16 msg_id, const char *value); + void (*msgtable_color) (struct map_session_data *sd, uint16 msg_id, uint32 color); void (*message) (const int fd, const char* mes); void (*messageln) (const int fd, const char* mes); /* message+s(printf) */ diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 606057f52..7e154c12c 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1706,6 +1706,12 @@ struct PACKET_ZC_FORMATSTRING_MSG { char MessageString[]; } __attribute__((packed)); +struct PACKET_ZC_MSG_COLOR { + uint16 PacketType; + uint16 MessageId; + uint32 MessageColor; +} __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